public static function newFromRow($row) { $wiki = new self($row->fw_name); $wiki->_title = $row->fw_title; $wiki->_description = $row->fw_description; $wiki->_creator = $row->fw_creator; $wiki->_variables = unserialize($row->fw_parameters); $wiki->_permissions = unserialize($row->fw_permissions); $dbr = MediaWikiFarmer::getInstance()->getDB(DB_SLAVE); $res = $dbr->select(array('farmer_extension', 'farmer_wiki_extension'), '*', array('fwe_wiki' => $row->fw_id), __METHOD__, array(), array('farmer_wiki_extension' => array('LEFT JOIN', 'fwe_extension = fe_id'))); $wiki->_extensions = array(); foreach ($res as $row) { $wiki->_extensions[$row->fe_name] = MediaWikiFarmer_Extension::newFromRow($row); } return $wiki; }
/** * Handles page to manage extensions */ protected function _executeManageExtensions($wgFarmer) { global $wgOut, $wgUser, $wgRequest; if (!wfRunHooks('FarmerManageExtensions', array($wgFarmer))) { return; } // quick security check if (!MediaWikiFarmer::userIsFarmerAdmin($wgUser)) { $wgOut->wrapWikiMsg('== $1 ==', 'farmer-permissiondenied'); $wgOut->addWikiMsg('farmer-extensions-extension-denied'); return; } // look and see if a new extension was registered if ($wgRequest->wasPosted()) { $name = $wgRequest->getVal('name'); $description = $wgRequest->getVal('description'); $include = $wgRequest->getVal('include'); $extension = new MediaWikiFarmer_Extension($name, $description, $include); if (!$extension->isValid()) { $wgOut->wrapWikiMsg('== $1 ==', 'farmer-extensions-invalid'); $wgOut->addWikiMsg('farmer-extensions-invalid-text'); } else { $wgFarmer->registerExtension($extension); } } $wgOut->wrapWikiMsg('== $1 ==', 'farmer-extensions-available'); $extensions = $wgFarmer->getExtensions(); if (count($extensions) === 0) { $wgOut->addWikiMsg('farmer-extensions-noavailable'); } else { foreach ($wgFarmer->getExtensions() as $extension) { $wgOut->addWikiText('; ' . htmlspecialchars($extension->name) . ' : ' . htmlspecialchars($extension->description)); } } $wgOut->wrapWikiMsg('== $1 ==', 'farmer-extensions-register'); $wgOut->addWikiMsg('farmer-extensions-register-text1'); $wgOut->addWikiMsg('farmer-extensions-register-text2'); $wgOut->addWikiMsg('farmer-extensions-register-text3'); $wgOut->addWikiMsg('farmer-extensions-register-text4'); foreach (explode(PATH_SEPARATOR, get_include_path()) as $path) { $wgOut->addWikiText('*' . $path); } $wgOut->addHTML("\n<form id=\"registerExtension\" method=\"post\">\n\t<table>\n\t\t<tr>\n\t\t\t<td align=\"right\">" . wfMsgHtml('farmer-extensions-register-name') . "</td>\n\t\t\t<td align=\"left\"><input type=\"text\" size=\"20\" name=\"name\" value=\"\" /></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td align=\"right\">" . wfMsgHtml('farmer-description') . "</td>\n\t\t\t<td align=\"left\"><input type=\"text\" size=\"50\" name=\"description\" value=\"\" /></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td align=\"right\">" . wfMsgHtml('farmer-extensions-register-includefile') . "</td>\n\t\t\t<td align=\"left\"><input type=\"text\" size=\"50\" name=\"include\" value=\"\" /></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td> </td>\n\t\t\t<td align=\"right\"><input type=\"submit\" name=\"submit\" value=\"" . wfMsgHtml('farmer-button-submit') . "\" /></td>\n\t\t</tr>\n\t</table>\n</form>"); }
/** * Gets extensions objects * * @return Array */ public function getExtensions($forceReload = false) { if ($this->_extensionsLoaded && !$forceReload) { return $this->_extensions; } if ($this->useDatabase()) { $dbr = $this->getDB(DB_SLAVE); $res = $dbr->select('farmer_extension', '*', array(), __METHOD__); $this->_extensions = array(); foreach ($res as $row) { $this->_extensions[$row->fe_name] = MediaWikiFarmer_Extension::newFromRow($row); } } else { if (is_readable($this->_getExtensionFile())) { $contents = file_get_contents($this->_getExtensionFile()); $extensions = unserialize($contents); if (is_array($extensions)) { $this->_extensions = $extensions; } } else { // perhaps we should throw an error or something? } } $extensionsLoaded = true; return $this->_extensions; }