/** * Adds a property. * * @since 1.1 * * @param string $titleName The name of the property * @param string $propertyProperties A string of properties to assign to the propery (such as "has type") */ protected function addProperty($titleName, $propertyProperties) { $title = Title::newFromText($titleName, SMW_NS_PROPERTY); if (!$title->exists()) { $article = new Article($title, 0); $article->doEdit($article->getRawText() . $propertyProperties, ''); // TODO: add summary } }
function upload() { $details = null; $this->content = 'error'; $up = new UploadFromFile(); $up->initializeFromRequest($this->wg->request); $permErrors = $up->verifyPermissions($this->wg->user); if ($permErrors !== true) { $this->status = self::UPLOAD_PERMISSION_ERROR; $this->statusMessage = $this->uploadMessage($this->status, null); } else { if (empty($this->wg->EnableUploads)) { // BugId:6122 $this->statusMessage = wfMsg('uploaddisabled'); } else { $details = $up->verifyUpload(); $this->status = is_array($details) ? $details['status'] : UploadBase::UPLOAD_VERIFICATION_ERROR; $this->statusMessage = ''; if ($this->status > 0) { $this->statusMessage = $this->uploadMessage($this->status, $details); } else { $titleText = $this->request->getVal('title'); $sectionNumber = $this->request->getVal('section', 0); $this->status = $up->performUpload('', '', '', $this->wg->user); $mainArticle = new Article(Title::newFromText($titleText)); if ($sectionNumber == 0) { $mainArticle->updateArticle($this->getWikiText($up->getTitle()->getText(), self::LEFT) . $mainArticle->getRawText(), '', false, false); } else { $firstSectionText = $mainArticle->getSection($mainArticle->getRawText(), $sectionNumber); $matches = array(); if (preg_match('/={2,3}[^=]+={2,3}/', $firstSectionText, $matches)) { $firstSectionText = trim(str_replace($matches[0], '', $firstSectionText)); $newSectionText = $mainArticle->replaceSection($sectionNumber, $matches[0] . "\n" . $this->getWikiText($up->getTitle()->getText(), self::LEFT) . $firstSectionText); $mainArticle->updateArticle($newSectionText, '', false, false); } } $this->content = $this->renderImage($up->getTitle()->getText(), self::LEFT); } } } }
/** * @param Title $title * @param WikiPage $article * @return bool */ public static function onArticleFromTitle(Title &$title, &$article) { global $wgLandingPagesAsContentMagicWords; $app = F::app(); if ($title->exists() && $title->getNamespace() != NS_FILE && $title->getNamespace() != NS_CATEGORY) { $key = self::generateCacheKey($title->getArticleId()); self::$switches = $app->wg->memc->get($key); if (empty(self::$switches)) { $article = new Article($title); self::$switches = array(); $magicWords = array_keys($wgLandingPagesAsContentMagicWords); foreach ($magicWords as $wordID) { $magicWord = MagicWord::get($wordID); self::$switches[$wordID] = 0 < $magicWord->match($article->getRawText()); } $app->wg->memc->set($key, self::$switches, self::CACHE_DURATION); } self::process(); } return true; }
function includePage($title) { global $wgParser, $wgUser; $pageTitle = Title::newFromText($title); if (!$pageTitle->exists()) { echo 'The page [[' . $title . ']] was not found.'; } else { $article = new Article($pageTitle); $wgParserOptions = new ParserOptions($wgUser); $parserOutput = $wgParser->parse($article->getRawText(), $pageTitle, $wgParserOptions); echo $parserOutput->getText(); } }
/** * Get a diff between the current contents of the edit box and the * version of the page we're editing from. * * If this is a section edit, we'll replace the section as for final * save and then make a comparison. */ function showDiff() { global $wgUser, $wgContLang, $wgParser, $wgOut; $oldtext = $this->mArticle->getRawText(); $newtext = $this->mArticle->replaceSection($this->section, $this->textbox1, $this->summary, $this->edittime); wfRunHooks('EditPageGetDiffText', array($this, &$newtext)); $popts = ParserOptions::newFromUserAndLang($wgUser, $wgContLang); $newtext = $wgParser->preSaveTransform($newtext, $this->mTitle, $wgUser, $popts); if ($oldtext !== false || $newtext != '') { $oldtitle = wfMsgExt('currentrev', array('parseinline')); $newtitle = wfMsgExt('yourtext', array('parseinline')); $de = new DifferenceEngine($this->mArticle->getContext()); $de->setText($oldtext, $newtext); $difftext = $de->getDiff($oldtitle, $newtitle); $de->showDiffStyle(); } else { $difftext = ''; } $wgOut->addHTML('<div id="wikiDiff">' . $difftext . '</div>'); }
/** * Returns geolocation button params */ private function getGeolocationButtonParams($refreshCache = false) { $sMemcKey = wfMemcKey($this->app->wg->title->getText(), $this->app->wg->title->getNamespace(), 'GeolocationButtonParams'); // use user default if (empty($iWidth)) { $wopt = $this->app->wg->user->getGlobalPreference('thumbsize'); if (!isset($this->app->wg->thumbLimits[$wopt])) { $wopt = User::getDefaultOption('thumbsize'); } $iWidth = $this->app->wg->thumbLimits[$wopt]; } $aResult = array('align' => 'right', 'width' => $iWidth); $aMemcResult = $this->app->wg->memc->get($sMemcKey); $refreshCache = true; // FIXME if ($refreshCache || empty($aMemcResult)) { $oArticle = new Article($this->app->wg->title); $sRawText = $oArticle->getRawText(); $aMatches = array(); $string = $this->app->wg->contLang->getNsText(NS_IMAGE) . '|' . MWNamespace::getCanonicalName(NS_IMAGE); $iFound = preg_match('#\\[\\[(' . $string . '):[^\\]]*|thumb[^\\]]*\\]\\]#', $sRawText, $aMatches); if (!empty($iFound)) { reset($aMatches); $sMatch = current($aMatches); $sMatch = str_replace('[[', '', $sMatch); $sMatch = str_replace(']]', '', $sMatch); $aMatch = explode('|', $sMatch); foreach ($aMatch as $element) { if ($element == 'left') { $aResult['align'] = $element; } if (substr($element, -2) == 'px' && (int) substr($element, 0, -2) > 0) { $aResult['width'] = (int) substr($element, 0, -2); } } } $iExpires = 60 * 60 * 24; $this->app->wg->memc->set($sMemcKey, $aResult, $iExpires); } else { $aResult['align'] = $aMemcResult['align']; if (!empty($aMemcResult['width'])) { $aResult['width'] = $aMemcResult['width']; } } // get default image width return $aResult; }
/** * @param $out OutputPage * @param $text String * @return bool */ public function beforePageDisplayHTML(&$out, &$text) { global $wgContLang, $wgRequest, $wgMemc, $wgUser; wfProfileIn(__METHOD__); $userAgent = $_SERVER['HTTP_USER_AGENT']; $acceptHeader = isset($_SERVER["HTTP_ACCEPT"]) ? $_SERVER["HTTP_ACCEPT"] : ''; $uAmd5 = md5($userAgent); $key = wfMemcKey('mobile', 'ua', $uAmd5); $props = null; try { $props = $wgMemc->get($key); if (!$props) { $wurflConfigFile = RESOURCES_DIR . 'wurfl-config.xml'; $wurflConfig = new WURFL_Configuration_XmlConfig($wurflConfigFile); $wurflManagerFactory = new WURFL_WURFLManagerFactory($wurflConfig); $wurflManager = $wurflManagerFactory->create(); $device = $wurflManager->getDeviceForHttpRequest($_SERVER); if ($device->isSpecific() === true) { $props = $device->getAllCapabilities(); $wgMemc->set($key, $props, 86400); } else { $wgMemc->set($key, 'generic', 86400); $props = 'generic'; } } } catch (Exception $e) { // echo $e->getMessage(); } // Note: The WebRequest Class calls are made in this block because // since PHP 5.1.x, all objects have their destructors called // before the output buffer callback function executes. // Thus, globalized objects will not be available as expected in the function. // This is stated to be intended behavior, as per the following: [http://bugs.php.net/bug.php?id=40104] $xDevice = isset($_SERVER['HTTP_X_DEVICE']) ? $_SERVER['HTTP_X_DEVICE'] : ''; self::$useFormat = $wgRequest->getText('useformat'); $mobileAction = $wgRequest->getText('mobileaction'); $action = $wgRequest->getText('action'); if (self::$useFormat !== 'mobile' && self::$useFormat !== 'mobile-wap' && !$xDevice) { wfProfileOut(__METHOD__); return true; } if ($action === 'edit' || $mobileAction === 'view_normal_site') { wfProfileOut(__METHOD__); return true; } self::$title = $out->getTitle(); if (self::$title->isMainPage()) { self::$isMainPage = true; } if (self::$title->getNamespace() == NS_FILE) { self::$isFilePage = true; } self::$htmlTitle = $out->getHTMLTitle(); self::$disableImages = $wgRequest->getText('disableImages', 0); self::$enableImages = $wgRequest->getText('enableImages', 0); self::$displayNoticeId = $wgRequest->getText('noticeid', ''); if (self::$disableImages == 1) { $wgRequest->response()->setcookie('disableImages', 1); $location = str_replace('?disableImages=1', '', str_replace('&disableImages=1', '', $wgRequest->getFullRequestURL())); $location = str_replace('&mfi=1', '', str_replace('&mfi=0', '', $location)); $location = $this->getRelativeURL($location); $wgRequest->response()->header('Location: ' . $location . '&mfi=0'); } elseif (self::$disableImages == 0) { $disableImages = $wgRequest->getCookie('disableImages'); if ($disableImages) { self::$disableImages = $disableImages; } } if (self::$enableImages == 1) { $disableImages = $wgRequest->getCookie('disableImages'); if ($disableImages) { $wgRequest->response()->setcookie('disableImages', ''); } $location = str_replace('?enableImages=1', '', str_replace('&enableImages=1', '', $wgRequest->getFullRequestURL())); $location = str_replace('&mfi=1', '', str_replace('&mfi=0', '', $location)); $location = $this->getRelativeURL($location); $wgRequest->response()->header('Location: ' . $location . '&mfi=1'); } self::$format = $wgRequest->getText('format'); self::$callback = $wgRequest->getText('callback'); self::$requestedSegment = $wgRequest->getText('seg', 0); self::$search = $wgRequest->getText('search'); self::$searchField = $wgRequest->getText('search', ''); $device = new DeviceDetection(); if ($xDevice) { $formatName = $xDevice; } else { $formatName = $device->formatName($userAgent, $acceptHeader); } self::$device = $device->format($formatName); if (self::$device['view_format'] === 'wml') { $this->contentFormat = 'WML'; } elseif (self::$device['view_format'] === 'html') { $this->contentFormat = 'XHTML'; } if (self::$useFormat === 'mobile-wap') { $this->contentFormat = 'WML'; } if ($mobileAction == 'leave_feedback') { echo $this->renderLeaveFeedbackXHTML(); wfProfileOut(__METHOD__); exit; } if ($mobileAction == 'leave_feedback_post') { $this->getMsg(); $subject = $wgRequest->getText('subject', ''); $message = $wgRequest->getText('message', ''); $token = $wgRequest->getText('edittoken', ''); $title = Title::newFromText(self::$messages['mobile-frontend-feedback-page']); if ($title->userCan('edit') && !$wgUser->isBlockedFrom($title) && $wgUser->matchEditToken($token)) { $article = new Article($title, 0); $rawtext = $article->getRawText(); $rawtext .= "\n== {$subject} == \n {$message} ~~~~ \n <small>User agent: {$userAgent}</small> "; $article->doEdit($rawtext, ''); } $location = str_replace('&mobileaction=leave_feedback_post', '', $wgRequest->getFullRequestURL() . '¬iceid=1&useformat=mobile'); $location = $this->getRelativeURL($location); $wgRequest->response()->header('Location: ' . $location); wfProfileOut(__METHOD__); exit; } if ($mobileAction == 'disable_mobile_site' && $this->contentFormat == 'XHTML') { echo $this->renderDisableMobileSiteXHTML(); wfProfileOut(__METHOD__); exit; } if ($mobileAction == 'opt_in_mobile_site' && $this->contentFormat == 'XHTML') { echo $this->renderOptInMobileSiteXHTML(); wfProfileOut(__METHOD__); exit; } if ($mobileAction == 'opt_out_mobile_site' && $this->contentFormat == 'XHTML') { echo $this->renderOptOutMobileSiteXHTML(); wfProfileOut(__METHOD__); exit; } if ($mobileAction == 'opt_in_cookie') { wfIncrStats('mobile.opt_in_cookie_set'); $this->setOptInOutCookie('1'); $this->disableCaching(); $location = wfExpandUrl(Title::newMainPage()->getFullURL(), PROTO_CURRENT); $wgRequest->response()->header('Location: ' . $location); } if ($mobileAction == 'opt_out_cookie') { $this->setOptInOutCookie(''); } $this->getMsg(); $this->disableCaching(); $this->sendXDeviceVaryHeader(); $this->sendApplicationVersionVaryHeader(); $this->checkUserStatus(); $this->checkUserLoggedIn(); if (self::$title->isSpecial('Userlogin') && self::$isBetaGroupMember) { self::$wsLoginToken = $wgRequest->getSessionData('wsLoginToken'); $q = array('action' => 'submitlogin', 'type' => 'login'); $returnToVal = $wgRequest->getVal('returnto'); if ($returnToVal) { $q['returnto'] = $returnToVal; } self::$wsLoginFormAction = self::$title->getLocalURL($q); } $this->setDefaultLogo(); ob_start(array($this, 'DOMParse')); wfProfileOut(__METHOD__); return true; }
function mvd_consistancy_check() { //get all 2009 streams: $dbr = wfGetDB(DB_READ); $streams = array(); $result = $dbr->select('mv_streams', '*', 'date_start_time >= ' . mktime(0, 0, 0, 1, 1, 2009), __METHOD__); if ($dbr->numRows($result) == 0) { die("no streams found" . "\n" . $dbr->lastQuery() . "\n"); } while ($stream = $dbr->fetchObject($result)) { //get all the mvds for this stream $mvd_res = $dbr->select('mv_mvd_index', '*', array('stream_id' => $stream->id)); while ($mvd = $dbr->fetchObject($mvd_res)) { //make sure the article exists: $mvdTitle = Title::newFromText($mvd->wiki_title, MV_NS_MVD); if ($mvdTitle->exists()) { //update the text: $mvdArticle = new Article($mvdTitle); $text = $mvdArticle->getRawText(); //find the spoken by or speech by text: $sb_pat = '/\\[\\[Spoken By(\\:.)([^\\]]*)]]/i'; preg_match($sb_pat, $text, $matches); if (isset($matches[2])) { $replacement = $matches[2] == 'Unknown' ? '' : '[[Spoken By::' . str_replace('_', ' ', $matches[2]) . ']]'; $text = preg_replace($sb_pat, $replacement, $text); } //do the same for speech by $sb_pat = '/\\[\\[Speech by(\\:.)([^\\]]*)]]/i'; preg_match($sb_pat, $text, $matches); if (isset($matches[2])) { $replacement = $matches[2] == 'Unknown' ? '' : '[[Speech by::' . str_replace('_', ' ', $matches[2]) . ']]'; $text = preg_replace($sb_pat, $replacement, $text); } //trim all double spaces $text = preg_replace('/[\\s]+/', ' ', $text); //uc upper words: //$text = preg_replace("/[^A-Z]\.(\s)(\\w)/e", '".$1".strtoupper("$2")', $text); do_update_wiki_page($mvdTitle, trim($text), '', true); } else { print "orphaned mvd: {$mvd->wiki_title} (should remove) \n"; } } //die('only update one stream at a time'); } }
/** * render template on GET. if POSTed, add content to article page * @requestParam string articleurl * @requestParam string reason * @requestParam string cancel [true/false] * @responseParam string result [ok/error] * @responseParam string msg - result message * @responseParam string errParam - error param */ public function modalArticle() { if ($this->request->getVal('submit', false) && $_COOKIE['wikicitiesUserID'] == $_SESSION['wsUserID']) { $hubname = $this->request->getVal('hubname', ''); $articleUrl = trim($this->request->getVal('articleurl', '')); $reason = trim($this->request->getVal('reason', '')); $submissiondate = date('r'); if ($this->request->getVal('cancel', false)) { return; } else { if (strlen($articleUrl) < 10) { $this->result = 'error'; $this->errParam = 'articleurl'; $this->msg = $this->wf->msg('wikiahubs-error-invalid-article-url-length'); return; } else { if (empty($reason) || strlen($reason) > 140) { $this->result = 'error'; $this->errParam = 'reason'; $this->msg = $this->wf->msg('wikiahubs-error-invalid-reason-length'); return; } } } $title = Title::newFromText($hubname . '/Suggested_content'); $article = new Article($title); $username = $this->wg->user->getName(); $content = "{$articleUrl} | {$reason} | {$username} | {$submissiondate} \n\n" . $article->getRawText(); $summary = "Hubs: {$username} suggests article"; $status = $article->doEdit($content, $summary); $this->result = 'ok'; $this->msg = $this->wf->msg('wikiahubs-suggest-article-success'); } }
/** * @desc Returns raw (unparsed) wikitext. * * @return string raw wikitext */ public function getRawDescription() { $oArticle = new Article($this->getTitle()); return $oArticle->getRawText(); }
/** * Create a math object from article text * @param Title $title Title of the article */ public static function newFromTitle( $title ) { $article = new Article( $title, 0 ); return new self( $article->getRawText() ); }
/** * Get a diff between the current contents of the edit box and the * version of the page we're editing from. * * If this is a section edit, we'll replace the section as for final * save and then make a comparison. */ function showDiff() { global $wgUser, $wgContLang, $wgParser, $wgOut; $oldtitlemsg = 'currentrev'; # if message does not exist, show diff against the preloaded default if ($this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists()) { $oldtext = $this->mTitle->getDefaultMessageText(); if ($oldtext !== false) { $oldtitlemsg = 'defaultmessagetext'; } } else { $oldtext = $this->mArticle->getRawText(); } $newtext = $this->mArticle->replaceSection($this->section, $this->textbox1, $this->summary, $this->edittime); wfRunHooks('EditPageGetDiffText', array($this, &$newtext)); $popts = ParserOptions::newFromUserAndLang($wgUser, $wgContLang); $newtext = $wgParser->preSaveTransform($newtext, $this->mTitle, $wgUser, $popts); if ($oldtext !== false || $newtext != '') { $oldtitle = wfMessage($oldtitlemsg)->parse(); $newtitle = wfMessage('yourtext')->parse(); $de = new DifferenceEngine($this->mArticle->getContext()); $de->setText($oldtext, $newtext); $difftext = $de->getDiff($oldtitle, $newtitle); $de->showDiffStyle(); } else { $difftext = ''; } $wgOut->addHTML('<div id="wikiDiff">' . $difftext . '</div>'); }
/** * get stats from article * @param string $articleName * @return integer stats */ public function getStatsFromArticle($articleName) { $this->wf->ProfileIn(__METHOD__); $title = Title::newFromText($articleName); $article = new Article($title); $content = $article->getRawText(); $stats = empty($content) ? 0 : $content; $this->wf->ProfileOut(__METHOD__); return intval($stats); }
/** * Glues the content of <qpinterpret> tags together, checks "lang" attribute * and calls appropriate interpretator to evaluate the user answer * * @param $interpArticle _existing_ Article with interpretation script enclosed in <qpinterp> tags * @param $injectVars array with the following possible keys: * key 'answer' array of user selected categories for * every proposal & question of the poll; * key 'usedQuestions' array of used questions for randomized polls * or false, when the poll questions were not randomized * @return instance of qp_InterpResult class (interpretation result) */ static function getResult( Article $interpArticle, array $injectVars ) { global $wgParser, $wgContLang; $matches = array(); # extract <qpinterpret> tags from the article content $wgParser->extractTagsAndParams( array( qp_Setup::$interpTag ), $interpArticle->getRawText(), $matches ); $interpResult = new qp_InterpResult(); # glue content of all <qpinterpret> tags at the page together $interpretScript = ''; $lang = ''; foreach ( $matches as &$match ) { list( $tagName, $content, $attrs ) = $match; # basic checks for lang attribute (only lang="php" is implemented yet) # however we do not want to limit interpretation language, # so the attribute is enforced to use if ( !isset( $attrs['lang'] ) ) { return $interpResult->setError( wfMsg( 'qp_error_eval_missed_lang_attr' ) ); } if ( $lang == '' ) { $lang = $attrs['lang']; } elseif ( $attrs['lang'] != $lang ) { return $interpResult->setError( wfMsg( 'qp_error_eval_mix_languages', $lang, $attrs['lang'] ) ); } if ( $tagName == qp_Setup::$interpTag ) { $interpretScript .= $content; } } switch ( $lang ) { case 'php' : $result = qp_Eval::interpretAnswer( $interpretScript, $injectVars, $interpResult ); if ( $result instanceof qp_InterpResult ) { # evaluation error (environment error) , return it; return $interpResult; } break; default : return $interpResult->setError( wfMsg( 'qp_error_eval_unsupported_language', $lang ) ); } /*** process the result ***/ if ( !is_array( $result ) ) { return $interpResult->setError( wfMsg( 'qp_error_interpretation_no_return' ) ); } if ( isset( $result['options'] ) && is_array( $result['options'] ) && array_key_exists( 'store_erroneous', $result['options'] ) ) { $interpResult->storeErroneous = (boolean) $result['options']['store_erroneous']; } if ( isset( $result['error'] ) && is_array( $result['error'] ) ) { # initialize $interpResult->qpcErrors[] member array foreach ( $result['error'] as $qidx => $question ) { if ( is_array( $question ) ) { foreach ( $question as $pidx => $prop_error ) { # integer indicates proposal id; string - proposal name if ( is_array( $prop_error ) ) { # separate error messages list for proposal categories foreach ( $prop_error as $cidx => $cat_error ) { $interpResult->setQPCerror( $cat_error, $qidx, $pidx, $cidx ); } } else { # error message for the whole proposal line $interpResult->setQPCerror( $prop_error, $qidx, $pidx ); } } } } } if ( isset( $result['errmsg'] ) && trim( strval( $result['errmsg'] ) ) != '' ) { # script-generated error message for the whole answer return $interpResult->setError( (string) $result['errmsg'] ); } # if there were question/proposal errors, return them; if ( $interpResult->isError() ) { return $interpResult->setDefaultErrorMessage(); } $interpCount = 0; foreach ( qp_Setup::$show_interpretation as $interpType => $show ) { if ( isset( $result[$interpType] ) ) { $interpCount++; } } if ( $interpCount == 0 ) { return $interpResult->setError( wfMsg( 'qp_error_interpretation_no_return' ) ); } $interpResult->structured = isset( $result['structured'] ) ? serialize( $result['structured'] ) : ''; if ( strlen( $interpResult->structured ) > qp_Setup::$field_max_len['serialized_interpretation'] ) { # serialized structured interpretation is too long and # this type of interpretation cannot be truncated unset( $interpResult->structured ); return $interpResult->setError( wfMsg( 'qp_error_structured_interpretation_is_too_long' ) ); } $interpResult->short = isset( $result['short'] ) ? strval( $result['short'] ) : ''; $interpResult->long = isset( $result['long'] ) ? strval( $result['long'] ) : ''; if ( strlen( $interpResult->long ) > qp_Setup::$field_max_len['long_interpretation'] ) { $interpResult->long = $wgContLang->truncate( $interpResult->long, qp_Setup::$field_max_len['long_interpretation'] , '' ); } return $interpResult; }