Refactoring - more usage of ttUser::isPluginEnabled().
[timetracker.git] / WEB-INF / templates / time_edit.tpl
1 <script>
2 // We need a few arrays to populate project and task dropdowns.
3 // When client selection changes, the project dropdown must be re-populated with only relevant projects.
4 // When project selection changes, the task dropdown must be repopulated similarly.
5 // Format:
6 // project_ids[143] = "325,370,390,400";  // Comma-separated list of project ids for client.
7 // project_names[325] = "Time Tracker";   // Project name.
8 // task_ids[325] = "100,101,302,303,304"; // Comma-separated list ot task ids for project.
9 // task_names[100] = "Coding";            // Task name.
10
11 //Prepare an array of projects ids for clients.
12 project_ids = new Array();
13 {foreach $client_list as $client}
14   project_ids[{$client.id}] = "{$client.projects}";
15 {/foreach}
16 // Prepare an array of project names.
17 project_names = new Array();
18 {foreach $project_list as $project}
19   project_names[{$project.id}] = "{$project.name|escape:'javascript'}";
20 {/foreach}
21 // We'll use this array to populate project dropdown when client is not selected.
22 var idx = 0;
23 projects = new Array();
24 {foreach $project_list as $project}
25   projects[idx] = new Array("{$project.id}", "{$project.name|escape:'javascript'}");
26   idx++;
27 {/foreach}
28
29 // Prepare an array of task ids for projects.
30 task_ids = new Array();
31 {foreach $project_list as $project}
32   task_ids[{$project.id}] = "{$project.tasks}";
33 {/foreach}
34 // Prepare an array of task names.
35 task_names = new Array();
36 {foreach $task_list as $task}
37   task_names[{$task.id}] = "{$task.name|escape:'javascript'}";
38 {/foreach}
39
40 // Mandatory top options for project and task dropdowns.
41 empty_label_project = '{$i18n.dropdown.select|escape:'javascript'}';
42 empty_label_task = '{$i18n.dropdown.select|escape:'javascript'}';
43
44 // The populateDropdowns function populates the "project" and "task" dropdown controls
45 // with relevant values.
46 function fillDropdowns() {
47   if(document.body.contains(document.timeRecordForm.client))
48     fillProjectDropdown(document.timeRecordForm.client.value);
49
50   fillTaskDropdown(document.timeRecordForm.project.value);
51 }
52
53 // The fillProjectDropdown function populates the project combo box with
54 // projects associated with a selected clientt (client id is passed here as id).
55 function fillProjectDropdown(id) {
56   var str_ids = project_ids[id];
57
58   var dropdown = document.getElementById("project");
59   // Determine previously selected item.
60   var selected_item = dropdown.options[dropdown.selectedIndex].value;
61
62   // Remove existing content.
63   dropdown.length = 0;
64   var project_reset = true;
65   // Add mandatory top option.
66   dropdown.options[0] = new Option(empty_label_project, '', true);
67
68   // Populate project dropdown.
69   if (!id) {
70     // If we are here, client is not selected.
71     var len = projects.length;
72     for (var i = 0; i < len; i++) {
73       dropdown.options[i+1] = new Option(projects[i][1], projects[i][0]);
74       if (dropdown.options[i+1].value == selected_item)  {
75         dropdown.options[i+1].selected = true;
76         project_reset = false;
77       }
78     }
79   } else if (str_ids) {
80     var ids = new Array();
81     ids = str_ids.split(",");
82     var len = ids.length;
83
84     for (var i = 0; i < len; i++) {
85       var p_id = ids[i];
86       dropdown.options[i+1] = new Option(project_names[p_id], p_id);
87       if (dropdown.options[i+1].value == selected_item)  {
88         dropdown.options[i+1].selected = true;
89         project_reset = false;
90       }
91     }
92   }
93
94   // If project selection was reset - clear the tasks dropdown.
95   if (project_reset) {
96     dropdown = document.getElementById("task");
97     dropdown.length = 0;
98     dropdown.options[0] = new Option(empty_label_task, '', true);
99   }
100 }
101
102 // The fillTaskDropdown function populates the task combo box with
103 // tasks associated with a selected project (project id is passed here as id).
104 function fillTaskDropdown(id) {
105   var str_ids = task_ids[id];
106
107   var dropdown = document.getElementById("task");
108   if (dropdown == null) return; // Nothing to do.
109
110   // Determine previously selected item.
111   var selected_item = dropdown.options[dropdown.selectedIndex].value;
112
113   // Remove existing content.
114   dropdown.length = 0;
115   // Add mandatory top option.
116   dropdown.options[0] = new Option(empty_label_task, '', true);
117
118   // Populate the dropdown from the task_names array.
119   if (str_ids) {
120     var ids = new Array();
121     ids = str_ids.split(",");
122     var len = ids.length;
123
124     var idx = 1;
125     for (var i = 0; i < len; i++) {
126       var t_id = ids[i];
127       if (task_names[t_id]) {
128         dropdown.options[idx] = new Option(task_names[t_id], t_id);
129         idx++;
130       }
131     }
132
133     // If a previously selected item is still in dropdown - select it.
134     if (dropdown.options.length > 0) {
135       for (var i = 0; i < dropdown.options.length; i++) {
136         if (dropdown.options[i].value == selected_item)  {
137           dropdown.options[i].selected = true;
138         }
139       }
140     }
141   }
142 }
143
144 // The formDisable function disables some fields depending on what we have in other fields.
145 function formDisable(formField) {
146   var formFieldValue = eval("document.timeRecordForm." + formField + ".value");
147   var formFieldName = eval("document.timeRecordForm." + formField + ".name");
148
149   if (((formFieldValue != "") && (formFieldName == "start")) || ((formFieldValue != "") && (formFieldName == "finish"))) {
150     var x = eval("document.timeRecordForm.duration");
151     x.value = "";
152     x.disabled = true;
153     x.style.background = "#e9e9e9";
154   }
155
156   if (((formFieldValue == "") && (formFieldName == "start") && (document.timeRecordForm.finish.value == "")) || ((formFieldValue == "") && (formFieldName == "finish") && (document.timeRecordForm.start.value == ""))) {
157     var x = eval("document.timeRecordForm.duration");
158     x.value = "";
159     x.disabled = false;
160     x.style.background = "white";
161   }
162
163   if ((formFieldValue != "") && (formFieldName == "duration")) {
164     var x = eval("document.timeRecordForm.start");
165     x.value = "";
166     x.disabled = true;
167     x.style.background = "#e9e9e9";
168     var x = eval("document.timeRecordForm.finish");
169     x.value = "";
170     x.disabled = true;
171     x.style.background = "#e9e9e9";
172   }
173
174   if ((formFieldValue == "") && (formFieldName == "duration")) {
175     var x = eval("document.timeRecordForm.start");
176     x.disabled = false;
177     x.style.background = "white";
178     var x = eval("document.timeRecordForm.finish");
179     x.disabled = false;
180     x.style.background = "white";
181   }
182 }
183
184 // The setNow function fills a given field with current time.
185 function setNow(formField) {
186   var x = eval("document.timeRecordForm.start");
187   x.disabled = false;
188   x.style.background = "white";
189   var x = eval("document.timeRecordForm.finish");
190   x.disabled = false;
191   x.style.background = "white";
192   var today = new Date();
193   var time_format = '{$user->time_format}';
194   var obj = eval("document.timeRecordForm." + formField);
195   obj.value = today.strftime(time_format);
196   formDisable(formField);
197 }
198 </script>
199
200 {$forms.timeRecordForm.open}
201 <table cellspacing="4" cellpadding="7" border="0">
202 <tr>
203   <td>
204   <table width = "100%">
205   <tr>
206     <td valign="top">
207     <table border="0">
208 {if $user->isPluginEnabled('cl')}
209     <tr>
210       <td align="right">{$i18n.label.client}{if $user->isPluginEnabled('cm')} (*){/if}:</td>
211       <td>{$forms.timeRecordForm.client.control}</td>
212     </tr>
213 {/if}
214 {if $user->isPluginEnabled('iv')}
215     <tr>
216       <td align="right">&nbsp;</td>
217       <td><label>{$forms.timeRecordForm.billable.control}{$i18n.form.time.billable}</label></td>
218     </tr>
219 {/if}
220 {if ($custom_fields && $custom_fields->fields[0])} 
221     <tr>
222       <td align="right">{$custom_fields->fields[0]['label']|escape:'html'}{if $custom_fields->fields[0]['required']} (*){/if}:</td><td>{$forms.timeRecordForm.cf_1.control}</td>
223     </tr>
224 {/if}
225 {if ($smarty.const.MODE_PROJECTS == $user->tracking_mode || $smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
226     <tr>
227       <td align="right">{$i18n.label.project} (*):</td>
228       <td>{$forms.timeRecordForm.project.control}</td>
229     </tr>
230 {/if}
231 {if ($smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
232     <tr>
233       <td align="right">{$i18n.label.task} (*):</td>
234       <td>{$forms.timeRecordForm.task.control}</td>
235     </tr>
236 {/if}
237 {if (($smarty.const.TYPE_START_FINISH == $user->record_type) || ($smarty.const.TYPE_ALL == $user->record_type))}
238     <tr>
239       <td align="right">{$i18n.label.start}:</td>
240       <td>{$forms.timeRecordForm.start.control}&nbsp;<input onclick="setNow('start');" type="button" tabindex="-1" value="{$i18n.button.now}"></td>
241     </tr>
242     <tr>
243       <td align="right">{$i18n.label.finish}:</td>
244       <td>{$forms.timeRecordForm.finish.control}&nbsp;<input onclick="setNow('finish');" type="button" tabindex="-1" value="{$i18n.button.now}"></td>
245     </tr>
246 {/if}
247 {if (($smarty.const.TYPE_DURATION == $user->record_type) || ($smarty.const.TYPE_ALL == $user->record_type))}
248     <tr>
249       <td align="right">{$i18n.label.duration}:</td>
250       <td>{$forms.timeRecordForm.duration.control}&nbsp;{$i18n.form.time.duration_format}</td>
251     </tr>
252 {/if}
253     <tr>
254       <td align="right">{$i18n.label.date}:</td>
255       <td>{$forms.timeRecordForm.date.control}</td>
256     </tr>
257     <tr>
258       <td align="right">{$i18n.label.note}:</td>
259       <td>{$forms.timeRecordForm.note.control}</td>
260     </tr>
261     <tr>
262       <td colspan="2">&nbsp;</td>
263     </tr>
264     <tr>
265       <td></td>
266       <td align="left">{$forms.timeRecordForm.btn_save.control} {$forms.timeRecordForm.btn_copy.control} {$forms.timeRecordForm.btn_delete.control}</td>
267     </tr>
268     </table>
269     </td>
270     </tr>
271   </table>
272   </td>
273   </tr>
274 </table>
275 {$forms.timeRecordForm.close}