|
<?php |
|
|
|
// |
|
// Open Web Analytics - An Open Source Web Analytics Framework |
|
// |
|
// Copyright 2006 Peter Adams. All rights reserved. |
|
// |
|
// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
// |
|
// $Id$ |
|
// |
|
|
|
/** |
|
* 006 Update Class |
|
* |
|
* @author Peter Adams <peter@openwebanalytics.com> |
|
* @copyright Copyright © 2006 Peter Adams <peter@openwebanalytics.com> |
|
* @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; |
|
} |
|
} |
|
|
|
?> |