Exemplo n.º 1
0
 /**
  * Pushes the image to the specified wiki.
  *
  * @since 0.5
  *
  * @param Title $title
  * @param string $target
  * @param string $token
  */
 protected function pushToTarget(Title $title, $target, $token)
 {
     global $egPushDirectFileUploads;
     $imagePage = new ImagePage($title);
     $requestData = array('action' => 'upload', 'format' => 'json', 'token' => $token, 'filename' => $title->getText(), 'ignorewarnings' => '1');
     if ($egPushDirectFileUploads) {
         $requestData['file'] = '@' . $imagePage->getFile()->getPath();
     } else {
         $requestData['url'] = $imagePage->getDisplayedFile()->getFullUrl();
     }
     $reqArgs = array('method' => 'POST', 'timeout' => 'default', 'postData' => $requestData);
     if ($egPushDirectFileUploads) {
         if (!function_exists('curl_init')) {
             $this->dieUsage(wfMsg('push-api-err-nocurl'), 'image-push-nocurl');
         } elseif (!defined('CurlHttpRequest::SUPPORTS_FILE_POSTS') || !CurlHttpRequest::SUPPORTS_FILE_POSTS) {
             $this->dieUsage(wfMsg('push-api-err-nofilesupport'), 'image-push-nofilesupport');
         } else {
             $req = new CurlHttpRequest($target, $reqArgs);
         }
     } else {
         $req = PushFunctions::getHttpRequest($target, $reqArgs);
     }
     if (array_key_exists($target, $this->cookieJars)) {
         $req->setCookieJar($this->cookieJars[$target]);
     }
     $status = $req->execute();
     if ($status->isOK()) {
         $response = $req->getContent();
         $this->getResult()->addValue(null, null, FormatJson::decode($response));
         wfRunHooks('PushAPIAfterImagePush', array($title, $target, $token, $response));
     } else {
         $this->dieUsage(wfMsg('push-special-err-push-failed'), 'page-push-failed');
     }
 }
Exemplo n.º 2
0
 /**
  * @param ImagePage $imagePage
  */
 public function __construct($imagePage)
 {
     global $wgShowArchiveThumbnails;
     $this->current = $imagePage->getFile();
     $this->img = $imagePage->getDisplayedFile();
     $this->title = $imagePage->getTitle();
     $this->imagePage = $imagePage;
     $this->showThumb = $wgShowArchiveThumbnails && $this->img->canRender();
     $this->setContext($imagePage->getContext());
 }
 /**
  * @brief      Adds the properties, hooks into SMWStore::updateDataBefore.
  *
  * @param      SMWStore $store, SMWSemanticData $newData
  *
  * @return     true
  *
  */
 public function sespUpdateDataBefore($store, $data)
 {
     global $sespSpecialProperties, $wgDisableCounters;
     // just some compat mode
     global $smwgPageSpecialProperties2;
     if (isset($smwgPageSpecialProperties2) && !isset($sespSpecialProperties)) {
         $sespSpecialProperties = $smwgPageSpecialProperties2;
     }
     /* Get array of properties to set */
     if (!isset($sespSpecialProperties)) {
         wfDebug(__METHOD__ . ": SESP array is not specified, please add the following\n");
         wfDebug("variables to your LocalSettings.php:\n");
         wfDebug("\$sespSpecialProperties\n");
         return true;
     }
     /* Get current title and article */
     $title = $data->getSubject()->getTitle();
     $article = Article::newFromTitle($title, RequestContext::getMain());
     // return if $title or $article is null
     if (is_null($title) || is_null($article)) {
         return true;
     }
     /**************************/
     /* CUSER (First author)   */
     /**************************/
     if (in_array('_CUSER', $sespSpecialProperties)) {
         $firstRevision = $title->getFirstRevision();
         if ($firstRevision !== null) {
             $firstAuthor = User::newFromId($firstRevision->getRawUser());
             if ($firstAuthor) {
                 $property = new SMWDIProperty('___CUSER');
                 $dataItem = SMWDIWikiPage::newFromTitle($firstAuthor->getUserPage());
                 $data->addPropertyObjectValue($property, $dataItem);
             }
         }
     }
     // end if _CUSER
     /**************************/
     /* REVID (Revision ID)    */
     /**************************/
     if (in_array('_REVID', $sespSpecialProperties)) {
         $property = new SMWDIProperty('___REVID');
         $dataItem = new SMWDINumber($article->getRevIdFetched());
         $data->addPropertyObjectValue($property, $dataItem);
     }
     /********************************/
     /* VIEWS (Number of page views) */
     /********************************/
     if (in_array('_VIEWS', $sespSpecialProperties) && !$wgDisableCounters) {
         $property = new SMWDIProperty('___VIEWS');
         $dataItem = new SMWDINumber($article->getCount());
         $data->addPropertyObjectValue($property, $dataItem);
     }
     /*****************************/
     /* EUSER (Page contributors) */
     /*****************************/
     if (in_array('_EUSER', $sespSpecialProperties)) {
         /* Create property */
         $property = new SMWDIProperty('___EUSER');
         /* Get options */
         global $wgSESPExcludeBots;
         if (!isset($wgSESPExcludeBots)) {
             $wgSESPExcludeBots = false;
         }
         /* Get author from current revision */
         $u = User::newFromId($article->getUser());
         /* Get authors from earlier revisions */
         $authors = $article->getContributors();
         while ($u) {
             if (!$u->isHidden() && !(in_array('bot', $u->getRights()) && $wgSESPExcludeBots) && !$u->isAnon()) {
                 //no anonymous users
                 /* Add values*/
                 $dataItem = SMWDIWikiPage::newFromTitle($u->getUserPage());
                 $data->addPropertyObjectValue($property, $dataItem);
             }
             $u = $authors->current();
             $authors->next();
         }
     }
     /******************************/
     /* NREV (Number of revisions) */
     /******************************/
     if (in_array('_NREV', $sespSpecialProperties)) {
         /* Create property */
         $property = new SMWDIProperty('___NREV');
         /* Get number of revisions */
         $dbr =& wfGetDB(DB_SLAVE);
         $num = $dbr->estimateRowCount("revision", "*", array("rev_page" => $title->getArticleID()));
         /* Add values */
         $dataItem = new SMWDINumber($num);
         $data->addPropertyObjectValue($property, $dataItem);
     }
     /*****************************************/
     /* NTREV (Number of talk page revisions) */
     /*****************************************/
     if (in_array('_NTREV', $sespSpecialProperties)) {
         /* Create property */
         $property = new SMWDIProperty('___NTREV');
         /* Get number of revisions */
         if (!isset($dbr)) {
             $dbr =& wfGetDB(DB_SLAVE);
         }
         $talkPage = $title->getTalkPage();
         $num = $dbr->estimateRowCount("revision", "*", array("rev_page" => $talkPage->getArticleID()));
         /* Add values */
         $dataItem = new SMWDINumber($num);
         $data->addPropertyObjectValue($property, $dataItem);
     }
     /************************/
     /* SUBP (Get sub pages) */
     /************************/
     if (in_array('_SUBP', $sespSpecialProperties)) {
         /* Create property */
         $property = new SMWDIProperty('___SUBP');
         $subpages = $title->getSubpages(-1);
         //-1 = no limit. Returns TitleArray object
         /* Add values*/
         foreach ($subpages as $t) {
             $dataItem = SMWDIWikiPage::newFromTitle($t);
             $data->addPropertyObjectValue($property, $dataItem);
         }
         // end foreach
     }
     // end _SUBP
     /************************/
     /* MIMETYPE */
     /************************/
     if ($title->inNamespace(NS_FILE) && in_array('_MIMETYPE', $sespSpecialProperties)) {
         // Build image page instance
         $imagePage = new ImagePage($title);
         $file = $imagePage->getFile();
         $mimetype = $file->getMimeType();
         $mediaType = MimeMagic::singleton()->findMediaType($mimetype);
         list($mimetypemajor, $mimetypeminor) = $file->splitMime($mimetype);
         // MIMETYPE
         $property = new SMWDIProperty('___MIMETYPE');
         $dataItem = new SMWDIString($mimetypeminor);
         $data->addPropertyObjectValue($property, $dataItem);
         // MEDIATYPE
         $property = new SMWDIProperty('___MEDIATYPE');
         $dataItem = new SMWDIString($mediaType);
         $data->addPropertyObjectValue($property, $dataItem);
     }
     // end if MIMETYPE
     /************************/
     /* IMAGEMETA */
     /************************/
     function convertexifdate($exifString)
     {
         $exifPieces = explode(":", $exifString);
         if ($exifPieces[0] && $exifPieces[1] && $exifPieces[2]) {
             $res = new DateTime($exifPieces[0] . "-" . $exifPieces[1] . "-" . $exifPieces[2] . ":" . $exifPieces[3] . ":" . $exifPieces[4]);
             return $res;
         } else {
             return false;
         }
     }
     if ($title->inNamespace(NS_FILE) && in_array('_METADATA', $sespSpecialProperties)) {
         $imagePage = new ImagePage($title);
         $file = $imagePage->getFile();
         $metadata = $file->getMetadata();
         if ($metadata === ExifBitmapHandler::OLD_BROKEN_FILE || $metadata === ExifBitmapHandler::BROKEN_FILE) {
             // So we don't try and display metadata from PagedTiffHandler
             // for example when using InstantCommons.
             return true;
         }
         $exif = unserialize($metadata);
         if ($exif) {
             if (count($exif)) {
                 // EXIFDATETIME
                 if (array_key_exists('DateTimeOriginal', $exif) || array_key_exists('DateTime', $exif)) {
                     $property = new SMWDIProperty('___EXIFDATETIME');
                     if (array_key_exists('DateTimeOriginal', $exif)) {
                         $exifstr = $exif['DateTimeOriginal'];
                     } else {
                         $exifstr = $exif['DateTime'];
                     }
                     $datetime = convertexifdate($exifstr);
                     if ($datetime) {
                         $dataItem = new SMWDITime(SMWDITime::CM_GREGORIAN, $datetime->format('Y'), $datetime->format('n'), $datetime->format('j'), $datetime->format('G'), $datetime->format('i'));
                         $data->addPropertyObjectValue($property, $dataItem);
                     }
                 }
                 // EXIFSOFTWARE
                 if (array_key_exists('Software', $exif) || array_key_exists('metadata', $exif) && array_key_exists('Software', $exif['metadata'])) {
                     $str = array_key_exists('Software', $exif) ? $exif['Software'] : $exif['metadata']['Software'];
                     if (is_array($str)) {
                         $str = array_key_exists('x-default', $str) ? $str['x-default'] : $str[0];
                     }
                     if (!$str) {
                         return true;
                     }
                     $property = new SMWDIProperty('___EXIFSOFTWARE');
                     $dataItem = new SMWDIString($str);
                     $data->addPropertyObjectValue($property, $dataItem);
                 }
                 // EXIFLATLON
                 /*
                 //TODO
                      if ( array_key_exists( 'GPSLatitudeRef', $exif ) || array_key_exists( 'GPSLongitudeRef', $exif ) ) {
                      } */
                 //EXIFLATLON
             }
         }
     }
     //IMAGEMETA
     /************************/
     /* SHORTURL             */
     /************************/
     //FIXME handle internal and external links
     if (in_array('_SHORTURL', $sespSpecialProperties) && class_exists('ShortUrlUtils')) {
         global $wgShortUrlPrefix;
         if (!is_string($wgShortUrlPrefix)) {
             $urlPrefix = SpecialPage::getTitleFor('ShortUrl')->getFullUrl() . '/';
         } else {
             $urlPrefix = $wgShortUrlPrefix;
         }
         if (ShortUrlUtils::needsShortUrl($title)) {
             $shortId = ShortUrlUtils::encodeTitle($title);
             $shortURL = $urlPrefix . $shortId;
             $property = new SMWDIProperty('___SHORTURL');
             $dataItem = new SMWDIUri('http', $shortURL, '', '');
             $data->addPropertyObjectValue($property, $dataItem);
         } else {
         }
     }
     // end if SHORTURL
     return true;
 }