[pLog-svn] r5997 - plog/branches/lifetype-1.2
jondaley at devel.lifetype.net
jondaley at devel.lifetype.net
Mon Oct 22 13:36:58 EDT 2007
Author: jondaley
Date: 2007-10-22 13:36:58 -0400 (Mon, 22 Oct 2007)
New Revision: 5997
Removed:
plog/branches/lifetype-1.2/wizard.php
Log:
this isn't needed
Deleted: plog/branches/lifetype-1.2/wizard.php
===================================================================
--- plog/branches/lifetype-1.2/wizard.php 2007-10-22 15:32:27 UTC (rev 5996)
+++ plog/branches/lifetype-1.2/wizard.php 2007-10-22 17:36:58 UTC (rev 5997)
@@ -1,2367 +0,0 @@
-|<?php
-
- if (!defined( "PLOG_CLASS_PATH" )) {
- define( "PLOG_CLASS_PATH", dirname(__FILE__)."/");
- }
-
- set_time_limit (5 * 3600);
-
- //
- // enable this for debugging purposes
- //
- define( "DB_WIZARD_DEBUG", false );
-
- //
- // in case you're having problems with time outs while upgrading (probably too
- // many records) lower this figure
- //
- define( "WIZARD_MAX_RECORDS_PER_STEP", 75 );
-
- //
- // minimum php version required
- //
- define( "MIN_PHP_VERSION", "4.2.0" );
-
- //
- // whether data transformers should fail on error by default
- // It might be convenient to set this to 'false' if we're running
- // the wizard on top of an already updated installation
- //
- define( "DATABASE_DATA_TRANSFORMER_FAIL_ON_ERROR_DEFAULT", true );
-
- // many hosts don't have this enabled and we, for the time being, need it...
- ini_set("arg_seperator.output", "&");
-
- include_once( PLOG_CLASS_PATH."class/bootstrap.php" );
- lt_include( PLOG_CLASS_PATH."class/controller/controller.class.php" );
- lt_include( PLOG_CLASS_PATH."class/template/templateservice.class.php" );
- lt_include( PLOG_CLASS_PATH."class/action/action.class.php" );
- lt_include( PLOG_CLASS_PATH."class/database/db.class.php" );
- lt_include( PLOG_CLASS_PATH."class/template/template.class.php" );
- lt_include( PLOG_CLASS_PATH."class/view/view.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/validator/usernamevalidator.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/validator/emailvalidator.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/validator/passwordvalidator.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/timestamp.class.php" );
- lt_include( PLOG_CLASS_PATH."class/net/http/httpvars.class.php" );
- lt_include( PLOG_CLASS_PATH."class/misc/version.class.php" );
- lt_include( PLOG_CLASS_PATH."class/file/file.class.php" );
- lt_include( PLOG_CLASS_PATH."class/file/finder/filefinder.class.php" );
- lt_include( PLOG_CLASS_PATH."class/gallery/resizers/gddetector.class.php" );
- lt_include( PLOG_CLASS_PATH."class/config/configfilestorage.class.php" );
- lt_include( PLOG_CLASS_PATH."class/data/textfilter.class.php" );
- lt_include( PLOG_CLASS_PATH."class/locale/locales.class.php" );
- lt_include( PLOG_CLASS_PATH."class/locale/localefinder.class.php" );
- lt_include( PLOG_CLASS_PATH."class/template/templatesets/templatesets.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/bloginfo.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/users.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/articlecategories.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/articles.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/mylinkscategories.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/userpermissions.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/blogcategories.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/globalarticlecategories.class.php" );
- lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryalbums.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/permissions.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/userpermissions.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/permission.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/userpermission.class.php" );
- lt_include( PLOG_CLASS_PATH."class/dao/userinfo.class.php" );
- lt_include( PLOG_CLASS_PATH."class/misc/integritychecker.class.php" );
-
- // table schemas
- include( PLOG_CLASS_PATH."install/dbschemas.properties.php" );
- // default configuration values for 1.1
- include( PLOG_CLASS_PATH."install/defaultconfig.properties.php" );
-
- define( "TEMP_FOLDER", "./tmp" );
-
- // maps used to map requests with actions
- $_actionMap["Checks"] = "WizardChecks";
- $_actionMap["Default"] = "WizardChecks";
- $_actionMap["Intro"] = "WizardIntro";
- $_actionMap["Step1"] = "WizardStepOne";
- $_actionMap["Step2"] = "WizardStepTwo";
- $_actionMap["Step3"] = "WizardStepThree";
- $_actionMap["Step4"] = "WizardStepFour";
- $_actionMap["Step5"] = "WizardStepFive";
- $_actionMap["Update1"] = "UpdateStepOne";
- $_actionMap["Update2"] = "UpdateStepTwo";
- $_actionMap["Update3"] = "UpdateStepThree";
- $_actionMap["Fix120"] = "Fix120StepOne";
-
-
- /**
- * Open a connection to the database
- */
- function connectDb( $ignoreError = false , $selectDatabase = true )
- {
- $config = new ConfigFileStorage();
- // open a connection to the database
- //$db = NewADOConnection('mysql');
- $db = PDb::getDriver('mysql');
-
- if ( $selectDatabase ) {
- $res = $db->Connect($config->getValue( "db_host" ), $config->getValue( "db_username" ), $config->getValue( "db_password" ), $config->getValue( "db_database" ), $config->getValue( "db_character_set" ));
- } else {
- $res = $db->Connect($config->getValue( "db_host" ), $config->getValue( "db_username" ), $config->getValue( "db_password" ), null, $config->getValue( "db_character_set" ));
- }
-
- if( DB_WIZARD_DEBUG )
- $db->debug = true;
-
- // return error
- if( $ignoreError )
- return $db;
-
- if( !$res )
- return false;
-
- return $db;
- }
-
- /**
- * Returns the database prefix
- */
- function getDbPrefix()
- {
- $config = new ConfigFileStorage();
- return $config->getValue( "db_prefix" );
- }
-
- /**
- * some useful little functions
- */
- class WizardTools
- {
- /**
- * returns true if plog has already been installed before or
- * false otherwise
- */
- function isNewInstallation()
- {
- $configFile = new ConfigFileStorage();
- // if plog hasn't been installed, this file will have empty settings
- if( $configFile->getValue( "db_host") == "" && $configFile->getValue( "db_username") == "" &&
- $configFile->getValue( "db_database") == "" && $configFile->getValue( "db_prefix" ) == "" &&
- $configFile->getValue( "db_password" ) == "" )
- $isNew = true;
- else
- $isNew = false;
-
- return( $isNew );
- }
-
- /**
- * Clean up the default temporary folder
- */
- function cleanTmpFolder()
- {
- // remove the files recursively, but only files, do not do anything to directories
- File::deleteDir( TEMP_FOLDER, true, true, array(".svn", ".htaccess") );
- }
- }
-
- /**
- * Renders a template file.
- */
- class WizardView extends View
- {
-
- var $_templateName;
-
- function WizardView( $templateName )
- {
- $this->View();
- $this->_templateName = $templateName;
- }
-
- function render()
- {
- // build the file name
- $templateFileName = "wizard/".$this->_templateName.".template";
-
- //$t = new Template( $templateFileName, "" );
- $t = new Smarty();
- $v = new Version();
- $this->_params->setValue( "version", $v->getVersion());
- $this->_params->setValue( "projectPage", $v->getProjectPage());
- $this->_params->setValue( "safeMode", ini_get("safe_mode"));
- $t->assign( $this->_params->getAsArray());
- $t->template_dir = "./templates";
- $t->compile_dir = TEMP_FOLDER;
- $t->cache_dir = TEMP_FOLDER;
- $t->use_sub_dirs = false;
- $t->caching = false;
-
- print $t->fetch( $templateFileName );
- }
- }
-
- class WizardAction extends Action
- {
- function WizardAction( $actionInfo, $request )
- {
- $this->Action( $actionInfo, $request );
- }
- }
-
- class WizardValidator
- {
- var $_desc;
- var $_critical;
- var $_valid;
- var $_solution;
-
- function WizardValidator( $desc = "", $solution = "", $critical = true )
- {
- $this->_desc = $desc;
- $this->_critical = $critical;
- $this->_valid = false;
- $this->_solution = $solution;
- }
-
- function isCritical()
- {
- return( $this->_critical );
- }
-
- function getDesc()
- {
- return( $this->_desc );
- }
-
- function isValid()
- {
- return( $this->_valid );
- }
-
- function getSolution()
- {
- return( $this->_solution );
- }
-
- function validate()
- {
- return( $this->_valid );
- }
- }
-
- class WizardPhpVersionValidator extends WizardValidator
- {
- function WizardPhpVersionValidator( $minVersion = MIN_PHP_VERSION )
- {
- $this->WizardValidator( "Checking if the installed <b>PHP</b> version is at least $minVersion",
- "Please upgrade your version of PHP to $minVersion or newer",
- true );
- $this->_minVersion = $minVersion;
- }
-
- function validate()
- {
- $this->_valid = version_compare( phpversion(), $this->_minVersion ) >= 0;
- return( parent::validate());
- }
- }
-
- class WizardWritableFileValidator extends WizardValidator
- {
- var $_file;
-
- function WizardWritableFileValidator( $file )
- {
- $this->WizardValidator( "Checking if file/folder <b>$file</b> is writable",
- "Please make sure that the file is writable by the web server",
- true );
- $this->_file = $file;
- }
-
- function validate()
- {
- $this->_valid = File::isWritable( $this->_file );
- return( parent::validate());
- }
- }
-
- class WizardSessionFunctionsAvailableValidator extends WizardValidator
- {
- function WizardSessionFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>session</b> functions are available",
- "LifeType requires support for sessions to be part of your PHP installation",
- true );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "session_start" ) &&
- function_exists( "session_destroy" ) &&
- function_exists( "session_cache_limiter" ) &&
- function_exists( "session_name" ) &&
- function_exists( "session_set_cookie_params" ) &&
- function_exists( "session_save_path" );
- return( parent::validate());
- }
- }
-
- class WizardSessionSettingsValidator extends WizardValidator
- {
- function WizardSessionSettingsValidator()
- {
- $this->WizardValidator( "Checking if <b>session.auto_start</b> is disabled",
- "LifeType can only run when session.auto_start is disabled.",
- true );
- }
-
- function validate()
- {
- $this->_valid = (ini_get( "session.auto_start" ) == "0");
- return( parent::validate());
- }
- }
-
- class WizardMySQLFunctionsAvailableValidator extends WizardValidator
- {
- function WizardMySQLFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>MySQL</b> functions are available",
- "LifeType requires support for MySQL to be part of your PHP installation",
- true );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "mysql_select_db" ) &&
- function_exists( "mysql_query" ) &&
- function_exists( "mysql_connect" ) &&
- function_exists( "mysql_fetch_assoc" ) &&
- function_exists( "mysql_num_rows" ) &&
- function_exists( "mysql_free_result" );
- return( parent::validate());
- }
- }
-
- class WizardXmlFunctionsAvailableValidator extends WizardValidator
- {
- function WizardXmlFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>XML</b> functions are available",
- "LifeType requires support for XML to be part of your PHP installation",
- true );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "xml_set_object" ) &&
- function_exists( "xml_set_element_handler" ) &&
- function_exists( "xml_parser_create" ) &&
- function_exists( "xml_parser_set_option" ) &&
- function_exists( "xml_parse" ) &&
- function_exists( "xml_parser_free" );
- return( parent::validate());
- }
- }
-
- class WizardSafeModeValidator extends WizardValidator
- {
- function WizardSafeModeValidator()
- {
- $this->WizardValidator( "Checking if <b>safe mode</b> is disabled",
- "LifeType can run when PHP's safe mode is enabled, but it may cause some problems.",
- false );
- }
-
- function validate()
- {
- $this->_valid = (ini_get( "safe_mode" ) == "");
- return( parent::validate());
- }
- }
-
- class WizardIconvFunctionsAvailableValidator extends WizardValidator
- {
- function WizardIconvFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>iconv</b> functions are available",
- "LifeType requires support for some resource metadata conversion and some LifeType plugins requires support for multi-byte language encoding/decoding.",
- false );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "iconv" );
- return( parent::validate());
- }
- }
-
- class WizardMbstringFunctionsAvailableValidator extends WizardValidator
- {
- function WizardMbstringFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>mbstring</b> functions are available",
- "Some LifeType plugins requires support for multi-byte language encoding/decoding.",
- false );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "mb_convert_encoding" );
- return( parent::validate());
- }
- }
-
- class WizardGdFunctionsAvailableValidator extends WizardValidator
- {
- function WizardGdFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>gd</b> or <b>gd2</b> functions are available",
- "LifeType requires support for generating image thumbnail.",
- false );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "imagecopyresampled" ) &&
- function_exists( "imagecopyresized" );
- return( parent::validate());
- }
- }
-
- class WizardFileUploadsValidator extends WizardValidator
- {
- function WizardFileUploadsValidator()
- {
- $this->WizardValidator( "Checking if <b>file_uploads</b> is enabled",
- "LifeType requires support for uploading resources.",
- true );
- }
-
- function validate()
- {
- $this->_valid = (ini_get( "file_uploads" ) == 1);
- return( parent::validate());
- }
- }
-
- class WizardFileIntegrityValidator extends WizardValidator
- {
- function WizardFileIntegrityValidator()
- {
- $this->WizardValidator( "Checking that all files have been correctly uploaded",
- "will be set later on...",
- false );
- }
-
- function validate()
- {
- include( PLOG_CLASS_PATH."install/files.properties.php");
-
- $result = IntegrityChecker::checkIntegrity(
- $data
- );
-
-
- $this->_valid = ( count( $result ) == 0 );
- if( !$this->_valid ) {
- /* let's modify a private attribute... */
- $fileList = implode( "<br/>", array_keys( $result ));
- $this->_solution = "The current version of the following is not the expected one. Installation can proceed but please make sure that all files were uploaded correctly:"."<br/>".$fileList;
- }
-
- return( parent::validate());
- }
- }
-
- class WizardCtypeFunctionsAvailableValidator extends WizardValidator
- {
- function WizardCtypeFunctionsAvailableValidator()
- {
- $this->WizardValidator( "Checking if <b>ctype</b> functions are available",
- "Some LifeType plugins requires support for variable type validation.",
- false );
- }
-
- function validate()
- {
- $this->_valid = function_exists( "ctype_digit" );
- return( parent::validate());
- }
- }
-
- class WizardChecks extends WizardAction
- {
- function perform()
- {
- // build the array with checks
- $checkGroups['File checks'] = Array(
- "writeConfigFile" => new WizardWritableFileValidator( "config/config.properties.php" ),
- "writeTmpFolder" => new WizardWritableFileValidator( "tmp" ),
- "writeGalleryFolder" => new WizardWritableFileValidator( "gallery" ),
- "fileVersionCheck" => new WizardFileIntegrityValidator()
- );
-
- $checkGroups['PHP version checking'] = Array(
- "php" => new WizardPhpVersionValidator()
- );
-
- $checkGroups['PHP configuration checking'] = Array(
- "sessionSettings" => new WizardSessionSettingsValidator(),
- "safemode" => new WizardSafeModeValidator(),
- "fileUploads" => new WizardFileUploadsValidator()
- );
-
- $checkGroups['PHP functions availability checking'] = Array(
- "sessions" => new WizardSessionFunctionsAvailableValidator(),
- "mysql" => new WizardMySQLFunctionsAvailableValidator(),
- "xml" => new WizardXmlFunctionsAvailableValidator(),
- "iconv" => new WizardIconvFunctionsAvailableValidator(),
- "mbstring" => new WizardMbstringFunctionsAvailableValidator(),
- "gd" => new WizardGdFunctionsAvailableValidator(),
- "ctype" => new WizardCtypeFunctionsAvailableValidator()
- );
-
- // run the checks
- $ok = true;
- foreach( $checkGroups as $checkGroup => $checks ) {
- foreach( $checks as $id => $check ) {
- $valid = $checkGroups[$checkGroup][$id]->validate();
- // if it doesn't validate but it's not critical, then we can proced too
- if( !$checkGroups[$checkGroup][$id]->isCritical())
- $valid = true;
- $ok = ($ok && $valid);
- }
- }
-
- // create the view and pass the results
- $this->_view = new WizardView( "checks" );
- $this->_view->setValue( "ok", $ok );
- $this->_view->setValue( "checkGroups", $checkGroups );
-
- if( WizardTools::isNewInstallation())
- $this->_view->setValue( "mode", "install" );
- else
- $this->_view->setValue( "mode", "update" );
-
- return true;
- }
- }
-
- class WizardPagedAction extends WizardAction
- {
- var $willRefresh;
-
- function WizardPagedAction( $actionInfo, $request )
- {
- $this->WizardAction( $actionInfo, $request );
-
- $this->willRefresh = false;
- }
-
- /**
- * @private
- */
- function getPageFromRequest()
- {
- lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php");
- // get the value from the request
- $page = HttpVars::getRequestValue( "page" );
- // but first of all, validate it
- $val = new IntegerValidator();
- if( !$val->validate( $page ))
- $page = 1;
-
- return $page;
- }
-
- /**
- * @private
- */
- function willRefresh()
- {
- return( $this->willRefresh );
- }
- }
-
- /**
- * Gets the information about the database from the user.
- */
- class WizardIntro extends WizardAction
- {
- function WizardIntro( $actionInfo, $request )
- {
- $this->WizardAction( $actionInfo, $request );
- }
-
- function perform()
- {
- // we can detect whether plog is already installed or not and direct users to the right
- // place
- if( WizardTools::isNewInstallation())
- $this->_view = new WizardView( "intro" );
- else {
- Controller::setForwardAction( "Update1" );
- return false;
- }
-
- $this->setCommonData();
- return true;
- }
- }
-
- /**
- *
- * Saves data to the configuration file
- *
- */
- class WizardStepOne extends WizardAction
- {
-
- var $_dbServer;
- var $_dbUser;
- var $_dbPassword;
- var $_dbName;
- var $_dbPrefix;
- var $_connection;
-
- function WizardStepOne( $actionInfo, $request )
- {
- $this->WizardAction( $actionInfo, $request );
-
- // data validation
- $this->registerFieldValidator( "dbServer", new StringValidator());
- $this->registerFieldValidator( "dbUser", new StringValidator());
- $this->registerFieldValidator( "dbPassword", new StringValidator(), true );
- $this->registerFieldValidator( "dbName", new StringValidator());
- $this->registerFieldValidator( "dbPrefix", new StringValidator(), true );
- $errorView = new WizardView( "intro" );
- $errorView->setErrorMessage( "Some data was incorrect or missing." );
- $this->setValidationErrorView( $errorView );
- }
-
- function perform()
- {
- // fetch the data needed from the request
- $this->_dbServer = $this->_request->getValue( "dbServer" );
- $this->_dbUser = $this->_request->getValue( "dbUser" );
- $this->_dbPassword = $this->_request->getValue( "dbPassword" );
- $this->_dbName = $this->_request->getValue( "dbName" );
- $this->_skipThis = $this->_request->getValue( "skipDbInfo" );
- $this->_dbPrefix = $this->_request->getValue( "dbPrefix", DEFAULT_DB_PREFIX );
-
- // we should now save the data to the configuration file, just before
- // we read it
- $configFile = new ConfigFileStorage();
-
- // we expect everything to be fine
- $errors = false;
-
- // before doing anything, we should check of the configuration file is
- // writable by this script, or else, throw an error and bail out gracefully
- $configFileName = $configFile->getConfigFileName();
- if( !File::exists( $configFileName )) {
- if (! File::touch( $configFileName ) ) {
- $this->_view = new WizardView( "intro" );
- $message = "Could not create the LifeType configuration file $configFileName. Please make sure
- that the file can be created by the user running the webserver. It is needed to
- store the database configuration settings.";
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- } else {
- ConfigFileStorage::createConfigFile( $configFileName );
- }
- }
- if( File::exists( $configFileName ) && !File::isWritable( $configFileName )) {
- $this->_view = new WizardView( "intro" );
- $message = "Please make sure that the file $configFileName can be written by this script during
- the installation process. It is needed to store the database configuration settings. Once the
- installation is complete, please revert the permissions to no writing possible.";
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- }
-
- // continue if everything went fine
- if( !$configFile->saveValue( "db_username", $this->_dbUser ) ||
- !$configFile->saveValue( "db_password", $this->_dbPassword ) ||
- !$configFile->saveValue( "db_host", $this->_dbServer ) ||
- !$configFile->saveValue( "db_database", $this->_dbName ) ||
- !$configFile->saveValue( "db_prefix", $this->_dbPrefix )) {
- $errors = true;
- }
-
- if( $errors ) {
- $message = "Could not save values to the configuration file. Please make sure it is available and
- that has write permissions for the user under your web server is running.";
- $this->_view = new WizardView( "intro" );
- $this->_view->setErrorMessage( $message );
-
- return( false );
- }
- else {
- $connectionEsablished = false;
-
- $this->_connection = @mysql_connect( $this->_dbServer, $this->_dbUser, $this->_dbPassword );
- if( $this->_connection ) {
- $connectionEsablished = true;
- } else {
- $connectionEsablished = false;
- $message = "There was an error connecting to the database. Please check your settings.";
- }
-
- if ( !$connectionEsablished ) {
- $this->_view = new WizardView( "step1" );
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- } else {
- $this->_view = new WizardView( "step1" );
- $availableCharacterSets = $this->getAvailableCharacterSets();
- $defaultCharacterSet = $this->getDatabaseCharacterSet();
- $createDatabase = false;
- if( empty( $defaultCharacterSet ) )
- {
- $defaultCharacterSet = $this->getServerCharacterSet();
- $createDatabase = true;
- }
- $this->_view->setValue( "availableCharacterSets", $availableCharacterSets );
- $this->_view->setValue( "defaultCharacterSet", $defaultCharacterSet );
- $this->_view->setValue( "createDatabase", $createDatabase );
- // now we better read the information from the config file to make sure that
- // it has been correctly saved
- $this->setCommonData( true );
- return true;
- }
- }
- }
-
- function getAvailableCharacterSets()
- {
- // check mysql version first. Version lower than 4.1 doesn't support utf8
- $serverVersion = mysql_get_server_info( $this->_connection );
- $version = explode( '.', $serverVersion );
- if ( $version[0] < 4 ) return false;
- if ( ( $version[0] == 4 ) && ( $version[1] == 0 ) ) return false;
-
- // check if utf8 support was compiled in
- $result = mysql_query( "SHOW CHARACTER SET", $this->_connection );
- if( $result )
- {
- if( mysql_num_rows($result) > 0 ) {
- // iterate through resultset
- $availableCharacterSets = array();
- while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) )
- {
- array_push( $availableCharacterSets, $row['Charset'] );
- }
- return $availableCharacterSets;
- }
- }
- return false;
- }
-
- function getDatabaseCharacterSet()
- {
- if( !@mysql_select_db( $this->_dbName, $this->_connection ) ) {
- return false;
- }
-
- // We use a SHOW CREATE DATABASE command to show the original
- // SQL character set when DB was created.
- $result = mysql_query( "SHOW CREATE DATABASE `".$this->_dbName."`", $this->_connection );
- if( $result )
- {
- if( mysql_num_rows( $result ) < 0 ) {
- // The specified db name is wrong!
- return false;
- }
- $dbInfo = mysql_fetch_row( $result );
- $pattern = '/40100 DEFAULT CHARACTER SET (\w+) /';
- if( ( preg_match( $pattern, $dbInfo[1], $match ) > 0 ) ) {
- return $match[1];
- }
- }
- return false;
- }
-
- function getServerCharacterSet(){
- // We use a SHOW CREATE DATABASE command to show the original
- // SQL character set when DB was created.
- $result = mysql_query( "SHOW VARIABLES LIKE 'character_set_server'", $this->_connection );
- if( $result )
- {
- if( mysql_num_rows( $result ) > 0 ) {
- $row = mysql_fetch_array( $result, MYSQL_ASSOC );
- return $row['Value'];
- }
- }
- return false;
- }
- }
-
- /**
- *
- * Second step where we connect to the database and create the tables.
- *
- */
- class WizardStepTwo extends WizardAction
- {
-
- var $_db;
- var $_database;
- var $_dbCharacterSet;
- var $_createDatabase;
-
- function setDbConfigValues( &$view )
- {
- $configFile = new ConfigFileStorage();
- $configFile->reload();
- $view->setValue( "dbUser", $configFile->getValue( "db_username" ));
- $view->setValue( "dbPassword", $configFile->getValue( "db_password" ));
- $view->setValue( "dbServer", $configFile->getValue( "db_host" ));
- $view->setValue( "dbName", $configFile->getValue( "db_database" ));
- $view->setValue( "dbPrefix", $configFile->getValue( "db_prefix" ));
- $view->setValue( "dbCharacterSet", $configFile->getValue( "db_character_set" ));
- return true;
- }
-
- function perform()
- {
- global $Tables;
- global $Inserts;
-
- $this->_dbCharacterSet = $this->_request->getValue( "dbCharacterSet" );
- $configFile = new ConfigFileStorage();
- $configFileName = $configFile->getConfigFileName();
-
- if( File::exists( $configFileName ) && !File::isWritable( $configFileName )) {
- $this->_view = new WizardView( "step1" );
- $message = "Please make sure that the file $configFileName can be written by this script during
- the installation process. It is needed to store the database configuration settings. Once the
- installation is complete, please revert the permissions to no writing possible.";
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- }
-
- // continue if everything went fine
- if( !$configFile->saveValue( "db_character_set", $this->_dbCharacterSet ) ) {
- $message = "Could not save values to the configuration file. Please make sure it is available and
- that has write permissions for the user under your web server is running.";
- $this->_view = new WizardView( "step1" );
- $this->_view->setErrorMessage( $message );
-
- return false;
- }
-
- $createDb = $this->_request->getValue( "createDatabase" );
- $message = '';
-
- // only check for errors in case the database table should already exist!
- if( !$createDb ) {
- $connectionEsablished = false;
-
- // Lets check the 'everything is fine' case first..
- $this->_db = connectDb();
- if( $this->_db ) {
- $connectionEsablished = true;
- } else {
- $connectionEsablished = false;
- $message = "There was an error selecting the database. Please verify the database was already created or check the 'Create database' checkbox.";
- }
-
- // We were unable to connect to the db and select the right db.. lets try
- // just to connect.. maybe the database needs to be created (even though the
- // user did not check the appropriate box).
- if ( !$connectionEsablished ) {
- $this->_db = connectDb( true, false );
- if( !$this->_db ) {
- $message = "There was an error connecting to the database. Please check your settings.";
- }
- }
-
- if ( !$connectionEsablished ) {
- $this->_view = new WizardView( "step1" );
- $this->setDbConfigValues( $this->_view );
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- }
- }
-
- $config = new ConfigFileStorage();
- $this->_database = $config->getValue( "db_database" );
- $this->_dbPrefix = $config->getValue( "db_prefix" );
-
- // create the database
- if( $createDb ) {
- $this->_db = connectDb( false, false );
- if( !$this->_db ) {
- $this->_view = new WizardView( "step1" );
- $this->setDbConfigValues( $this->_view );
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- }
- if( !$this->_db->Execute( "CREATE DATABASE ".$this->_database )) {
- $message = "Error creating the database: ".$this->_db->ErrorMsg();
- $message .= "<br/><br/>If the database already exists, go back to Step 2 and use a new database name.";
- $this->_view = new WizardView( "step1" );
- $this->setDbConfigValues( $this->_view );
- $this->_view->setErrorMessage( $message );
- $this->setCommonData( true );
- return false;
- } else {
- $message = "Database created successfully.<br/>";
- }
- }
-
- // reconnect using the new database.
- $config = new ConfigFileStorage();
- $this->_db->Connect( $config->getValue( "db_host" ),
- $config->getValue( "db_username" ),
- $config->getValue( "db_password" ),
- $config->getValue( "db_database" ));
-
- // create a data dictionary to give us the right sql code needed to create the tables
- $dict = NewPDbDataDictionary( $this->_db );
-
- // create the tables
- $errors = false;
-
- foreach( $Tables as $name => $table ) {
- $upperName = $dict->upperName;
- $tableSchema = $table["schema"];
- if ( isset( $table["options"] ) )
- {
- $tableOptions = $table["options"];
- $options = array ( $upperName => $tableOptions );
- } else {
- $options = array ();
- }
- $sqlarray = $dict->CreateTableSQL( $this->_dbPrefix.$name, $tableSchema, $options );
-
- // each table may need more than one sql query because of indexes, triggers, etc...
- $ok = true;
- foreach( $sqlarray as $sql ) {
- $ok = ( $ok && $this->_db->Execute( $sql ));
- }
-
- if( $ok )
- $message .= "Table <strong>$name</strong> created successfully.<br/>";
- else {
- $message .= "Error creating table $name: ".$this->_db->ErrorMsg()."<br/>";
- $errors = true;
- }
- }
-
- if( $errors ) {
- $message = "There was an error creating the tables in the database. Please make sure that the user chosen to connect to the database has enough permissions to create tables.<br/><br/>$message";
- $this->_view = new WizardView( "step1" );
- $this->_view->setErrorMessage( $message );
- $this->setDbConfigValues( $this->_view );
- $this->setCommonData();
- return false;
- }
-
- // try to guess the url where plog is running
- $httpProtocol = (array_key_exists("HTTPS", $_SERVER) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://";
- $httpHost = $_SERVER["HTTP_HOST"];
- $requestUrl = $_SERVER["REQUEST_URI"];
- $requestUrl = str_replace( "/wizard.php", "", $requestUrl );
- $plogUrl = $httpProtocol.$httpHost.$requestUrl;
-
- // Find some of the tools we are going to need (last one is for os x, with fink installed)
- // TBD: support for Windows specific directories
- $folders = Array( "/bin/", "/usr/bin/", "/usr/local/bin/", "/sw/bin/" );
- $finder = new FileFinder();
- $pathToUnzip = $finder->findBinary( "unzip", $folders );
- $pathToTar = $finder->findBinary( "tar", $folders);
- $pathToGzip = $finder->findBinary( "gzip", $folders);
- $pathToBzip2 = $finder->findBinary( "bzip2", $folders);
- $pathToConvert = $finder->findBinary( "convert", $folders);
-
- // and execute some insert's
- foreach( $Inserts as $insert ) {
- $query = str_replace( "{dbprefix}", $this->_dbPrefix, $insert );
- $query = str_replace( "{plog_base_url}", $plogUrl, $query );
- // replace also the placeholders for the paths to the tools
- $query = str_replace( "{path_to_tar}", $pathToTar, $query );
- $query = str_replace( "{path_to_unzip}", $pathToUnzip, $query );
- $query = str_replace( "{path_to_bz2}", $pathToBzip2, $query );
- $query = str_replace( "{path_to_gzip}", $pathToGzip, $query );
- $query = str_replace( "{path_to_convert}", $pathToConvert, $query );
- $query = str_replace( "{path_to_convert}", $pathToConvert, $query );
- if( !$this->_db->Execute( $query )) {
- $message .= "Error executing code: ".$this->_db->ErrorMsg()."<br/>";
- $errors = true;
- }
- }
-
- //
- // show some information regarding the helper tools we're going to need
- // and wether they were found or not
- //
- $message .= "<br/><b>-- Helper tools --</b><br/>";
- if( $pathToTar == "" )
- $message .= "The helper tool 'tar' was not found<br/>";
- else
- $message .= "The helper tool 'tar' was found in $pathToTar<br/>";
- if( $pathToGzip == "" )
- $message .= "The helper tool 'gzip' was not found<br/>";
- else
- $message .= "The helper tool 'gzip' was found in $pathToGzip<br/>";
- if( $pathToUnzip == "" )
- $message .= "The helper tool 'unzip' was not found<br/>";
- else
- $message .= "The helper tool 'unzip' was found in $pathToUnzip<br/>";
- if( $pathToBzip2 == "" )
- $message .= "The helper tool 'bzip2' was not found<br/>";
- else
- $message .= "The helper tool 'bzip2' was found in $pathToTar<br/>";
- if( $pathToConvert == "" )
- $message .= "The helper tool 'convert' (from the ImageMagick package) was not found<br/>";
- else
- $message .= "The helper tool 'convert' (from the ImageMagick package) was found in $pathToConvert<br/>";
-
- // Scan for locales
- $locales = new Locales();
- // find all the new locales that we have not yet stored
- $f = new LocaleFinder();
- $newLocaleCodes = $f->find();
-
- foreach( $newLocaleCodes as $newLocaleCode ) {
- $res = $locales->addLocale( $newLocaleCode );
- }
-
- // load the core permissions
- include( PLOG_CLASS_PATH."install/corepermissions.properties.php" );
-
- // process permissions
- $total = 0;
- foreach( $permissions as $perm ) {
- // check if it already exists
- $query = "SELECT * FROM ".Db::getPrefix()."permissions WHERE permission = '".$perm[0]."'";
- $result = $this->_db->Execute( $query );
- if( !$result || $result->RowCount() < 1 ) {
- // permission needs to be added
- $corePerm = ( $perm[2] == true ? 1 : 0 );
- $adminOnly = ( $perm[3] == true ? 1 : 0 );
-
- $query = "INSERT INTO ".Db::getPrefix()."permissions (permission,description,core_perm,admin_only) ".
- "VALUES ('".$perm[0]."','".$perm[1]."','".$corePerm."','".$adminOnly."')";
-
- $this->_db->Execute( $query );
- $total++;
- }
- }
-
- // show some feedback
- if( $errors ) {
- $this->_view = new WizardView( "step1" );
- $this->setDbConfigValues( $this->_view );
- $message = "There was an error initializing some of the tables. Please make sure that the user chosen to connect to the database has enough permissions to add records to the database.<br/><br/>$message";
- $this->_view->setErrorMessage( $message );
- $this->setCommonData();
- }
- else {
- $this->_view = new WizardView( "step2" );
- $this->_view->setValue( "message", $message );
- }
- }
- }
-
- /**
- *
- * this action only shows some feedback
- *
- */
- class WizardStepThree extends WizardAction
- {
- function perform()
- {
- $this->_view = new WizardView( "step3" );
- $this->setCommonData();
- }
- }
-
- /**
- *
- * Create the first user in the database
- *
- */
- class WizardStepFour extends WizardAction
- {
-
- var $_userName;
- var $_userPassword;
- var $_confirmPassword;
- var $_userEmail;
- var $_userFullName;
-
- function WizardStepFour( $actionInfo, $request )
- {
- $this->WizardAction( $actionInfo, $request );
-
- $this->registerFieldValidator( "userName", new UsernameValidator());
- $this->registerFieldValidator( "userPassword", new PasswordValidator());
- $this->registerFieldValidator( "userPasswordCheck", new PasswordValidator());
- $this->registerFieldValidator( "userEmail", new EmailValidator());
- $this->registerField( "userFullName" );
- $view = new WizardView( "step3" );
- $view->setErrorMessage( "Some data is missing or incorrect" );
- $this->setValidationErrorView( $view );
- }
-
- // creates the user
- function perform()
- {
- $this->_userName = $this->_request->getValue( "userName" );
- $this->_userPassword = $this->_request->getValue( "userPassword" );
- $this->_confirmPassword = $this->_request->getValue( "userPasswordCheck" );
- $this->_userEmail = $this->_request->getValue( "userEmail" );
- $this->_userFullName = $this->_request->getValue( "userFullName" );
-
- $db = connectDb();
-
- if( !$db ) {
- $this->_view = new WizardView( "step3" );
- $this->_view->setErrorMessage( "There was an error connecting to the database. Please check your settings." );
- $this->setCommonData();
- return false;
- }
-
- if( $this->_confirmPassword != $this->_userPassword ) {
- $this->_view = new WizardView( "step3" );
- $this->_form->setFieldValidationStatus( "userPasswordCheck", false );
- $this->setCommonData( true );
- return false;
- }
-
- $dbPrefix = Db::getPrefix();
-
- $users = new Users();
- $user = new UserInfo( $this->_userName,
- $this->_userPassword,
- $this->_userEmail,
- "",
- $this->_userFullName);
- // set the user as an administrator
- $user->setSiteAdmin( true );
- // and add this record to the db
- $userId = $users->addUser( $user );
- if( !$userId ) {
- $this->_view = new WizardView( "step3" );
- $db =& Db::getDb();
- $message = "There was an error adding the user. Make sure that the user does not already exist in the database (".$db->ErrorMsg().")";
- $this->_view->setErrorMessage( $message );
- $this->setCommonData();
- return false;
- }
-
- // since this user is an administrator, he must be granted all the administrator
- // permissions available
- $perms = new Permissions();
- $userPerms = new UserPermissions();
- foreach( $perms->getAllPermissions() as $perm ) {
- if( $perm->isAdminOnlyPermission()) {
- // if it's an admin permission, add it
- $p = new UserPermission( $userId, 0, $perm->getId());
- $userPerms->grantPermission( $p );
- //print("granting permission: ".$perm->getName()."<br/>");
- }
- }
-
- $this->_view = new Wizardview( "step4" );
- $this->_view->setValue( "ownerid", $userId );
- $this->_view->setValue( "siteLocales", Locales::getLocales());
- $this->_view->setValue( "defaultLocale", Locales::getDefaultLocale());
- $ts = new TemplateSets();
- $this->_view->setValue( "siteTemplates", $ts->getGlobalTemplateSets());
- $this->setCommonData();
- return true;
- }
-
- }
-
- class WizardStepFive extends WizardAction
- {
-
- var $_blogName;
- var $_ownerId;
- var $_blogProperties;
-
- function WizardStepFive( $actionInfo, $request )
- {
- $this->WizardAction( $actionInfo, $request );
-
- $this->registerFieldValidator( "blogName", new StringValidator());
- $this->registerFieldValidator( "ownerid", new IntegerValidator());
- $this->registerFieldValidator( "blogTemplate", new StringValidator());
- $this->registerFieldValidator( "blogLocale", new StringValidator());
- $view = new WizardView( "step4" );
- $view->setErrorMessage( "Some data is missing or incorrect" );
- $view->setValue( "siteLocales", Locales::getLocales());
- $view->setValue( "defaultLocale", Locales::getDefaultLocale());
- $ts = new TemplateSets();
- $view->setValue( "siteTemplates", $ts->getGlobalTemplateSets());
- $this->setValidationErrorView( $view );
- }
-
- function perform()
- {
- // Before we add a new blog, we need to add blog category and global article category first
- // add blog category
- $blogCategories = new BlogCategories();
- $blogCategory = new BlogCategory( "General", "General" );
- $blogCategoryId = $blogCategories->addBlogCategory( $blogCategory );
-
- // add global article category
- $globalArticleCategories = new GlobalArticleCategories();
- $globalArticleCategory = new GlobalArticleCategory( "General", "General" );
- $globalArticleCategoryId = $globalArticleCategories->addGlobalArticleCategory( $globalArticleCategory );
-
- // retrieve the values from the view
- $this->_blogName = $this->_request->getValue( "blogName" );
- $this->_ownerId = $this->_request->getValue( "ownerid" );
- $this->_blogProperties = $this->_request->getValue( "properties" );
- $this->_blogTemplate = $this->_request->getValue( "blogTemplate" );
- $this->_blogLocale = $this->_request->getValue( "blogLocale" );
-
- // configure the blog
- $blogs = new Blogs();
- $blog = new BlogInfo( $this->_blogName, $this->_ownerId, "", "" );
- // set the default BlogCategory id to blog
- $blog->setBlogCategoryId( $blogCategoryId );
- $blog->setProperties( $this->_blogProperties );
- $blog->setStatus( BLOG_STATUS_ACTIVE );
- $blogSettings = $blog->getSettings();
- $blogSettings->setValue( "locale", $this->_blogLocale );
- $blogSettings->setValue( "template", $this->_blogTemplate );
- $blog->setSettings( $blogSettings );
-
- // and now save it to the database
- $newblogId = $blogs->addBlog( $blog );
- if( !$newblogId ) {
- $this->_view = new WizardView( "step4" );
- $this->_view->setValue( "siteLocales", Locales::getLocales());
- $ts = new TemplateSets();
- $this->_view->setValue( "siteTemplates", $ts->getGlobalTemplateSets());
- $this->_view->setErrorMessage( "There was an error creating the new blog" );
- $this->setCommonData( true );
- return false;
- }
-
- // if the blog was created, we can add some basic information
- // add a category
- $articleCategories = new ArticleCategories();
- $articleCategory = new ArticleCategory( "General", "General", $newblogId, true );
- $catId = $articleCategories->addArticleCategory( $articleCategory );
-
- // load the right locale
- $locale =& Locales::getLocale( $this->_blogLocale );
- // and load the right text
- $articleTopic = $locale->tr( "register_default_article_topic" );
- $articleText = $locale->tr( "register_default_article_text" );
- $article = new Article( $articleTopic, $articleText, Array( $catId ), $this->_ownerId, $newblogId, POST_STATUS_PUBLISHED, 0, Array(), "welcome" );
- // set the default ArticleGlobalCategory id to article
- $article->setGlobalCategoryId( $globalArticleCategoryId );
- // set the current time to article
- $t = new Timestamp();
- $article->setDateObject( $t );
- $articles = new Articles();
- $articles->addArticle( $article );
-
- // add a new first album so that users can start uploading stuff right away
- $t = new Timestamp();
- $album = new GalleryAlbum( $newblogId,
- "General",
- "General",
- GALLERY_RESOURCE_PREVIEW_AVAILABLE,
- 0,
- $t->getTimestamp(),
- Array(),
- true );
- $albums = new GalleryAlbums();
- $albums->addAlbum( $album );
-
- // add a new default mylinkscategory
- $linksCategory = new MyLinksCategory( "General", $newblogId );
- $linksCategories = new MyLinksCategories();
- $linksCategories->addMyLinksCategory( $linksCategory );
-
- // save a few things in the default configuration
- $config =& Config::getConfig();
- // default blog id
- $config->saveValue( "default_blog_id", (int)$newblogId );
- // default locale
- $config->saveValue( "default_locale", $this->_blogLocale );
- // and finally, the default template
- $config->saveValue( "default_template", $this->_blogTemplate );
-
- //
- // detect wether we have GD available and set the blog to use it
- //
- if( GdDetector::detectGd()) {
- $config->saveValue( "thumbnail_method", "gd" );
- $message = "GD has been detected and set as the backend for dealing with images.";
- }
- else {
- $pathToConvert = $config->getValue( "path_to_convert" );
- if( $pathToConvert ) {
- $config->saveValue( "thumbnail_method", "imagemagick" );
- $message = "ImageMagick has been detected and set as the backend for dealing with images.";
- }
- else {
- // nothing was found, so we'll have to do away with the 'null' resizer...
- $config->saveValue( "thumbnail_method", "null" );
- $message = "Neither GD nor ImageMagick have been detected in this host so it will not be possible to generate thumbnails from images.";
- }
- }
-
- // clean the data cache to avoid problems when we're done
- lt_include( PLOG_CLASS_PATH."class/cache/cachemanager.class.php" );
- $cache =& CacheManager::getCache();
- $cache->clearCache();
-
- WizardTools::cleanTmpFolder();
-
- $this->_view = new WizardView( "step5" );
- $this->_view->setValue( "message", $message );
- return true;
- }
- }
-
- class UpdateStepOne extends WizardAction
- {
-
- function perform()
- {
- $this->_view = new WizardView( "update1" );
- WizardStepTwo::setDbConfigValues( $this->_view );
- $this->setCommonData();
- }
- }
-
- class UpdateStepTwo extends WizardAction
- {
- function perform()
- {
- lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
- $config =& Config::getConfig();
- $resourcesNamingRule = $config->getValue( "resources_naming_rule", "original_file_name" );
-
- $this->_view = new WizardView( "update2" );
- $this->_view->setValue( "resourcesNamingRule", $resourcesNamingRule );
- $this->setCommonData();
- }
- }
-
- /**
- * Generic class that performs data updates on the database
- */
- class DatabaseDataTransformer extends Model
- {
- /**
- * @public
- * Public fields, may be accessed by other classes
- */
- var $updatedRecords;
- var $message;
- var $errorRecords;
- var $notModifiedRecords;
- var $failOnError;
- var $page;
- var $itemsPerPage;
- var $dbPrefix;
-
- function DatabaseDataTransformer( $page = -1, $itemsPerPage = WIZARD_MAX_RECORDS_PER_STEP )
- {
- $this->Model();
-
- $this->updatedRecords = 0;
- $this->errorRecords = 0;
- $this->notModifiedRecords = 0;
- $this->addedRecords = 0;
- $this->deletedRecords = 0;
- $this->failOnError = DATABASE_DATA_TRANSFORMER_FAIL_ON_ERROR_DEFAULT;
- $this->message = "";
-
- $this->page = $page;
- $this->itemsPerPage = $itemsPerPage;
-
- $this->dbPrefix = $this->getPrefix();
- }
-
- /**
- * Rerforms the transformation. Returns true if the step was successful or false otherwise.
- * Upon finalization, please check the $message string to get more information. Use the $updatedRecords,
- * $errorRecords, $notModifiedRecords, $addedRecords and $deletedRecords for some figures regarding the
- * previous step
- */
- function perform()
- {
- // must be implemented by child classes
- return true;
- }
-
- /**
- * Returns true if there is no more data for this transformer to upgrade, or false otherwise
- *
- * @return True if ready or false if not
- */
- function isComplete()
- {
- return( $this->getNumSteps() <= $this->page );
- }
-
- /**
- * returns the number of steps needed to process this data
- */
- function getNumSteps( $table = "" )
- {
- // if there is a table name, we can take a shortcut or else we expect child
- // classes to reimplement this method
- if( $table ) {
- $numItems = $this->getNumItems( $this->getPrefix().$table );
-
- $numSteps = ceil( $numItems / $this->itemsPerPage );
- }
- else {
- $numSteps = 0;
- }
-
- return( $numSteps );
- }
-
- /**
- * returns the total number of records processed so far based on the current page and the
- * number of items per page
- */
- function getTotalProcessedRecords()
- {
- return( $this->page * $this->itemsPerPage );
- }
-
- /**
- * returns an approximate percentage of records processed so far
- */
- function getPercentProcessed()
- {
- $processed = $this->getTotalProcessedRecords();
- return((int)($processed / ( $this->getNumSteps() * $this->itemsPerPage ) * 100 ));
- }
- }
-
- /**
- * This step takes care of transforming the database schema, one
- * table at a time.
- */
- class DatabaseSchemaDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- global $Tables;
- return( count( $Tables ) - 1);
- }
-
- function perform()
- {
- global $Tables;
-
- $tablesArray = array_keys( $Tables );
- $curTable = $tablesArray[$this->page-1];
-
- $db =& Db::getDb();
- $dict = NewPDbDataDictionary( $db );
- $errors = false;
-
- $this->message = "Performing changes to the dabase schema, please wait (step %s of %s)<br/>";
-
- $errorMessage = "";
- $table_errors = false;
- $upperName = $dict->upperName;
- $tableSchema = $Tables[$curTable]["schema"];
- if ( isset( $Tables[$curTable]["options"] )) {
- $tableOptions = $Tables[$curTable]["options"];
- $options = array ( $upperName => $tableOptions );
- }
- else {
- $options = array ();
- }
-
- // generate the code with the changes for the table
- $sqlarray = $dict->ChangeTableSQL( $this->getPrefix().$curTable, $tableSchema, $options );
-
- foreach( $sqlarray as $sql ) {
- // and run the query
- //print( "sql: ".$sql."<br/>" );
- if( !$this->Execute( $sql )) {
- $table_errors = true;
- $errors = true;
- $errorMessage .= $this->_db->ErrorMsg()."<br/>";
- }
- }
-
- if( !$table_errors ) {
- $this->message .= "Changes to table <strong>$curTable</strong> executed successfully.<br/>";
- $result = true;
- }
- else {
- $this->message .= "Error modifying table $curTable: ".$errorMessage;
- $result = false;
- }
-
- return( $result );
- }
- }
-
- /**
- * Processes all users and grants the appropriate permissions
- */
- class UserPermissionsDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( parent::getNumSteps( "tmp_users_permissions" ));
- }
-
- function perform()
- {
- $this->message = "Updating user permissions (step %s of %s)<br/>";
-
- $query3 = "SELECT * FROM ".Db::getPrefix()."tmp_users_permissions";
- $res3 = $this->Execute( $query3, $this->page, $this->itemsPerPage );
- if( $res3->RecordCount() == 0 ) {
- $this->message .= "No more records to process";
- return( true );
- }
-
- $permissions = new Permissions();
- $userPermissions = new UserPermissions();
- $allPerms = $permissions->getAllPermissions();
- $blogOwnerOnlyPerms = Array( "update_blog",
- "add_blog_user",
- "update_blog_user",
- "view_blog_users",
- "view_blog_stats",
- "add_blog_template",
- "view_blog_templates",
- "view_blog_stats" );
-
- while( $row = $res3->FetchRow()) {
- // grant all the non-admin permissions so that users can still access the blogs to where they still had permissions
- if( $row["permission_id"] != 3) {
- foreach( $allPerms as $perm ) {
- if( !$perm->isAdminOnlyPermission() && !in_array( $perm->getName(), $blogOwnerOnlyPerms )) {
- //print( "granting perm: ".$perm->getName()." - user: ".$row["user_id"]." - blog id: ".$row["blog_id"]."<br/>");
- $perm = new UserPermission( $row["user_id"], $row["blog_id"], $perm->getId());
- $userPermissions->grantPermission( $perm );
- }
- }
- }
- }
-
- $this->message .= "{$this->updatedRecords} users updated (".$this->getPercentProcessed()."%%)<br/>";
-
- $this->Execute("DROP TABLE ".Db::getPrefix()."tmp_users_permissions");
-
- return true;
- }
- }
-
- class PermissionLoader extends DatabaseDataTransformer
- {
-
- //
- // load the new list of permissions
- //
- function getNumSteps()
- {
- return( 0 );
- }
-
- function perform()
- {
- // initial message, no errors yet
- $this->message = "Loading new permissions (step %s of %s)<br/>";
- $errors = false;
-
- // load the core permissions
- include( PLOG_CLASS_PATH."install/corepermissions.properties.php" );
-
- // process permissions
- $total = 0;
- foreach( $permissions as $perm ) {
- // check if it already exists
- $query = "SELECT * FROM ".$this->dbPrefix."permissions WHERE permission = '".$perm[0]."'";
- $result = $this->Execute( $query );
- if( !$result || $result->RowCount() < 1 ) {
- // permission needs to be added
- $corePerm = ( $perm[2] == true ? 1 : 0 );
- $adminOnly = ( $perm[3] == true ? 1 : 0 );
- $query = "INSERT INTO ".$this->dbPrefix."permissions (permission,description,core_perm,admin_only) ".
- "VALUES ('".$perm[0]."','".$perm[1]."','".$corePerm."','".$adminOnly."')";
- $this->_db->Execute( $query );
- $total++;
- }
- }
-
- //
- // prepare the users_permissions table for the next step
- //
-
- // make sure we are starting with an empty table
- $this->Execute("DELETE FROM ".Db::getPrefix()."tmp_users_permissions");
-
- if( !$this->Execute( "INSERT INTO ".$this->dbPrefix."tmp_users_permissions SELECT * FROM ".$this->dbPrefix."users_permissions WHERE blog_id != 0 AND permission_id != 1" )) {
- $this->message .= "Error preparing the users_permissions table for transformation";
- $errors = true;
- }
- else {
- $this->Execute( "DELETE FROM ".$this->dbPrefix."users_permissions" );
- $this->message .= count($permissions)." permissions successfully loaded";
- $errors = false;
- }
-
- return( !$errors );
- }
- }
-
- class ConfigDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( 0 );
- }
-
- function perform()
- {
- global $Inserts;
-
- $this->message = "Adding new configuration parameters (step %s of %s)<br/>";
- $errors = false;
-
- // Find some of the tools we are going to need (last one is for os x, with fink installed), this will be needed later on
- $folders = Array( "/bin/", "/usr/bin/", "/usr/local/bin/", "/sw/bin/" );
- $finder = new FileFinder();
- $pathToUnzip = $finder->findBinary( "unzip", $folders );
- $pathToTar = $finder->findBinary( "tar", $folders);
- $pathToGzip = $finder->findBinary( "gzip", $folders);
- $pathToBzip2 = $finder->findBinary( "bzip2", $folders);
- $pathToConvert = $finder->findBinary( "convert", $folders);
-
- // check the configuration and add the new configuration settings that were added for 1.2
- foreach( $Inserts as $key => $insert ) {
- $checkKeyQuery = "SELECT * FROM ".$this->dbPrefix."config WHERE config_key ='".$key."';";
- $result = $this->Execute($checkKeyQuery);
- if(!$result){
- $this->message .= "Error executing code: ".$this->_db->ErrorMsg()."<br/>";
- $errors = true;
- }
- else{
- if ($result->RecordCount() == 0) {
- // replace the prefix
- $query = str_replace( "{dbprefix}", $this->dbPrefix, $insert );
- // replace also the placeholders for the paths to the tools
- $query = str_replace( "{path_to_tar}", $pathToTar, $query );
- $query = str_replace( "{path_to_unzip}", $pathToUnzip, $query );
- $query = str_replace( "{path_to_bz2}", $pathToBzip2, $query );
- $query = str_replace( "{path_to_gzip}", $pathToGzip, $query );
- $query = str_replace( "{path_to_convert}", $pathToConvert, $query );
- $query = str_replace( "{path_to_convert}", $pathToConvert, $query );
- if( !$this->Execute( $query )) {
- $this->message .= "Error executing code: ".$this->_db->ErrorMsg()."<br/>";
- $errors = true;
- }
- }
- $result->Close();
- }
- }
- // check to see if we need to remove duplicates and the id index
- $query = "SELECT id FROM ".$this->dbPrefix."config LIMIT 1";
- $result = $this->Execute($query);
- // if $result is false, id column has already been removed
- if($result){
- $result->Close();
- // remove all duplicates in plog_config table
-
- // first create temp table without the duplicates
- $query = "CREATE TEMPORARY TABLE tmptable ".
- "SELECT * FROM ".$this->dbPrefix."config WHERE 1 GROUP BY config_key";
- $result = $this->Execute($query);
- if($result){
- //$result->Close();
- // Now delete the old table
- $query = "DELETE FROM ".$this->dbPrefix."config";
- $result = $this->Execute($query);
- if($result) {
- //$result->Close();
- // Insert the unique rows into the old table
- $query = "INSERT INTO ".$this->dbPrefix."config SELECT * FROM tmptable";
- $result = $this->Execute($query);
- }
- }
- /*if(!$result){
- $this->message .= "Error removing duplicates in config table<br/>";
- $errors = true;
- }*/
-
- if($result){
-
- // remove index id field, we don't need it any more!
- $query = "ALTER TABLE ".$this->dbPrefix."config DROP COLUMN id";
- $result = $this->Execute($query);
- if(!$result){
- $this->message .= "Error removing old id column from config table: ".$this->_db->ErrorMsg()."<br/>";
- $errors = true;
- }
- }
- }
-
- if( !$errors ) {
- $this->message .= "Configuration settings updated successfully";
- }
-
- return( !$errors );
- }
- }
-
- /**
- * Processes all admin users and grants the appropriate permissions
- */
- class AdminUserPermissionsDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( parent::getNumSteps( "users" ));
- }
-
- function perform()
- {
- $this->message = "Updating admin user permissions (step %s of %s)<br/>";
-
- // load each one of the categories and update them
- // list of categories
- /*$query3 = "SELECT id, site_admin FROM ".$this->dbPrefix."users";
- $res3 = $this->Execute( $query3, $this->page, $this->itemsPerPage );
- if( $res3->RecordCount() == 0 ) {
- $this->message .= "No more records to process";
- return( true );
- }*/
-
- $users = new Users();
- $allUsers = $users->getAllUsers( USER_STATUS_ALL, "", "", $this->page, $this->itemsPerPage );
-
- $permissions = new Permissions();
- $userPermissions = new UserPermissions();
- $loginPerm = $permissions->getPermissionByName( "login_perm" );
- $allPerms = $permissions->getAllPermissions();
-
- //while( $row = $res3->FetchRow()) {
- foreach( $allUsers as $user ) {
- //print("Processing user: ".$user->getUsername()."<br/>");
- //if( $row["site_admin"] > 0 ) {
- if( $user->isSiteAdmin()) {
- // it's an admin, let's grant all the appropriate permissions
- foreach( $allPerms as $perm ) {
- if( $perm->isAdminOnlyPermission() && $perm->getName() != "login_perm" ) {
- //$userPerm = new UserPermission( $row["id"], 0, $perm->getId());
- $userPerm = new UserPermission( $user->getId(), 0, $perm->getId());
- $userPermissions->grantPermission( $userPerm );
- }
- }
- }
- // grant the login_perm permission or else users won't be able to log in
- $newPerm = new UserPermission( $user->getId(), 0, $loginPerm->getId());
- $userPermissions->grantPermission( $newPerm );
-
- $this->updatedRecords++;
- }
-
- $this->message .= "{$this->updatedRecords} users updated (".$this->getPercentProcessed()."%%)<br/>";
- return true;
- }
- }
-
- /**
- * processes all resource files and renames the files to their "real" names
- */
- class ResourcesOriginalFileNameDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( parent::getNumSteps( "gallery_resources" ));
- }
-
- function perform()
- {
- $this->message = "Updating resource files with original file naming rule (step %s of %s)<br/>";
-
- $query1 = "SELECT id, owner_id, file_name, resource_type, thumbnail_format FROM ".$this->dbPrefix."gallery_resources";
-
- $config =& Config::getConfig();
- $galleryFolder = $config->getValue( "resources_folder" );
-
- // total number of comments
- $res1 = $this->Execute( $query1, $this->page, $this->itemsPerPage );
- if( !$res1 ) {
- $this->message .= "Error performing loading resource data";
- return false;
- }
- if( $res1->RecordCount() == 0 ) {
- $this->message .= "No more records to process";
- return( true );
- }
- $numComments = Array();
- while( $row = $res1->FetchRow()) {
- //
- // process each one of the rows and rename the main file
- //
-
- // get the file extension
- if(( $extPos = strrpos( $row["file_name"], "." )) !== false ) {
- $fileExt = substr( $row["file_name"], $extPos+1, strlen( $row["file_name"] ));
- }
- else {
- $fileExt = "";
- }
-
- $fileName = $galleryFolder.$row["owner_id"]."/".$row["owner_id"]."-".$row["id"].".".$fileExt;
- $destFileName = $galleryFolder.$row["owner_id"]."/".$row["file_name"];
-
- //print( "Renaming file: $fileName --- $destFileName<br/>" );
-
- // skip the rename if we already did it
- if( File::exists( $fileName )) {
- if( !File::exists( $destFileName)) {
- if( !File::rename( $fileName, $destFileName )) {
- $this->message .= "Error updating resource file with id ".$row["id"].", while attempting to rename file from $fileName to $destFileName<br/>";
- }
- }
- }
-
- // if it's an image, we also need to process the previews
- if( $row["resource_type"] == "1" ) {
- // calculate the extension of the preview file, depending on how it was saved
- if( $row["thumbnail_format"] == "same" ) {
- $previewExt = strtolower( $fileExt );
- $destFileName = $row["file_name"];
- }
- else {
- $previewExt = $row["thumbnail_format"];
- // remove the old extension and put the new one in place
- //print("file name = ".$row["file_name"]." - file ext = $fileExt - previewExt = $previewExt" );
- $destFileName = str_replace( $fileExt, $previewExt, $row["file_name"] );
- }
-
- // file names for the preview and medium preview
- $previewFileName = $galleryFolder.$row["owner_id"]."/previews/".$row["owner_id"]."-".$row["id"].".".$previewExt;
- $medPreviewFileName = $galleryFolder.$row["owner_id"]."/previews-med/".$row["owner_id"]."-".$row["id"].".".$previewExt;
- // destination file names for the preview and medium preview
- $destPreviewFileName = $galleryFolder.$row["owner_id"]."/previews/".$destFileName;
- $destMedPreviewFileName = $galleryFolder.$row["owner_id"]."/previews-med/".$destFileName;
-
- //print(" -- renaming preview: $previewFileName -- $destPreviewFileName<br/>");
- //print(" -- renaming medium preview: $medPreviewFileName -- $destMedPreviewFileName<br/>");
-
- if( File::exists( $previewFileName )) {
- if( !File::exists( $destPreviewFileName)) {
- File::rename( $previewFileName, $destPreviewFileName );
- }
- }
- if( File::exists( $medPreviewFileName )) {
- if( !File::exists( $destMedPreviewFileName)) {
- File::rename( $medPreviewFileName, $destMedPreviewFileName );
- }
- }
- }
-
- $this->updatedRecords++;
- }
- $res1->Close();
- $this->message .= "{$this->updatedRecords} resource files updated, ".$this->getTotalProcessedRecords()." processed so far (".$this->getPercentProcessed()."%%)<br/>";
- return true;
- }
- }
-
- /**
- * processes all resource files and renames the files to their "encoded" names
- */
- class ResourcesEncodedFileNameDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( parent::getNumSteps( "gallery_resources" ));
- }
-
- function perform()
- {
- $this->message = "Updating resource files with encoded file naming rule (step %s of %s)<br/>";
-
- $query1 = "SELECT id, owner_id, file_name, resource_type, thumbnail_format FROM ".$this->dbPrefix."gallery_resources";
-
- $config =& Config::getConfig();
- $galleryFolder = $config->getValue( "resources_folder" );
-
- // total number of comments
- $res1 = $this->Execute( $query1, $this->page, $this->itemsPerPage );
- if( !$res1 ) {
- $this->message .= "Error performing loading resource data";
- return false;
- }
- if( $res1->RecordCount() == 0 ) {
- $this->message .= "No more records to process";
- return( true );
- }
- $numComments = Array();
- while( $row = $res1->FetchRow()) {
- //
- // process each one of the rows and rename the main file
- //
-
- // get the file extension
- if(( $extPos = strrpos( $row["file_name"], "." )) !== false ) {
- $fileExt = substr( $row["file_name"], $extPos+1, strlen( $row["file_name"] ));
- }
- else {
- $fileExt = "";
- }
-
- $fileName = $galleryFolder.$row["owner_id"]."/".$row["owner_id"]."-".$row["id"].".".$fileExt;
- $destFileName = $galleryFolder.$row["owner_id"]."/".$row["owner_id"]."-".$row["id"].".".strtolower($fileExt);
-
- if( $fileName != $destFileName ) {
- if( File::exists( $fileName )) {
- if( !File::exists( $destFileName)) {
- if( !File::rename( $fileName, $destFileName )) {
- $this->message .= "Error updating resource file with id ".$row["id"].", while attempting to rename file from $fileName to $destFileName<br/>";
- }
- }
- }
- }
-
- $this->updatedRecords++;
- }
- $res1->Close();
- $this->message .= "{$this->updatedRecords} resource files updated, ".$this->getTotalProcessedRecords()." processed so far (".$this->getPercentProcessed()."%%)<br/>";
- return true;
- }
- }
-
- /**
- * processes all resource files that we did not convert correctly in 1.2.0
- */
- class ResourcesFix120FileNameDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( parent::getNumSteps( "gallery_resources" ));
- }
-
- function perform()
- {
- $this->message = "Fixing resource files with original file naming rule (step %s of %s)<br/>";
-
- $query1 = "SELECT id, owner_id, file_name, resource_type, thumbnail_format FROM ".$this->dbPrefix."gallery_resources";
-
- $config =& Config::getConfig();
- $galleryFolder = $config->getValue( "resources_folder" );
-
- // total number of comments
- $res1 = $this->Execute( $query1, $this->page, $this->itemsPerPage );
- if( !$res1 ) {
- $this->message .= "Error performing loading resource data";
- return false;
- }
- if( $res1->RecordCount() == 0 ) {
- $this->message .= "No more records to process";
- return( true );
- }
- $numComments = Array();
- while( $row = $res1->FetchRow()) {
- //
- // process each one of the rows and rename the main file
- //
-
- // get the file extension
- if(( $extPos = strrpos( $row["file_name"], "." )) !== false ) {
- $fileExt = substr( $row["file_name"], $extPos+1, strlen( $row["file_name"] ));
- }
- else {
- $fileExt = "";
- }
-
- // Only convert the preview file name if the file extension does not lower case
- if( strtolower( $fileExt ) != $fileExt ) {
- // if it's an image, we also need to process the previews
- if( $row["resource_type"] == "1" ) {
- // calculate the extension of the preview file, depending on how it was saved
- if( $row["thumbnail_format"] == "same" ) {
- $previewExt = strtolower( $fileExt );
- $destFileName = $row["file_name"];
- }
- else {
- $previewExt = $row["thumbnail_format"];
- // remove the old extension and put the new one in place
- //print("file name = ".$row["file_name"]." - file ext = $fileExt - previewExt = $previewExt" );
- $destFileName = str_replace( $fileExt, $previewExt, $row["file_name"] );
- }
-
- // file names for the preview and medium preview
- $previewFileName = $galleryFolder.$row["owner_id"]."/previews/".$row["owner_id"]."-".$row["id"].".".$previewExt;
- $medPreviewFileName = $galleryFolder.$row["owner_id"]."/previews-med/".$row["owner_id"]."-".$row["id"].".".$previewExt;
- // destination file names for the preview and medium preview
- $destPreviewFileName = $galleryFolder.$row["owner_id"]."/previews/".$destFileName;
- $destMedPreviewFileName = $galleryFolder.$row["owner_id"]."/previews-med/".$destFileName;
-
- //print(" -- renaming preview: $previewFileName -- $destPreviewFileName<br/>");
- //print(" -- renaming medium preview: $medPreviewFileName -- $destMedPreviewFileName<br/>");
-
- if( File::exists( $previewFileName )) {
- if( !File::exists( $destPreviewFileName)) {
- File::rename( $previewFileName, $destPreviewFileName );
- }
- }
- if( File::exists( $medPreviewFileName )) {
- if( !File::exists( $destMedPreviewFileName)) {
- File::rename( $medPreviewFileName, $destMedPreviewFileName );
- }
- }
- }
- }
-
- $this->updatedRecords++;
- }
- $res1->Close();
- $this->message .= "{$this->updatedRecords} resource files updated, ".$this->getTotalProcessedRecords()." processed so far (".$this->getPercentProcessed()."%%)<br/>";
- return true;
- }
- }
-
- // Dummy Transformer
- class DummyDataTransformer extends DatabaseDataTransformer
- {
- function getNumSteps()
- {
- return( 0 );
- }
-
- function perform()
- {
- return true;
- }
- }
-
- /**
- * This class is basically now a "data transformer runner", because now it works
- * like class that executes data transformers, collects their results and refreshes
- * the page to execute the next step of the transformer. If the current transformer
- * reported that its processing is complete, this class will continue with the next
- * transformer unless there are no more transformer to run.
- *
- * In order to coordinate the current step and the current transformer, two parameters
- * are needed in each request:
- *
- * - page
- * - transformerId
- *
- * The 'page' parameter holds the current page, while 'transformerId' is the index of
- * the current transformer in the $this->transformers array.
- *
- * In order to add new transformers, follow these steps:
- *
- * - Create your own transfomer class by extending DatabaseDataTransformer and implementing
- * the methods DatabaseDataTransformer::perform() and DatabaseDataTransformer::getNumSteps(). The
- * first does the data processing while the second one returns the number of needed steps to the
- * class running the transformer.
- * - Add the name of the transformer class to the the UpdateStepThree::transformers array,
- * and the class will take care of everything else.
- */
- class UpdateStepThree extends WizardPagedAction
- {
- var $resourcesNamingRule;
- var $message;
- var $currentTransformerId;
- var $totalTransformers;
-
- function UpdateStepThree( $actionInfo, $httpRequest )
- {
- $this->WizardPagedAction( $actionInfo, $httpRequest );
- // data validation
- $this->registerFieldValidator( "resourcesNamingRule", new StringValidator());
- $errorView = new WizardView( "update2" );
- $errorView->setErrorMessage( "Some data was incorrect or missing." );
- $this->setValidationErrorView( $errorView );
-
- /**
- * array with the data transformers that will be run
- */
- $this->resourcesNamingRule = $this->_request->getValue( "resourcesNamingRule" );
- if( $this->resourcesNamingRule == 'encoded_file_name' ) {
- $this->transformers = Array(
- "DatabaseSchemaDataTransformer",
- "PermissionLoader",
- "AdminUserPermissionsDataTransformer",
- "UserPermissionsDataTransformer",
- "ConfigDataTransformer",
- "ResourcesEncodedFileNameDataTransformer",
- "DummyDataTransformer"
- );
- }
- else {
- $this->transformers = Array(
- "DatabaseSchemaDataTransformer",
- "PermissionLoader",
- "AdminUserPermissionsDataTransformer",
- "UserPermissionsDataTransformer",
- "ConfigDataTransformer",
- "ResourcesOriginalFileNameDataTransformer",
- "DummyDataTransformer"
- );
- }
-
- $this->currentTransformerId = $this->getTransformerIdFromRequest();
- $this->totalTransformers = count( $this->transformers ) - 1;
- }
-
- /**
- * gets the id of the transformer from the request. If it is not available, it
- * will return the id of the first transformer available (which is '0')
- *
- * @private
- */
- function getTransformerIdFromRequest()
- {
- $id = HttpVars::getRequestValue( "transformerId" );
- $val = new IntegerValidator();
- if( !$val->validate( $id ))
- $id = 0;
-
- return $id;
- }
-
- function perform()
- {
- $step = $this->getPageFromRequest();
-
- // get the current transformer class so that we can continue where we left
- $transformerClass = $this->transformers[$this->currentTransformerId];
- $transformer = new $transformerClass( $step );
- $result = $transformer->perform();
- $complete = $transformer->isComplete();
- $message = $transformer->message;
- $message = sprintf( $message, $this->currentTransformerId + 1, $this->totalTransformers );
-
- //print("transformer = $transformerClass<br/>");
-
- // error during processing and the processor is configured
- // to fail on error
- if( !$result && $transformer->failOnError ) {
- //print("Error in step = $step<br/>");
- $this->_view = new WizardView( "update3" );
- $this->_view->setValue( "resourcesNamingRule", $this->resourcesNamingRule );
- // current and next step
- $this->_view->setValue( "currentStep", $step );
- $this->_view->setValue( "nextStep", $step+1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", $complete );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId );
- $this->_view->setValue( "error", true );
- if( $transformer->DbError() != "" ) {
- $message .= "<br/>The database error message was: ".$transformer->DbError()."<br/>";
- }
-
- $this->_view->setErrorMessage( $message );
- }
- else {
- if( !$complete ) {
- //print("it's not complete! step = $step<br/>");
- $this->_view = new WizardView( "update3" );
- $this->_view->setValue( "resourcesNamingRule", $this->resourcesNamingRule );
- // current and next step
- $this->_view->setValue( "currentStep", $step );
- $this->_view->setValue( "nextStep", $step+1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", $complete );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId );
- }
- else {
- // have we already been through all transformers?
- //print("transformer complete! - num transformers = ".count($this->transformers)."<br/>");
- $moreTransformers = ( $this->currentTransformerId+1 < count( $this->transformers ));
- if( $moreTransformers ) {
- //print("Starting new transformer!<br/>");
- $this->_view = new WizardView( "update3" );
- $this->_view->setValue( "resourcesNamingRule", $this->resourcesNamingRule );
- // current and next step
- $this->_view->setValue( "currentStep", 0 );
- $this->_view->setValue( "nextStep", 1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", false );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId+1 );
- }
- else {
- // no more data to transform, we can finalize the installation!
- // delete the contents of the temporary folder
- lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
- $config =& Config::getConfig();
- $tmpFolder = $config->getValue( "temp_folder", TEMP_FOLDER );
- WizardTools::cleanTmpFolder();
-
- // save the resources naming rule to config table
- $config->saveValue( "resources_naming_rule", $this->resourcesNamingRule );
-
- $this->_view = new WizardView( "update4" );
- }
- }
- }
-
- $this->_view->setValue( "message", $message );
-
- return true;
- }
- }
-
- // Fix those resources that we did not convert correctly in 1.2.0
- class Fix120StepOne extends WizardPagedAction
- {
- var $message;
- var $currentTransformerId;
- var $totalTransformers;
-
- function Fix120StepOne( $actionInfo, $httpRequest )
- {
- $this->WizardPagedAction( $actionInfo, $httpRequest );
-
- /**
- * array with the data transformers that will be run
- */
- $this->transformers = Array(
- "ResourcesFix120FileNameDataTransformer",
- "DummyDataTransformer"
- );
-
- $this->currentTransformerId = $this->getTransformerIdFromRequest();
- $this->totalTransformers = count( $this->transformers ) - 1;
- }
-
- /**
- * gets the id of the transformer from the request. If it is not available, it
- * will return the id of the first transformer available (which is '0')
- *
- * @private
- */
- function getTransformerIdFromRequest()
- {
- $id = HttpVars::getRequestValue( "transformerId" );
- $val = new IntegerValidator();
- if( !$val->validate( $id ))
- $id = 0;
-
- return $id;
- }
-
- function perform()
- {
- $step = $this->getPageFromRequest();
-
- // get the current transformer class so that we can continue where we left
- $transformerClass = $this->transformers[$this->currentTransformerId];
- $transformer = new $transformerClass( $step );
- $result = $transformer->perform();
- $complete = $transformer->isComplete();
- $message = $transformer->message;
- $message = sprintf( $message, $this->currentTransformerId + 1, $this->totalTransformers );
-
- //print("transformer = $transformerClass<br/>");
-
- // error during processing and the processor is configured
- // to fail on error
- if( !$result && $transformer->failOnError ) {
- //print("Error in step = $step<br/>");
- $this->_view = new WizardView( "update3" );
- // current and next step
- $this->_view->setValue( "currentStep", $step );
- $this->_view->setValue( "nextStep", $step+1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", $complete );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId );
- $this->_view->setValue( "error", true );
- if( $transformer->DbError() != "" ) {
- $message .= "<br/>The database error message was: ".$transformer->DbError()."<br/>";
- }
-
- $this->_view->setErrorMessage( $message );
- }
- else {
- if( !$complete ) {
- //print("it's not complete! step = $step<br/>");
- $this->_view = new WizardView( "fix120" );
- // current and next step
- $this->_view->setValue( "currentStep", $step );
- $this->_view->setValue( "nextStep", $step+1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", $complete );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId );
- }
- else {
- // have we already been through all transformers?
- //print("transformer complete! - num transformers = ".count($this->transformers)."<br/>");
- $moreTransformers = ( $this->currentTransformerId+1 < count( $this->transformers ));
- if( $moreTransformers ) {
- //print("Starting new transformer!<br/>");
- $this->_view = new WizardView( "fix120" );
- // current and next step
- $this->_view->setValue( "currentStep", 0 );
- $this->_view->setValue( "nextStep", 1 );
- // whether this transformer is ready
- $this->_view->setValue( "complete", false );
- // transformer id
- $this->_view->setValue( "transformerId", $this->currentTransformerId+1 );
- }
- else {
- // no more data to transform, we can finalize the installation!
- // delete the contents of the temporary folder
- lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
- $config =& Config::getConfig();
- $tmpFolder = $config->getValue( "temp_folder", TEMP_FOLDER );
- WizardTools::cleanTmpFolder();
-
- // User upgrade LifeType from 1.1.x to 1.2.0, they have to use "original_file_name",
- // becasue there is no option for user to choose he want to use encoded file name
- // or original file name.
- // save the resources naming rule to config table
- $config->saveValue( "resources_naming_rule", "original_file_name" );
-
- $this->_view = new WizardView( "update4" );
- }
- }
- }
-
- $this->_view->setValue( "message", $message );
-
- return true;
- }
- }
-
- // check if the "./tmp" folder is writable by us, otherwise
- // throw an error before the user gets countless errors
- // from Smarty
- if( !File::isWritable( TEMP_FOLDER ) || !File::isDir( TEMP_FOLDER )) {
- print("<span style=\"color:red; font-size: 14px;\">Error</span><br/><br/>This wizard needs the ".TEMP_FOLDER." folder to be writable by the web server user.<br/><br/>Please correct it and try again.");
- die();
- }
-
- //// main part ////
- $controller = new Controller( $_actionMap, "nextStep" );
- $controller->process( HttpVars::getRequest());
-?>
More information about the pLog-svn
mailing list