Merge branch 'MDL-23296-master' of git://github.com/FMCorz/moodle
authorDavid Monllao <davidm@moodle.com>
Wed, 1 Apr 2015 02:41:41 +0000 (10:41 +0800)
committerDavid Monllao <davidm@moodle.com>
Wed, 1 Apr 2015 02:41:41 +0000 (10:41 +0800)
1  2 
lib/filestorage/file_storage.php

@@@ -355,7 -355,16 +355,7 @@@ class file_storage 
              return false;
          }
  
 -        // getimagesizefromstring() is available from PHP 5.4 but we need to support
 -        // lower versions, so...
 -        $tmproot = make_temp_directory('thumbnails');
 -        $tmpfilepath = $tmproot.'/'.$file->get_contenthash().'_'.$mode;
 -        file_put_contents($tmpfilepath, $data);
 -        $imageinfo = getimagesize($tmpfilepath);
 -        unlink($tmpfilepath);
 -
          $context = context_system::instance();
 -
          $record = array(
              'contextid' => $context->id,
              'component' => 'core',
              'filename'  => $file->get_contenthash(),
          );
  
 +        $imageinfo = getimagesizefromstring($data);
          if ($imageinfo) {
              $record['mimetype'] = $imageinfo['mime'];
          }
       * @param int $repositoryid
       * @param string $sort A fragment of SQL to use for sorting
       */
 -    public function get_external_files($repositoryid, $sort = 'sortorder, itemid, filepath, filename') {
 +    public function get_external_files($repositoryid, $sort = '') {
          global $DB;
          $sql = "SELECT ".self::instance_sql_fields('f', 'r')."
                    FROM {files} f
          return $params;
      }
  
+     /**
+      * Search through the server files.
+      *
+      * The query parameter will be used in conjuction with the SQL directive
+      * LIKE, so include '%' in it if you need to. This search will always ignore
+      * user files and directories. Note that the search is case insensitive.
+      *
+      * This query can quickly become inefficient so use it sparignly.
+      *
+      * @param  string  $query The string used with SQL LIKE.
+      * @param  integer $from  The offset to start the search at.
+      * @param  integer $limit The maximum number of results.
+      * @param  boolean $count When true this methods returns the number of results availabe,
+      *                        disregarding the parameters $from and $limit.
+      * @return int|array      Integer when count, otherwise array of stored_file objects.
+      */
+     public function search_server_files($query, $from = 0, $limit = 20, $count = false) {
+         global $DB;
+         $params = array(
+             'contextlevel' => CONTEXT_USER,
+             'directory' => '.',
+             'query' => $query
+         );
+         if ($count) {
+             $select = 'COUNT(1)';
+         } else {
+             $select = self::instance_sql_fields('f', 'r');
+         }
+         $like = $DB->sql_like('f.filename', ':query', false);
+         $sql = "SELECT $select
+                   FROM {files} f
+              LEFT JOIN {files_reference} r
+                     ON f.referencefileid = r.id
+                   JOIN {context} c
+                     ON f.contextid = c.id
+                  WHERE c.contextlevel <> :contextlevel
+                    AND f.filename <> :directory
+                    AND " . $like . "";
+         if ($count) {
+             return $DB->count_records_sql($sql, $params);
+         }
+         $sql .= " ORDER BY f.filename";
+         $result = array();
+         $filerecords = $DB->get_recordset_sql($sql, $params, $from, $limit);
+         foreach ($filerecords as $filerecord) {
+             $result[$filerecord->pathnamehash] = $this->get_file_instance($filerecord);
+         }
+         $filerecords->close();
+         return $result;
+     }
      /**
       * Returns all aliases that refer to some stored_file via the given reference
       *