/** * update to 7.2 * - add uid field */ public function update_1() { $this->validateTableVersion('tasks', 6); // first add with notnull == false ... $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>uid</name> <type>text</type> <length>255</length> <notnull>false</notnull> </field> '); try { $this->_backend->addCol('tasks', $declaration); } catch (Exception $e) { Tinebase_Exception::log($e); } $tasksBackend = new Tinebase_Backend_Sql(array('modelName' => 'Tasks_Model_Task', 'tableName' => 'tasks')); $allTasks = $tasksBackend->getAll(); // add uid to all tasks foreach ($allTasks as $task) { $task->uid = $task->id; if (empty($task->status)) { $task->status = 'UNKNOWN'; } $tasksBackend->update($task); } // ... now set notnull to true $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>uid</name> <type>text</type> <length>255</length> <notnull>true</notnull> </field> '); $this->_backend->alterCol('tasks', $declaration); $declaration = new Setup_Backend_Schema_Index_Xml(' <index> <name>uid--id</name> <field> <name>uid</name> </field> <field> <name>id</name> </field> </index> '); $this->_backend->addIndex('tasks', $declaration); $this->setTableVersion('tasks', 7); $this->setApplicationVersion('Tasks', '7.2'); }
/** * add a calendar for each resource */ public function update_8() { $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>container_id</name> <type>integer</type> </field>'); $this->_backend->addCol('cal_resources', $declaration, 1); $declaration = new Setup_Backend_Schema_Index_Xml(' <index> <name>cal_resources::container_id--container::id</name> <field> <name>container_id</name> </field> <foreign>true</foreign> <reference> <table>container</table> <field>id</field> </reference> </index>'); $this->_backend->addForeignKey('cal_resources', $declaration); $this->setTableVersion('cal_resources', 2); $this->setApplicationVersion('Calendar', '3.9'); // give existing resources a container $rb = new Tinebase_Backend_Sql(array('modelName' => 'Calendar_Model_Resource', 'tableName' => 'cal_resources')); $resources = $rb->getAll(); foreach ($resources as $resource) { $container = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array('name' => $resource->name, 'type' => Tinebase_Model_Container::TYPE_SHARED, 'owner_id' => $resource->getId(), 'backend' => 'Sql', 'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId())), NULL, TRUE); // remove default admin $grants = Tinebase_Container::getInstance()->setGrants($container->getId(), new Tinebase_Record_RecordSet('Tinebase_Model_Grants', array(array('account_id' => '0', 'account_type' => Tinebase_Acl_Rights::ACCOUNT_TYPE_ANYONE, Tinebase_Model_Grants::GRANT_FREEBUSY => true))), TRUE, FALSE); $resource->container_id = $container->getId(); $rb->update($resource); } }
/** * update to 8.15 * * move keyFieldConfig defaults to config files */ public function update_14() { // either put default to DB or delete form DB $cb = new Tinebase_Backend_Sql(array('modelName' => 'Tinebase_Model_Config', 'tableName' => 'config')); $configRecords = $cb->getAll(); // iterate installed apps foreach (Tinebase_Application::getInstance()->getApplications() as $application) { try { // get config $config = Tinebase_Config::getAppConfig($application->name); if (!method_exists($config, 'getProperties')) { continue; } foreach ($config->getProperties() as $name => $property) { if ($property['type'] == Tinebase_Config_Abstract::TYPE_KEYFIELD_CONFIG) { $dbConfig = $config->get($name); $dbConfigRecords = $dbConfig['records']->toArray(); $defaultRecords = isset($property['default']['records']) ? $property['default']['records'] : null; if ($defaultRecords && json_encode($dbConfigRecords) != json_encode($defaultRecords)) { // set default value if (array_key_exists('default', $property['default'])) { $dbConfig->default = $property['default']['default']; $config->set($name, $dbConfig->toArray()); } } else { // delete default config $configRecord = $configRecords->filter('application_id', $application->getId())->filter('name', $name)->getFirstRecord(); if ($configRecord) { $cb->delete($configRecord->getId()); } } } } } catch (Exception $e) { Setup_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' could not migrate keyFieldConfig ' . $e); } } $this->setApplicationVersion('Tinebase', '8.15'); }
/** * update to 7.4 * * - save each state_id in an own field */ public function update_3() { // add a default value of "false", as PGSQL does allow notnull columns with default value null $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>state_id</name> <type>text</type> <length>128</length> <notnull>true</notnull> <default>false</default> </field> '); $this->_backend->addCol('state', $declaration); $this->_backend->dropIndex('state', 'user_id'); $declaration = new Setup_Backend_Schema_Index_Xml(' <index> <name>user_id--state_id</name> <unique>true</unique> <field> <name>user_id</name> </field> <field> <name>state_id</name> </field> </index> '); $this->_backend->addIndex('state', $declaration); $be = new Tinebase_Backend_Sql(array('modelName' => 'Tinebase_Model_State', 'tableName' => 'state')); $allStates = $be->getAll(); foreach ($allStates as $oldState) { $oldData = Zend_Json::decode($oldState->data); foreach ($oldData as $stateId => $data) { $filter = new Tinebase_Model_StateFilter(array(array('field' => 'state_id', 'operator' => 'equals', 'value' => $stateId), array('field' => 'user_id', 'operator' => 'equals', 'value' => $oldState->user_id))); $result = $be->search($filter); try { if ($result->count()) { $record = $result->getFirstRecord(); $record->data = $data; $be->update($record); } else { $record = new Tinebase_Model_State(array('user_id' => $oldState->user_id, 'state_id' => $stateId, 'data' => $data)); $be->create($record); } } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . 'Could not transfer old state: ' . $stateId . ': ' . print_r($data, 1)); Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . 'Exception Message: ' . $e->getMessage()); } } } $be->delete($oldState->getId()); } // remove the default value "false" again $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>state_id</name> <type>text</type> <length>128</length> <notnull>true</notnull> </field> '); $this->_backend->alterCol('state', $declaration); $this->setApplicationVersion('Tinebase', '7.4'); $this->setTableVersion('state', 2); }