function canBeDeleted(&$error_message) { $childs = $this->getAllChildren(); if (MemberPropertyMembers::isMemberAssociated($this->getId())) { $error_message = lang("cannot delete member is associated"); return false; } $continue_check = false; if (count($childs) == 0) { $continue_check = true; } else { if ($this->getParentMemberId() > 0) { $child_ots = DimensionObjectTypeHierarchies::getAllChildrenObjectTypeIds($this->getDimensionId(), $this->getParentMember()->getObjectTypeId(), false); } foreach ($childs as $child) { // check if child can be put in the parent (or root) if ($this->getParentMemberId() == 0) { $dim_ot = DimensionObjectTypes::findOne(array("conditions" => array("`dimension_id` = ? AND `object_type_id` = ?", $this->getDimensionId(), $child->getObjectTypeId()))); if (!$dim_ot->getIsRoot()) { $error_message = lang("cannot delete member cannot be root"); return false; } } else { if (!in_array($child->getObjectTypeId(), $child_ots)) { $error_message = lang("cannot delete member childs cannot be moved to parent"); return false; } } } $continue_check = true; } if (!$continue_check) { return false; } else { $child_ids = $this->getAllChildrenIds(); $child_ids[] = $this->getId(); $child_ids_str = implode(",", $child_ids); $objects_in_member = ObjectMembers::instance()->findAll(array('conditions' => 'member_id = ' . $this->getId())); if (!$objects_in_member || count($objects_in_member) == 0) { return true; } else { $more_conditions = ""; if (Plugins::instance()->isActivePlugin('core_dimensions')) { $person_dim = Dimensions::findByCode('feng_persons')->getId(); $more_conditions = " AND member_id NOT IN (SELECT id FROM " . TABLE_PREFIX . "members WHERE dimension_id={$person_dim})"; } $object_id_condition = $this->getObjectId() > 0 ? " AND o.id <> " . $this->getObjectId() : ""; foreach ($objects_in_member as $om) { $obj_members = ObjectMembers::findAll(array("conditions" => array("`object_id` = ? AND `is_optimization` = 0 AND member_id IN ({$child_ids_str}) AND EXISTS (SELECT o.id FROM " . TABLE_PREFIX . "objects o WHERE o.id = ? AND o.trashed_by_id=0 {$object_id_condition})" . $more_conditions, $om->getObjectId(), $om->getObjectId()))); if (count($obj_members) >= 1) { $error_message = lang("cannot delete member has objects"); return false; } $db_res = DB::execute("SELECT object_type_id FROM " . TABLE_PREFIX . "objects WHERE id=" . $om->getObjectId()); $row = $db_res->fetchRow(); if ($row && array_var($row, 'object_type_id')) { $req_dim_ids = DimensionObjectTypeContents::getRequiredDimensions(array_var($row, 'object_type_id')); if (in_array($this->getDimensionId(), $req_dim_ids)) { $error_message = lang("cannot delete member is required for objects"); return false; } } } } } return true; }
/** * Execute the script * * @param void * @return boolean */ function execute() { // --------------------------------------------------- // Check MySQL version // --------------------------------------------------- $mysql_version = mysql_get_server_info($this->database_connection); if($mysql_version && version_compare($mysql_version, '4.1', '>=')) { $constants['DB_CHARSET'] = 'utf8'; @mysql_query("SET NAMES 'utf8'", $this->database_connection); tpl_assign('default_collation', $default_collation = 'collate utf8_unicode_ci'); tpl_assign('default_charset', $default_charset = 'DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'); } else { tpl_assign('default_collation', $default_collation = ''); tpl_assign('default_charset', $default_charset = ''); } // if $installed_version = installed_version(); $t_prefix = TABLE_PREFIX; if (version_compare($installed_version, '1.7.5') <= 0 && TABLE_PREFIX != "fo_") $t_prefix = "fo_"; tpl_assign('table_prefix', $t_prefix); if (defined('DB_ENGINE')) tpl_assign('engine', DB_ENGINE); else tpl_assign('engine', 'InnoDB'); // --------------------------------------------------- // Execute migration // --------------------------------------------------- $additional_upgrade_steps = array(); // RUN QUERIES $total_queries = 0; $executed_queries = 0; $upgrade_script = ""; // upgrading from version 1.x if (version_compare($installed_version, '2.0.0.0-beta') < 0) { ini_set('memory_limit', '1024M'); @set_time_limit(0); $upgrade_script .= tpl_fetch(get_template_path('db_migration/2_0_asado')); if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } $_SESSION['from_feng1'] = true; $upgrade_script = ""; @unlink(ROOT . '/cache/autoloader.php'); include ROOT . '/environment/classes/AutoLoader.class.php'; include ROOT . '/environment/constants.php'; if (!$callbacks = spl_autoload_functions()) $callbacks = array(); foreach ($callbacks as $callback) { spl_autoload_unregister($callback); } spl_autoload_register('feng_upg_autoload'); foreach ($callbacks as $callback) { spl_autoload_register($callback); } @include ROOT . '/cache/autoloader.php'; define('DONT_LOG', true); define('FORCED_TABLE_PREFIX', 'fo_'); if (!defined('FILE_STORAGE_FILE_SYSTEM')) define('FILE_STORAGE_FILE_SYSTEM', 'fs'); if (!defined('FILE_STORAGE_MYSQL')) define('FILE_STORAGE_MYSQL', 'mysql'); if (!defined('MAX_SEARCHABLE_FILE_SIZE')) define('MAX_SEARCHABLE_FILE_SIZE', 1048576); try { DB::connect(DB_ADAPTER, array( 'host' => DB_HOST, 'user' => DB_USER, 'pass' => DB_PASS, 'name' => DB_NAME, 'persist' => DB_PERSIST )); if(defined('DB_CHARSET') && trim(DB_CHARSET)) { DB::execute("SET NAMES ?", DB_CHARSET); } } catch(Exception $e) { $this->printMessage("Error connecting to database: ".$e->getMessage()."\n".$e->getTraceAsString()); } try { $db_result = DB::execute("SELECT value FROM fo_config_options WHERE name = 'file_storage_adapter'"); $db_result_row = $db_result->fetchRow(); if($db_result_row['value'] == FILE_STORAGE_FILE_SYSTEM) { if (!defined('FILES_DIR')) define('FILES_DIR', ROOT . '/upload'); FileRepository::setBackend(new FileRepository_Backend_FileSystem(FILES_DIR, TABLE_PREFIX)); } else { FileRepository::setBackend(new FileRepository_Backend_DB(TABLE_PREFIX)); } PublicFiles::setRepositoryPath(ROOT . '/public/files'); if (!defined('PUBLIC_FOLDER')) define('PUBLIC_FOLDER', 'public'); if(trim(PUBLIC_FOLDER) == '') { PublicFiles::setRepositoryUrl(with_slash(ROOT_URL) . 'files'); } else { PublicFiles::setRepositoryUrl(with_slash(ROOT_URL) . 'public/files'); } $members = Members::findAll(array("conditions" => "`depth` > 1")); $sql = ""; $first_row = true; foreach ($members as $member) { $parents = $member->getAllParentMembersInHierarchy(false, false); $obj_members = ObjectMembers::findAll(array("conditions" => "`is_optimization` = 0 AND `member_id` = ".$member->getId())); $sql = ""; $first_row = true; foreach ($obj_members as $om) { foreach ($parents as $parent) { if ($sql == "") $sql = "INSERT INTO ".$t_prefix."object_members (`object_id`, `member_id`, `is_optimization`) VALUES "; $sql .= ($first_row ? "" : ", ") . "(".$om->getObjectId().", ".$parent->getId().", 1)"; $first_row = false; } } if ($sql != "") { $sql .= " ON DUPLICATE KEY UPDATE `object_id`=`object_id`"; DB::execute($sql); $sql = ""; } } $this->printMessage("Finished generating Object Members"); $members = Members::findAll(array("conditions" => "`depth` > 1", "order" => "depth ASC")); foreach ($members as $m) { if ($m->getParentMember() instanceof Member && $m->getDimensionId() != $m->getParentMember()->getDimensionId()) { $m->setDimensionId($m->getParentMember()->getDimensionId()); $m->save(); } } $app_move_logs = ApplicationLogs::findAll(array("conditions" => "action = 'move'")); foreach ($app_move_logs as &$app_log) {/* @var $app_log ApplicationLog */ $exp_log_data = explode(";", $app_log->getLogData()); if (count($exp_log_data) > 1) { $old_to = array_var($exp_log_data, 1); $old_from = array_var($exp_log_data, 0); } else { $old_to = array_var($exp_log_data, 0); $old_from = ""; } $to_id = str_replace("to:", "", $old_to); $new_to_id = Members::instance()->findOne(array("id" => true, "conditions" => "ws_id = '$to_id'")); if (count($new_to_id) > 0) $new_to_id = $new_to_id[0]; $new_from_ids = ""; $from_ids = str_replace("from:", "", $old_from); if ($from_ids != "") { $new_from_ids_array = Members::instance()->findAll(array("id" => true, "conditions" => "ws_id IN ($from_ids)")); $new_from_ids = implode(",", $new_from_ids_array); } if ($new_to_id) { if ($new_from_ids) { $log_data = "from:$new_from_ids;to:$new_to_id"; } else { $log_data = "to:$new_to_id"; } $app_log->setLogData($log_data); $app_log->save(); } } } catch (Exception $e) { die("\nError occurred:\n-----------------\n".$e->getMessage()."\n".$e->getTraceAsString()); } //tpl_assign('install_inv_dw', true); $additional_upgrade_steps[] = array( 'url' => 'complete_migration.php?out=file', 'name' => 'Fill searchable objects and sharing table', 'filename' => dirname(__FILE__)."/../complete_migration.php" ); } else { // upgrading from a pre-release of this version (beta, rc, etc) if (version_compare($installed_version, '2.0.0.4') <= 0) { if (!$this->checkTableExists($t_prefix.'role_object_type_permissions', $this->database_connection)) { $upgrade_script .= " CREATE TABLE `".$t_prefix."role_object_type_permissions` ( `role_id` INTEGER UNSIGNED NOT NULL, `object_type_id` INTEGER UNSIGNED NOT NULL, `can_delete` BOOLEAN NOT NULL, `can_write` BOOLEAN NOT NULL, PRIMARY KEY (`role_id`, `object_type_id`) ) ENGINE = InnoDB; INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 1, 1 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','file','task','milestone','event','contact','mail','timeslot','report','comment') AND p.`name` IN ('Super Administrator','Administrator','Manager','Executive'); INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 0, 1 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','file','task','milestone','event','contact','timeslot','report','comment') AND p.`name` IN ('Collaborator Customer'); INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 0, 1 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','file','task','milestone','event','timeslot','comment') AND p.`name` IN ('Internal Collaborator','External Collaborator'); INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 0, 0 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','file','event','comment') AND p.`name` IN ('Guest Customer'); INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 0, 0 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','event','comment') AND p.`name` IN ('Guest'); INSERT INTO ".$t_prefix."role_object_type_permissions (role_id, object_type_id, can_delete, can_write) SELECT p.id, o.id, 0, 0 FROM `".$t_prefix."object_types` o JOIN `".$t_prefix."permission_groups` p WHERE o.`name` IN ('message','weblink','file','task','milestone','event','contact','timeslot','report','comment') AND p.`name` IN ('Non-Exec Director'); UPDATE ".$t_prefix."role_object_type_permissions SET can_write = 1 WHERE object_type_id = (SELECT id FROM ".$t_prefix."object_types WHERE name='comment'); "; } if (!$this->checkTableExists($t_prefix.'widgets', $this->database_connection)) { $upgrade_script .= " CREATE TABLE `".$t_prefix."widgets` ( `name` varchar(64) NOT NULL, `title` varchar(255) NOT NULL, `plugin_id` int(10) unsigned NOT NULL, `path` varchar(512) NOT NULL, `default_options` text NOT NULL, `default_section` varchar(64) NOT NULL, `default_order` int(10) NOT NULL, PRIMARY KEY (`name`) ) ENGINE = InnoDB; "; } if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } if (version_compare($installed_version, '2.0.0.5') <= 0) { if (!$this->checkColumnExists($t_prefix.'contacts', 'default_billing_id', $this->database_connection)) { $upgrade_script = " ALTER TABLE `".$t_prefix."contacts` ADD COLUMN `default_billing_id` INTEGER NOT NULL DEFAULT 0; ALTER TABLE `".$t_prefix."project_tasks` ADD COLUMN `use_due_time` BOOLEAN DEFAULT 0, ADD COLUMN `use_start_time` BOOLEAN DEFAULT 0; UPDATE ".$t_prefix."project_tasks t SET t.due_date = ADDTIME(t.due_date, CONCAT(SUBSTRING_INDEX((SELECT c.timezone FROM ".$t_prefix."contacts c WHERE c.object_id=(SELECT o.updated_by_id FROM ".$t_prefix."objects o WHERE o.id=t.object_id)), '.', 1), ':', SUBSTRING_INDEX(abs((SELECT c.timezone FROM ".$t_prefix."contacts c WHERE c.object_id=(SELECT o.updated_by_id FROM ".$t_prefix."objects o WHERE o.id=t.object_id)) % 1)*60, '.', 1))) WHERE t.due_date > 0; UPDATE ".$t_prefix."project_tasks t SET t.start_date = ADDTIME(t.start_date, CONCAT(SUBSTRING_INDEX((SELECT c.timezone FROM ".$t_prefix."contacts c WHERE c.object_id=(SELECT o.updated_by_id FROM ".$t_prefix."objects o WHERE o.id=t.object_id)), '.', 1), ':', SUBSTRING_INDEX(abs((SELECT c.timezone FROM ".$t_prefix."contacts c WHERE c.object_id=(SELECT o.updated_by_id FROM ".$t_prefix."objects o WHERE o.id=t.object_id)) % 1)*60, '.', 1))) WHERE t.start_date > 0; INSERT INTO `".$t_prefix."contact_config_options` (`category_name`, `name`, `default_value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('general', 'work_day_end_time', '18:00', 'TimeConfigHandler', 0, 410, 'Work day end time'); "; } if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } if (version_compare($installed_version, '2.0.0.6') <= 0) { //WS Widgets $upgrade_script = " UPDATE `".$t_prefix."contact_config_options` SET `default_value` = '15' WHERE `".$t_prefix."contact_config_options`.`name` = 'noOfTasks' LIMIT 1 ; UPDATE ".$t_prefix."widgets SET default_section = 'none' WHERE name = 'people' AND NOT EXISTS (SELECT id from ".$t_prefix."plugins WHERE name = 'crpm'); UPDATE ".$t_prefix."dimensions SET options = '{\"defaultAjax\":{\"controller\":\"dashboard\", \"action\": \"main_dashboard\"}, \"quickAdd\":true,\"showInPaths\":true}' WHERE code='workspaces'; UPDATE `".$t_prefix."tab_panels` SET default_action = 'main_dashboard', initial_action = 'main_dashboard' WHERE id = 'overview-panel' ; UPDATE ".$t_prefix."object_types SET type = 'dimension_object', handler_class='Workspaces', table_name = 'workpaces' WHERE name = 'workspace' ; UPDATE ".$t_prefix."dimension_object_types SET OPTIONS = '{\"defaultAjax\":{\"controller\":\"dashboard\", \"action\": \"main_dashboard\"}}' WHERE dimension_id = (SELECT id FROM ".$t_prefix."dimensions WHERE code = 'workspaces'); CREATE TABLE IF NOT EXISTS `".$t_prefix."contact_widgets` ( `widget_name` varchar(40) NOT NULL, `contact_id` int(11) NOT NULL, `section` varchar(40) NOT NULL, `order` int(11) NOT NULL, `options` varchar(255) NOT NULL, PRIMARY KEY (`widget_name`,`contact_id`) USING BTREE ) ENGINE=InnoDB; INSERT INTO ".$t_prefix."widgets(name, title, plugin_id, default_section,default_order) VALUES ('messages','notes',0,'none',1000) ON DUPLICATE KEY update name = name; INSERT INTO ".$t_prefix."dimension_object_type_contents (dimension_id, dimension_object_type_id, content_object_type_id, is_required, is_multiple) SELECT d.id, ot.id, (SELECT tmp.id FROM ".$t_prefix."object_types tmp WHERE tmp.name='contact'), 0, 1 FROM ".$t_prefix."dimensions d JOIN ".$t_prefix."object_types ot WHERE d.code = 'customer_project' AND ot.name IN ('customer', 'project', 'folder', 'customer_folder', 'project_folder') ON DUPLICATE KEY UPDATE dimension_id=dimension_id; UPDATE ".$t_prefix."dimension_object_type_contents SET is_multiple = 1 WHERE content_object_type_id = (SELECT id FROM ".$t_prefix."object_types WHERE name='mail'); "; if (@mysql_fetch_row(@mysql_query(("SELECT id from ".$t_prefix."plugins WHERE name = 'workspaces'")))) { $upgrade_script.="INSERT INTO ".$t_prefix."widgets(name, title, plugin_id, default_section,default_order) VALUES ('ws_description', 'workspace description',(SELECT id from ".$t_prefix."plugins WHERE name = 'workspaces'), 'left',-100) ON DUPLICATE KEY update name = name ;"; } if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } if ($obj = @mysql_fetch_object(@mysql_query("SELECT id FROM ".$t_prefix."object_types WHERE name = 'workspace' " ))) { $wsTypeId = $obj->id ; $res = @mysql_query("SELECT * FROM ".$t_prefix."members WHERE dimension_id = (SELECT id FROM ".$t_prefix."dimensions WHERE code='workspaces')" ) ; while ( $m = @mysql_fetch_object($res) ) { @mysql_query("INSERT INTO ".$t_prefix."objects (object_type_id, name) VALUES ($wsTypeId, '".$m->name."' )" ); if ( $id = @mysql_insert_id()){ @mysql_query("INSERT INTO ".$t_prefix."workspaces (object_id) VALUES ($id)"); @mysql_query("UPDATE ".$t_prefix."members SET object_id=$id WHERE id = $m->id "); } } } } if (version_compare($installed_version, '2.0.0.7') <= 0) { $upgrade_script = ""; if (!$this->checkTableExists($t_prefix.'mail_spam_filters', $this->database_connection)) { $upgrade_script .= " CREATE TABLE IF NOT EXISTS `".$t_prefix."mail_spam_filters` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(10) unsigned NOT NULL, `text_type` enum('email_address','subject') COLLATE utf8_unicode_ci NOT NULL, `text` text COLLATE utf8_unicode_ci NOT NULL, `spam_state` enum('no spam','spam') COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; "; } $upgrade_script .= "INSERT INTO `".$t_prefix."config_options` (`category_name`, `name`, `value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('general', 'untitled_notes', '0', 'BoolConfigHandler', '0', '0', NULL) ON DUPLICATE KEY UPDATE name=name;"; if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } if (version_compare($installed_version, '2.0.0.8') < 0) { $upgrade_script = ""; if (!$this->checkTableExists($t_prefix.'external_calendar_users', $this->database_connection)) { $upgrade_script .= " CREATE TABLE IF NOT EXISTS `".$t_prefix."external_calendar_users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `contact_id` int(10) unsigned NOT NULL, `auth_user` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `auth_pass` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `type` text COLLATE utf8_unicode_ci NOT NULL, `sync` TINYINT( 1 ) NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE = InnoDB; "; } if (!$this->checkTableExists($t_prefix.'external_calendars', $this->database_connection)) { $upgrade_script .= " CREATE TABLE IF NOT EXISTS `".$t_prefix."external_calendars` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ext_cal_user_id` int(10) unsigned NOT NULL, `calendar_user` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `calendar_visibility` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `calendar_name` text COLLATE utf8_unicode_ci NOT NULL, `calendar_feng` TINYINT( 1 ) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE = InnoDB; "; } if (!$this->checkColumnExists($t_prefix.'project_events', 'ext_cal_id', $this->database_connection)) { $upgrade_script .= " ALTER TABLE `".$t_prefix."project_events` ADD `ext_cal_id` INT(10) UNSIGNED NOT NULL; "; } $upgrade_script .= " ALTER TABLE `".$t_prefix."project_events` CHANGE `special_id` `special_id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; UPDATE `".$t_prefix."file_types` SET `is_searchable` = '1' WHERE `extension` = 'docx'; UPDATE `".$t_prefix."file_types` SET `is_searchable` = '1' WHERE `extension` = 'pdf'; INSERT INTO `".$t_prefix."config_options` (`category_name`, `name`, `value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('general', 'repeating_task', '0', 'BoolConfigHandler', '0', '0', '') ON DUPLICATE KEY UPDATE name=name; INSERT INTO `".$t_prefix."contact_config_options` (`category_name`, `name`, `default_value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('calendar panel', 'calendar task filter', 'pending', 'StringConfigHandler', '1', '0', NULL), ('task panel', 'close timeslot open', '1', 'BoolConfigHandler', '0', '0', NULL), ('calendar panel', 'reminders_events', 'reminder_email,1,60', 'StringConfigHandler', '0', '0', NULL) ON DUPLICATE KEY UPDATE name=name; INSERT INTO `".$t_prefix."cron_events` (`name`, `recursive`, `delay`, `is_system`, `enabled`, `date`) VALUES ('import_google_calendar', '1', '10', '0', '0', '0000-00-00 00:00:00'), ('export_google_calendar', '1', '10', '0', '0', '0000-00-00 00:00:00') ON DUPLICATE KEY UPDATE name=name; "; $upgrade_script .= " DELETE FROM `".$t_prefix."config_options` WHERE `name`='use_time_in_task_dates' AND NOT EXISTS (SELECT id FROM `".$t_prefix."plugins` WHERE `name`='crpm' AND is_activated=1); INSERT INTO ".$t_prefix."contact_config_options (category_name, name, default_value, config_handler_class, is_system, option_order) VALUES ('general','show_object_direct_url',0,'BoolConfigHandler',0,0), ('general','drag_drop_prompt','prompt','DragDropPromptConfigHandler',0,0) ON DUPLICATE KEY UPDATE name = name; "; $upgrade_script .= " INSERT INTO `".$t_prefix."tab_panels` (`id`,`title`,`icon_cls`,`refresh_on_context_change`,`default_controller`,`default_action`,`initial_controller`,`initial_action`,`enabled`,`type`,`ordering`,`plugin_id`,`object_type_id`) VALUES ('contacts-panel','contacts','ico-contacts',1,'contact','init','','',0,'system',7,0,16) ON DUPLICATE KEY UPDATE title=title; "; if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } if (version_compare($installed_version, '2.0.1') < 0) { $upgrade_script = ""; $upgrade_script .= "INSERT INTO `".$t_prefix."config_options` (`category_name`, `name`, `value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('general', 'working_days', '1,2,3,4,5,6,7', 'StringConfigHandler', '0', '0', NULL); ALTER TABLE `".$t_prefix."project_tasks` ADD `original_task_id` INT( 10 ) UNSIGNED NULL DEFAULT '0'; ALTER TABLE `".$t_prefix."project_tasks` ADD `type_content` ENUM( 'text', 'html' ) NOT NULL DEFAULT 'text'; ALTER TABLE `".$t_prefix."project_events` ADD `original_event_id` INT( 10 ) UNSIGNED NULL DEFAULT '0'; ALTER TABLE `".$t_prefix."project_messages` ADD `type_content` ENUM( 'text', 'html' ) NOT NULL DEFAULT 'text'; "; $upgrade_script .= "INSERT INTO `".$t_prefix."config_options` (`category_name`, `name`, `value`, `config_handler_class`, `is_system`, `option_order`, `dev_comment`) VALUES ('general', 'wysiwyg_tasks', '0', 'BoolConfigHandler', '0', '0', NULL), ('general', 'wysiwyg_messages', '0', 'BoolConfigHandler', '0', '0', NULL), ('task panel', 'tasksShowTimeEstimates', '1', 'BoolConfigHandler', '1', '0', NULL) ON DUPLICATE KEY UPDATE name=name; "; $upgrade_script .= "UPDATE `".$t_prefix."widgets` SET plugin_id = (SELECT id FROM `".$t_prefix."plugins` WHERE name='workspaces') WHERE name='workspaces'; "; // clean old users dimension $upgrade_script .= "DELETE FROM `".$t_prefix."object_members` WHERE member_id IN (SELECT `id` FROM `".$t_prefix."members` WHERE `dimension_id` IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users')); DELETE FROM `".$t_prefix."contact_dimension_permissions` WHERE dimension_id IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users'); DELETE FROM `".$t_prefix."members` WHERE dimension_id IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users'); DELETE FROM `".$t_prefix."dimension_object_type_contents` WHERE dimension_id IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users'); DELETE FROM `".$t_prefix."dimension_object_type_hierarchies` WHERE dimension_id IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users'); DELETE FROM `".$t_prefix."dimension_object_types` WHERE dimension_id IN (SELECT `id` FROM `".$t_prefix."dimensions` WHERE `code`='feng_users'); DELETE FROM `".$t_prefix."dimensions` WHERE code='feng_users'; DELETE FROM `".$t_prefix."object_types` WHERE name='user'; UPDATE ".$t_prefix."contacts c SET c.personal_member_id = 0 WHERE c.user_type>0 AND NOT (SELECT count(m2.id) FROM ".$t_prefix."members m2 WHERE m2.object_id=c.personal_member_id)=0; "; if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } // Plugin Version Support $upgrade_script = ''; if(!$this->checkColumnExists($t_prefix."plugins", 'version', $this->database_connection)) { $upgrade_script = 'ALTER TABLE '.$t_prefix.'plugins ADD COLUMN `version` INTEGER NOT NULL DEFAULT 1 AFTER `name` '; if($this->executeMultipleQueries($upgrade_script, $total_queries, $executed_queries, $this->database_connection)) { $this->printMessage("Database schema transformations executed (total queries: $total_queries)"); } else { $this->printMessage('Failed to execute DB schema transformations. MySQL said: ' . mysql_error(), true); return false; } } } $this->printMessage('Feng Office has been upgraded. You are now running Feng Office '.$this->getVersionTo().' Enjoy!'); tpl_assign('additional_steps', $additional_upgrade_steps); } // execute