/** * 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
/** * 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`')); // telephone types $all_telephone_types = TelephoneTypes::getAllTelephoneTypesInfo(); tpl_assign('all_telephone_types', $all_telephone_types); // address types $all_address_types = AddressTypes::getAllAddressTypesInfo(); tpl_assign('all_address_types', $all_address_types); // webpage types $all_webpage_types = WebpageTypes::getAllWebpageTypesInfo(); tpl_assign('all_webpage_types', $all_webpage_types); // email types $all_email_types = EmailTypes::getAllEmailTypesInfo(); tpl_assign('all_email_types', $all_email_types); $contact_data = array_var($_POST, 'contact'); // Populate form fields if (!is_array($contact_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $contact_data = $this->get_contact_data_from_contact($contact); if ($contact->isUser()) { $_REQUEST['is_user'] = 1; tpl_assign('user_type', $contact->getUserType()); } if (is_array($im_types)) { foreach ($im_types as $im_type) { $contact_data['im_' . $im_type->getId()] = $contact->getImValue($im_type); } // foreach } // if $null = null; Hook::fire('before_edit_contact_form', array('object' => $contact), $null); } // 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); tpl_assign('active_tab', array_var($_REQUEST, 'active_tab')); //Contact Submit if (is_array(array_var($_POST, 'contact'))) { foreach ($contact_data as $k => &$v) { $v = remove_scripts($v); } try { DB::beginWork(); $contact_data['email'] = trim($contact_data['email']); $contact_data['contact_type'] = 'contact'; 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'); $company_data['contact_type'] = 'company'; Contacts::validate($company_data); $company = new Contact(); $company->setFromAttributes($company_data); $company->setIsCompany(true); $company->setObjectName(); $company->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($company_data, $company); if ($company_data['email'] != "") { $company->addEmail($company_data['email'], 'work', true); } $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']; } $user_data = array_var($_POST, 'user'); if (is_array($user_data) && trim(array_var($user_data, 'username', '')) != "") { $contact_data['username'] = trim(array_var($user_data, 'username', '')); } $contact->setFromAttributes($contact_data); if ($newCompany) { $contact->setCompanyId($company->getId()); } $contact->setObjectName(); $contact->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($contact_data, $contact); //Emails $personal_email_type_id = EmailTypes::getEmailTypeId('personal'); $main_emails = $contact->getMainEmails(); $more_main_emails = array(); $main_mail = null; foreach ($main_emails as $me) { if ($main_mail == null) { $main_mail = $me; } else { $more_main_emails[] = $me; } } if ($main_mail) { $main_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(); } // save additional emails $this->save_non_main_emails($contact_data, $contact); // autodetect timezone $autotimezone = array_var($contact_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $contact->getId()); } // IM values $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 (!is_null($member_ids)) { $object_controller->add_to_members($contact, $member_ids); } $no_perm_members_ids = json_decode(array_var($_POST, 'no_perm_members')); if (count($no_perm_members_ids)) { $object_controller->add_to_members($contact, $no_perm_members_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); // User settings $user = array_var(array_var($_POST, 'contact'), 'user'); if ($user && $contact->canUpdatePermissions(logged_user())) { $user_type_changed = false; if (array_var($user, 'type')) { $user_type_changed = $contact->getUserType() != array_var($user, 'type'); $contact->setUserType(array_var($user, 'type')); $contact->save(); } if ($user_type_changed) { $this->cut_max_user_permissions($contact); } // update user groups if (isset($_REQUEST['user_groups'])) { $insert_values = ""; $group_ids = explode(',', $_REQUEST['user_groups']); foreach ($group_ids as $gid) { if (trim($gid) == "" || !is_numeric($gid)) { continue; } $insert_values .= ($insert_values == "" ? "" : ",") . "(" . $contact->getId() . ", {$gid})"; } ContactPermissionGroups::instance()->delete("contact_id=" . $contact->getId() . " AND permission_group_id <> " . $contact->getPermissionGroupId()); if ($insert_values != "") { DB::execute("INSERT INTO " . TABLE_PREFIX . "contact_permission_groups VALUES {$insert_values} ON DUPLICATE KEY UPDATE contact_id=contact_id;"); } ContactMemberCaches::updateContactMemberCacheAllMembers($contact); } } $null = null; Hook::fire('after_edit_contact', $contact, $null); DB::commit(); // save user permissions if ($user && $contact->canUpdatePermissions(logged_user())) { save_user_permissions_background(logged_user(), $contact->getPermissionGroupId(), $contact->isGuest()); } if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))) { ApplicationLogs::createLog($company, ApplicationLogs::ACTION_ADD); } ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_EDIT); flash_success(lang('success edit contact', $contact->getObjectName())); ajx_current("back"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
function hasEmail($value, $email_type, $isMain = false) { $type_id = EmailTypes::getEmailTypeId($email_type); $obj = ContactEmails::instance()->findOne(array('conditions' => array('contact_id=? AND email_type_id=? AND email_address=?', $this->getId(), $type_id, $value))); return $obj instanceof ContactEmail; }
/** * * Add email address to the contact * @param string $value * @param boolean $isMain * @author pepe */ function addEmail($value, $email_type, $isMain = false) { $value = trim($value); $email = new ContactEmail(); $email->setEmailTypeId(EmailTypes::getEmailTypeId($email_type)); $email->setEmailAddress($value); $email->setContactId($this->getId()); $email->setIsMain($isMain); $email->save(); }