/** * Tests creating/dropping all of the MPE temporary tables. * * Requirements: * Test 1: Test that all MPE temporary tables can be created and dropped. */ function testAllMaintenanceStatisticsTables() { $tmpTables = array('tmp_ad_impression', 'tmp_ad_click', 'tmp_tracker_impression_ad_impression_connection', 'tmp_tracker_impression_ad_click_connection', 'tmp_ad_connection'); // Test 1 $conf =& $GLOBALS['_MAX']['CONF']; $conf['table']['prefix'] = ''; $oDbh =& OA_DB::singleton(); foreach ($tmpTables as $tableName) { $query = "SELECT * FROM {$tableName}"; OA::disableErrorHandling(); $result = $oDbh->query($query); OA::enableErrorHandling(); $this->assertEqual(strtolower(get_class($result)), 'mdb2_error'); } $oTable =& OA_DB_Table_Statistics::singleton(); foreach ($tmpTables as $tableName) { $oTable->createTable($tableName); } $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); foreach ($tmpTables as $tableName) { // Test that the table has been created $query = "SELECT * FROM {$tableName}"; $result = $oDbh->query($query); $this->assertTrue($result); // Test that the table can be dropped // Use a different query to overcome MDB2 query buffering $query = "SELECT foo FROM {$tableName}"; OA::disableErrorHandling(); $result = $oDbh->query($query); OA::enableErrorHandling(); $this->assertEqual(strtolower(get_class($result)), 'mdb2_error'); } // Restore the testing environment TestEnv::restoreEnv(); }
/** * A method to launch and display the widget * * @param array $aParams The parameters array, usually $_REQUEST */ function display() { if (!$this->oTpl->is_cached()) { OA::disableErrorHandling(); $oRss = new XML_RSS($this->url); $result = $oRss->parse(); OA::enableErrorHandling(); // ignore bad character error which could appear if rss is using invalid characters if (PEAR::isError($result)) { if (!strstr($result->getMessage(), 'Invalid character')) { PEAR::raiseError($result); // rethrow $this->oTpl->caching = false; } } $aPost = array_slice($oRss->getItems(), 0, $this->posts); foreach ($aPost as $key => $aValue) { $aPost[$key]['origTitle'] = $aValue['title']; if (strlen($aValue['title']) > 38) { $aPost[$key]['title'] = substr($aValue['title'], 0, 38) . '...'; } } $this->oTpl->assign('title', $this->title); $this->oTpl->assign('feed', $aPost); $this->oTpl->assign('siteTitle', $this->siteTitle); $this->oTpl->assign('siteUrl', $this->siteUrl); } $this->oTpl->display(); }
function execute($aParams) { $this->oUpgrade =& $aParams[0]; $this->oDbh =& OA_DB::singleton(); $prefix = $GLOBALS['_MAX']['CONF']['table']['prefix']; if ($this->oDbh->dbsyntax == 'pgsql') { $oTable =& $this->oUpgrade->oDBUpgrader->oTable; foreach ($oTable->aDefinition['tables'] as $tableName => $aTable) { foreach ($aTable['fields'] as $fieldName => $aField) { if (!empty($aField['autoincrement'])) { // Check actual sequence name $oldSequenceName = $this->getLinkedSequence($prefix . $tableName, $fieldName); if ($oldSequenceName) { $newSequenceName = OA_DB::getSequenceName($this->oDbh, $tableName, $fieldName); if ($oldSequenceName != $newSequenceName) { $this->logOnly("Non standard sequence name found: " . $oldSequenceName); $qTable = $this->oDbh->quoteIdentifier($prefix . $tableName, true); $qField = $this->oDbh->quoteIdentifier($fieldName, true); $qOldSequence = $this->oDbh->quoteIdentifier($oldSequenceName, true); $qNewSequence = $this->oDbh->quoteIdentifier($newSequenceName, true); OA::disableErrorHandling(); $result = $this->oDbh->exec("ALTER TABLE {$qOldSequence} RENAME TO {$qNewSequence}"); if (PEAR::isError($result)) { if ($result->getCode() == MDB2_ERROR_ALREADY_EXISTS) { $result = $this->oDbh->exec("DROP SEQUENCE {$qNewSequence}"); if (PEAR::isError($result)) { $this->logError("Could not drop existing sequence {$newSequenceName}: " . $result->getUserInfo()); return false; } $result = $this->oDbh->exec("ALTER TABLE {$qOldSequence} RENAME TO {$qNewSequence}"); } } if (PEAR::isError($result)) { $this->logError("Could not rename {$oldSequenceName} to {$newSequenceName}: " . $result->getUserInfo()); return false; } $result = $this->oDbh->exec("ALTER TABLE {$qTable} ALTER {$qField} SET DEFAULT nextval(" . $this->oDbh->quote($qNewSequence) . ")"); if (PEAR::isError($result)) { $this->logError("Could not set column default to sequence {$newSequenceName}: " . $result->getUserInfo()); return false; } OA::enableErrorHandling(); $result = $oTable->resetSequenceByData($tableName, $fieldName); if (PEAR::isError($result)) { $this->logError("Could not reset sequence value for {$newSequenceName}: " . $result->getUserInfo()); return false; } $this->logOnly("Successfully renamed {$oldSequenceName} to {$newSequenceName}"); } } else { $this->logOnly("No sequence found for {$tableName}.{$fieldName}"); } } } } } return true; }
/** * A method to test the checkOperationIntervalValue() method. * */ function testCheckOperationIntervalValue() { OA::disableErrorHandling(); for ($i = -1; $i <= 61; $i++) { $result = OX_OperationInterval::checkOperationIntervalValue($i); if ($i == 1 || $i == 2 || $i == 3 || $i == 4 || $i == 5 || $i == 6 || $i == 10 || $i == 12 || $i == 15 || $i == 20 || $i == 30 || $i == 60) { $this->assertTrue($result); } else { $this->assertTrue(PEAR::isError($result)); } $result = OX_OperationInterval::checkOperationIntervalValue(120); $this->assertTrue(PEAR::isError($result)); } OA::enableErrorHandling(); }
/** * Resets a (postgresql) sequence to 1 * similar to OA_DB_Table::resetSequence() * DOESN'T SEEM TO WORK THO * * @param string $sequence the name of the sequence to reset * @return boolean true on success, false otherwise */ function resetSequence($tableName) { $aConf = $GLOBALS['_MAX']['CONF']; $oDbh = OA_DB::singleton(); if ($aConf['database']['type'] == 'pgsql') { OA_DB::setCaseSensitive(); $aSequences = $oDbh->manager->listSequences(); OA_DB::disableCaseSensitive(); if (is_array($aSequences)) { OA::debug('Resetting sequence ' . $sequence, PEAR_LOG_DEBUG); OA::disableErrorHandling(null); $tableName = substr($aConf['table']['prefix'] . $tableName, 0, 29) . '_'; foreach ($aSequences as $k => $sequence) { if (strpos($sequence, $tableName) === 0) { $sequence = $oDbh->quoteIdentifier($sequence . '_seq', true); $result = $oDbh->exec("SELECT setval('{$sequence}', 1, false)"); break; } } OA::enableErrorHandling(); if (PEAR::isError($result)) { OA::debug('Unable to reset sequence on table ' . $tableName, PEAR_LOG_ERR); return false; } } } else { if ($aConf['database']['type'] == 'mysql') { $tableName = $aConf['table']['prefix'] . $tableName; OA::disableErrorHandling(); $result = $oDbh->exec("ALTER TABLE {$tableName} AUTO_INCREMENT = 1"); OA::enableErrorHandling(); if (PEAR::isError($result)) { OA::debug('Unable to reset sequence on table ' . $tableName, PEAR_LOG_ERR); return false; } } } return true; }
/** * Update checkForUpdates value into Settings * * @param boolean $syncEnabled * @return boolean */ function putSyncSettings($syncEnabled) { require_once MAX_PATH . '/lib/OA/Admin/Settings.php'; require_once MAX_PATH . '/lib/OA/Sync.php'; $oSettings = new OA_Admin_Settings(); $oSettings->settingChange('sync', 'checkForUpdates', $syncEnabled); // Reset Sync cache OA_Dal_ApplicationVariables::delete('sync_cache'); OA_Dal_ApplicationVariables::delete('sync_timestamp'); OA_Dal_ApplicationVariables::delete('sync_last_seen'); if (!$oSettings->writeConfigChange()) { $this->oLogger->logError('Error saving Sync settings to the config file'); return false; } // Generate a new Platform Hash if empty $platformHash = OA_Dal_ApplicationVariables::get('platform_hash'); if (empty($platformHash) && !OA_Dal_ApplicationVariables::set('platform_hash', OA_Dal_ApplicationVariables::generatePlatformHash())) { $this->oLogger->logError('Error inserting Platform Hash into database'); return false; } $oSync = new OA_Sync(); OA::disableErrorHandling(); $oSync->checkForUpdates(); OA::enableErrorHandling(); return true; }
function _execQuery($query) { OA::disableErrorHandling(); $result = $this->oDbh->exec($query); OA::enableErrorHandling(); if (PEAR::isError($result)) { return false; } return $result; }
function setUp() { OA::disableErrorHandling(); }
function parseLogFile() { $oDbh =& OA_DB::singleton(); OA::disableErrorHandling(); $fpsql = fopen(MAX_PATH . "/var/sql.log", 'r'); if (!$fpsql) { $aResult[]['error'] = 'unable to open file ' . MAX_PATH . "/var/sql.log"; $aResult[]['error'] = 'to create ' . MAX_PATH . '/var/sql.log, trigger logging by setting [debug] logSQL="select|update|insert|delete (as appropriate) in your conf file.'; $aResult[]['error'] = 'running the devel explain utility also creates mysqlsla.log which can be fed to mysqlsla for analysis: mysqlsla --user <dbuser> --host <dbhost> --port <dbport> --te --sort e --raw mysqlsla.log > mysqlsla.txt'; $aResult[]['error'] = 'running the devel explain utility also creates mysqlqp.log which can be fed to mysql-query-profiler for analysis: mysql-query-profiler --user <dbuser> --host <dbhost> --port <dbport> --database <dbname> mysqlqp.log > mysqlqp.txt '; return $aResult; } while ($v = fgets($fpsql, 4096)) { $aQueries[] = $v; } fclose($fpsql); $aQueries = array_unique($aQueries); if (count($aQueries) > 1) { // write a log for use by mysqlsla $fpsla = fopen(MAX_PATH . "/var/mysqlsla.log", 'w'); fwrite($fpsla, "USE {$oDbh->connected_database_name};\n"); // write a log for use by mysql-query-profiler $fpmqp = fopen(MAX_PATH . "/var/mysqlqp.log", 'w'); foreach ($aQueries as $k => $v) { if (substr_count($v, 'tmp_') == 0) { $i = preg_match('/((\\[(?P<type>[\\w]+)\\])(?P<query>[\\w\\W\\s]+))/', $v, $aMatches); if ($i) { $type = $aMatches['type']; $query = trim($aMatches['query']); $aResult[$k]['query'] = $query; if ($type == 'prepare' || strpos($query, 'PREPARE MDB2_STATEMENT') === 0) { $aResult[$k]['error'] = 'cannot execute statement: ' . $query; } else { $result = $oDbh->getAssoc('EXPLAIN ' . $query); if (!PEAR::isError($result)) { $aResult[$k]['result'] = $result; fwrite($fpsla, $query . "\n"); fwrite($fpmqp, $query . "\n\n"); } else { //$aResult[$k]['error'] = $result->getUserInfo(); $aResult[$k]['error'] = 'failed to explain statement: ' . $query; } } } } } fclose($fpsla); fclose($fpmqp); $aConf = $GLOBALS['_MAX']['CONF']['database']; $cmd = "sudo /usr/local/sbin/mysqlsla --user {$aConf['username']} --host {$aConf['host']} --port {$aConf['port']} --time-each-query --sort e --top 50 --flush-qc --avg 10 --raw mysqlsla.log > mysqlsla.txt"; $fpsla = fopen(MAX_PATH . "/var/mysqlslarun", 'w'); fwrite($fpsla, $cmd); fclose($fpsla); $cmd = "mysql-query-profiler --user {$aConf['username']} --host {$aConf['host']} --port {$aConf['port']} --database {$aConf['name']} mysqlqp.log > mysqlqp.txt"; $fpmqp = fopen(MAX_PATH . "/var/mysqlqprun", 'w'); fwrite($fpmqp, $cmd); fclose($fpmqp); } OA::enableErrorHandling(); return $aResult; }
/** * Method to test function validateDatabaseName in MDB2 Manager modules */ function testValidateTableName() { $aConf = $GLOBALS['_MAX']['CONF']; OA::disableErrorHandling(); $vals = array(0, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 156, 255); //$pattern = ''; foreach ($vals as $i) { //$pattern.= '\\x'.dechex($i); $result = OA_DB::validateTableName('o' . chr($i) . '_table'); $this->assertTrue(PEAR::isError($result), 'chr(' . $i . ') /' . dechex($i)); } if ($aConf['database']['type'] == 'mysql') { $result = OA_DB::validateTableName('abcdefghij1234567890123456789012345678901234567890123456789012345'); //65 chars $this->assertTrue(PEAR::isError($result)); $this->assertTrue(OA_DB::validateTableName('abcdefghij123456789012345678901234567890123456789012345678901234')); //64 chars $this->assertTrue(OA_DB::validateTableName('aBcDeFgHiJkLmNoPqRsTuVwXyZ_$1234567890')); $result = OA_DB::validateTableName('2_$'); $this->assertFalse(PEAR::isError($result)); $result = OA_DB::validateTableName('$_2'); $this->assertFalse(PEAR::isError($result)); $result = OA_DB::validateTableName('_$2'); $this->assertFalse(PEAR::isError($result)); } if ($aConf['database']['type'] == 'pgsql') { $result = OA_DB::validateTableName('abcdefghij123456789012345678901234567890123456789012345678901234'); //64 chars $this->assertTrue(PEAR::isError($result)); $this->assertTrue(OA_DB::validateTableName('abcdefghij12345678901234567890123456789012345678901234567890123')); //63 chars $result = OA_DB::validateTableName('0x_table'); $this->assertTrue(PEAR::isError($result)); $result = OA_DB::validateTableName(' x_table'); $this->assertTrue(PEAR::isError($result)); $this->assertTrue(OA_DB::validateTableName('aBcDeFgHiJkLmNoPqRsTuVwXyZ_$1234567890')); $result = OA_DB::validateTableName('2_$'); $this->assertTrue(PEAR::isError($result)); $result = OA_DB::validateTableName('$_2'); $this->assertTrue(PEAR::isError($result)); $result = OA_DB::validateTableName('_$2'); $this->assertFalse(PEAR::isError($result)); } OA::enableErrorHandling(); }
require_once MAX_PATH . '/www/admin/config.php'; require_once MAX_PATH . '/lib/OA/Dal/ApplicationVariables.php'; require_once MAX_PATH . '/lib/OA/Sync.php'; require_once MAX_PATH . '/lib/max/language/Loader.php'; Language_Loader::load('settings'); // Security check OA_Permission::enforceAccount(OA_ACCOUNT_ADMIN); /*-------------------------------------------------------*/ /* HTML framework */ /*-------------------------------------------------------*/ $title = $GLOBALS['strPlatformHashRegenerate']; $oHeaderModel = new OA_Admin_UI_Model_PageHeaderModel($title); phpAds_PageHeader('account-settings-index', $oHeaderModel); /*-------------------------------------------------------*/ /* Main code */ /*-------------------------------------------------------*/ $platformHash = OA_Dal_ApplicationVariables::generatePlatformHash(); if (OA_Dal_ApplicationVariables::set('platform_hash', $platformHash)) { echo $GLOBALS['strNewPlatformHash'] . " " . $platformHash; $oSync = new OA_Sync(); OA::disableErrorHandling(); $oSync->checkForUpdates(); OA::enableErrorHandling(); } else { $this->oLogger->logError('Error inserting Platform Hash into database'); echo $GLOBALS['strPlatformHashInsertingError']; } /*-------------------------------------------------------*/ /* HTML framework */ /*-------------------------------------------------------*/ phpAds_PageFooter();
/** * A method to test the drop table method. * * Requirements: * Test 1: Test that a table can be dropped. * Test 2: Test that a temporary table can be dropped. * Test 3: Test that a tablename with uppercase prefix can be dropped. * Test 4: Test that a tablename with a mixed prefix can be dropped. */ function testDropTable() { // Test 1 $conf =& $GLOBALS['_MAX']['CONF']; $prefix = $conf['table']['prefix']; $oDbh =& OA_DB::singleton(); $table = $oDbh->quoteIdentifier($prefix . 'foo', true); $oTable = new OA_DB_Table(); $query = "CREATE TABLE {$table} ( a INTEGER )"; $oDbh->query($query); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual($aExistingTables[0], $prefix . 'foo'); $this->assertTrue($oTable->dropTable($prefix . 'foo')); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual(count($aExistingTables), 0, $prefix . 'foo'); //TestEnv::restoreEnv(); // Test 2 $conf =& $GLOBALS['_MAX']['CONF']; $oDbh =& OA_DB::singleton(); $oTable = new OA_DB_Table(); $table = $oDbh->quoteIdentifier($prefix . 'foo', true); $query = "CREATE TEMPORARY TABLE {$table} ( a INTEGER )"; $oDbh->query($query); // Test table exists with an insert $query = "INSERT INTO {$table} (a) VALUES (37)"; $result = $oDbh->query($query); $this->assertTrue($result); $this->assertTrue($oTable->dropTable($prefix . 'foo')); // Test table does not exist with an insert $query = "INSERT INTO {$table} (a) VALUES (37)"; OA::disableErrorHandling(); $result = $oDbh->query($query); OA::enableErrorHandling(); $this->assertEqual(strtolower(get_class($result)), 'mdb2_error'); //TestEnv::restoreEnv(); // Test 3 $conf =& $GLOBALS['_MAX']['CONF']; $conf['table']['prefix'] = 'OA_'; $prefix = $conf['table']['prefix']; $oDbh =& OA_DB::singleton(); $table = $oDbh->quoteIdentifier($prefix . 'foo', true); $query = "CREATE TABLE {$table} ( a INTEGER )"; $oDbh->query($query); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual($aExistingTables[0], 'OA_foo'); $this->assertTrue($oTable->dropTable('OA_foo')); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual(count($aExistingTables), 0, 'Table OA_foo'); //TestEnv::restoreEnv(); // Test 4 $conf =& $GLOBALS['_MAX']['CONF']; $conf['table']['prefix'] = 'oA_'; $prefix = $conf['table']['prefix']; $oDbh =& OA_DB::singleton(); $table = $oDbh->quoteIdentifier($prefix . 'foo', true); $oTable = new OA_DB_Table(); $query = "CREATE TABLE {$table} ( a INTEGER )"; $oDbh->query($query); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual($aExistingTables[0], 'oA_foo'); $this->assertTrue($oTable->dropTable('oA_foo')); $aExistingTables = OA_DB_Table::listOATablesCaseSensitive(); $this->assertEqual(count($aExistingTables), 0, 'Table oA_foo'); //TestEnv::restoreEnv(); }
/** * Resets a (postgresql) sequence to a value * * Note: the value parameter is ignored on MySQL. Autoincrements will always be resetted * to 1 or the highest value already present in the table. * * @param string $sequence the name of the sequence to reset * @param int $value the sequence value for the next entry * @return boolean true on success, false otherwise */ function resetSequence($sequence, $value = 1) { $aConf = $GLOBALS['_MAX']['CONF']; OA::debug('Resetting sequence ' . $sequence, PEAR_LOG_DEBUG); OA::disableErrorHandling(null); if ($aConf['database']['type'] == 'pgsql') { if ($value < 1) { $value = 1; } else { $value = (int) $value; } $sequence = $this->oDbh->quoteIdentifier($sequence, true); $result = $this->oDbh->exec("SELECT setval('{$sequence}', {$value}, false)"); OA::enableErrorHandling(); if (PEAR::isError($result)) { OA::debug('Unable to reset sequence ' . $sequence, PEAR_LOG_ERR); return false; } } else { if ($aConf['database']['type'] == 'mysql') { $result = $this->oDbh->exec("ALTER TABLE {$GLOBALS['_MAX']['CONF']['table']['prefix']}{$sequence} AUTO_INCREMENT = 1"); OA::enableErrorHandling(); if (PEAR::isError($result)) { OA::debug('Unable to reset auto increment on table ' . $sequence, PEAR_LOG_ERR); return false; } } } return true; }
/** * A method to perform a call to the OAC XML-RPC server * * @param string $methodName The RPC method name * @param int $authType Type of required authentication, see constants * @param array $aParams Array of XML_RPC_Values * @return mixed The returned value or PEAR_Error on error */ function call($methodName, $authType, $aParams = null, $recursionLevel = 0) { $aPref = $GLOBALS['_MAX']['PREF']; $oMsg = new XML_RPC_Message('oac.' . $methodName); $oMsg->remove_extra_lines = $this->remove_extra_lines; $aHeader = array('protocolVersion' => OA_DAL_CENTRAL_PROTOCOL_VERSION, 'ph' => OA_Dal_ApplicationVariables::get('platform_hash')); if ($authType & OA_DAL_CENTRAL_AUTH_M2M) { if (empty($this->oCentral)) { MAX::raiseError('M2M authentication used with a non M2M-enabled OA_Central object'); } $aHeader['accountId'] = (int) $this->oCentral->accountId; $aHeader['m2mPassword'] = OA_Dal_Central_M2M::getM2MPassword($this->oCentral->accountId); if (empty($aHeader['m2mPassword']) || isset($GLOBALS['OX_CLEAR_M2M_PASSWORD'][$this->oCentral->accountId]) && $GLOBALS['OX_CLEAR_M2M_PASSWORD'][$this->oCentral->accountId] == true) { // No password stored, connect! $result = $this->oCentral->connectM2M(); if (PEAR::isError($result)) { return $result; } $aHeader['m2mPassword'] = $result; } } if ($authType & OA_DAL_CENTRAL_AUTH_SSO) { $aHeader['ssoUsername'] = $this->ssoUsername; $aHeader['ssoPassword'] = $this->ssoPassword; } if ($authType & OA_DAL_CENTRAL_AUTH_CAPTCHA) { $aHeader['ssoCaptcha'] = isset($_REQUEST['captcha-value']) ? $_REQUEST['captcha-value'] : ''; $aHeader['ssoCaptchaRandom'] = isset($_REQUEST['captcha-random']) ? $_REQUEST['captcha-random'] : ''; } $oMsg->addParam(XML_RPC_encode($aHeader)); if (is_array($aParams)) { foreach ($aParams as $oParam) { $oMsg->addParam($oParam); } } OA::disableErrorHandling(); $oResponse = $this->oXml->send($oMsg, OAC_RPC_TIMEOUT); OA::enableErrorHandling(); if (!$oResponse) { return new PEAR_Error('XML-RPC connection error', OA_CENTRAL_ERROR_XML_RPC_CONNECTION_ERROR); } if ($oResponse->faultCode() || $oResponse->faultString()) { // Deal with particular response codes at Rpc level, avoiding endless recursion if (!$recursionLevel) { switch ($oResponse->faultCode()) { case OA_CENTRAL_ERROR_PLATFORM_DOES_NOT_EXIST: OA::disableErrorHandling(); $oSync = new OA_Sync(); $oSync->checkForUpdates(); OA::enableErrorHandling(); return $this->call($methodName, $authType, $aParams, ++$recursionLevel); case OA_CENTRAL_ERROR_ERROR_NOT_AUTHORIZED: if (!($authType & OA_DAL_CENTRAL_AUTH_M2M)) { break; } else { // Go with OA_CENTRAL_ERROR_M2M_PASSWORD_INVALID } case OA_CENTRAL_ERROR_M2M_PASSWORD_INVALID: // OAP was asked to connect the account to get a password // Set clear the password and retry (old password is in DB in case of problems with receiving new one) $GLOBALS['OX_CLEAR_M2M_PASSWORD'][$this->oCentral->accountId] = true; return $this->call($methodName, $authType, $aParams, ++$recursionLevel, true); case OA_CENTRAL_ERROR_M2M_PASSWORD_EXPIRED: $result = $this->_reconnectM2M(); if (PEAR::isError($result)) { return $result; } return $this->call($methodName, $authType, $aParams, ++$recursionLevel); } } return new PEAR_Error($oResponse->faultString(), $oResponse->faultCode()); } $ret = XML_RPC_decode($oResponse->value()); // handling unknown server errors // this may happen due to difference in Java/PHP XML-RPC handling errors if (is_array($ret) && (isset($ret['faultCode']) || isset($ret['faultCode']))) { return new PEAR_Error('Unknown server error', OA_CENTRAL_ERROR_SERVER_ERROR); } return $ret; }
function generateTags($zoneId, $codeType, $aParams = null) { // Backwards Compatibity Array for code types $aBackwardsCompatibityTypes = array('adframe' => 'invocationTags:oxInvocationTags:adframe', 'adjs' => 'invocationTags:oxInvocationTags:adjs', 'adlayer' => 'invocationTags:oxInvocationTags:adlayer', 'adview' => 'invocationTags:oxInvocationTags:adview', 'adviewnocookies' => 'invocationTags:oxInvocationTags:adviewnocookies', 'local' => 'invocationTags:oxInvocationTags:local', 'popup' => 'invocationTags:oxInvocationTags:popup', 'xmlrpc' => 'invocationTags:oxInvocationTags:xmlrpc'); // Translate old code type to new Component Identifier if (array_key_exists($codeType, $aBackwardsCompatibityTypes)) { $codeType = $aBackwardsCompatibityTypes[$codeType]; } if ($this->checkIdExistence('zones', $zoneId)) { $doZones = OA_Dal::staticGetDO('zones', $zoneId); if (!$this->checkPermissions(null, 'affiliates', $doZones->affiliateid, OA_PERM_ZONE_INVOCATION)) { return false; } $aAllowedTags = $this->getAllowedTags(); if (!in_array($codeType, $aAllowedTags)) { $this->raiseError('Field \'codeType\' must be one of the enum: ' . join(', ', $aAllowedTags)); return false; } if (!empty($codeType)) { require_once MAX_PATH . '/lib/max/Admin/Invocation.php'; $maxInvocation = new MAX_Admin_Invocation(); // factory plugin for this $codetype OA::disableErrorHandling(); $invocationTag = OX_Component::factoryByComponentIdentifier($codeType); OA::enableErrorHandling(); if ($invocationTag === false) { $this->raiseError('Error while factory invocationTag plugin'); return false; } $invocationTag->setInvocation($maxInvocation); $aParams['zoneid'] = $zoneId; $aParams['codetype'] = $codeType; $buffer = $maxInvocation->generateInvocationCode($invocationTag, $aParams); return $buffer; } else { $this->raiseError('Parameter codeType wrong'); } } return false; }
/** * A method to validate table name * * @param string $name * @return true if valid PEAR error otherwise */ static function validateTableName($name) { /*if ( !preg_match( '/^([a-zA-z_])([a-zA-z0-9_])*$/', $name) ) { $result = false; } else if (preg_match( '/(\\\\|\/|\"|\\\'| |\(|\)|\:|\;|\`|\[|\]|\^)/', $name)) { $result = false; }*/ $result = true; OA::disableErrorHandling(); $pattern = '/(?P<found>[\\x00-\\x23]|[\\x25-\\x29]|[\\x2a-\\x2f]|[\\x3a-\\x3f]|[\\x40]|[\\x5b-\\x5e]|[\\x60]|[\\x7b-\\x7e]|[\\x9c]|[\\xff])/U'; if (preg_match($pattern, $name, $aMatches)) { $msg = 'Illegal character in table name ' . $aMatches['found'] . ' chr(' . ord($aMatches['found']) . ')'; $result = PEAR::raiseError($msg); } if (PEAR::isError($result)) { OA::enableErrorHandling(); $msg = 'Table names may not contain any of ! " # % & \' ( ) * + , - . \\/ : ; < = > ? @ [ \\ ] ^ ` { | } ~ £ nor any non-printing characters'; return $result; } $oDbh = OA_DB::singleton(); if (PEAR::isError($oDbh)) { OA::enableErrorHandling(); return $oDbh; } $result = $oDbh->manager->validateTableName($name); OA::enableErrorHandling(); if (PEAR::isError($result)) { return $result; } return true; }
/** * A method to test the getProcessLastRunInfo() method. * * Requirements: * Test 1: Test with invalid data, and ensure false is returned. * Test 2: Test with no data in the database and ensure null is returned. * Test 3: Test with bad table and column names, and ensure false is returned. * Test 4: Test that the correct values are returned from data_ tables. * Test 5: Test that the correct values are returned from log_ tables. */ function testGetProcessLastRunInfo() { $aConf =& $GLOBALS['_MAX']['CONF']; $oDbh =& OA_DB::singleton(); $log_maintenance_priority = $aConf['table']['prefix'] . $aConf['table']['log_maintenance_priority']; $data_raw_ad_impression = $aConf['table']['prefix'] . $aConf['table']['data_raw_ad_impression']; $oDalMaintenanceCommon = new OA_Dal_Maintenance_Common(); // Test 1 $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], 'foo', null, 'start_run', array()); $this->assertFalse($result); $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array(), null, 'start_run', 'foo'); $this->assertFalse($result); // Test 2 $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority']); $this->assertNull($result); $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array(), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertNull($result); // Test 3 OA::disableErrorHandling(); $result = $oDalMaintenanceCommon->getProcessLastRunInfo('foo', array(), null, 'start_run', array()); $this->assertFalse($result); $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('foo'), null, 'start_run', array()); $this->assertFalse($result); $result = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array(), null, 'start_run', array('tableName' => 'foo', 'type' => 'hour')); $this->assertFalse($result); OA::enableErrorHandling(); // Test 4 $query = "\n INSERT INTO\n " . $oDbh->quoteIdentifier($data_raw_ad_impression, true) . "\n (\n date_time,\n ad_id,\n creative_id,\n zone_id\n )\n VALUES\n (\n '2006-10-06 08:53:42',\n 1,\n 1,\n 1\n )"; $rows = $oDbh->exec($query); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 07:59:59'); $query = "\n INSERT INTO\n " . $oDbh->quoteIdentifier($data_raw_ad_impression, true) . "\n (\n date_time,\n ad_id,\n creative_id,\n zone_id\n )\n VALUES\n (\n '2006-10-06 09:53:42',\n 1,\n 1,\n 1\n )"; $rows = $oDbh->exec($query); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 07:59:59'); $aConf['maintenance']['operationInterval'] = 60; $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 07:59:59'); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'oi')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 07:59:59'); $aConf['maintenance']['operationInterval'] = 30; $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 07:59:59'); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'oi')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 1); $this->assertEqual($aResult['updated_to'], '2006-10-06 08:29:59'); TestEnv::restoreConfig(); TestEnv::restoreEnv(); // Test 5 $query = "\n INSERT INTO\n " . $oDbh->quoteIdentifier($log_maintenance_priority, true) . "\n (\n start_run,\n end_run,\n operation_interval,\n duration,\n run_type,\n updated_to\n )\n VALUES\n (\n '2006-10-06 12:07:01',\n '2006-10-06 12:10:01',\n 60,\n 180,\n 1,\n '2006-10-06 11:59:59'\n )"; $rows = $oDbh->exec($query); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval', 'run_type'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 3); $this->assertEqual($aResult['updated_to'], '2006-10-06 11:59:59'); $this->assertEqual($aResult['operation_interval'], 60); $this->assertEqual($aResult['run_type'], 1); $query = "\n INSERT INTO\n " . $oDbh->quoteIdentifier($log_maintenance_priority, true) . "\n (\n start_run,\n end_run,\n operation_interval,\n duration,\n run_type,\n updated_to\n )\n VALUES\n (\n '2006-10-06 11:07:01',\n '2006-10-06 11:10:01',\n 60,\n 180,\n 0,\n '2006-10-06 20:59:59'\n )"; $rows = $oDbh->exec($query); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval', 'run_type'), null, 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 3); $this->assertEqual($aResult['updated_to'], '2006-10-06 11:59:59'); $this->assertEqual($aResult['operation_interval'], 60); $this->assertEqual($aResult['run_type'], 1); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval', 'run_type'), null, 'updated_to', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 3); $this->assertEqual($aResult['updated_to'], '2006-10-06 20:59:59'); $this->assertEqual($aResult['operation_interval'], 60); $this->assertEqual($aResult['run_type'], 0); $aResult = $oDalMaintenanceCommon->getProcessLastRunInfo($aConf['table']['log_maintenance_priority'], array('operation_interval', 'run_type'), 'WHERE run_type = 0', 'start_run', array('tableName' => $aConf['table']['data_raw_ad_impression'], 'type' => 'hour')); $this->assertTrue(is_array($aResult)); $this->assertEqual(count($aResult), 3); $this->assertEqual($aResult['updated_to'], '2006-10-06 20:59:59'); $this->assertEqual($aResult['operation_interval'], 60); $this->assertEqual($aResult['run_type'], 0); TestEnv::restoreEnv(); }