예제 #1
0
 /**
  * Return all roles for this contact
  *
  * @access public
  * @return array
  */
 function getRoles()
 {
     if ($this->getId() == '') {
         return array();
     }
     return ProjectContacts::getRolesByContact($this);
 }
 function assign_to_project()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $contact = Contacts::findById(get_id());
     if (!$contact instanceof Contact) {
         flash_error(lang('contact dnx'));
         ajx_current("empty");
         return;
     }
     // if
     $projects = active_projects();
     $contactRoles = ProjectContacts::getRolesByContact($contact);
     if (!$contact->canEdit(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     // if
     $contact_data = array_var($_POST, 'contact');
     $enterData = true;
     if (!is_array($contact_data)) {
         $enterData = false;
         foreach ($projects as $project) {
             $contact_data['pid_' . $project->getId()] = false;
             $contact_data['role_pid_' . $project->getId()] = '';
             if ($contactRoles) {
                 foreach ($contactRoles as $cr) {
                     if ($project->getId() == $cr->getProjectId()) {
                         $contact_data['pid_' . $project->getId()] = true;
                         $contact_data['role_pid_' . $project->getId()] = $cr->getRole();
                     }
                     // if
                 }
                 // foreach
             }
             // if
         }
         // foreach
     }
     // if
     if ($enterData) {
         try {
             DB::beginWork();
             $err = 0;
             $succ = 0;
             $workspaces = array();
             foreach ($projects as $project) {
                 $pc = ProjectContacts::getRole($contact, $project);
                 if (!isset($contact_data['pid_' . $project->getId()])) {
                     if ($pc instanceof ProjectContact) {
                         $pc->delete();
                         $succ++;
                     }
                 } else {
                     $role = $contact_data['role_pid_' . $project->getId()];
                     if ($pc instanceof ProjectContact) {
                         if ($pc->getRole() != $role) {
                             $pc->setRole($role);
                             $pc->save();
                             $succ++;
                             //								ApplicationLogs::createLog($contact, $project, ApplicationLogs::ACTION_EDIT);
                         }
                         //if
                     } else {
                         $pc = new ProjectContact();
                         $pc->setProjectId($project->getId());
                         $pc->setContactId($contact->getId());
                         $pc->setRole($role);
                         $pc->save();
                         $succ++;
                         //							ApplicationLogs::createLog($contact, $project, ApplicationLogs::ACTION_EDIT);
                     }
                     //if else
                 }
                 //if else
             }
             //foreach
             if ($err == 0) {
                 flash_success(lang('success edit contact', $contact->getDisplayName()));
                 DB::commit();
                 ApplicationLogs::createLog($contact, null, ApplicationLogs::ACTION_EDIT);
                 ajx_current("back");
             } else {
                 DB::rollback();
                 flash_error(lang('failed to assign contact due to permissions', implode(", ", $workspaces)));
                 ajx_current("empty");
             }
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
             ajx_current("empty");
         }
         // try
     }
     // if
     tpl_assign('contact', $contact);
     tpl_assign('contact_data', $contact_data);
     tpl_assign('projects', $projects);
 }