* @copyright Copyright © 2006 Peter Adams * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 * @category owa * @package owa * @version $Revision$ * @since owa 1.4.0 */ class owa_base_006_update extends owa_update { var $schema_version = 6; var $is_cli_mode_required = true; function up() { $session = owa_coreAPI::entityFactory('base.session'); $session_columns = array( 'num_goals', 'num_goal_starts', 'goals_value', 'location_id', 'language', 'source_id', 'ad_id', 'campaign_id', 'latest_attributions', 'commerce_trans_count', 'commerce_trans_revenue', 'commerce_items_revenue', 'commerce_items_count', 'commerce_items_quantity', 'commerce_shipping_revenue', 'commerce_tax_revenue'); // create goal related columns $goals = owa_coreAPI::getSetting('base', 'numGoals'); for ($i=1; $i <= $goals; $i++ ) { $session_columns[] = 'goal_'.$i; $session_columns[] = 'goal_'.$i.'_start'; $session_columns[] = 'goal_'.$i.'_value'; } // add columns to owa_session foreach ( $session_columns as $session_col_name ) { $ret = $session->addColumn( $session_col_name ); if ( $ret === true ) { $this->e->notice( "$session_col_name added to owa_session" ); } else { $this->e->notice( "Adding $session_col_name to owa_session failed." ); return false; } } //rename col $ret = $session->renameColumn('source', 'medium'); if (!$ret) { $this->e->notice('Failed to rename source column to medium in owa_session'); return false; } $request = owa_coreAPI::entityFactory('base.request'); $request_columns = array( 'location_id', 'language'); // add columns to owa_session foreach ( $request_columns as $request_col_name ) { $ret = $request->addColumn( $request_col_name ); if ( $ret === true ) { $this->e->notice( "$request_col_name added to owa_request" ); } else { $this->e->notice( "Adding $request_col_name to owa_request failed." ); return false; } } $domstream = owa_coreAPI::entityFactory('base.domstream'); $ret = $domstream->addColumn('domstream_guid'); if ( $ret === true ) { $this->e->notice( "domstream_guid added to owa_domstream" ); } else { $this->e->notice( "Adding domstream_guid to owa_domstream failed." ); return false; } $db = owa_coreAPI::dbSingleton(); $ret = $db->query("update owa_domstream set domstream_guid = id"); $site = owa_coreAPI::entityFactory('base.site'); $ret = $site->addColumn('settings'); if ( $ret === true ) { $this->e->notice( "settings added to owa_site" ); } else { $this->e->notice( "Adding settings to owa_site failed." ); return false; } //$db->query("alter table owa_site DROP PRIMARY KEY"); $db->query("ALTER TABLE owa_site ADD id_1_3 INT"); if ( $ret === true ) { $this->e->notice( "id_1_3 column added to owa_site" ); } else { $this->e->notice( "adding id_1_3 column to owa_site failed." ); return false; } $ret = $db->query("update owa_site set id_1_3 = id"); if ( $ret === true ) { $this->e->notice( "populating id_1_3 in owa_site." ); } else { $this->e->notice( "population of id_1_3 column in owa_site failed." ); return false; } $ret = $db->query('ALTER TABLE owa_site MODIFY id BIGINT'); if ( $ret === true ) { $this->e->notice( "id column modified in owa_site" ); } else { $this->e->notice( "modify of id column in owa_site failed." ); return false; } $ret = $db->query("update owa_site set id = CRC32(site_id)"); if ( $ret === true ) { $this->e->notice( "populating id column in owa_site was successful." ); } else { $this->e->notice( "populating id column in owa_site failed." ); return false; } $click = owa_coreAPI::entityFactory('base.click'); $ret = $click->addColumn('dom_element_class'); if ( $ret === true ) { $this->e->notice( "dom_element_class added to owa_click" ); } else { $this->e->notice( "Adding dom_element_class to owa_click failed." ); return false; } $ret = $click->addColumn('dom_element_parent_id'); if ( $ret === true ) { $this->e->notice( "dom_element_parent_id added to owa_click" ); } else { $this->e->notice( "Adding dom_element_parent_id to owa_click failed." ); return false; } //create new entitiy tables $new_entities = array( 'base.ad_dim', 'base.source_dim', 'base.campaign_dim', 'base.location_dim', 'base.commerce_transaction_fact', 'base.commerce_line_item_fact', 'base.queue_item'); foreach ($new_entities as $entity_name) { $entity = owa_coreAPI::entityFactory($entity_name); $ret = $entity->createTable(); if ($ret === true) { $this->e->notice("$entity_name table created."); } else { $this->e->notice("$entity_name table failed."); return false; } } // must return true return true; } function down() { $session = owa_coreAPI::entityFactory('base.session'); // owa_session columns to drop $session_columns = array( 'num_goals', 'num_goal_starts', 'goals_value', 'location_id', 'language', 'source_id', 'ad_id', 'campaign_id', 'latest_attributions', 'commerce_trans_count', 'commerce_trans_revenue', 'commerce_items_revenue', 'commerce_items_count', 'commerce_items_quantity', 'commerce_shipping_revenue', 'commerce_tax_revenue'); // add in goal related columns $goals = owa_coreAPI::getSetting('base', 'numGoals'); for ($i=1; $i <= $goals; $i++ ) { $session_columns[] = 'goal_'.$i; $session_columns[] = 'goal_'.$i.'_start'; $session_columns[] = 'goal_'.$i.'_value'; } //drop columns from owa_session foreach ($session_columns as $session_col_name) { $session->dropColumn($session_col_name); } //rename col back to original $session->renameColumn('medium', 'source', true); //drop request columns $request = owa_coreAPI::entityFactory('base.request'); $request_columns = array( 'location_id', 'language'); // add columns to owa_session foreach ( $request_columns as $request_col_name ) { $ret = $request->dropColumn( $request_col_name ); } $domstream = owa_coreAPI::entityFactory('base.domstream'); $domstream->dropColumn('domstream_guid'); $site = owa_coreAPI::entityFactory('base.site'); $site->dropColumn('settings'); //$site->modifyColumn('id'); $db = owa_coreAPI::dbSingleton(); $db->query('ALTER TABLE owa_site MODIFY id SERIAL'); $db->query('UPDATE owa_site SET id = id_1_3'); $ret = $db->query('ALTER TABLE owa_site MODIFY id INT'); $db->query('ALTER TABLE owa_site DROP id_1_3'); $click = owa_coreAPI::entityFactory('base.click'); $click->dropColumn('dom_element_class'); $click->dropColumn('dom_element_parent_id'); //drop tables $new_entities = array( 'base.ad_dim', 'base.source_dim', 'base.campaign_dim', 'base.location_dim', 'base.commerce_transaction_fact', 'base.commerce_line_item_fact', 'base.queue_item'); foreach ($new_entities as $entity_name) { $entity = owa_coreAPI::entityFactory($entity_name); $ret = $entity->dropTable(); } return true; } } ?>