コード例 #1
0
ファイル: cb.dbchecker.php プロジェクト: rkern21/videoeditor
	/**
	 * Checks the all tables and upgrades if needed
	 * Backend-use only.
	 * @access private
	 *
	 * @param  boolean         $upgrade    False: only check table, True: upgrades table (depending on $dryRun)
	 * @param  boolean         $dryRun     True: doesn't do the modifying queries, but lists them, False: does the job
	 * @return string                      Message to display
	 */
	function checkDatabase( $upgrade = false, $dryRun = false ) {
		$xml							=	$this->_getCbDbXml();
		if ( $xml !== null ) {
			$db							=&	$xml->getElementByPath( 'database' );
			if ( $db ) {
				cbimport( 'cb.sql.upgrader' );
				$this->_sqlUpgrader		=	new CBSQLupgrader( $this->_db, $this->_silentWhenOK );
				$this->_sqlUpgrader->setDryRun( $dryRun );
				$success				=	$this->_sqlUpgrader->checkXmlDatabaseDescription( $db, '', $upgrade, true );
/*
var_dump( $success );
echo "<br>\nERRORS: " . $this->_sqlUpgrader->getErrors( "<br /><br />\n\n", "<br />\n" );
echo "<br>\nLOGS: " . $this->_sqlUpgrader->getLogs( "<br /><br />\n\n", "<br />\n" );
exit;
*/
			} else {
				$success				=	array( 'Error: could not find element database in XML file', null );
			}
		} else {
			$success					=	array( 'Error: could not find XML file', null );
		}
		return $success;
	}
コード例 #2
0
    /**
     * Check or fix field according to XML description if exsitant (or old method otherwise)
     *
     * @param  CBSQLupgrader         $sqlUpgrader
     * @param  moscomprofilerFields  $field
     * @param  boolean               $change
     * @return unknown
     */
    function checkFixSQL(&$sqlUpgrader, &$field, $change = true)
    {
        $fieldXML =& $this->_loadFieldXML($field);
        if ($fieldXML) {
            $db =& $fieldXML->getElementByPath('database');
            if ($db !== false) {
                // <database><table><columns>.... structure:
                $success = $sqlUpgrader->checkXmlDatabaseDescription($db, $field->name, $change, null);
            } else {
                $data =& $fieldXML->getElementByPath('data');
                if ($data !== false) {
                    // <data ....> structure:
                    $xmlText = '<?xml version="1.0" encoding="UTF-8"?>
<database version="1">
    <table name="' . $field->table . '" maintable="true" strict="false" drop="never" shared="true">
        <columns>
        </columns>
    </table>
</database>';
                    $dbXml = new CBSimpleXMLElement($xmlText);
                    $columns =& $dbXml->getElementByPath('table/columns');
                    $columns->addChildWithAttr('column', '', null, $data->attributes());
                    $success = $sqlUpgrader->checkXmlDatabaseDescription($dbXml, $field->name, $change, null);
                } else {
                    $success = true;
                }
            }
        } else {
            // no XML file or no <fieldtype> in xml, must be an old plugin or one which is uninstalled or missing files:
            cbimport('cb.xml.simplexml');
            $cols = $field->getTableColumns();
            if (count($cols) == 0) {
                // the comprofiler_files database is upgraded, but this (status) field does not require comprofiler entries:
                $success = true;
            } else {
                // database has been upgraded, take a guess and take first column name as name of the comprofiler table:
                // or database has not been upgraded: take name:
                $colNamePrefix = $cols[0];
                $xmlText = '<?xml version="1.0" encoding="UTF-8"?>
<database version="1">
    <table name="#__comprofiler" class="moscomprofiler" maintable="true" strict="false" drop="never" shared="true">
        <columns>
            <column name="" nametype="namesuffix" type="sql:varchar(255)" null="true" default="NULL" />
        </columns>
    </table>
</database>';
                $dbXml = new CBSimpleXMLElement($xmlText);
                $success = $sqlUpgrader->checkXmlDatabaseDescription($dbXml, $colNamePrefix, $change, null);
            }
        }
        if (!$success) {
            $field->_error .= $sqlUpgrader->getErrors();
        }
        /*
        var_dump( $success );
        echo "<br>\nERRORS: " . $sqlUpgrader->getErrors( "<br /><br />\n\n", "<br />\n" );
        echo "<br>\nLOGS: " . $sqlUpgrader->getLogs( "<br /><br />\n\n", "<br />\n" );
        //exit;
        */
        return $success;
    }
コード例 #3
0
 /**
  * plugin uninstaller with best effort depending on what it finds.
  *
  * @param  int     $id
  * @param  string  $option
  * @param  int     $client
  * @param  string  $action
  * @return boolean
  */
 function uninstall($id, $option, $client = 0)
 {
     global $_CB_database;
     $db = false;
     if ($this->checkPluginGetXml($id, $option, $client)) {
         if ($this->i_xmldocument !== null && count($this->i_xmldocument->children()) > 0) {
             $cbInstallXML =& $this->i_xmldocument;
             // get the element name:
             $e =& $cbInstallXML->getElementByPath('name');
             $this->elementName($e->data());
             // $cleanedElementName = strtolower(str_replace(array(" ","."),array("","_"),$this->elementName()));
             // get the files element
             $files_element =& $cbInstallXML->getElementByPath('files');
             if ($files_element) {
                 if (count($files_element->children())) {
                     foreach ($files_element->children() as $file) {
                         if ($file->attributes("plugin")) {
                             $this->elementSpecial($file->attributes("plugin"));
                             break;
                         }
                     }
                     $cleanedMainFileName = strtolower(str_replace(array(" ", "."), array("", "_"), $this->elementSpecial()));
                 }
                 // Is there an uninstallfile
                 $uninstallfile_elemet =& $cbInstallXML->getElementByPath('uninstallfile');
                 if ($uninstallfile_elemet !== false) {
                     if (is_file($this->i_elementdir . $uninstallfile_elemet->data())) {
                         global $_PLUGINS;
                         // needed for the require_once below !
                         require_once $this->i_elementdir . $uninstallfile_elemet->data();
                         $ret = call_user_func_array("plug_" . $cleanedMainFileName . "_uninstall", array());
                         if ($ret != '') {
                             $this->setError(0, $ret);
                         }
                     }
                 }
                 $adminFS =& cbAdminFileSystem::getInstance();
                 foreach ($files_element->children() as $file) {
                     // delete the files
                     $filename = $file->data();
                     if (file_exists($this->i_elementdir . $filename)) {
                         $parts = pathinfo($filename);
                         $subpath = $parts['dirname'];
                         if ($subpath != '' && $subpath != '.' && $subpath != '..') {
                             //echo '<br />'. 'Deleting'  .': '. $this->i_elementdir . $subpath;
                             $result = $adminFS->deldir(_cbPathName($this->i_elementdir . $subpath . '/'));
                         } else {
                             //echo '<br />'. 'Deleting'  .': '. $this->i_elementdir . $filename;
                             $result = $adminFS->unlink(_cbPathName($this->i_elementdir . $filename, false));
                         }
                         //echo intval( $result );
                     }
                 }
                 // Are there any SQL queries??
                 $query_element =& $cbInstallXML->getElementByPath('uninstall/queries');
                 if ($query_element !== false) {
                     foreach ($query_element->children() as $query) {
                         $_CB_database->setQuery(trim($query->data()));
                         if (!$_CB_database->query()) {
                             $this->setError(1, "SQL Error " . $_CB_database->stderr(true));
                             return false;
                         }
                     }
                 }
                 // Are there any Database statements ??
                 $db =& $cbInstallXML->getElementByPath('database');
                 if ($db !== false && count($db->children()) > 0) {
                     cbimport('cb.sql.upgrader');
                     $sqlUpgrader = new CBSQLupgrader($_CB_database, false);
                     //$sqlUpgrader->setDryRun( true );
                     $success = $sqlUpgrader->checkXmlDatabaseDescription($db, $cleanedMainFileName, 'drop', null);
                     /*
                     var_dump( $success );
                     echo "<br>\nERRORS: " . $sqlUpgrader->getErrors( "<br /><br />\n\n", "<br />\n" );
                     echo "<br>\nLOGS: " . $sqlUpgrader->getLogs( "<br /><br />\n\n", "<br />\n" );
                     exit;
                     */
                     if (!$success) {
                         $this->setError(1, "Plugin database XML SQL Error " . $sqlUpgrader->getErrors());
                         return false;
                     }
                 }
                 // Delete tabs and private fields of plugin:
                 $this->deleteTabAndFieldsOfPlugin($id);
                 // remove XML file from front
                 $xmlRemoveResult = $adminFS->unlink(_cbPathName($this->i_installfilename, false));
                 $filesRemoveResult = true;
                 /*					// define folders that should not be removed
                 					$sysFolders = array(
                 					'content',
                 					'search'
                 					);
                 					if ( ! in_array( $row->folder, $sysFolders ) ) {
                 */
                 // delete the non-system folders if empty
                 if (count(cbReadDirectory($this->i_elementdir)) < 1) {
                     $filesRemoveResult = $adminFS->deldir($this->i_elementdir);
                 }
                 /*					}
                 */
                 if (!$xmlRemoveResult) {
                     HTML_comprofiler::showInstallMessage('Could not delete XML file: ' . _cbPathName($this->i_installfilename, false) . ' due to permission error. Please remove manually.', 'Uninstall -  warning', $this->returnTo($option, 'showPlugins'));
                 }
                 if (!$filesRemoveResult) {
                     HTML_comprofiler::showInstallMessage('Could not delete directory: ' . $this->i_elementdir . ' due to permission error. Please remove manually.', 'Uninstall -  warning', $this->returnTo($option, 'showPlugins'));
                 }
             }
         }
         $_CB_database->setQuery("DELETE FROM #__comprofiler_plugin WHERE id = " . (int) $id);
         if (!$_CB_database->query()) {
             $msg = $_CB_database->stderr;
             HTML_comprofiler::showInstallMessage('Cannot delete plugin database entry due to error: ' . $msg, 'Uninstall -  error', $this->returnTo($option, 'showPlugins'));
             return false;
         }
         if ($this->i_xmldocument !== null && $db !== false && count($db->children()) > 0) {
             HTML_comprofiler::fixcbdbShowResults($sqlUpgrader, true, false, $success, array(), array(), $this->elementName(), 1, false);
         }
         return true;
     }
     return false;
 }