|
[ Index ]
|
Source Code Reference for V1.00
|
[Summary view]
[Print]
[Text view]
1 <?php
2 if (!defined('W2P_BASE_DIR')) {
3 die('You should not access this file directly.');
4 }
5 global $AppUI, $cal_sdf;
6 $AppUI->loadCalendarJS();
7
8 $project_id = intval(w2PgetParam($_GET, 'project_id', 0));
9 $company_id = intval(w2PgetParam($_GET, 'company_id', 0));
10 $contact_id = intval(w2PgetParam($_GET, 'contact_id', 0));
11
12 $structprojs = getProjects();
13 unset($structprojs[$project_id]);
14 $structprojects = arrayMerge(array('0' => array(0 => 0, 1 => '(' . $AppUI->_('No Parent') . ')', 2 => '')), $structprojs);
15
16 $perms = &$AppUI->acl();
17
18 $canEdit = $perms->checkModuleItem('projects', 'edit', $project_id);
19 $canAuthor = $perms->checkModuleItem('projects', 'add');
20 if ((!$canEdit && $project_id > 0) || (!$canAuthor && $project_id == 0)) {
21 $AppUI->redirect('m=public&a=access_denied');
22 }
23
24
25 require_once ($AppUI->getModuleClass('companies'));
26
27 $row = new CCompany();
28 $companies = $row->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name');
29 $companies = arrayMerge(array('0' => ''), $companies);
30
31
32 $users = w2PgetUsers();
33
34
35 $row = new CProject();
36
37 if (!$row->load($project_id, false) && $project_id > 0) {
38 $AppUI->setMsg('Project');
39 $AppUI->setMsg('invalidID', UI_MSG_ERROR, true);
40 $AppUI->redirect();
41 } elseif (count($companies) < 2 && $project_id == 0) {
42 $AppUI->setMsg('noCompanies', UI_MSG_ERROR, true);
43 $AppUI->redirect();
44 }
45
46 if ($project_id == 0 && $company_id > 0) {
47 $row->project_company = $company_id;
48 }
49
50
51 if ($project_id && !array_key_exists($row->project_company, $companies)) {
52 $q = new DBQuery;
53 $q->addTable('companies');
54 $q->addQuery('company_name');
55 $q->addWhere('companies.company_id = ' . (int)$row->project_company);
56 $companies[$row->project_company] = $q->loadResult();
57 $q->clear();
58 }
59
60
61 $criticalTasks = ($project_id > 0) ? $row->getCriticalTasks() : null;
62
63
64 $projectPriority = w2PgetSysVal('ProjectPriority');
65
66
67 $df = $AppUI->getPref('SHDATEFORMAT');
68
69 $start_date = new CDate($row->project_start_date);
70
71 $end_date = intval($row->project_end_date) ? new CDate($row->project_end_date) : null;
72 $actual_end_date = intval($criticalTasks[0]['task_end_date']) ? new CDate($criticalTasks[0]['task_end_date']) : null;
73 $style = (($actual_end_date > $end_date) && !empty($end_date)) ? 'style="color:red; font-weight:bold"' : '';
74
75
76 $ttl = $project_id > 0 ? 'Edit Project' : 'New Project';
77 $titleBlock = new CTitleBlock($ttl, 'applet3-48.png', $m, $m . '.' . $a);
78 $titleBlock->addCrumb('?m=projects', 'projects list');
79 if ($project_id != 0) {
80 $titleBlock->addCrumb('?m=projects&a=view&project_id=' . $project_id, 'view this project');
81 }
82 $titleBlock->show();
83
84
85 $company_id = $row->project_company;
86 $selected_departments = array();
87 if ($project_id) {
88 $q = &new DBQuery;
89 $q->addTable('project_departments', 'pd');
90 $q->addTable('departments', 'deps');
91 $q->addQuery('department_id');
92 $q->addWhere('project_id = ' . (int)$project_id);
93 $q->addWhere('pd.department_id = deps.dept_id');
94 $department = new CDepartment;
95 $department->setAllowedSQL($AppUI->user_id, $q);
96 $selected_departments = $q->loadColumn();
97 }
98 $departments_count = 0;
99 $department_selection_list = getDepartmentSelectionList($company_id, $selected_departments);
100 if ($department_selection_list != '' || $project_id) {
101 $department_selection_list = ($AppUI->_('Departments') . '<br /><select name="dept_ids[]" class="text"><option value="0"></option>' . $department_selection_list . '</select>');
102 } else {
103 $department_selection_list = '<input type="button" class="button" value="' . $AppUI->_('Select department...') . '" onclick="javascript:popDepartment();" /><input type="hidden" name="project_departments"';
104 }
105
106
107 $selected_contacts = array();
108 if ($project_id) {
109 $q = &new DBQuery;
110 $q->addTable('project_contacts');
111 $q->addQuery('contact_id');
112 $q->addWhere('project_id = ' . (int)$project_id);
113 $res = &$q->exec();
114 for ($res; !$res->EOF; $res->MoveNext()) {
115 $selected_contacts[] = $res->fields['contact_id'];
116 }
117 $q->clear();
118 }
119 if ($project_id == 0 && $contact_id > 0) {
120 $selected_contacts[] = '' . $contact_id;
121 }
122 ?>
123 <script language="javascript">
124 function setColor(color) {
125 var f = document.editFrm;
126 if (color) {
127 f.project_color_identifier.value = color;
128 }
129
130 document.getElementById('test').style.background = '#' + f.project_color_identifier.value;
131 }
132
133 function setShort() {
134 var f = document.editFrm;
135 var x = 10;
136 if (f.project_name.value.length < 11) {
137 x = f.project_name.value.length;
138 }
139 if (f.project_short_name.value.length == 0) {
140 f.project_short_name.value = f.project_name.value.substr(0,x);
141 }
142 }
143
144 function setDate( frm_name, f_date ) {
145 fld_date = eval( 'document.' + frm_name + '.' + f_date );
146 fld_real_date = eval( 'document.' + frm_name + '.' + 'project_' + f_date );
147 if (fld_date.value.length>0) {
148 if ((parseDate(fld_date.value))==null) {
149 alert('The Date/Time you typed does not match your prefered format, please retype.');
150 fld_real_date.value = '';
151 fld_date.style.backgroundColor = 'red';
152 } else {
153 fld_real_date.value = formatDate(parseDate(fld_date.value), 'yyyyMMdd');
154 fld_date.value = formatDate(parseDate(fld_date.value), '<?php echo $cal_sdf ?>');
155 fld_date.style.backgroundColor = '';
156 }
157 } else {
158 fld_real_date.value = '';
159 }
160 }
161
162 function submitIt() {
163 var f = document.editFrm;
164 var msg = '';
165
166
167
168
169
170
171
172
173
174
175 <?php
176
177
178
179 $requiredFields = w2PgetSysVal('ProjectRequiredFields');
180 echo w2PrequiredFields($requiredFields);
181 ?>
182
183 if (msg.length < 1) {
184 f.submit();
185 } else {
186 alert(msg);
187 }
188 }
189
190 var selected_contacts_id = '<?php echo implode(',', $selected_contacts); ?>';
191
192 function popContacts() {
193 window.open('./index.php?m=public&a=contact_selector&dialog=1&call_back=setContacts&selected_contacts_id='+selected_contacts_id, 'contacts','height=600,width=400,resizable,scrollbars=yes');
194 }
195
196 function setContacts(contact_id_string){
197 if(!contact_id_string){
198 contact_id_string = '';
199 }
200 document.editFrm.project_contacts.value = contact_id_string;
201 document.editFrm.email_project_contacts.value = contact_id_string;
202 selected_contacts_id = contact_id_string;
203 }
204
205 var selected_departments_id = '<?php echo implode(',', $selected_departments); ?>';
206
207 function popDepartment() {
208 var f = document.editFrm;
209 var url = './index.php?m=public&a=selector&dialog=1&callback=setDepartment&table=departments&company_id='
210 + f.project_company.options[f.project_company.selectedIndex].value
211 + '&dept_id='
212 + selected_departments_id;
213
214 window.open(url,'dept','left=50,top=50,height=250,width=400,resizable');
215
216
217 }
218
219 function setDepartment(department_id_string){
220 if(!department_id_string){
221 department_id_string = '';
222 }
223 document.editFrm.project_departments.value = department_id_string;
224 selected_departments_id = department_id_string;
225 }
226
227 </script>
228
229 <table cellspacing="1" cellpadding="1" border="0" width='100%' class="std">
230 <tr>
231 <td>
232 <table width="100%">
233 <form name="editFrm" action="./index.php?m=projects" method="post">
234 <input type="hidden" name="dosql" value="do_project_aed" />
235 <input type="hidden" name="project_id" value="<?php echo $project_id; ?>" />
236 <input type="hidden" name="project_creator" value="<?php echo is_null($row->project_creator) ? $AppUI->user_id : $row->project_creator; ?>" />
237 <input name='project_contacts' type='hidden' value="<?php echo implode(',', $selected_contacts); ?>" />
238 <tr>
239 <td>
240 <input class="button" type="button" name="cancel2" value="<?php echo $AppUI->_('cancel'); ?>" onclick="javascript:if(confirm('Are you sure you want to cancel.')){location.href = './index.php?m=projects';}" />
241 </td>
242 <td align="right">
243 <input class="button" type="button" name="btnFuseAction2" value="<?php echo $AppUI->_('submit'); ?>" onclick="submitIt();" />
244 </td>
245 </tr>
246 <tr>
247 <td width="50%" valign="top">
248 <table cellspacing="0" cellpadding="2" border="0">
249 <tr>
250 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Project Name'); ?></td>
251 <td width="100%" colspan="2">
252 <input type="text" name="project_name" value="<?php echo $row->project_name; ?>" size="25" maxlength="50" onblur="setShort();" class="text" /> *
253 </td>
254 </tr>
255 <tr>
256 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Parent Project'); ?></td>
257 <td colspan="2">
258 <?php echo arraySelectTree($structprojects, 'project_parent', 'style="width:250px;" class="text"', $row->project_parent ? $row->project_parent : 0) ?>
259 </td>
260 </tr>
261 <tr>
262 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Project Owner'); ?></td>
263 <td colspan="2">
264 <?php echo arraySelect($users, 'project_owner', 'size="1" style="width:200px;" class="text"', $row->project_owner ? $row->project_owner : $AppUI->user_id) ?>
265 </td>
266 </tr>
267 <tr>
268 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Company'); ?></td>
269 <td width="100%" nowrap="nowrap" colspan="2">
270 <?php
271 echo arraySelect($companies, 'project_company', 'class="text" size="1"', $row->project_company);
272 ?> *</td>
273 </tr>
274 <tr>
275 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Project Location'); ?></td>
276 <td width="100%" colspan="2">
277 <input type="text" name="project_location" value="<?php echo w2PformSafe($row->project_location); ?>" size="25" maxlength="50" class="text" />
278 </td>
279 </tr>
280 <tr>
281 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Start Date'); ?></td>
282 <td nowrap="nowrap">
283 <input type="hidden" name="project_start_date" id="project_start_date" value="<?php echo $start_date ? $start_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
284 <input type="text" name="start_date" id="start_date" onchange="setDate('editFrm', 'start_date');" value="<?php echo $start_date ? $start_date->format($df) : ''; ?>" class="text" />
285 <a href="javascript: void(0);" onclick="return showCalendar('start_date', '<?php echo $df ?>', 'editFrm', null, true)">
286 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
287 </a>
288 </td>
289 <td rowspan="6" valign="top">
290 <?php
291 if ($AppUI->isActiveModule('contacts') && $perms->checkModule('contacts', 'view')) {
292 echo '<input type="button" class="button" value="' . $AppUI->_('Select contacts...') . '" onclick="javascript:popContacts();" />';
293 }
294
295 if ($department_selection_list != '') {
296 ?>
297 <br />
298 <?php echo $department_selection_list; ?>
299 <?php
300 }
301 ?>
302 </td>
303 </tr>
304 <tr>
305 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Target Finish Date'); ?></td>
306 <td nowrap="nowrap">
307 <input type="hidden" name="project_end_date" id="project_end_date" value="<?php echo $end_date ? $end_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
308 <input type="text" name="end_date" id="end_date" onchange="setDate('editFrm', 'end_date');" value="<?php echo $end_date ? $end_date->format($df) : ''; ?>" class="text" />
309 <a href="javascript: void(0);" onclick="return showCalendar('end_date', '<?php echo $df ?>', 'editFrm', null, true)">
310 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
311 </a>
312 </td>
313 </tr>
314 <tr>
315 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Target Budget'); ?> <?php echo $w2Pconfig['currency_symbol'] ?></td>
316 <td>
317 <input type="Text" name="project_target_budget" value="<?php echo $row->project_target_budget; ?>" maxlength="10" class="text" />
318 </td>
319 </tr>
320 <tr>
321 <td colspan="2"><hr noshade="noshade" size="1" /></td>
322 </tr>
323 <tr>
324 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Actual Finish Date'); ?></td>
325 <td nowrap="nowrap">
326 <?php if ($project_id > 0) { ?>
327 <?php echo $actual_end_date ? '<a href="?m=tasks&a=view&task_id=' . $criticalTasks[0]['task_id'] . '">' : ''; ?>
328 <?php echo $actual_end_date ? '<span ' . $style . '>' . $actual_end_date->format($df) . '</span>' : '-'; ?>
329 <?php echo $actual_end_date ? '</a>' : ''; ?>
330 <?php } else {
331 echo $AppUI->_('Dynamically calculated');
332 } ?>
333 </td>
334 </tr>
335 <tr>
336 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Actual Budget'); ?> <?php echo $w2Pconfig['currency_symbol'] ?></td>
337 <td>
338 <input type="text" name="project_actual_budget" value="<?php echo $row->project_actual_budget; ?>" size="10" maxlength="10" class="text"/>
339 </td>
340 </tr>
341 <tr>
342 <td colspan="3"><hr noshade="noshade" size="1" /></td>
343 </tr>
344 <tr>
345 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('URL'); ?></td>
346 <td colspan="2">
347 <input type="text" name="project_url" value='<?php echo $row->project_url; ?>' size="40" maxlength="255" class="text" />
348 </td>
349 </tr>
350 <tr>
351 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Staging URL'); ?></td>
352 <td colspan="2">
353 <input type="Text" name="project_demo_url" value='<?php echo $row->project_demo_url; ?>' size="40" maxlength="255" class="text" />
354 </td>
355 </tr>
356 <tr>
357 <td align="right" colspan="3">
358 <?php
359 require_once ($AppUI->getSystemClass('CustomFields'));
360 $custom_fields = new CustomFields($m, $a, $row->project_id, 'edit');
361 $custom_fields->printHTML();
362 ?>
363 </td>
364 </tr>
365 </table>
366 </td>
367 <td width="50%" valign="top">
368 <table cellspacing="0" cellpadding="2" border="0" width="100%">
369 <tr>
370 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Priority'); ?></td>
371 <td nowrap ="nowrap">
372 <?php echo arraySelect($projectPriority, 'project_priority', 'size="1" class="text"', ($row->project_priority ? $row->project_priority : 0), true); ?> *
373 </td>
374 </tr>
375 <tr>
376 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Short Name'); ?></td>
377 <td colspan="3">
378 <input type="text" name="project_short_name" value="<?php echo w2PformSafe($row->project_short_name); ?>" size="10" maxlength="10" class="text" /> *
379 </td>
380 </tr>
381 <tr>
382 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Color Identifier'); ?></td>
383 <td nowrap="nowrap">
384 <input type="text" name="project_color_identifier" value="<?php echo ($row->project_color_identifier) ? $row->project_color_identifier : 'FFFFFF'; ?>" size="10" maxlength="6" onblur="setColor();" class="text" /> *
385 </td>
386 <td nowrap="nowrap" align="right">
387 <a href="javascript: void(0);" onclick="newwin=window.open('./index.php?m=public&a=color_selector&dialog=1&callback=setColor', 'calwin', 'width=320, height=300, scrollbars=no');"><?php echo $AppUI->_('change color'); ?></a>
388 </td>
389 <td nowrap="nowrap">
390 <a href="javascript: void(0);" onclick="newwin=window.open('./index.php?m=public&a=color_selector&dialog=1&callback=setColor', 'calwin', 'width=320, height=300, scrollbars=no');"><span id="test" style="border:solid;border-width:1;border-right-width:0;background:#<?php echo ($row->project_color_identifier) ? $row->project_color_identifier : 'FFFFFF'; ?>;"> </span><span style="border:solid;border-width:1;border-left-width:0;background:#FFFFFF"> </span></a>
391 </td>
392 </tr>
393 <tr>
394 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Project Type'); ?></td>
395 <td colspan="3">
396 <?php echo arraySelect($ptype, 'project_type', 'size="1" class="text"', $row->project_type, true); ?> *
397 </td>
398 </tr>
399 <tr>
400 <td colspan="4">
401 <table width="100%" bgcolor="#cccccc">
402 <tr>
403 <td><?php echo $AppUI->_('Status'); ?> *</td>
404 <td nowrap="nowrap"><?php echo $AppUI->_('Progress'); ?></td>
405 <td><?php echo $AppUI->_('Active'); ?>?</td>
406 </tr>
407 <tr>
408 <td>
409 <?php echo arraySelect($pstatus, 'project_status', 'size="1" class="text"', $row->project_status, true); ?>
410 </td>
411 <td>
412 <strong><?php echo sprintf("%.1f%%", $row->project_percent_complete); ?></strong>
413 </td>
414 <td>
415 <input type="checkbox" value="1" name="project_active" <?php echo $row->project_active || $project_id == 0 ? 'checked="checked"' : ''; ?> />
416 </td>
417 </tr>
418 </table>
419 </td>
420 </tr>
421 <tr>
422 <td align="left" nowrap="nowrap">
423 <?php echo $AppUI->_('Import tasks from'); ?>:<br/>
424 </td>
425 <td colspan="3">
426 <?php echo projectSelectWithOptGroup($AppUI->user_id, 'import_tasks_from', 'size="1" class="text"', false, $project_id); ?>
427 </td>
428 </tr>
429 <tr>
430 <td colspan="4">
431 <?php echo $AppUI->_('Description'); ?><br />
432 <textarea name="project_description" cols="50" rows="10" class="textarea"><?php echo w2PformSafe($row->project_description); ?></textarea>
433 </td>
434 </tr>
435 <tr valign="middle">
436 <table cellspacing="0" cellpadding="2" border="0" width="100%">
437 <td valign="middle"><?php echo $AppUI->_('Notify by Email'); ?>:
438 <?php
439 $tl = $AppUI->getPref('TASKLOGEMAIL');
440 $ta = $tl & 1;
441 $tt = $tl & 2;
442 $tp = $tl & 4;
443 ?><input type='checkbox' name='email_project_owner_box' id='email_project_owner_box' <?php
444 if ($tt)
445 echo "checked='checked'";
446 ?> /><?php echo $AppUI->_('Project Owner'); ?>
447 <input type='hidden' name='email_project_owner' id='email_project_owner'
448 value='<?php
449 if ($row->project_owner) {
450 echo ($row->project_owner);
451 } else {
452 echo '0';
453 }
454 ?>' />
455 <input type='checkbox' name='email_project_contacts_box' id='email_project_contacts_box' <?php
456 if ($tp) {
457 echo "checked='checked'";
458 }
459 ?> /><?php echo $AppUI->_('Project Contacts'); ?>
460 <input type='hidden' name='email_project_contacts' id='email_project_contacts'
461 value='<?php
462 if ($row->project_id) {
463 $q->clear();
464 $q->addTable('project_contacts', 'pc');
465 $q->addJoin('contacts', 'c', 'c.contact_id = pc.contact_id', 'inner');
466 $q->addWhere('pc.project_id = ' . (int)$row->project_id);
467 $q->addQuery('pc.contact_id');
468 $q->addQuery('c.contact_first_name, c.contact_last_name');
469 $req = &$q->exec();
470 $cid = array();
471 $proj_email_title = array();
472 for ($req; !$req->EOF; $req->MoveNext()) {
473 if (!in_array($req->fields['contact_id'], $cid)) {
474 $cid[] = $req->fields['contact_id'];