Merge branch 'wip-MDL-33338-master' of git://github.com/marinaglancy/moodle
authorDan Poltawski <dan@moodle.com>
Mon, 28 May 2012 07:43:33 +0000 (15:43 +0800)
committerDan Poltawski <dan@moodle.com>
Mon, 28 May 2012 07:43:33 +0000 (15:43 +0800)
1  2 
lib/filestorage/file_storage.php

@@@ -1028,7 -1028,7 +1028,7 @@@ class file_storage 
  
          $newrecord->timecreated  = $filerecord->timecreated;
          $newrecord->timemodified = $filerecord->timemodified;
-         $newrecord->mimetype     = empty($filerecord->mimetype) ? $this->mimetype($pathname) : $filerecord->mimetype;
+         $newrecord->mimetype     = empty($filerecord->mimetype) ? $this->mimetype($pathname, $filerecord->filename) : $filerecord->mimetype;
          $newrecord->userid       = empty($filerecord->userid) ? null : $filerecord->userid;
          $newrecord->source       = empty($filerecord->source) ? null : $filerecord->source;
          $newrecord->author       = empty($filerecord->author) ? null : $filerecord->author;
          list($newrecord->contenthash, $newrecord->filesize, $newfile) = $this->add_string_to_pool($content);
          $filepathname = $this->path_from_hash($newrecord->contenthash) . '/' . $newrecord->contenthash;
          // get mimetype by magic bytes
-         $newrecord->mimetype = empty($filerecord->mimetype) ? $this->mimetype($filepathname) : $filerecord->mimetype;
+         $newrecord->mimetype = empty($filerecord->mimetype) ? $this->mimetype($filepathname, $filerecord->filename) : $filerecord->mimetype;
  
          $newrecord->pathnamehash = $this->get_pathname_hash($newrecord->contextid, $newrecord->component, $newrecord->filearea, $newrecord->itemid, $newrecord->filepath, $newrecord->filename);
  
              $filerecord->timemodified = $now;
          }
  
 +        $transaction = $DB->start_delegated_transaction();
 +
          // Insert file reference record.
          try {
              $referencerecord = new stdClass;
  
          $this->create_directory($filerecord->contextid, $filerecord->component, $filerecord->filearea, $filerecord->itemid, $filerecord->filepath, $filerecord->userid);
  
 +        $transaction->allow_commit();
 +
          // Adding repositoryid and reference to file record to create stored_file instance
          $filerecord->repositoryid = $repositoryid;
          $filerecord->reference = $reference;
       * If file has a known extension, we return the mimetype based on extension.
       * Otherwise (when possible) we try to get the mimetype from file contents.
       *
-      * @param string $pathname
+      * @param string $pathname full path to the file
+      * @param string $filename correct file name with extension, if omitted will be taken from $path
       * @return string
       */
-     public static function mimetype($pathname) {
-         $type = mimeinfo('type', $pathname);
+     public static function mimetype($pathname, $filename = null) {
+         if (empty($filename)) {
+             $filename = $pathname;
+         }
+         $type = mimeinfo('type', $filename);
          if ($type === 'document/unknown' && class_exists('finfo') && file_exists($pathname)) {
              $finfo = new finfo(FILEINFO_MIME_TYPE);
              $type = mimeinfo_from_type('type', $finfo->file($pathname));