tools_list.php

Go to the documentation of this file.
00001 <?php
00002 
00008 class Tools_List extends oxAdminList
00009 {
00014     protected $_sThisTemplate = 'tools_list.tpl';
00015 
00021     public function performsql()
00022     {
00023         $oAuthUser = oxNew( 'oxuser' );
00024         $oAuthUser->loadAdminUser();
00025         if ( $oAuthUser->oxuser__oxrights->value != "malladmin" ) {
00026             return;
00027         }
00028 
00029         $sUpdateSQL = oxConfig::getParameter("updatesql");
00030         $sUpdateSQLFile = $this->_processFiles();
00031 
00032         if ( $sUpdateSQLFile && strlen( $sUpdateSQLFile)>0) {
00033             if ( isset( $sUpdateSQL) && strlen( $sUpdateSQL))
00034                 $sUpdateSQL .= ";\r\n".$sUpdateSQLFile;
00035             else
00036                 $sUpdateSQL  = $sUpdateSQLFile;
00037         }
00038 
00039         $sUpdateSQL = trim(stripslashes($sUpdateSQL));
00040         $oStr = getStr();
00041         $iLen = $oStr->strlen($sUpdateSQL);
00042         if ( $this->_prepareSQL(trim(stripslashes($sUpdateSQL)), $iLen)) {
00043             $aQueries = $this->aSQLs;
00044             $this->_aViewData["aQueries"] = array();
00045             $aPassedQueries  = array();
00046             $aQAffectedRows  = array();
00047             $aQErrorMessages = array();
00048             $aQErrorNumbers  = array();
00049 
00050             if ( count( $aQueries) > 0) {
00051                 $oDB = oxDb::getDb();
00052                 $iQueriesCounter = 0;
00053                 for ($i=0;$i<count( $aQueries);$i++) {
00054                     $sUpdateSQL = $aQueries[$i];
00055                     $sUpdateSQL = trim( $sUpdateSQL);
00056 
00057                     if ( strlen( $sUpdateSQL)>0) {
00058                         $aPassedQueries[$iQueriesCounter] = nl2br( htmlentities($sUpdateSQL));
00059                         if ( getStr()->strlen( $aPassedQueries[$iQueriesCounter]) > 200)
00060                             $aPassedQueries[$iQueriesCounter] = $oStr->substr( $aPassedQueries[$iQueriesCounter], 0, 200)."...";
00061 
00062                         while ( $sUpdateSQL[ $oStr->strlen( $sUpdateSQL)-1] == ";") {
00063                             $sUpdateSQL = $oStr->substr( $sUpdateSQL, 0, ( $oStr->strlen( $sUpdateSQL)-1));
00064                         }
00065 
00066                         $oDB->execute( $sUpdateSQL);
00067 
00068                         $aQAffectedRows [$iQueriesCounter] = null;
00069                         $aQErrorMessages[$iQueriesCounter] = null;
00070                         $aQErrorNumbers [$iQueriesCounter] = null;
00071                         if ( $iAffectedRows = $oDB->affected_Rows() !== false) {
00072                             $aQAffectedRows[$iQueriesCounter] =  $iAffectedRows;
00073                         } else {
00074                             $aQErrorMessages[$iQueriesCounter] = htmlentities($oDB->errorMsg());
00075                             $aQErrorNumbers[$iQueriesCounter]  = htmlentities($oDB->errorNo());
00076                         }
00077                         $iQueriesCounter++;
00078                     }
00079                 }
00080             }
00081             $this->_aViewData["aQueries"]       = $aPassedQueries;
00082             $this->_aViewData["aAffectedRows"]  = $aQAffectedRows;
00083             $this->_aViewData["aErrorMessages"] = $aQErrorMessages;
00084             $this->_aViewData["aErrorNumbers"]  = $aQErrorNumbers;
00085         }
00086         $this->_iDefEdit = 1;
00087     }
00088 
00093     protected function _processFiles()
00094     {
00095         if ( isset( $_FILES['myfile']['name'])) {
00096             // process all files
00097             while (list($key, $value) = each($_FILES['myfile']['name'])) {
00098                 $aSource = $_FILES['myfile']['tmp_name'];
00099                 $sSource = $aSource[$key];
00100                 $aFiletype = explode( "@", $key);
00101                 $key    = $aFiletype[1];
00102                 $sType  = $aFiletype[0];
00103                 $value = strtolower( $value);
00104                 // add type to name
00105                 $aFilename = explode( ".", $value);
00106 
00107                 //hack?
00108 
00109                 $aBadFiles = array("php", "jsp", "cgi", "cmf", "exe");
00110 
00111                 if (in_array($aFilename[1], $aBadFiles))
00112                     die("We don't play this game, go away");
00113 
00114                 //reading SQL dump file
00115                 if ( $sSource) {
00116                     $rHandle   = fopen( $sSource, "r");
00117                     $sContents = fread( $rHandle, filesize ( $sSource));
00118                     fclose( $rHandle);
00119                     //reading only one SQL dump file
00120                     return $sContents;
00121                 }
00122                 return;
00123             }
00124         }
00125         return;
00126     }
00127 
00136     protected function _prepareSQL($sSQL, $iSQLlen)
00137     {
00138         $sChar = "";
00139         $sStrStart = "";
00140         $blString  = false;
00141         $oStr = getStr();
00142 
00143         //removing "mysqldump" application comments
00144         while ( preg_match("/^\-\-.*\n/", $sSQL))
00145             $sSQL = trim(preg_replace("/^\-\-.*\n/", "", $sSQL));
00146         while ( preg_match("/\n\-\-.*\n/", $sSQL))
00147             $sSQL = trim(preg_replace("/\n\-\-.*\n/", "\n", $sSQL));
00148 
00149         for ( $iPos = 0; $iPos < $iSQLlen; ++$iPos) {
00150             $sChar = $sSQL[$iPos];
00151             if ( $blString) {
00152                 while ( true) {
00153                     $iPos = $oStr->strpos( $sSQL, $sStrStart, $iPos);
00154                     //we are at the end of string ?
00155                     if (!$iPos) {
00156                         $this->aSQLs[] = $sSQL;
00157                         return true;
00158                     } elseif ( $sStrStart == '`' || $sSQL[$iPos-1] != '\\') { //found some query separators
00159                         $blString  = false;
00160                         $sStrStart = "";
00161                         break;
00162                     } else {
00163                         $iNext = 2;
00164                         $blBackslash = false;
00165                         while ( $iPos-$iNext > 0 && $sSQL[$iPos-$iNext] == '\\') {
00166                             $blBackslash = !$blBackslash;
00167                             $iNext++;
00168                         }
00169                         if ( $blBackslash) {
00170                             $blString  = false;
00171                             $sStrStart = "";
00172                             break;
00173                         } else
00174                             $iPos++;
00175                     }
00176                 }
00177             } elseif ( $sChar == ";") { // delimiter found, appending query array
00178                 $this->aSQLs[] = $oStr->substr( $sSQL, 0, $iPos);
00179                 $sSQL = ltrim( $oStr->substr( $sSQL, min( $iPos + 1, $iSQLlen)));
00180                 $iSQLlen = $oStr->strlen( $sSQL);
00181                 if ( $iSQLlen)
00182                     $iPos      = -1;
00183                 else
00184                     return true;
00185             } elseif ( ( $sChar == '"') || ( $sChar == '\'') || ( $sChar == '`')) {
00186                 $blString  = true;
00187                 $sStrStart = $sChar;
00188             } elseif ( $sChar == "#" || ( $sChar == ' ' && $iPos > 1 && $sSQL[$iPos-2] . $sSQL[$iPos-1] == '--')) {  // removing # commented query code
00189                 $iCommStart = (( $sSQL[$iPos] == "#") ? $iPos : $iPos-2);
00190                 $iCommEnd = ($oStr->strpos(' ' . $sSQL, "\012", $iPos+2))
00191                            ? $oStr->strpos(' ' . $sSQL, "\012", $iPos+2)
00192                            : $oStr->strpos(' ' . $sSQL, "\015", $iPos+2);
00193                 if ( !$iCommEnd) {
00194                     if ( $iCommStart > 0)
00195                         $this->aSQLs[] = trim($oStr->substr($sSQL, 0, $iCommStart));
00196                     return true;
00197                 } else {
00198                     $sSQL = $oStr->substr($sSQL, 0, $iCommStart).ltrim($oStr->substr($sSQL, $iCommEnd));
00199                     $iSQLlen = $oStr->strlen($sSQL);
00200                     $iPos--;
00201                 }
00202             } elseif ( 32358 < 32270 && ($sChar == '!' && $iPos > 1  && $sSQL[$iPos-2] . $sSQL[$iPos-1] == '/*'))  // removing comments like /**/
00203                 $sSQL[$iPos] = ' ';
00204         }
00205 
00206         if (!empty($sSQL) && ereg("[^[:space:]]+", $sSQL)) {
00207             $this->aSQLs[] = $sSQL;
00208         }
00209         return true;
00210     }
00211 }

Generated on Wed Apr 22 12:26:30 2009 for OXID eShop CE by  doxygen 1.5.5