Documentation TYPO3 par Ameos

class.versions.php

00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
00006 *  All rights reserved
00007 *
00008 *  This script is part of the TYPO3 project. The TYPO3 project is
00009 *  free software; you can redistribute it and/or modify
00010 *  it under the terms of the GNU General Public License as published by
00011 *  the Free Software Foundation; either version 2 of the License, or
00012 *  (at your option) any later version.
00013 *
00014 *  The GNU General Public License can be found at
00015 *  http://www.gnu.org/copyleft/gpl.html.
00016 *  A copy is found in the textfile GPL.txt and important notices to the license
00017 *  from the author is found in LICENSE.txt distributed with these scripts.
00018 *
00019 *
00020 *  This script is distributed in the hope that it will be useful,
00021 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 *  GNU General Public License for more details.
00024 *
00025 *  This copyright notice MUST APPEAR in all copies of the script!
00026 ***************************************************************/
00056 class tx_lowlevel_versions extends tx_lowlevel_cleaner_core {
00057 
00063         function tx_lowlevel_versions() {
00064                 parent::tx_lowlevel_cleaner_core();
00065 
00066                         // Setting up help:
00067                 $this->cli_options[] = array('--echotree level', 'When "level" is set to 1 or higher you will see the page of the page tree outputted as it is traversed. A value of 2 for "level" will show even more information.');
00068                 $this->cli_options[] = array('--pid id', 'Setting start page in page tree. Default is the page tree root, 0 (zero)');
00069                 $this->cli_options[] = array('--depth int', 'Setting traversal depth. 0 (zero) will only analyse start page (see --pid), 1 will traverse one level of subpages etc.');
00070                 
00071                 $this->cli_options[] = array('--flush-live', 'If set, not only published versions from Live workspace are flushed, but ALL versions from Live workspace (which are offline of course)');
00072 
00073                 $this->cli_help['name'] = 'versions -- To find information about versions and workspaces in the system';
00074                 $this->cli_help['description'] = trim('
00075 Traversing page tree and finding versions, categorizing them by various properties.
00076 Published versions from the Live workspace are registered. So are all offline versions from Live workspace in general. Further, versions in non-existing workspaces are found.
00077 
00078 Automatic Repair:
00079 - Deleting (completely) published versions from LIVE workspace OR _all_ offline versions from Live workspace (toogle by --flush-live)
00080 - Resetting workspace for versions where workspace is deleted. (You might want to run this tool again after this operation to clean out those new elements in the Live workspace)
00081 - Deleting unused placeholders
00082 ');
00083 
00084                 $this->cli_help['examples'] = '';
00085         }
00086 
00093         function main() {
00094                 global $TYPO3_DB;
00095 
00096                         // Initialize result array:
00097                 $resultArray = array(
00098                         'message' => $this->cli_help['name'].chr(10).chr(10).$this->cli_help['description'],
00099                         'headers' => array(
00100                                 'versions' => array('All versions','Showing all versions of records found',0),
00101                                 'versions_published' => array('All published versions','This is all records that has been published and can therefore be removed permanently',1),
00102                                 'versions_liveWS' => array('All versions in Live workspace','This is all records that are offline versions in the Live workspace. You may wish to flush these if you only use workspaces for versioning since then you might find lots of versions piling up in the live workspace which have simply been disconnected from the workspace before they were published.',1),
00103                                 'versions_lost_workspace' => array('Versions outside a workspace','Versions that has lost their connection to a workspace in TYPO3.',3),
00104                                 'versions_inside_versioned_page' => array('Versions in versions','Versions inside an already versioned page. Something that is confusing to users and therefore should not happen but is technically possible.',2),
00105                                 'versions_unused_placeholders' => array('Unused placeholder records','Placeholder records which are not used anymore by offline versions.',2)
00106                         ),
00107                         'versions' => array(),
00108                 );
00109 
00110                 $startingPoint = $this->cli_isArg('--pid') ? t3lib_div::intInRange($this->cli_argValue('--pid'),0) : 0;
00111                 $depth = $this->cli_isArg('--depth') ? t3lib_div::intInRange($this->cli_argValue('--depth'),0) : 1000;
00112                 $this->genTree($startingPoint,$depth,(int)$this->cli_argValue('--echotree'));
00113 
00114                 $resultArray['versions'] = $this->recStats['versions'];
00115                 $resultArray['versions_published'] = $this->recStats['versions_published'];
00116                 $resultArray['versions_liveWS'] = $this->recStats['versions_liveWS'];
00117                 $resultArray['versions_lost_workspace'] = $this->recStats['versions_lost_workspace'];
00118                 $resultArray['versions_inside_versioned_page'] = $this->recStats['versions_inside_versioned_page'];
00119 
00120                         // Finding all placeholders with no records attached!
00121                 $resultArray['versions_unused_placeholders'] = array(); 
00122                 foreach($GLOBALS['TCA'] as $table => $cfg)      {
00123                         if ($cfg['ctrl']['versioningWS'])       {
00124                                 $placeHolders = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid,pid',$table,'t3ver_state=1 AND pid>=0'.t3lib_BEfunc::deleteClause($table));
00125                                 foreach($placeHolders as $phrec)        {
00126                                         if (count(t3lib_BEfunc::selectVersionsOfRecord($table, $phrec['uid'], 'uid'))<=1)       {
00127                                                 $resultArray['versions_unused_placeholders'][] = $table.':'.$phrec['uid']; 
00128                                         }
00129                                 }
00130                         }
00131                 }
00132 
00133                 return $resultArray;
00134         }
00135 
00143         function main_autoFix($resultArray)     {
00144 
00145                 $kk = $this->cli_isArg('--flush-live') ? 'versions_liveWS' : 'versions_published';
00146 
00147                         // Putting "pages" table in the bottom:
00148                 if (isset($resultArray[$kk]['pages']))  {
00149                         $_pages = $resultArray[$kk]['pages'];
00150                         unset($resultArray[$kk]['pages']);
00151                         $resultArray[$kk]['pages'] = $_pages;
00152                 }
00153 
00154                         // Traversing records:
00155                 foreach($resultArray[$kk] as $table => $list)   {
00156                         echo 'Flushing published records from table "'.$table.'":'.chr(10);
00157                         foreach($list as $uid)  {
00158                                 echo '  Flushing record "'.$table.':'.$uid.'": ';
00159 
00160                                 if ($bypass = $this->cli_noExecutionCheck($table.':'.$uid))     {
00161                                         echo $bypass;
00162                                 } else {
00163 
00164                                                 // Execute CMD array:
00165                                         $tce = t3lib_div::makeInstance('t3lib_TCEmain');
00166                                         $tce->stripslashes_values = FALSE;
00167                                         $tce->start(array(),array());
00168                                         $tce->deleteEl($table,$uid, TRUE, TRUE);
00169 
00170                                                 // Return errors if any:
00171                                         if (count($tce->errorLog))      {
00172                                                 echo '  ERROR from "TCEmain":'.chr(10).'TCEmain:'.implode(chr(10).'TCEmain:',$tce->errorLog);
00173                                         } else echo 'DONE';
00174                                 }
00175                                 echo chr(10);
00176                         }
00177                 }
00178 
00179                         // Traverse workspace:
00180                 foreach($resultArray['versions_lost_workspace'] as $table => $list)     {
00181                         echo 'Resetting workspace to zero for records from table "'.$table.'":'.chr(10);
00182                         foreach($list as $uid)  {
00183                                 echo '  Flushing record "'.$table.':'.$uid.'": ';
00184                                 if ($bypass = $this->cli_noExecutionCheck($table.':'.$uid))     {
00185                                         echo $bypass;
00186                                 } else {
00187                                         $fields_values = array(
00188                                                 't3ver_wsid' => 0
00189                                         );
00190                                         $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table,'uid='.intval($uid),$fields_values);
00191                                         echo 'DONE';
00192                                 }
00193                                 echo chr(10);
00194                         }
00195                 }
00196                 
00197                         // Delete unused placeholders
00198                 foreach($resultArray['versions_unused_placeholders'] as $recID) {
00199                         list($table,$uid)       = explode(':',$recID);
00200                         echo 'Deleting unused placeholder (soft) "'.$table.':'.$uid.'": ';
00201                         if ($bypass = $this->cli_noExecutionCheck($table.':'.$uid))     {
00202                                 echo $bypass;
00203                         } else {
00204 
00205                                         // Execute CMD array:
00206                                 $tce = t3lib_div::makeInstance('t3lib_TCEmain');
00207                                 $tce->stripslashes_values = FALSE;
00208                                 $tce->start(array(),array());
00209                                 $tce->deleteAction($table, $uid);
00210 
00211                                         // Return errors if any:
00212                                 if (count($tce->errorLog))      {
00213                                         echo '  ERROR from "TCEmain":'.chr(10).'TCEmain:'.implode(chr(10).'TCEmain:',$tce->errorLog);
00214                                 } else echo 'DONE';                     
00215                         }
00216                         echo chr(10);
00217                 }               
00218         }
00219 }
00220 
00221 ?>


Généré par Le spécialiste TYPO3 avec  doxygen 1.4.6