_oDomDocument = new DOMDocument(); $this->_oDomDocument->preserveWhiteSpace = FALSE; } /** * * @param int $iPluginId * @return boolean */ public function loadPluginFromDb($iPluginId) { $this->_oPlugin = new pimPlugin($iPluginId); if ($this->_oPlugin->isLoaded()) { $this->_iPluginId = $this->_oPlugin->get('idplugin'); $this->_sPluginPath = cRegistry::getBackendPath() . cRegistry::getConfigValue('path', 'plugins') . $this->_oPlugin->get('folder') . "/"; return TRUE; } $this->_oPlugin = NULL; return FALSE; } /** * * @param string $sPluginFolderName * @return boolean */ public function installPlugin($sPluginFolderName) { $iNewPluginId = 0; if (empty($sPluginFolderName)) { return FALSE; } $pluginPath = cRegistry::getBackendPath() . cRegistry::getConfigValue('path', 'plugins') . $sPluginFolderName . "/"; if (is_null($this->getCfgXmlObject())) { $sPiCfg = $pluginPath . 'cl_plugin.xml'; if (is_dir($pluginPath) && file_exists($sPiCfg)) { $this->loadXmlFile($sPiCfg); } else { return FALSE; } } $oPluginInstaller = new pimSetupPluginInstall(); $oPluginInstaller->setXsdFile($this->_xsd); $oPluginInstaller->setXmlObject($this->getCfgXmlObject()); $oPluginInstaller->setPluginPath($pluginPath); $this->_iPluginId = $oPluginInstaller->installPlugin(); if ($this->_iPluginId > 0) { return TRUE; } return FALSE; } /** * * @param string $sHandleSql * @return boolean */ public function uninstallPlugin($sHandleSql) { $oPluginUninstall = new pimSetupPluginUninstall(); $oPluginUninstall->setPluginPath($this->_sPluginPath); return $oPluginUninstall->uninstallPlugin($this->_iPluginId, $sHandleSql); } /** * * @return int */ public function getPluginId() { return $this->_iPluginId; } /** * * @param string $sFile * @return boolean */ public function loadXmlFile($sFile) { $this->_oDomDocument->load($sFile); if ($this->_validateXml()) { $this->_oPiXml = simplexml_load_string($this->_oDomDocument->C14N()); } return (is_a($this->_oPiXml, "SimpleXMLElement")) ? TRUE : FALSE; } /** * * @return object|null */ public function getCfgXmlObject() { if (is_object($this->_oPiXml)) { return $this->_oPiXml; } return NULL; } /** * * @return array */ public function getPiGeneralArray() { $aGeneral = array(); if (is_object($this->_oPiXml)) { $aGeneral = $this->_xml2Array($this->_oPiXml->general); if($aDependencies = $this->_getDepencyArray()) { foreach ($aDependencies as $aDependency) { } } $aGeneral['dependencies'] = print_r($aDependencies, TRUE); } return $aGeneral; } /** * Returns generated list entry (li) for plugin or empty string * * @param int $iPluginId * @return string */ public function getInfoInstalled($iPluginId) { $oPlugin = new pimPlugin($iPluginId); if ($oPlugin->isLoaded()) { $oView = new pimView(); $oView->setMultiVariables($oPlugin->toArray()); $aLang = array( 'LANG_FOLDERNAME' => i18n("Foldername", "pluginmanager"), 'LANG_AUTHOR' => i18n("Author", "pluginmanager"), 'LANG_CONTACT' => i18n("Contact", "pluginmanager"), 'LANG_LICENSE' => i18n("License", "pluginmanager"), 'LANG_INSTALLED' => i18n('Installed since', 'pluginmanager'), 'LANG_DEPENDENCIES' => i18n("Dependencies", "pluginmanager"), 'LANG_WRITEABLE' => i18n("Writable", "pluginmanager"), 'LANG_INSTALL' => i18n("Install", "pluginmanager"), 'LANG_REMOVE' => i18n("Remove", "pluginmanager"), 'LANG_UPDATE' => i18n('Update', 'pluginmanager'), 'LANG_UPDATE_CHOOSE' => i18n('Please choose your new file', 'pluginmanager'), 'LANG_UPDATE_UPLOAD' => i18n('Update', 'pluginmanager'), 'LANG_REMOVE_SQL' => i18n('Execute uninstall.sql', 'pluginmanager') ); $oView->setMultiVariables($aLang); // nav sub placeholder, @Todo: fill with content $oView->set('s', 'NAVSUB', ''); // enable / disable functionality $activeStatus = $oPlugin->get('active'); $oButton = new cHTMLButton('toggle_active'); $oButton->setID("but-toggle-plugin-" . $oPlugin->get("idplugin")); $oButton->setClass("pimImgBut"); $oButton->setMode('image'); $oButtonLabel = new cHTMLLabel("placeholder", $oButton->getID()); $oButtonLabel->setClass("pimButLabel"); if ($activeStatus == 1) { $oButton->setAlt("Click to toggle status"); $oButton->setImageSource('images/online.gif'); $oButtonLabel->setLabelText(i18n("Plugin is active", "pluginmanager")); } else { $oButton->setImageSource('images/offline.gif'); $oButtonLabel->setLabelText(i18n("Plugin not active", "pluginmanager")); } $oView->set('s', 'BUT_ACTIVESTATUS', $oButton->render() . ' ' . $oButtonLabel->render()); // update button - not used right now $oView->set('s', 'BUT_UPDATE_PLUGIN', ''); // uninstall $oDelBut = new cHTMLButton('uninstall_plugin'); $oDelBut->setImageSource('images/but_cancel.gif'); $oDelBut->setID("but-uninstall-plugin-" . $oPlugin->get("idplugin")); $oDelBut->setClass("pimImgBut"); $oDelBut->setMode('image'); $oDelSqlCheckbox = new cHTMLCheckbox("delete_sql", "TRUE"); $oDelSqlCheckbox->setStyle("display: inline-block;"); $sDelSqlTxt = " " . sprintf(i18n("(%s remove database tables)", "pluginmanager"), $oDelSqlCheckbox->toHtml(FALSE)); $oDelButLabel = new cHTMLLabel("placeholder", $oDelBut->getID()); $oDelButLabel->setClass("pimButLabel"); $oDelButLabel->setLabelText(i18n("Uninstall Plugin", "pluginmanager") . $sDelSqlTxt); $oView->set('s', 'BUT_UNINSTALL_PLUGIN', $oDelBut->render() . ' ' . $oDelButLabel->render()); $oView->setTemplate('pi_manager_installed_plugins.html'); return $oView->getRendered(1); } return ''; } protected function _getDepencyArray() { $aDependencies = array(); $aAttributes = array(); $iCountDependencies = count($this->_oPiXml->dependencies); if($iCountDependencies > 0) { for ($i = 0; $i < $iCountDependencies; $i++) { $sPluginName = cSecurity::escapeString($this->_oPiXml->dependencies[$i]->depend); foreach ($this->_oPiXml->dependencies[$i]->depend->attributes() as $sKey => $sValue) { $aAttributes[$sKey] = cSecurity::escapeString($sValue); } $aDependencies[$i]["name"] = $sPluginName; $aDependencies[$i] = array_merge($aDependencies[$i],$aAttributes); } return $aDependencies; } return FALSE; } /** * * @return boolean * @throws pimXmlStructureException */ private function _validateXml() { if ($this->_oDomDocument->schemaValidate($this->_xsd)) { $this->_bValid = true; return true; } else { return FALSE; } } /** * * @param xml $xml * @return array */ private function _xml2Array($xml) { $string = json_encode($xml); $array = json_decode($string, true); return $array; } }