[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/modules/projects/ -> addedit.php (source)

   1  <?php /* $Id: addedit.php 139 2008-04-05 14:21:51Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/projects/addedit.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  // check permissions for this record
  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  // get a list of permitted companies
  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  // pull users
  32  $users = w2PgetUsers();
  33  
  34  // load the record data
  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  // add in the existing company if for some reason it is dis-allowed
  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  // get critical tasks (criteria: task_end_date)
  61  $criticalTasks = ($project_id > 0) ? $row->getCriticalTasks() : null;
  62  
  63  // get ProjectPriority from sysvals
  64  $projectPriority = w2PgetSysVal('ProjectPriority');
  65  
  66  // format dates
  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  // setup the title block
  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  //Build display list for departments
  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  // Get contacts list
 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      //test.style.background = f.project_color_identifier.value;
 130      document.getElementById('test').style.background = '#' + f.project_color_identifier.value;         //fix for mozilla: does this work with ie? opera ok.
 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      if (f.project_end_date.value > 0 && f.project_end_date.value < f.project_start_date.value) {
 168          msg += "\n<?php echo $AppUI->_('projectsBadEndDate1'); ?>";
 169      }
 170      if (f.project_actual_end_date.value > 0 && f.project_actual_end_date.value < f.project_start_date.value) {
 171          msg += "\n<?php echo $AppUI->_('projectsBadEndDate2'); ?>";
 172      }
 173      */
 174  
 175      <?php
 176  /*
 177  ** Automatic required fields generated from System Values
 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  //prompt('',url);
 214          window.open(url,'dept','left=50,top=50,height=250,width=400,resizable');
 215  
 216  //    window.open('./index.php?m=public&a=selector&dialog=1&call_back=setDepartment&selected_contacts_id='+selected_contacts_id, 'contacts','height=600,width=400,resizable,scrollbars=yes');
 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  // Let's check if the actual company has departments registered
 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'; ?>;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border:solid;border-width:1;border-left-width:0;background:#FFFFFF">&nbsp;&nbsp;</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'];