/** * This function acts as a member method of the PreferencesTool class. It has * been factored out for efficiency because it only needs to be run once. * @see Dataface_PreferncesTool::_createPreferencesTable() */ function Dataface_PreferencesTool__createPreferencesTable() { $res = xf_db_query("create table if not exists `dataface__preferences` (\n\t\t\t`pref_id` int(11) unsigned not null auto_increment,\n\t\t\t`username` varchar(64) not null,\n\t\t\t`table` varchar(128) not null,\n\t\t\t`record_id` varchar(255) not null,\n\t\t\t`key` varchar(128) not null,\n\t\t\t`value` varchar(255) not null,\n\t\t\tprimary key (pref_id),\n\t\t\tindex `username` (`username`),\n\t\t\tindex `table` (`table`),\n\t\t\tindex `record_id` (`record_id`))", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } }
function testTranslate() { //echo $this->DB->translate_query('select PubType, BiblioString from Publications', 'fr'); //exit; $sql = 'select PubType, BiblioString from Publications limit 5'; $start = microtime_float(); $res = $this->DB->query($sql, $this->db) or die(xf_db_error($this->db)); while ($row = xf_db_fetch_assoc($res)) { print_r($row); } $stop1 = microtime_float() - $start; $start = microtime_float(); $res3 = $this->DB->query($sql, $this->db) or die(xf_db_error($this->db)); while ($row = xf_db_fetch_assoc($res3)) { print_r($row); } $stop3 = microtime_float() - $start; $start = microtime_float(); $res2 = xf_db_query($sql, $this->db) or die(xf_db_error($this->db)); while ($row = xf_db_fetch_assoc($res2)) { print_r($row); } $stop2 = microtime_float() - $start; echo "MySQL: {$stop2} ; Translated: {$stop1} ; Second translated: {$stop3}"; $parser = new SQL_Parser(null, 'MySQL'); //$sql = 'select IFNULL(f.PubType,d.PubType) as PubType, IFNULL(f.BiblioString,d.BiblioString) as BiblioString from Publications d left join Publications_fr f on d.PubID=f.PubID'; $data = $parser->parse($sql); //print_r($data); $compiler = new SQL_Compiler(); echo $compiler->compile($data); }
function test_add_value() { $vt = Dataface_ValuelistTool::getInstance(); $people = Dataface_Table::loadTable('People'); $vt->addValueToValuelist($people, 'Publications', 'My Test Publication'); $res = xf_db_query("select * from Publications where `BiblioString` = 'My Test Publication'"); $this->assertTrue(xf_db_num_rows($res) === 1); }
public static function createRecordsTable() { $sql = sprintf("create table `%s` (\n\t\t\t\tid int(11) not null auto_increment,\n\t\t\t\tschema_id int(11) not null,\n\t\t\t\t`base_record_id_hash` varchar(32) not null,\n\t\t\t\t`base_record_id` text not null,\n\t\t\t\t`version_hash` varchar(32) not null,\n\t\t\t\t`lang` varchar(2) not null,\n\t\t\t\t`record_data` text not null,\n\t\t\t\tprimary key (`id`),\n\t\t\t\tkey (`schema_id`, `base_record_id_hash`, `version_hash`)\n\t\t\t)", self::$RECORDS_TABLE); $res = xf_db_query($sql, df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } true; }
function handle(&$params) { $app =& Dataface_Application::getInstance(); if (df_get_database_version() == df_get_file_system_version()) { $app->redirect(DATAFACE_SITE_HREF . '?--msg=' . urlencode('The application database is up to date at version ' . df_get_database_version())); } if (df_get_database_version() > df_get_file_system_version()) { $app->redirect(DATAFACE_SITE_HREF . '?--msg=' . urlencode('The database version is greater than the file system version. Please upgrade your application to match the version in the database (version ' . df_get_database_version())); } $res = xf_db_query("select count(*) from dataface__version", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } $row = xf_db_fetch_row($res); if ($row[0] == 0) { $res2 = xf_db_query("insert into dataface__version (`version`) values (0)", df_db()); if (!$res2) { throw new Exception(xf_db_error(df_db())); } } if (file_exists('conf/Installer.php')) { import('conf/Installer.php'); $installer = new conf_Installer(); $methods = get_class_methods('conf_Installer'); $methods = preg_grep('/^update_([0-9]+)$/', $methods); $updates = array(); foreach ($methods as $method) { preg_match('/^update_([0-9]+)$/', $method, $matches); $version = intval($matches[1]); if ($version > df_get_database_version() and $version <= df_get_file_system_version()) { $updates[] = $version; } } sort($updates); foreach ($updates as $update) { $method = 'update_' . $update; $res = $installer->{$method}(); if (PEAR::isError($res)) { return $res; } $res = xf_db_query("update dataface__version set `version`='" . addslashes($update) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } } } $res = xf_db_query("update dataface__version set `version`='" . addslashes(df_get_file_system_version()) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } if (function_exists('apc_clear_cache')) { apc_clear_cache('user'); } df_clear_views(); df_clear_cache(); $app->redirect(DATAFACE_SITE_HREF . '?--msg=' . urlencode('The database has been successfully updated to version ' . df_get_file_system_version())); }
function _build() { $type = $this->getRelationshipType($this->_relationshipName); if ($type != "many_to_many") { trigger_error("Attempt to build reference browser widget for relationship '" . $this->_relationshipName . "' in tablle '" . $this->_table->tablename . "' where the type is not 'many_to_many'. The type found was '{$type}'.", E_USER_ERROR); } $domainSQL = $this->_table->getRelationshipDomainSQL($this->_relationshipName); $res = xf_db_query($domainSQL, $this->_table->db); }
/** * A method to create the configuration table in the database. The configuration * table is where configuration (e.g. fields.ini etc..) may be stored. This is * a new feature in 0.6.14. * * @author Steve Hannah <*****@*****.**> * @created Feb. 26, 2007 */ function Dataface_ConfigTool_createConfigTable() { $self =& Dataface_ConfigTool::getInstance(); if (!Dataface_Table::tableExists($self->configTableName, false)) { $sql = "CREATE TABLE `" . $self->configTableName . "` (\n\t\t\t\t\tconfig_id int(11) NOT NULL auto_increment primary key,\n\t\t\t\t\t`file` varchar(255) NOT NULL,\n\t\t\t\t\t`section` varchar(128),\n\t\t\t\t\t`key` varchar(128) NOT NULL,\n\t\t\t\t\t`value` text NOT NULL,\n\t\t\t\t\t`lang` varchar(2),\n\t\t\t\t\t`username` varchar(32),\n\t\t\t\t\t`priority` int(5) default 5\n\t\t\t\t\t)"; $res = xf_db_query($sql, df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } } }
function testSync1() { $app =& Dataface_Application::getInstance(); $s = new DB_Sync($app->db(), $app->db(), 'a', 'b'); $s->syncTables(); $res = xf_db_query("show create table b", $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } $row = xf_db_fetch_assoc($res); @xf_db_free_result($res); $this->assertEquals("CREATE TABLE `b` (\n `id` int(11) NOT NULL auto_increment,\n `a` varchar(32) default 'b',\n `b` datetime default '0000-00-00 00:00:00',\n PRIMARY KEY (`id`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1", $row['Create Table']); }
function dbmtime() { $tables =& $this->tables; $lookup = array_flip($tables); $app =& Dataface_Application::getInstance(); $res = xf_db_query("SHOW TABLE STATUS", $app->_db); $latestMod = 0; while ($row = xf_db_fetch_array($res)) { if ((sizeof($tables) === 0 || isset($lookup[$row['Name']])) && strtotime($row['Update_time']) > $latestMod) { $latestMod = strtotime($row['Update_time']); } } return $latestMod; }
public function query($sql, $vars = null) { $sql = $this->prepareQuery($sql, $vars); if (isset($this->translator)) { $sql = $this->translator->translateQuery($sql); } $res = xf_db_query($sql, $this->db()); if (!$res) { //echo $sql; error_log("Query Failed: " . $sql); throw new \Exception(xf_db_error($this->db())); } return $res; }
function setUp() { parent::setUp(); xf_db_query("CREATE TABLE `Pages` (\n\t\t\t`PageID` INT(11) auto_increment NOT NULL,\n\t\t\t`ParentID` INT(11),\n\t\t\t`ShortName` VARCHAR(32) NOT NULL,\n\t\t\t`Description` TEXT,\n\t\t\tPRIMARY KEY (`PageID`),\n\t\t\tUNIQUE (`ParentID`,`ShortName`))") or trigger_error(xf_db_error() . __LINE__); xf_db_query("INSERT INTO `Pages` (`PageID`,`ShortName`,`Description`)\n\t\t\tVALUES (1,'index_page','Main page')") or trigger_error(xf_db_error() . __LINE__); xf_db_query("INSERT INTO `Pages` (`ParentID`,`ShortName`,`Description`)\n\t\t\tVALUES \n\t\t\t(1,'about','About us'),\n\t\t\t(1,'jobs','Now hiring'),\n\t\t\t(1,'products','About our products'),\n\t\t\t(1,'services','About our services'),\n\t\t\t(1,'contact','Contact us')") or trigger_error(xf_db_error() . __LINE__); xf_db_query("INSERT INTO `Pages` (`ParentID`,`ShortName`,`Description`)\n\t\t\tVALUES\n\t\t\t(2,'history','Our history'),\n\t\t\t(2,'future', 'The direction of the company'),\n\t\t\t(3,'application', 'Job application'),\n\t\t\t(3,'current_listing', 'Current job listings'),\n\t\t\t(4,'awards','Product awards'),\n\t\t\t(4,'downloads','Product downlaods'),\n\t\t\t(5,'consultation','Free consultation')") or trigger_error(xf_db_error() . __LINE__); $table =& Dataface_Table::loadTable('Pages'); $r =& $table->relationships(); if (!isset($r['children'])) { $table->addRelationship('children', array('__sql__' => 'select * from Pages where ParentID=\'$PageID\'', 'meta:class' => 'children')); } $this->indexpage =& df_get_record('Pages', array('PageID' => 1)); $this->t = new Dataface_TreeTable($this->indexpage); }
/** * Sets a configuration parameter in the configuration table. * This should not be called directly. It should be called through the * Dataface_ConfigTool class as its setConfigParam method. * * @param string $file The name of the ini file in which the config value is being set. * @param string $section The name of the section (could be null). * @param string $key The name of the parameter's key (not null) * @param string $value The value to set (not null) * @param string $username The username for which the parameter is being set (null for all users) * @param string $lang The 2-digit language code for which the parameter is being set (null for all languages). * @param integer $priority The priority of this config variable (priority dictates which * parameters take priority. Default vallue of 5. * @returns true if success or PEAR_Error if failure. * * This will create the configuration table if it doesn't already exist. * * @author Steve Hannah <*****@*****.**> * @created Feb. 26, 2007 */ function Dataface_ConfigTool_setConfigParam($file, $section, $key, $value, $username = null, $lang = null, $priority = 5) { $self =& Dataface_ConfigTool::getInstance(); // See if this parameter has already been set: $where = array(); $where[] = "`key`='" . addslashes($key) . "'"; $where[] = "`file`='" . addslashes($file) . "'"; $where[] = "`section`" . (isset($section) ? "='" . addslashes($section) . "'" : ' IS NULL'); $where[] = "`username`" . (isset($username) ? "='" . addslashes($username) . "'" : ' IS NULL'); $where[] = "`lang`" . (isset($lang) ? "='" . addslashes($lang) . "'" : ' IS NULL'); $where = implode(' and ', $where); $sql = "select `config_id` from `" . $self->configTableName . "` where {$where} limit 1"; $res = xf_db_query($sql, df_db()); if (!$res) { $self->createConfigTable(); $res = xf_db_query($sql, df_db()); } if (!$res) { return PEAR::raiseError("Failed to get config parameter: " . xf_db_error(df_db())); } $vals = array("section" => isset($section) ? "'" . addslashes($section) . "'" : 'NULL', "key" => "'" . addslashes($key) . "'", "value" => "'" . addslashes($value) . "'", "username" => "'" . addslashes($username) . "'", "lang" => "'" . addslashes($lang) . "'", "priority" => $priority); if (xf_db_num_rows($res) > 0) { $row = xf_db_fetch_assoc($res); // We need to perform an update $updates = array(); foreach ($vals as $vkey => $vval) { $updates[] = '`' . $vkey . '`=' . $vval; } $sets = implode(' and ', $updates); $sql = "update `" . $self->configTableName . "` set " . $sets . " where `config_id`='" . $row['config_id'] . "' limit 1"; } else { $values = array(); $cols = array(); foreach ($vals as $vkey => $vval) { $cols[] = "`{$vkey}`"; $values[] = $vval; } $cols = implode(',', $cols); $values = implode(',', $values); $sql = "insert into `" . $self->configTableName . "` ({$cols}) VALUES ({$values})"; } @xf_db_free_result($res); $res = xf_db_query($sql, df_db()); if (!$res) { return PEAR::raiseError("Could not write config value: " . xf_db_error(df_db())); } return true; }
function handle(&$params) { $res = xf_db_query("show tables like 'dataface__view_%'", df_db()); $views = array(); while ($row = xf_db_fetch_row($res)) { $views[] = $row[0]; } if ($views) { $sql = "drop view `" . implode('`,`', $views) . "`"; echo $sql; echo "<br/>"; $res = xf_db_query("drop view `" . implode('`,`', $views) . "`", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } } echo "done"; }
function test_save() { $app =& Dataface_Application::getInstance(); $builder = new Dataface_Table_builder($this->mytable); $this->assertTrue(!isset($builder->table)); $this->assertEquals(0, xf_db_num_rows(xf_db_query("show tables like '" . $this->mytable . "'", $app->db()))); $builder->addField(array('Field' => 'name', 'Type' => 'varchar(32)')); $res = $builder->save(); if (PEAR::isError($res)) { trigger_error($res->toString(), E_USER_ERROR); } $this->assertEquals(array('name', 'id'), array_keys($builder->table->fields())); $this->assertEquals(1, xf_db_num_rows(xf_db_query("show tables like '" . $this->mytable . "'", $app->db()))); $builder->addField(array('Field' => 'email', 'Type' => 'varchar(28)')); $res = $builder->save(); if (PEAR::isError($res)) { trigger_error($res->toString(), E_USER_ERROR); } $this->assertEquals(array('name', 'id', 'email'), array_keys($builder->table->fields())); $this->assertEquals(1, xf_db_num_rows(xf_db_query("show tables like '" . $this->mytable . "'", $app->db()))); }
function afterCopy(Dataface_Record $orig, Dataface_Record $copy) { $rand = md5(rand(0, 1000000)); $copytable = 'copy_' . $rand; $res = xf_db_query("create temporary table `{$copytable}` select * from formula_ingredients where formula_id='" . addslashes($orig->val('formula_id')) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } $res = xf_db_query("update `{$copytable}` set formula_id='" . addslashes($copy->val('formula_id')) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } $res = xf_db_query("insert into formula_ingredients select * from `{$copytable}`", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } $res = xf_db_query("drop table `{$copytable}`", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } }
function handle(&$params) { $app =& Dataface_Application::getInstance(); $context = array(); if (!is_array(@$app->_conf['_output_cache']) or !@$app->_conf['_output_cache']['enabled']) { $context['enabled'] = false; //return PEAR::raiseError('The output cache is currently disabled. You can enable it by adding an [_output_cache] section to your conf.ini file with a value \'enabled=1\''); } else { $context['enabled'] = true; } if (@$_POST['--clear-cache']) { // We should clear the cache @xf_db_query("delete from `__output_cache`", df_db()); $app->redirect($app->url('') . '&--msg=' . urlencode('The output cache has been successfully cleared.')); } $res = xf_db_query("select count(*) from `__output_cache`", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } list($numrows) = xf_db_fetch_row($res); $context['numrows'] = $numrows; df_display($context, 'manage_output_cache.html'); }
function handle($params) { $app =& Dataface_Application::getInstance(); if (!isset($_GET['key'])) { trigger_error("No key specified", E_USER_ERROR); } $sql = "select `value` from `" . TRANSLATION_PAGE_TABLE . "` where `key` = '" . addslashes($_GET['key']) . "'"; $res = xf_db_query($sql, $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } if (xf_db_num_rows($res) == 0) { trigger_error("Sorry the specified key was invalid.", E_USER_ERROR); } list($content) = xf_db_fetch_row($res); @xf_db_free_result($res); if (function_exists('tidy_parse_string')) { $config = array('show-body-only' => true, 'output-encoding' => 'utf8'); $html = tidy_repair_string($content, $config, "utf8"); $content = trim($html); } df_display(array('content' => $content), 'TranslationPageTemplate.html'); return true; }
function test_translateDeleteQuery() { $app =& Dataface_Application::getInstance(); // Try to insert only values into both the base table and the // translated table. $sql = 'Delete FROM PeopleIntl where PersonID=5'; $translator = new Dataface_QueryTranslator('en'); $tsql = $translator->translateQuery($sql); //print_r($tsql);exit; $affected_rows = array(); foreach ($tsql as $q) { $res = xf_db_query($q, $app->db()); if (!$res) { die(xf_db_error($app->db())); } $affected_rows[$q] = xf_db_affected_rows($app->db()); } $this->assertEquals(array("delete from `PeopleIntl` where `PersonID` = 5", "delete from `PeopleIntl_en` where `PersonID` = 5", "delete from `PeopleIntl_fr` where `PersonID` = 5"), $tsql); $this->assertEquals(array("delete from `PeopleIntl` where `PersonID` = 5" => 1, "delete from `PeopleIntl_en` where `PersonID` = 5" => 0, "delete from `PeopleIntl_fr` where `PersonID` = 5" => 0), $affected_rows); }
/** * Refreshes the metadata table for a given table. This means that missing * columns and keys are created so that the schema matches the schema of * the current table structure. * * @param string $tablename The name of the table for which the metadata is being * stored. */ function refreshMetadataTable($tablename = null) { if (!isset($tablename)) { $tablename = $this->tablename; } if (Dataface_MetadataTool::isMetadataTable($tablename)) { return false; } $app =& Dataface_Application::getInstance(); $table =& Dataface_Table::loadTable($tablename); $md_tablename = $tablename . '__metadata'; if (!Dataface_Table::tableExists($md_tablename, false)) { if ($this->createMetadataTable($tablename)) { return true; } } $cols =& $this->getColumns($tablename, false); // First we have to go through all of the key fields of the subject table // and make sure that they appear in the metadata table. $updatePrimaryKey = false; foreach ($table->keys() as $field) { if (!isset($cols[$field['Field']])) { $updatePrimaryKey = true; $default = @$field['Default'] ? " DEFAULT {$field['Default']}" : ''; $sql = "alter table `{$md_tablename}` add column `{$field['Field']}` {$field['Type']}{$default}"; $res = xf_db_query($sql, $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } } } $table_keys =& $table->keys(); //Next we have to go through all of the key fields in the metadata table ane make sure that they // appear in the subject table primary keys. foreach ($this->getKeyColumns($tablename, false) as $field) { if (!isset($table_keys[$field['Field']])) { $updatePrimaryKey = true; $sql = "alter table `{$md_tablename}` drop column `{$field['Field']}`"; $res = xf_db_query($sql, $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } } } // If the primary key needed to be updated, we will update it now. if ($updatePrimaryKey) { // The primary key needs to be updated $sql = "drop primary key"; @xf_db_query($sql, $app->db()); $sql = "alter table `{$md_tablename}` add primary key (`" . implode('`,`', array_keys($table->keys())) . "`)"; $res = xf_db_query($sql, $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } } // Now we need to make sure that all of the prescribed meta fields are // in the metadata field. $fielddefs = $this->loadMetadataFieldDefs($tablename); $cols = $this->getColumns($tablename, false); foreach ($fielddefs as $field) { if (!isset($cols[$field['Field']])) { $default = @$field['Default'] ? " DEFAULT {$field['Default']}" : ''; $sql = "alter table `{$md_tablename}` add column `{$field['Field']}` {$field['Type']}{$default}"; $res = xf_db_query($sql, $app->db()); if (!$res) { trigger_error(xf_db_error($app->db()), E_USER_ERROR); } } } return true; }
function test_migrateDefaultLanguage() { $app =& Dataface_Application::getInstance(); $vals = xf_db_fetch_assoc(xf_db_query("select * from PeopleIntl where PersonID=1", $app->db())); $this->assertEquals("Default Position", $vals['Position']); $vals2 = xf_db_fetch_assoc(xf_db_query("select * from PeopleIntl where PersonID=2", $app->db())); $this->assertEquals("Default Position 2", $vals2['Position']); $tt = new Dataface_TranslationTool(); $tt->migrateDefaultLanguage('en', array('PeopleIntl')); $vals = xf_db_fetch_assoc(xf_db_query("select * from PeopleIntl where PersonID=1", $app->db())); $this->assertEquals("My English Position", $vals['Position']); $vals2 = xf_db_fetch_assoc(xf_db_query("select * from PeopleIntl where PersonID=2", $app->db())); $this->assertEquals("Default Position 2", $vals2['Position']); }
function parse_ini_file($path, $sections = false) { static $config = 0; if (!is_array($config)) { $config = array(); } $app =& Dataface_Application::getInstance(); //echo "Checking for $path"; if (strstr($path, 'db:') == $path) { $path = substr($path, 3); if (!is_array($config)) { $config = array(); if (class_exists('Dataface_AuthenticationTool')) { $auth =& Dataface_AuthenticationTool::getInstance(); $username = $auth->getLoggedInUsername(); } else { $username = null; } $sql = $this->buildConfigQuery($path, $username, $app->_conf['lang']); $res = @xf_db_query($sql, $app->db()); if (!$res) { $this->createConfigTable(); $res = xf_db_query($sql, $app->db()); } if (!$res) { return $config; } while ($row = xf_db_fetch_assoc($res)) { if (!$row['section']) { $config[$row['file']][$row['key']] = $row['value']; } else { $config[$row['file']][$row['section']][$row['key']] = $row['value']; } } @xf_db_free_result($res); } if (!@$config[$path]) { return array(); } return $config[$path]; } else { if (@$_GET['--refresh-apc'] or !(DATAFACE_EXTENSION_LOADED_APC && filemtime($path) < apc_fetch($this->apc_hash() . $path . '__mtime') && ($config[$path] = apc_fetch($this->apc_hash() . $path)))) { //$config[$path] = parse_ini_file($path, $sections); $config[$path] = INIParser::parse_ini_file($path, $sections); if (DATAFACE_EXTENSION_LOADED_APC) { apc_store($this->apc_hash() . $path, $config[$path]); apc_store($this->apc_hash() . $path . '__mtime', time()); } } else { // } return $config[$path]; } }
function delete_request_with_uuid($uuid) { $table = self::$TABLE_RESET_PASSWORD; $res = xf_db_query("delete from `{$table}` where request_uuid='" . addslashes($uuid) . "' limit 1", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } }
function rollbackTransaction() { return xf_db_query('rollback', df_db()); }
/** * @brief Updates a module so that the database version is the same * as the file system version. * @param string $modname The name of the module. * @param string $path The path to the module. */ public function updateModule($modname, $path) { $installpath = dirname($path) . DIRECTORY_SEPARATOR . 'installer.php'; if (file_exists($installpath)) { import($installpath); $classname = $modname . '_installer'; $installer = new $classname(); $methods = get_class_methods($classname); $methods = preg_grep('/^update_([0-9]+)$/', $methods); $updates = array(); $fsversion = $this->getFsVersion($modname, $path); $dbversion = $this->getDbVersion($modname); foreach ($methods as $method) { preg_match('/^update_([0-9]+)$/', $method, $matches); $version = intval($matches[1]); if ($version > $dbversion and $version <= $fsversion) { $updates[] = $version; } } sort($updates); if ($dbversion == 0) { $res = xf_db_query("insert into dataface__modules (module_name,module_version)\n\t\t\t\t\tvalues ('" . addslashes($modname) . "',-1)", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db())); } } foreach ($updates as $update) { $method = 'update_' . $update; $res = $installer->{$method}(); if (PEAR::isError($res)) { return $res; } $res = xf_db_query("update dataface__modules set `module_version`='" . addslashes($update) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } } $res = xf_db_query("update dataface__modules set `module_version`='" . addslashes($fsversion) . "'", df_db()); if (!$res) { throw new Exception(xf_db_error(df_db()), E_USER_ERROR); } } }
/** * @brief Cleans up old import tables. Any import tables older (in seconds) than the * garbage collector threshold (as defined in $app->_conf['garbage_collector_threshold']) * will be dropped. * * * */ function cleanImportTables() { $tables = $this->getImportTables(); $app =& Dataface_Application::getInstance(); $garbageLifetime = $app->_conf['garbage_collector_threshold']; foreach ($tables as $table) { $matches = array(); if (preg_match('/^' . $this->tablename . '__import_(\\d+)_(\\d)$/', $table, $matches)) { if (time() - intval($matches[1]) > intval($garbageLifetime)) { $res = xf_db_query("DROP TABLE `{$table}`", $this->db); if (!$res) { throw new Exception("Problem occurred attemtping to clean up old import table '{$table}'. MySQL returned an error: " . xf_db_error($this->db) . "\n", E_USER_ERROR); } } } } }
/** * Returns an array of history ids of history records that match the * given query. */ function findMatchingSnapshots($record, $query, $idsOnly = true) { $app =& Dataface_Application::getInstance(); $htablename = $record->_table->tablename . '__history'; if (!Dataface_Table::tableExists($htablename)) { return array(); } $keys = $record->strvals(array_keys($record->_table->keys())); foreach ($keys as $key => $val) { $query[$key] = '=' . $val; } if ($idsOnly) { $qbuilder = new Dataface_QueryBuilder($htablename, $query); $sql = $qbuilder->select(array('history__id'), $query); $res = xf_db_query($sql, df_db()); $ids = array(); while ($row = xf_db_fetch_row($res)) { $ids[] = $row[0]; } @xf_db_free_result($res); return $ids; } else { return df_get_records_array($htablename, $query); } }
function handle(&$params) { $app = Dataface_Application::getInstance(); if (!isset($_GET['code'])) { // We need this parameter or we can do nothing. return PEAR::raiseError(df_translate('actions.activate.MESSAGE_MISSING_CODE_PARAMETER', 'The code parameter is missing from your request. Validation cannot take place. Please check your url and try again.'), DATAFACE_E_ERROR); } // Step 0: Find out what the redirect URL will be // We accept --redirect markers to specify which page to redirect // to after we're done. This will usually be the page that the // user was on before they went to the login page. if (isset($_SESSION['--redirect'])) { $url = $_SESSION['--redirect']; } else { if (isset($_SESSION['-redirect'])) { $url = $_SESSION['-redirect']; } else { if (isset($_REQUEST['--redirect'])) { $url = $_REQUEST['--redirect']; } else { if (isset($_REQUEST['-redirect'])) { $url = $_REQUEST['-redirect']; } else { $url = $app->url('-action=' . $app->_conf['default_action']); } } } } if (strpos($url, '?') === false) { $url .= '?'; } // Step 1: Delete all registrations older than time limit $time_limit = 24 * 60 * 60; // 1 day if (isset($params['time_limit'])) { $time_limit = intval($params['time_limit']); } $res = xf_db_query("delete from dataface__registrations \n\t\t\t\twhere registration_date < '" . addslashes(date('Y-m-d H:i:s', time() - $time_limit)) . "'", df_db()); if (!$res) { error_log(xf_db_error(df_db())); throw new Exception("Failed to delete registrations due to an SQL error. See error log for details.", E_USER_ERROR); } // Step 2: Load the specified registration information $res = xf_db_query("select registration_data from dataface__registrations\n\t\t\t\twhere registration_code = '" . addslashes($_GET['code']) . "'", df_db()); if (!$res) { error_log(xf_db_error(df_db())); throw new Exception("Failed to load registration information due to an SQL error. See error log for details.", E_USER_ERROR); } if (xf_db_num_rows($res) == 0) { // We didn't find any records matching the prescribed code, so // we redirect the user to their desired page and inform them // that the registration didn't work. $msg = df_translate('actions.activate.MESSAGE_REGISTRATION_NOT_FOUND', 'No registration information could be found to match this code. Please try registering again.'); $app->redirect($url . '&--msg=' . urlencode($msg)); } // Step 3: Check to make sure that there are no other users with the // same name. list($raw_data) = xf_db_fetch_row($res); $values = unserialize($raw_data); $appdel = $app->getDelegate(); if (isset($appdel) and method_exists($appdel, 'validateRegistrationForm')) { $res = $appdel->validateRegistrationForm($values); if (PEAR::isError($res)) { $msg = $res->getMessage(); $app->redirect($url . '&--msg=' . urlencode($msg)); } } else { $res = xf_db_query("select count(*) from \n\t\t\t\t`" . str_replace('`', '', $app->_conf['_auth']['users_table']) . "` \n\t\t\t\twhere `" . str_replace('`', '', $app->_conf['_auth']['username_column']) . "` = '" . addslashes($values[$app->_conf['_auth']['username_column']]) . "'\n\t\t\t\t", df_db()); if (!$res) { error_log(xf_db_error(df_db())); throw new Exception("Failed to find user records due to an SQL error. See error log for details.", E_USER_ERROR); } list($num) = xf_db_fetch_row($res); if ($num > 0) { $msg = df_translate('actions.activate.MESSAGE_DUPLICATE_USER', 'Registration failed because a user already exists by that name. Try registering again with a different name.'); $app->redirect($url . '&--msg=' . urlencode($msg)); } } // Step 4: Save the registration data and log the user in. $record = new Dataface_Record($app->_conf['_auth']['users_table'], array()); $record->setValues($values); $res = $record->save(); if (PEAR::isError($res)) { $app->redirect($url . '&--msg=' . urlencode($res->getMessage())); } else { $res = xf_db_query("delete from dataface__registrations\n\t\t\t\t\twhere registration_code = '" . addslashes($_GET['code']) . "'", df_db()); if (!$res) { error_log(xf_db_error(df_db())); throw new Exception("Failed to clean up old registrations due to an SQL error. See error log for details.", E_USER_ERROR); } $msg = df_translate('actions.activate.MESSAGE_REGISTRATION_COMPLETE', 'Registration complete. You are now logged in.'); $_SESSION['UserName'] = $record->strval($app->_conf['_auth']['username_column']); import('Dataface/Utilities.php'); Dataface_Utilities::fireEvent('after_action_activate', array('record' => $record)); $app->redirect($url . '&--msg=' . urlencode($msg)); } }
* License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *=============================================================================== */ //ini_set('include_path', '..:../lib:'.ini_get('include_path')); // define('DB_HOST', 'localhost'); define('DB_NAME', 'test_contentmanager'); define('DB_USER', 'tester'); define('DB_PASSWORD', 'test'); xf_db_connect(DB_HOST, DB_USER, DB_PASSWORD); @xf_db_query("create database `" . DB_NAME . "`"); /** * The URL of the testApp.php file which contains the test web application. */ define('TEST_APP_URL', 'http://powerbook.local/~shannah/dataface/tests/testApp.php'); // The path to the database installation (from the Document root) $dataface_url = '/~shannah/dataface'; require_once '../dataface-public-api.php'; df_init(__FILE__, $dataface_url); require_once 'Dataface/Application.php';
function df_q($sql) { if (is_array($sql)) { foreach ($sql as $q) { $res = df_q($q); } return $res; } else { $res = xf_db_query($sql, df_db()); if (!$res) { error_log("Error executing SQL: {$sql}"); error_log(xf_db_error(df_db())); throw new Exception(xf_db_error(df_db())); } return $res; } }
function writeConfigToDB() { import('Dataface/Table.php'); import('Dataface/Record.php'); import('Dataface/IO.php'); if (!is_a($this, 'Dataface_ConfigTool')) { throw new Exception('ConfigWriter methods are only to be used via the Dataface_ConfigTool class.', E_USER_ERROR); } $this->loadAllConfig(); $app =& Dataface_Application::getInstance(); // first let's make copies of the current configuration. $timestamp = time(); foreach ($this->configTypes as $type) { $res = xf_db_query("CREATE TABLE `__" . addslashes($type) . "__" . $timestamp . "` SELECT * FROM `__" . addslashes($type) . "__`", $app->db()); if (!$res) { throw new Exception("Failed to make backup of table '__" . $type . "__'." . xf_db_error($app->db()), E_USER_ERROR); } } $res = xf_db_query("CREATE TABLE `__properties__" . $timestamp . "` SELECT * FROM `__properties__`", $app->db()); if (!$res) { throw new Exception("Failed to make backup of table '__properties__'.", $app->db()); } // Now that we have made our backups, we can continue to write the configuration to the database. //print_r($this->config); foreach ($this->configTypes as $type) { $res = xf_db_query("DELETE FROM `__" . addslashes($type) . "__`", $app->db()); if (!$res) { throw new Exception("Failed to delete all records from table '__" . $type . "__'", $app->db()); } foreach ($this->config[$type] as $tablename => $tableConfig) { foreach ($tableConfig as $sectionname => $section) { $tableObj =& Dataface_Table::loadTable('__' . $type . '__'); $record = new Dataface_Record('__' . $type . '__', array()); $record->useMetaData = false; // some of the field names begin with '__' which would conflict with dataface's handling of MetaData fields. foreach (array_keys($tableObj->fields()) as $fieldname) { $record->setValue($fieldname, @$section[$fieldname]); unset($section[$fieldname]); } $record->setValue('name', $sectionname); $record->setValue('table', $tablename); //echo nl2br("Section name: $sectionname\nTable: $tablename\n"); //print_r($record->strvals()); echo nl2br("\nWriting section: {$sectionname} : "); print_r($record->strvals()); // now that we have created the record, we write the record $io = new Dataface_IO('__' . $type . '__'); $res = $io->write($record); if (PEAR::isError($res)) { throw new Exception($res->toString(), E_USER_ERROR); } else { if (!$res) { throw new Exception("Failure to write to database for unknown reason.", E_USER_ERROR); } } // now for the rest of the properties. foreach ($section as $propertyName => $propertyValue) { $res = xf_db_query("\n\t\t\t\t\t\t\tINSERT INTO \n\t\t\t\t\t\t\t `__properties__` \n\t\t\t\t\t\t\t (`parent_id`,`parent_type`,`property_name`,`property_value`)\n\t\t\t\t\t\t\tVALUES\n\t\t\t\t\t\t\t ('" . $record->val($type . '_id') . "', \n\t\t\t\t\t\t\t '" . addslashes($type) . "',\n\t\t\t\t\t\t\t '" . addslashes($propertyName) . "',\n\t\t\t\t\t\t\t '" . addslashes($propertyValue) . "')", $app->db()); if (!$res) { throw new Exception("Failed to add property '{$propertyName}' to table '__properties__' with value '{$propertyValue}'" . xf_db_error($app->db()), E_USER_ERROR); } } unset($tableObj); unset($record); unset($io); } } } }