Merge branch '2016.11-develop' into 2017.11
[tine20] / tine20 / Timetracker / Preference.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Timetracker
6  * @subpackage  Backend
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Philipp Schuele <p.schuele@metaways.de>
9  * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
10  * 
11  */
12
13
14 /**
15  * backend for Timetracker preferences
16  *
17  * @package     Timetracker
18  * @subpackage  Backend
19  */
20 class Timetracker_Preference extends Tinebase_Preference_Abstract
21 {
22     /**************************** application preferences/settings *****************/
23     
24     /**
25      * use tine user credentials for imap connection
26      *
27      */
28     const TSODSEXPORTCONFIG = 'tsOdsExportConfig';
29
30     /**
31      * Quicktag
32      */
33     const QUICKTAG = 'quickTag';
34
35     /**
36      * application
37      *
38      * @var string
39      */
40     protected $_application = 'Timetracker';
41         
42     /**************************** public functions *********************************/
43     
44     /**
45      * get all possible application prefs
46      *
47      * @return  array   all application prefs
48      */
49     public function getAllApplicationPreferences()
50     {
51         $allPrefs = array(
52             self::TSODSEXPORTCONFIG,
53             self::QUICKTAG
54         );
55             
56         return $allPrefs;
57     }
58     
59     /**
60      * get translated right descriptions
61      * 
62      * @return  array with translated descriptions for this applications preferences
63      */
64     public function getTranslatedPreferences()
65     {
66         $translate = Tinebase_Translation::getTranslation($this->_application);
67
68         $prefDescriptions = array(
69             self::TSODSEXPORTCONFIG  => array(
70                 'label'         => $translate->_('Timesheets ODS export configuration'),
71                 'description'   => $translate->_('Use this configuration for the timesheet ODS export.'),
72             ),
73             self::QUICKTAG => array(
74                 'label'         => $translate->_('A Tag which is available in context menu for fast assignment'),
75                 'description'   => $translate->_('Quick Tag allows to simply assign a predefined tag by the context menu.')
76             )
77         );
78         
79         return $prefDescriptions;
80     }
81     
82     /**
83      * get preference defaults if no default is found in the database
84      *
85      * @param string $_preferenceName
86      * @return Tinebase_Model_Preference
87      */
88     public function getApplicationPreferenceDefaults($_preferenceName, $_accountId = NULL, $_accountType=Tinebase_Acl_Rights::ACCOUNT_TYPE_USER)
89     {
90         $preference = $this->_getDefaultBasePreference($_preferenceName);
91         
92         switch($_preferenceName) {
93             case self::TSODSEXPORTCONFIG:
94                 $preference->value      = 'ts_default_ods';
95                 break;
96             case self::QUICKTAG:
97                 $preference->value      = 'false';
98                 break;
99             default:
100                 throw new Tinebase_Exception_NotFound('Default preference with name ' . $_preferenceName . ' not found.');
101         }
102         
103         return $preference;
104     }
105     
106     /**
107      * get special options
108      *
109      * @param string $_value
110      * @return array
111      */
112     protected function _getSpecialOptions($_value)
113     {
114         $translate = Tinebase_Translation::getTranslation($this->_application);
115         
116         $result = array();
117         switch($_value) {
118             case self::TSODSEXPORTCONFIG:
119                 // get names from import export definitions
120                 $filter = new Tinebase_Model_ImportExportDefinitionFilter(array(
121                     array('field' => 'plugin', 'operator' => 'equals', 'value' => 'Timetracker_Export_Ods_Timesheet'),
122                 ));
123                 $configs = Tinebase_ImportExportDefinition::getInstance()->search($filter);
124                 if (! empty($configs)) {
125                     foreach($configs as $tsConfig) {
126                         $result[] = array($tsConfig->name, $tsConfig->name);
127                     }
128                 } else {
129                     $result[] = array('default', $translate->_('default'));
130                 }
131                 break;
132
133             case self::QUICKTAG:
134                 // Get all shared tags
135                 $tagController = Tinebase_Tags::getInstance();
136                 $filter = new Tinebase_Model_TagFilter(array(
137                     'type' => Tinebase_Model_Tag::TYPE_SHARED,
138                 ));
139                 $tags = $tagController->searchTags($filter);
140
141                 $availableTags = array();
142
143                 /* @var $tag Tinebase_Model_Tag */
144                 foreach($tags as $tag) {
145                     $availableTags[] = array($tag->id, $tag->name);
146                 }
147
148                 return $availableTags;
149                 break;
150             default:
151                 $result = parent::_getSpecialOptions($_value);
152         }
153         
154         return $result;
155     }
156 }