/** * Edit specific contact * * @access public * @param void * @return null */ function edit() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('edit_contact'); $contact = Contacts::findById(get_id()); if(!($contact instanceof Contact)) { flash_error(lang('contact dnx')); ajx_current("empty"); return; } // if if(!$contact->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $im_types = ImTypes::findAll(array('order' => '`id`')); $personal_emails = $contact->getContactEmails('personal'); $contact_data = array_var($_POST, 'contact'); // Populate form fields if(!is_array($contact_data)) { $contact_data = array( 'first_name' => $contact->getFirstName(), 'surname' => $contact->getSurname(), 'username' => $contact->getUsername(), 'department' => $contact->getDepartment(), 'job_title' => $contact->getJobTitle(), 'email' => $contact->getEmailAddress(), 'email2' => !is_null($personal_emails) && isset($personal_emails[0]) ? $personal_emails[0]->getEmailAddress() : '', 'email3' => !is_null($personal_emails) && isset($personal_emails[1])? $personal_emails[1]->getEmailAddress() : '', 'w_web_page'=> $contact->getWebpageUrl('work'), 'birthday'=> $contact->getBirthday(), 'w_phone_number'=> $contact->getPhoneNumber('work', true), 'w_phone_number2'=> $contact->getPhoneNumber('work'), 'w_fax_number'=> $contact->getPhoneNumber('fax', true), 'w_assistant_number'=> $contact->getPhoneNumber('assistant'), 'w_callback_number'=> $contact->getPhoneNumber('callback'), 'h_web_page'=> $contact->getWebpageUrl('personal'), 'h_phone_number'=> $contact->getPhoneNumber('home', true), 'h_phone_number2'=> $contact->getPhoneNumber('home'), 'h_fax_number'=> $contact->getPhoneNumber('fax'), 'h_mobile_number'=> $contact->getPhoneNumber('mobile'), 'h_pager_number'=> $contact->getPhoneNumber('pager'), 'o_web_page'=> $contact->getWebpageUrl('other'), 'o_phone_number'=> $contact->getPhoneNumber('other',true), 'o_phone_number2'=> $contact->getPhoneNumber('other'), 'comments' => $contact->getCommentsField(), 'picture_file' => $contact->getPictureFile(), 'timezone' => $contact->getTimezone(), 'company_id' => $contact->getCompanyId(), ); // array $w_address = $contact->getAddress('work'); if($w_address){ $contact_data['w_address'] = $w_address->getStreet(); $contact_data['w_city'] = $w_address->getCity(); $contact_data['w_state'] = $w_address->getState(); $contact_data['w_zipcode'] = $w_address->getZipCode(); $contact_data['w_country'] = $w_address->getCountry(); } $h_address = $contact->getAddress('home'); if($h_address){ $contact_data['h_address'] = $h_address->getStreet(); $contact_data['h_city'] = $h_address->getCity(); $contact_data['h_state'] = $h_address->getState(); $contact_data['h_zipcode'] = $h_address->getZipCode(); $contact_data['h_country'] = $h_address->getCountry(); } $o_address = $contact->getAddress('other'); if($o_address){ $contact_data['o_address'] = $o_address->getStreet(); $contact_data['o_city'] = $o_address->getCity(); $contact_data['o_state'] = $o_address->getState(); $contact_data['o_zipcode'] = $o_address->getZipCode(); $contact_data['o_country'] = $o_address->getCountry(); } if(is_array($im_types)) { foreach($im_types as $im_type) { $contact_data['im_' . $im_type->getId()] = $contact->getImValue($im_type); } // foreach } // if $default_im = $contact->getMainImType(); $contact_data['default_im'] = $default_im instanceof ImType ? $default_im->getId() : ''; } // if tpl_assign('isEdit', array_var($_GET, 'isEdit',false)); tpl_assign('contact', $contact); tpl_assign('contact_data', $contact_data); tpl_assign('im_types', $im_types); //Contact Submit if(is_array(array_var($_POST, 'contact'))) { try { DB::beginWork(); $contact_data['email']= trim ($contact_data['email']); Contacts::validate($contact_data, get_id()); $newCompany = false; if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))){ $company_data = array_var($_POST, 'company'); Contacts::validate($company_data); $company = new Contact(); $company->setFromAttributes($company_data); $company->setIsCompany(true); $company->setObjectName(); $company->save(); if($company_data['address'] != "") $company->addAddress($company_data['address'], $company_data['city'], $company_data['state'], $company_data['country'], $company_data['zipcode'], 'work', true); if($company_data['phone_number'] != "") $company->addPhone($company_data['phone_number'], 'work', true); if($company_data['fax_number'] != "") $company->addPhone($company_data['fax_number'], 'fax', true); if($company_data['homepage'] != "") $company->addWebpage($company_data['homepage'], 'work'); if($company_data['email'] != "") $company->addEmail($company_data['email'], 'work' , true); ApplicationLogs::createLog($company,ApplicationLogs::ACTION_ADD); $newCompany = true; } $contact_data['birthday'] = getDateValue($contact_data["birthday"]); if(isset($contact_data['specify_username'])){ if($contact_data['user']['username'] != ""){ $contact_data['name'] = $contact_data['user']['username']; }else{ $contact_data['name'] = $contact_data['first_name']." ".$contact_data['surname']; } }else{ $contact_data['name'] = $contact_data['first_name']." ".$contact_data['surname']; } $contact->setFromAttributes($contact_data); if($newCompany) { $contact->setCompanyId($company->getId()); } //telephones $mainPone = $contact->getPhone('work', true); if($mainPone){ $mainPone->editNumber($contact_data['w_phone_number']); }else{ if($contact_data['w_phone_number'] != "") $contact->addPhone($contact_data['w_phone_number'], 'work', true); } $pone2 = $contact->getPhone('work'); if($pone2){ $pone2->editNumber($contact_data['w_phone_number2']); }else{ if($contact_data['w_phone_number2'] != "") $contact->addPhone($contact_data['w_phone_number2'], 'work'); } $faxPhone = $contact->getPhone('fax',true); if($faxPhone){ $faxPhone->editNumber($contact_data['w_fax_number']); }else{ if($contact_data['w_fax_number'] != "") $contact->addPhone($contact_data['w_fax_number'], 'fax', true); } $assistantPhone = $contact->getPhone('assistant'); if($assistantPhone){ $assistantPhone->editNumber($contact_data['w_assistant_number']); }else{ if($contact_data['w_assistant_number'] != "") $contact->addPhone($contact_data['w_assistant_number'], 'assistant'); } $callbackPhone = $contact->getPhone('callback'); if($callbackPhone){ $callbackPhone->editNumber($contact_data['w_callback_number']); }else{ if($contact_data['w_callback_number'] != "") $contact->addPhone($contact_data['w_callback_number'], 'callback'); } $o_phone = $contact->getPhone('other',true); if($o_phone){ $o_phone->editNumber($contact_data['o_phone_number']); }else{ if($contact_data['o_phone_number'] != "") $contact->addPhone($contact_data['o_phone_number'], 'other', true); } $o_pone2 = $contact->getPhone('other'); if($o_pone2){ $o_pone2->editNumber($contact_data['o_phone_number2']); }else{ if($contact_data['o_phone_number2'] != "") $contact->addPhone($contact_data['o_phone_number2'], 'other'); } $h_phone = $contact->getPhone('home', true); if($h_phone){ $h_phone->editNumber($contact_data['h_phone_number']); }else{ if($contact_data['h_phone_number'] != "") $contact->addPhone($contact_data['h_phone_number'], 'home', true); } $h_phone2 = $contact->getPhone('home'); if($h_phone2){ $h_phone2->editNumber($contact_data['h_phone_number2']); }else{ if($contact_data['h_phone_number2'] != "") $contact->addPhone($contact_data['h_phone_number2'], 'home'); } $h_faxPhone = $contact->getPhone('fax'); if($h_faxPhone){ $h_faxPhone->editNumber($contact_data['h_fax_number']); }else{ if($contact_data['h_fax_number'] != "") $contact->addPhone($contact_data['h_fax_number'], 'fax'); } $h_mobilePhone = $contact->getPhone('mobile'); if($h_mobilePhone){ $h_mobilePhone->editNumber($contact_data['h_mobile_number']); }else{ if($contact_data['h_mobile_number'] != "") $contact->addPhone($contact_data['h_mobile_number'], 'mobile'); } $h_pagerPhone = $contact->getPhone('pager'); if($h_pagerPhone){ $h_pagerPhone->editNumber($contact_data['h_pager_number']); }else{ if($contact_data['h_pager_number'] != "") $contact->addPhone($contact_data['h_pager_number'], 'pager'); } //Emails $personal_email_type_id = EmailTypes::getEmailTypeId('personal'); $main_emails = ContactEmails::getContactMainEmails($contact, $personal_email_type_id); $more_main_emails = array(); $mail = null; foreach ($main_emails as $me) { if ($mail == null) $mail = $me; else $more_main_emails[] = $me; } if($mail){ $mail->editEmailAddress($contact_data['email']); }else{ if($contact_data['email'] != "") $contact->addEmail($contact_data['email'], 'personal' , true); } foreach ($more_main_emails as $mme) { $mme->setIsMain(false); $mme->save(); } $mail2 = !is_null($personal_emails) && isset($personal_emails[0])? $personal_emails[0] : null; if($mail2){ $mail2->editEmailAddress($contact_data['email2']); }else{ if($contact_data['email2'] != "") $contact->addEmail($contact_data['email2'], 'personal'); } $mail3 = !is_null($personal_emails) && isset($personal_emails[1])? $personal_emails[1] : null; if($mail3){ $mail3->editEmailAddress($contact_data['email3']); }else{ if($contact_data['email3'] != "") $contact->addEmail($contact_data['email3'], 'personal'); } //Addresses $w_address = $contact->getAddress('work'); if($w_address){ $w_address->edit($contact_data['w_address'], $contact_data['w_city'], $contact_data['w_state'], $contact_data['w_country'], $contact_data['w_zipcode'],2,0); }else{ if($contact_data['w_address'] != "" || $contact_data['w_city'] != "" || $contact_data['w_state'] != "" || $contact_data['w_country'] != "" || $contact_data['w_zipcode'] != "") $contact->addAddress($contact_data['w_address'], $contact_data['w_city'], $contact_data['w_state'], $contact_data['w_country'], $contact_data['w_zipcode'], 'work'); } $h_address = $contact->getAddress('home'); if($h_address){ $h_address->edit($contact_data['h_address'], $contact_data['h_city'], $contact_data['h_state'], $contact_data['h_country'], $contact_data['h_zipcode'],1,0); }else{ if($contact_data['h_address'] != "" || $contact_data['h_city'] != "" || $contact_data['h_state'] != "" || $contact_data['h_country'] != "" || $contact_data['h_zipcode'] != "") $contact->addAddress($contact_data['h_address'], $contact_data['h_city'], $contact_data['h_state'], $contact_data['h_country'], $contact_data['h_zipcode'], 'home'); } $o_address = $contact->getAddress('other'); if($o_address){ $o_address->edit($contact_data['o_address'], $contact_data['o_city'], $contact_data['o_state'], $contact_data['o_country'], $contact_data['o_zipcode'],3,0); }else{ if($contact_data['o_address'] != "" || $contact_data['o_city'] != "" || $contact_data['o_state'] != "" || $contact_data['o_country'] != "" || $contact_data['o_zipcode'] != "") $contact->addAddress($contact_data['o_address'], $contact_data['o_city'], $contact_data['o_state'], $contact_data['o_country'], $contact_data['o_zipcode'], 'other'); } //Webpages $w_homepage = $contact->getWebpage('work'); if($w_homepage){ $w_homepage->editWebpageURL($contact_data['w_web_page']); }else{ if($contact_data['w_web_page'] != "") $contact->addWebpage($contact_data['w_web_page'], 'work'); } $h_homepage = $contact->getWebpage('personal'); if($h_homepage){ $h_homepage->editWebpageURL($contact_data['h_web_page']); }else{ if($contact_data['h_web_page'] != "") $contact->addWebpage($contact_data['h_web_page'], 'personal'); } $o_homepage = $contact->getWebpage('other'); if($o_homepage){ $o_homepage->editWebpageURL($contact_data['o_web_page']); }else{ if($contact_data['o_web_page'] != "") $contact->addWebpage($contact_data['o_web_page'], 'other'); } $contact->setObjectName(); $contact->save(); $contact->clearImValues(); foreach($im_types as $im_type) { $value = trim(array_var($contact_data, 'im_' . $im_type->getId())); if($value <> '') { $contact_im_value = new ContactImValue(); $contact_im_value->setContactId($contact->getId()); $contact_im_value->setImTypeId($im_type->getId()); $contact_im_value->setValue($value); $contact_im_value->setIsMain(array_var($contact_data, 'default_im') == $im_type->getId()); $contact_im_value->save(); } // if } // foreach $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); if (count($member_ids)){ $object_controller->add_to_members($contact, $member_ids); } if ($newCompany) $object_controller->add_to_members($company, $member_ids); $object_controller->link_to_new_object($contact); $object_controller->add_subscribers($contact); $object_controller->add_custom_properties($contact); ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_EDIT ); // User settings $user = array_var(array_var($_POST, 'contact'),'user'); if($user){ $user['username'] = str_replace(" ","",strtolower($name)); $this->createUserFromContactForm($user, $contact->getId(), $contact->getEmailAddress()); // Reload contact again due to 'createUserFromContactForm' changes Hook::fire("after_contact_quick_add", Contacts::instance()->findById($contact->getId()), $ret); } DB::commit(); flash_success(lang('success edit contact', $contact->getObjectName())); ajx_current("back"); } catch(Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if } // edit