function execute($par)
 {
     global $wgOut, $wgUser, $wgRequest;
     global $wgUseAjax, $wgAjaxUploadDestCheck, $wgAjaxLicensePreview;
     if ($wgUser->isBlocked()) {
         $wgOut->blockedPage();
         return;
     }
     if ($wgUser->getID() == 0) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if (!in_array('staff', $wgUser->getGroups())) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $this->errorFile = "";
     $this->errorTitle = "";
     if ($wgRequest->getVal('delete')) {
         $wgOut->setArticleBodyOnly(true);
         $hpid = str_replace('delete_', '', $wgRequest->getVal('delete'));
         $html = self::deleteHPImage($hpid);
         $wgOut->addHTML($html);
         return;
     }
     $this->postSuccessful = true;
     if ($wgRequest->wasPosted()) {
         if ($wgRequest->getVal("updateActive")) {
             $dbw = wfGetDB(DB_MASTER);
             //first clear them all
             $dbw->update(WikihowHomepageAdmin::HP_TABLE, array('hp_active' => 0, 'hp_order' => 0), '*', __METHOD__);
             $images = $wgRequest->getArray("hp_images");
             $count = 1;
             foreach ($images as $image) {
                 if (!$image) {
                     continue;
                 }
                 $dbw->update(WikihowHomepageAdmin::HP_TABLE, array('hp_active' => 1, 'hp_order' => $count), array('hp_id' => $image));
                 $count++;
             }
         } else {
             $title = WikiPhoto::getArticleTitleNoCheck($wgRequest->getVal('articleName'));
             if (!$title->exists()) {
                 $this->postSuccessful = false;
                 $this->errorTitle = "* That article does not exist.";
             }
             if ($this->postSuccessful) {
                 //keep going
                 $imageTitle = Title::newFromText($wgRequest->getVal('wpDestFile'), NS_IMAGE);
                 $file = new LocalFile($imageTitle, RepoGroup::singleton()->getLocalRepo());
                 $file->upload($wgRequest->getFileTempName('wpUploadFile'), '', '');
                 $filesize = $file->getSize();
                 if ($filesize > 0) {
                     $dbw = wfGetDB(DB_MASTER);
                     $dbw->insert(WikihowHomepageAdmin::HP_TABLE, array('hp_page' => $title->getArticleID(), 'hp_image' => $imageTitle->getArticleID()));
                     $article = new Article($imageTitle);
                     $limit = array();
                     $limit['move'] = "sysop";
                     $limit['edit'] = "sysop";
                     $protectResult = $article->updateRestrictions($limit, "Used on homepage");
                 } else {
                     $this->postSuccessful = false;
                     $this->errorFile = "* We encountered an error uploading that file.";
                 }
             }
         }
     }
     $useAjaxDestCheck = $wgUseAjax && $wgAjaxUploadDestCheck;
     $useAjaxLicensePreview = $wgUseAjax && $wgAjaxLicensePreview;
     $adc = wfBoolToStr($useAjaxDestCheck);
     $alp = wfBoolToStr($useAjaxLicensePreview);
     $wgOut->setPageTitle('WikiHow Homepage Admin');
     $wgOut->addScript("<script type=\"text/javascript\">\nwgAjaxUploadDestCheck = {$adc};\nwgAjaxLicensePreview = {$alp};\n</script>");
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('jquery-ui-1.8.custom.min.js'), 'extensions/wikihow/common/ui/js', false));
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('wikihowhomepageadmin.js'), 'extensions/wikihow/homepage', false));
     $wgOut->addScript(HtmlSnips::makeUrlTags('css', array('wikihowhomepageadmin.css'), 'extensions/wikihow/homepage', false));
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('upload.js'), 'skins/common', false));
     $this->displayHomepageData();
     $this->displayForm();
 }
 /**
  * Accept a request to upload an image either via POST data (user upload)
  * or via flickr or google / wikimedia.org search.
  *
  * @param $src string with value 'upload', 'flickr' or 'wiki'
  * @return html outputs image details page
  */
 private function uploadImage($src)
 {
     global $wgRequest, $wgUser, $IP, $wgOut;
     $error = '';
     $debugInfo = array();
     if ($src == 'upload') {
         $tempname = self::createTempFilename();
         $tempUser = self::getTempFileUser();
         $file = new LocalFile(Title::newFromText($tempname, NS_IMAGE), RepoGroup::singleton()->getLocalRepo());
         $name = $wgRequest->getFileName('wpUploadFile');
         $comment = '';
         $file->upload($wgRequest->getFileTempName('wpUploadFile'), $comment, '', 0, false, false, $tempUser);
         $filesize = $file->getSize();
         if (!$filesize) {
             $error = wfMsg('eiu-upload-error');
         }
     } elseif ($src == 'flickr' || $src == 'wiki') {
         $sourceName = $src == 'flickr' ? 'Flickr' : 'Mediawiki Commons';
         $tempname = self::createTempFilename();
         $file = new LocalFile(Title::newFromText($tempname, NS_IMAGE), RepoGroup::singleton()->getLocalRepo());
         $details = (array) json_decode($wgRequest->getVal('img-details'));
         $name = $details['name'];
         // scrape the file using curl
         $filename = '/tmp/tmp-curl-' . mt_rand(0, 100000000) . '.jpg';
         $remoteFile = strlen($details['url_l']) ? $details['url_l'] : $details['url'];
         $ch = curl_init($remoteFile);
         curl_setopt($ch, CURLOPT_HEADER, false);
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
         $fp = fopen($filename, 'w');
         curl_setopt($ch, CURLOPT_FILE, $fp);
         $ret = curl_exec($ch);
         $err = curl_error($ch);
         curl_close($ch);
         fclose($fp);
         if ($err) {
             $debugInfo['curl'] = $err;
         }
         $filesize = @filesize($filename);
         if ($filesize) {
             if ($src == 'flickr' || preg_match('@^http://[^/]*flickr@', $details['url'])) {
                 require_once $IP . '/extensions/3rdparty/phpFlickr-2.3.1/phpFlickr.php';
                 $flickr = new phpFlickr(WH_FLICKR_API_KEY);
                 $photo = $flickr->photos_getInfo($details['photoid']);
                 $err = $flickr->getErrorMsg();
                 if ($err) {
                     $debugInfo['flickrAPI'] = $err;
                 }
                 $license = $photo['license'];
                 $username = $photo['owner']['username'];
                 $comment = '{{flickr' . intval($license) . '|' . wfEscapeWikiText($details['photoid']) . '|' . wfEscapeWikiText($details['ownerid']) . '|' . wfEscapeWikiText($username) . '}}';
             } else {
                 $comment = self::getWPLicenseTag($details['url']);
             }
             // finish initializing the $file obj
             $tempUser = self::getTempFileUser();
             $status = $file->upload($filename, '', '', 0, false, false, $tempUser);
             if (!$status->ok) {
                 $error = wfMsg('eiu-upload-error');
             }
         } else {
             $error = wfMsg('eiu-download-error', $sourceName);
         }
     }
     if ($error) {
         $html = EasyTemplate::html('eiu_file_error.tmpl.php', array('error' => $error));
         $wgOut->addHTML($html);
         error_log("file from {$src} error msgs: " . print_r($debugInfo, true));
     } else {
         $mwname = $tempname;
         $props = array('src' => $src, 'name' => $name, 'mwname' => $mwname, 'is_image' => $file->getMediaType() == 'BITMAP' || $file->getMediaType() == 'DRAWING', 'width' => $file->getWidth(), 'height' => $file->getHeight(), 'upload_file' => $file, 'image_comment' => $comment, 'license' => $wgUser->getOption('image_license'), 'file' => $file);
         $html = EasyTemplate::html('eiu_image_details.tmpl.php', $props);
         $wgOut->addHTML($html);
     }
 }
示例#3
0
 public function testGetSize()
 {
     $this->assertNotEquals(0, $this->fixture_file->getSize());
     $this->assertEquals(filesize(TESTS_FSI_LOCALFILE_TMP_PATH . '/myFile.ext'), $this->fixture_file->getSize());
     $myNonExistingFile = new LocalFile(TESTS_FSI_LOCALFILE_TMP_PATH . '/myDir/myFile2.ext');
     $this->assertEquals(0, $myNonExistingFile->getSize());
 }
示例#4
0
 /**
  * @return int The size of the file (in KB)
  */
 public function getSize($recursive = false)
 {
     $this->checkReadPermission();
     return parent::getSize($recursive);
 }