cb.dbchecker.php
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:6k
源码类别:

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Joomla/Mambo Community Builder
  4. * @version $Id: install.comprofiler.sql.php 567 2006-11-19 10:05:00Z beat $
  5. * @package Community Builder
  6. * @subpackage install.comprofiler.sql.php
  7. * @author Beat
  8. * @copyright (C) 2008 Lightning MultiCom SA, www.joomlapolis.com
  9. * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
  10. */
  11. // ensure this file is being included by a parent file
  12. if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
  13. /**
  14.  * CB SQL versioning / upgrading functions:
  15.  * 
  16.  * WARNING:
  17.  * This new library is experimental work in progress and should not be used directly by plugins and 3pds,
  18.  * as it is subject to change without notice, and is not part of current CB API.
  19.  * 
  20.  * @access private
  21.  * 
  22.  */
  23. class CBdbChecker {
  24. var $_db = null;
  25. var $_sqlUpgrader = null;
  26. var $_silentWhenOK = true;
  27. function CBdbChecker( &$db ) {
  28. $this->_db =& $db;
  29. $this->_silentWhenOK = false;
  30. }
  31. /**
  32.  * Returns the database CBSimpleXMLElement
  33.  *
  34.  * @return CBSimpleXMLElement
  35.  */
  36. function & _getCbDbXml() {
  37. global $_CB_framework;
  38. static $_cb_db_xml = null;
  39. if ( $_cb_db_xml == null ) {
  40. $filename = $_CB_framework->getCfg( 'absolute_path' ) . '/administrator/components/com_comprofiler/database/database.cbcore.xml';
  41. if ( is_readable( $filename ) ) {
  42. cbimport( 'cb.xml.simplexml' );
  43. $_cb_db_xml = new CBSimpleXMLElement( file_get_contents( $filename ) );
  44. }
  45. }
  46. return $_cb_db_xml;
  47. }
  48. /**
  49.  * Returns all errors logged
  50.  *
  51.  * @param  string|boolean  $implode         False: returns full array, if string: imploding string
  52.  * @param  string|boolean  $detailsImplode  False: no details, otherwise imploding string
  53.  * @return string|array
  54.  */
  55. function getErrors( $implode = "n", $detailsImplode = false ) {
  56. return $this->_sqlUpgrader->getErrors( $implode, $detailsImplode );
  57. }
  58. /**
  59.  * Returns all logs logged
  60.  *
  61.  * @param  string|boolean  $implode         False: returns full array, if string: imploding string
  62.  * @param  string|boolean  $detailsImplode  False: no details, otherwise imploding string
  63.  * @return string|array
  64.  */
  65. function getLogs( $implode = "n", $detailsImplode = false ) {
  66. return $this->_sqlUpgrader->getLogs( $implode, $detailsImplode );
  67. }
  68. /**
  69.  * Checks the comprofiler_fields table and upgrades if needed
  70.  * Backend-use only.
  71.  * @access private
  72.  *
  73.  * @param  string          $tableName
  74.  * @param  boolean         $upgrade    False: only check table, True: upgrades table (depending on $dryRun)
  75.  * @param  boolean         $dryRun     True: doesn't do the modifying queries, but lists them, False: does the job
  76.  * @return string|boolean              Message to display
  77.  */
  78. function checkTable( $tableName, $upgrade = false, $dryRun = false ) {
  79. $xml = $this->_getCbDbXml();
  80. if ( $xml !== null ) {
  81. $db =& $xml->getElementByPath( 'database' );
  82. if ( $db !== false ) {
  83. $table = $db->getChildByNameAttr( 'table', 'name', $tableName );
  84. if ( $table !== false ) {
  85. cbimport( 'cb.sql.upgrader' );
  86. $this->_sqlUpgrader = new CBSQLupgrader( $this->_db, $this->_silentWhenOK );
  87. $this->_sqlUpgrader->setDryRun( $dryRun );
  88. $success = $this->_sqlUpgrader->checkXmlTableDescription( $table, '', $upgrade, null );
  89. /*
  90. var_dump( $success );
  91. echo "<br>nERRORS: " . $this->_sqlUpgrader->getErrors( "<br /><br />nn", "<br />n" );
  92. echo "<br>nLOGS: " . $this->_sqlUpgrader->getLogs( "<br /><br />nn", "<br />n" );
  93. exit;
  94. */
  95. } else {
  96. $success = array( sprintf( 'Error: could not find element table name="%s" in XML file', $tableName ), null );
  97. }
  98. } else {
  99. $success = array( 'Error: could not find element "database" in XML file', null );
  100. }
  101. } else {
  102. $success = array( 'Error: could not find XML file', null );
  103. }
  104. return $success;
  105. }
  106. /**
  107.  * Checks the comprofiler_fields table and upgrades if needed
  108.  * Backend-use only.
  109.  * @access private
  110.  *
  111.  * @param  boolean         $upgrade    False: only check table, True: upgrades table (depending on $dryRun)
  112.  * @param  boolean         $dryRun     True: doesn't do the modifying queries, but lists them, False: does the job
  113.  * @return string                      Message to display
  114.  */
  115. function checkDatabase( $upgrade = false, $dryRun = false ) {
  116. $xml = $this->_getCbDbXml();
  117. if ( $xml !== null ) {
  118. $db =& $xml->getElementByPath( 'database' );
  119. if ( $db ) {
  120. cbimport( 'cb.sql.upgrader' );
  121. $this->_sqlUpgrader = new CBSQLupgrader( $this->_db, $this->_silentWhenOK );
  122. $this->_sqlUpgrader->setDryRun( $dryRun );
  123. $success = $this->_sqlUpgrader->checkXmlDatabaseDescription( $db, '', $upgrade, true );
  124. /*
  125. var_dump( $success );
  126. echo "<br>nERRORS: " . $this->_sqlUpgrader->getErrors( "<br /><br />nn", "<br />n" );
  127. echo "<br>nLOGS: " . $this->_sqlUpgrader->getLogs( "<br /><br />nn", "<br />n" );
  128. exit;
  129. */
  130. } else {
  131. $success = array( 'Error: could not find element database in XML file', null );
  132. }
  133. } else {
  134. $success = array( 'Error: could not find XML file', null );
  135. }
  136. return $success;
  137. }
  138. /**
  139.  * Handles SQL XML for the type of the field (backend use only!)
  140.  * e.g.: array( '#__comprofiler_fields' ), true
  141.  * array( '#__comprofiler', '#__comprofiler_field_values', '#__comprofiler_fields', '#__comprofiler_lists', '#__comprofiler_members', '#__comprofiler_plugin', '#__comprofiler_tabs', '#__comprofiler_userreports', '#__comprofiler_views' ), false
  142.  * $_CB_database->getTableList(), false
  143.  *
  144.  * @param  array  $tablesArray  Array of tableNames: 
  145.  * @return string XML
  146.  */
  147. function _dumpAll( $tablesArray, $withContent ) {
  148. global $_CB_database;
  149. cbimport( 'cb.sql.upgrader' );
  150. $sqlUpgrader = new CBSQLupgrader( $_CB_database );
  151. $sqlUpgrader->setDryRun( true );
  152. $tableXml = $sqlUpgrader->dumpTableToXml( $tablesArray, $withContent );
  153. if ( class_exists( 'DOMDocument' ) ) {
  154. $doc = new DOMDocument( '1.0', 'UTF-8' );
  155. $doc->formatOutput = true;
  156. $domnode = dom_import_simplexml($tableXml);
  157. $domnode = $doc->importNode($domnode, true);
  158. $domnode = $doc->appendChild($domnode);
  159. $text = str_replace( array( '/>', "nn" ), array( ' />', "n" ), $doc->saveXML() );
  160. } else {
  161. $text = $tableXml->asXML();
  162. }
  163. return $text;
  164. }
  165. }
  166. ?>