/**
  * 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');
 }
示例#2
0
 /**
  * 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);
 }