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>&#160;</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;
 }