/**
  * Returns instance of Tinebase_Config
  *
  * @return Tinebase_Config
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
 /**
  * returns a status which is defined as open state
  *
  * @return Tasks_Model_Status
  */
 protected function _getStatus($_open = true)
 {
     foreach (Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records as $idx => $status) {
         if (!($status->is_open xor $_open)) {
             return $status;
         }
     }
 }
 /**
  * temporary function to get a default container]
  * 
  * @param string $_referingApplication
  * @return Tinebase_Model_Container container
  * 
  * @todo replace this by Tinebase_Container::getDefaultContainer
  */
 public function getDefaultContainer($_referingApplication = 'tasks')
 {
     $taskConfig = Tasks_Config::getInstance();
     $configString = 'defaultcontainer_' . (empty($_referingApplication) ? 'tasks' : $_referingApplication);
     if (isset($taskConfig->{$configString})) {
         $defaultContainer = Tinebase_Container::getInstance()->getContainerById((int) $taskConfig->{$configString});
     } else {
         $defaultContainer = Tinebase_Container::getInstance()->getDefaultContainer('Tasks');
     }
     return $defaultContainer;
 }
 /**
  * init favorites
  */
 protected function _initializeFavorites()
 {
     $pfe = Tinebase_PersistentFilter::getInstance();
     $commonValues = array('account_id' => NULL, 'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Tasks')->getId(), 'model' => 'Tasks_Model_TaskFilter');
     $closedStatus = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records->filter('is_open', 0);
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => Tasks_Preference::DEFAULTPERSISTENTFILTER_NAME, 'description' => "All tasks of my taskslists", 'filters' => array(array('field' => 'container_id', 'operator' => 'equals', 'value' => '/personal/' . Tinebase_Model_User::CURRENTACCOUNT), array('field' => 'status', 'operator' => 'notin', 'value' => $closedStatus->getId()))))));
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => "My open tasks", 'description' => "My open tasks", 'filters' => array(array('field' => 'organizer', 'operator' => 'equals', 'value' => Tinebase_Model_User::CURRENTACCOUNT), array('field' => 'status', 'operator' => 'notin', 'value' => $closedStatus->getId()))))));
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => "My open tasks this week", 'description' => "My open tasks this week", 'filters' => array(array('field' => 'organizer', 'operator' => 'equals', 'value' => Tinebase_Model_User::CURRENTACCOUNT), array('field' => 'due', 'operator' => 'within', 'value' => 'weekThis'), array('field' => 'status', 'operator' => 'notin', 'value' => $closedStatus->getId()))))));
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => "All tasks for me", 'description' => "All tasks that I am responsible for", 'filters' => array(array('field' => 'organizer', 'operator' => 'equals', 'value' => Tinebase_Model_User::CURRENTACCOUNT))))));
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => "Last modified by me", 'description' => "All tasks that I have last modified", 'filters' => array(array('field' => 'last_modified_by', 'operator' => 'equals', 'value' => Tinebase_Model_User::CURRENTACCOUNT))))));
     $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(array_merge($commonValues, array('name' => "Tasks without responsible", 'description' => "Tasks without responsible", 'filters' => array(array('field' => 'organizer', 'operator' => 'equals', 'value' => ''))))));
 }
 /**
  * get resolved records (task status, ...)
  * 
  * @return array
  */
 public static function getResolvedRecords()
 {
     $result = array();
     $result['tasksStatus'] = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records;
     return $result;
 }
 /**
  * test create task with automatic alarm
  *
  */
 public function testCreateTaskWithAutomaticAlarm()
 {
     $task = $this->_getTask();
     // set config for automatic alarms
     Tasks_Config::getInstance()->set(Tinebase_Config::AUTOMATICALARM, array(2 * 24 * 60));
     $persistentTaskData = $this->_backend->saveTask($task->toArray());
     $loadedTaskData = $this->_backend->getTask($persistentTaskData['id']);
     // check if alarms are created / returned
     $this->assertGreaterThan(0, count($loadedTaskData['alarms']));
     $this->assertEquals('Tasks_Model_Task', $loadedTaskData['alarms'][0]['model']);
     $this->assertEquals(Tinebase_Model_Alarm::STATUS_PENDING, $loadedTaskData['alarms'][0]['sent_status']);
     $this->assertTrue(isset($loadedTaskData['alarms'][0]['minutes_before']) || array_key_exists('minutes_before', $loadedTaskData['alarms'][0]), 'minutes_before is missing');
     $this->assertEquals(2 * 24 * 60, $loadedTaskData['alarms'][0]['minutes_before']);
     // reset automatic alarms config
     Tasks_Config::getInstance()->set(Tinebase_Config::AUTOMATICALARM, array());
     $this->_backend->deleteTasks($persistentTaskData['id']);
 }
 /**
  * add automatic alarms to record (if configured)
  * 
  * @param Tinebase_Record_Abstract $_record
  * @return void
  * 
  * @todo    move this to Tinebase_Controller_Record_Abstract
  */
 protected function _addAutomaticAlarms(Tinebase_Record_Abstract $_record)
 {
     $automaticAlarms = Tasks_Config::getInstance()->get(Tinebase_Config::AUTOMATICALARM, new Tinebase_Config_Struct());
     if (!is_object($automaticAlarms)) {
         if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
             Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Invalid ' . Tinebase_Config::AUTOMATICALARM . ' config option');
         }
         return;
     }
     $automaticAlarmsArray = $automaticAlarms->toArray();
     if (count($automaticAlarmsArray) == 0) {
         return;
     }
     if (!$_record->alarms instanceof Tinebase_Record_RecordSet) {
         $_record->alarms = new Tinebase_Record_RecordSet('Tinebase_Model_Alarm');
     }
     if (count($_record->alarms) > 0) {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Do not overwrite existing alarm.');
         }
         return;
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Add automatic alarms / minutes before: ' . implode(',', $automaticAlarmsArray));
     }
     foreach ($automaticAlarmsArray as $minutesBefore) {
         $_record->alarms->addRecord(new Tinebase_Model_Alarm(array('minutes_before' => $minutesBefore), TRUE));
     }
     $this->_saveAlarms($_record);
 }
 /**
  * get linked objects for lead pdf (contacts, tasks, ...)
  *
  * @param   Crm_Model_Lead $_lead lead data
  * @param   Zend_Locale $_locale the locale
  * @param   Zend_Translate $_translate
  * @return  array  the linked objects
  */
 protected function getLinkedObjects(Crm_Model_Lead $_lead, Zend_Locale $_locale, Zend_Translate $_translate)
 {
     $linkedObjects = array();
     // check relations
     if ($_lead->relations instanceof Tinebase_Record_RecordSet) {
         $_lead->relations->addIndices(array('type'));
         /********************** contacts ******************/
         $linkedObjects[] = array($_translate->_('Contacts'), 'headline');
         $types = array("customer" => "/images/oxygen/32x32/apps/system-users.png", "partner" => "/images/oxygen/32x32/actions/view-process-own.png", "responsible" => "/images/oxygen/32x32/apps/preferences-desktop-user.png");
         foreach ($types as $type => $icon) {
             $contactRelations = $_lead->relations->filter('type', strtoupper($type));
             foreach ($contactRelations as $relation) {
                 try {
                     //$contact = Addressbook_Controller_Contact::getInstance()->getContact($relation->related_id);
                     $contact = $relation->related_record;
                     $contactNameAndCompany = $contact->n_fn;
                     if (!empty($contact->org_name)) {
                         $contactNameAndCompany .= " / " . $contact->org_name;
                     }
                     $linkedObjects[] = array($contactNameAndCompany, 'separator', $icon);
                     $postalcodeLocality = !empty($contact->adr_one_postalcode) ? $contact->adr_one_postalcode . " " . $contact->adr_one_locality : $contact->adr_one_locality;
                     $regionCountry = !empty($contact->adr_one_region) ? $contact->adr_one_region . " " : "";
                     if (!empty($contact->adr_one_countryname)) {
                         $regionCountry .= Zend_Locale::getTranslation($contact->adr_one_countryname, 'country', $_locale);
                     }
                     $linkedObjects[] = array($_translate->_('Address'), array($contact->adr_one_street, $postalcodeLocality, $regionCountry));
                     $linkedObjects[] = array($_translate->_('Telephone'), $contact->tel_work);
                     $linkedObjects[] = array($_translate->_('Email'), $contact->email);
                 } catch (Exception $e) {
                     // do nothing so far
                 }
             }
         }
         /********************** tasks ******************/
         $taskRelations = $_lead->relations->filter('type', strtoupper('task'));
         if (!empty($taskRelations)) {
             $linkedObjects[] = array($_translate->_('Tasks'), 'headline');
             foreach ($taskRelations as $relation) {
                 try {
                     $task = $relation->related_record;
                     $taskTitle = $task->summary . " ( " . $task->percent . " % ) ";
                     // @todo add big icon to db or preg_replace?
                     if (!empty($task->status)) {
                         $status = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records->getById($task->status);
                         $icon = "/" . $status['icon'];
                         $linkedObjects[] = array($taskTitle, 'separator', $icon);
                     } else {
                         $linkedObjects[] = array($taskTitle, 'separator');
                     }
                     // get due date
                     if (!empty($task->due)) {
                         $dueDate = new Tinebase_DateTime($task->due);
                         $linkedObjects[] = array($_translate->_('Due Date'), Tinebase_Translation::dateToStringInTzAndLocaleFormat($dueDate, NULL, NULL, 'date'));
                     }
                     // get task priority
                     $taskPriority = $this->getTaskPriority($task->priority, $_translate);
                     $linkedObjects[] = array($_translate->_('Priority'), $taskPriority);
                 } catch (Exception $e) {
                     // do nothing so far
                     Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' exception caught: ' . $e->__toString());
                 }
             }
         }
         /********************** products ******************/
         $productRelations = $_lead->relations->filter('type', strtoupper('product'));
         if (!empty($productRelations)) {
             $linkedObjects[] = array($_translate->_('Products'), 'headline');
             foreach ($productRelations as $relation) {
                 try {
                     $product = $relation->related_record;
                     $quantity = isset($relation['remark']['quantity']) ? $relation['remark']['quantity'] : 1;
                     $price = isset($relation['remark']['price']) ? $relation['remark']['price'] : $product->price;
                     // @todo set precision for the price ?
                     $price = Zend_Locale_Format::toNumber($price, array('locale' => $_locale)) . " €";
                     $description = isset($relation['remark']['description']) ? $relation['remark']['description'] : $product->description;
                     $linkedObjects[] = array($product->name . ' - ' . $description . ' (' . $price . ') x ' . $quantity, 'separator');
                 } catch (Exception $e) {
                     // do nothing so far
                     Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' exception caught: ' . $e->__toString());
                 }
             }
         }
     }
     return $linkedObjects;
 }
Example #9
0
 /**
  * create notification message for task alarm
  *
  * @return string
  * 
  * @todo should we get the locale pref for each single user here instead of the default?
  * @todo move lead stuff to Crm(_Model_Lead)?
  * @todo add getSummary to Addressbook_Model_Contact for linked contacts?
  */
 public function getNotificationMessage()
 {
     // get locale from prefs
     $localePref = Tinebase_Core::getPreference()->getValue(Tinebase_Preference::LOCALE);
     $locale = Tinebase_Translation::getLocale($localePref);
     $translate = Tinebase_Translation::getTranslation($this->_application, $locale);
     // get date strings
     $timezone = $this->originator_tz ? $this->originator_tz : Tinebase_Core::get(Tinebase_Core::USERTIMEZONE);
     $dueDateString = Tinebase_Translation::dateToStringInTzAndLocaleFormat($this->due, $timezone, $locale);
     // resolve values
     Tinebase_User::getInstance()->resolveUsers($this, 'organizer', true);
     $status = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records->getById($this->status);
     $organizerName = $this->organizer ? $this->organizer->accountDisplayName : '';
     //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($this->toArray(), TRUE));
     $text = $this->summary . "\n\n" . $translate->_('Due') . ': ' . $dueDateString . "\n" . $translate->_('Organizer') . ': ' . $organizerName . "\n" . $translate->_('Description') . ': ' . $this->description . "\n" . $translate->_('Priority') . ': ' . $this->priority . "\n" . $translate->_('Status') . ': ' . $translate->_($status['value']) . "\n" . $translate->_('Percent') . ': ' . $this->percent . "%\n\n";
     // add relations (get with ignore acl)
     $relations = Tinebase_Relations::getInstance()->getRelations(get_class($this), 'Sql', $this->getId(), NULL, array('TASK'), TRUE);
     foreach ($relations as $relation) {
         if ($relation->related_model == 'Crm_Model_Lead') {
             $lead = $relation->related_record;
             $text .= $translate->_('Lead') . ': ' . $lead->lead_name . "\n";
             $leadRelations = Tinebase_Relations::getInstance()->getRelations(get_class($lead), 'Sql', $lead->getId());
             foreach ($leadRelations as $leadRelation) {
                 if ($leadRelation->related_model == 'Addressbook_Model_Contact') {
                     $contact = $leadRelation->related_record;
                     $text .= $leadRelation->type . ': ' . $contact->n_fn . ' (' . $contact->org_name . ')' . "\n" . (!empty($contact->tel_work) ? "\t" . $translate->_('Telephone') . ': ' . $contact->tel_work . "\n" : '') . (!empty($contact->email) ? "\t" . $translate->_('Email') . ': ' . $contact->email . "\n" : '');
                 }
             }
         }
     }
     //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $text);
     return $text;
 }
 /**
  * return contentfilter array
  * 
  * @param  int $_filterType
  * @return Tinebase_Model_Filter_FilterGroup
  */
 protected function _getContentFilter($_filterType)
 {
     $filter = parent::_getContentFilter($_filterType);
     // no persistent filter set -> add default filter
     // @todo what is this good for? I think should be handled in _addContainerFilter. LK
     #if ($filter->isEmpty()) {
     #    $defaultFilter = $filter->createFilter('container_id', 'equals', array(
     #        'path' => '/personal/' . Tinebase_Core::getUser()->getId()
     #    ));
     #
     #    $filter->addFilter($defaultFilter);
     #}
     if (in_array($_filterType, $this->_filterArray)) {
         switch ($_filterType) {
             case Syncroton_Command_Sync::FILTER_INCOMPLETE:
                 $filter->removeFilter('status');
                 $openStatus = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records->filter('is_open', 1);
                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                     Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " filter by status ids " . print_r($openStatus->getId(), TRUE));
                 }
                 $filter->addFilter(new Tinebase_Model_Filter_Text('status', 'in', $openStatus->getId()));
                 break;
         }
     }
     return $filter;
 }
Example #11
0
 /**
  * handles completed date and sets task to 100%
  * 
  * @param Tasks_Model_Task $_task
  */
 protected function _handleCompleted($_task)
 {
     $allStatus = Tasks_Config::getInstance()->get(Tasks_Config::TASK_STATUS)->records;
     $statusId = $allStatus->getIndexById($_task->status);
     if (is_int($statusId)) {
         $status = $allStatus[$statusId];
         if ($status->is_open) {
             $_task->completed = NULL;
         } elseif (!$_task->completed instanceof DateTime) {
             $_task->completed = Tinebase_DateTime::now();
         }
     }
 }