/** * @param Account $account * @param Settings $settings * @return ContactsDbDriver */ public static function &CreateContactStorage($account, $settings) { if (!self::$instance) { if (USE_LDAP_CONTACT) { require_once WM_ROOTPATH . 'common/contacts/ldap.php'; self::$instance = new ContactsLDAPDriver($account, $settings); } else { require_once WM_ROOTPATH . 'common/contacts/db.php'; self::$instance = new ContactsDbDriver($account, $settings); } } else { self::$instance->InitMain($account, $settings); } return self::$instance; }
/** * @param Account $_account * @param XmlDomNode $_xmlObj * @param XmlDomNode $_xmlRes * @param int $_newAddrId = -1 */ function GetContactList(&$_account, &$_settings, &$_xmlObj, &$_xmlRes, $_newAddrId = -1) { $contactManager =& ContactCreator::CreateContactStorage($_account, $_settings); if ($contactManager) { $_pageNumber = $_xmlObj->GetParamValueByName('page'); $_sortField = $_xmlObj->GetParamValueByName('sort_field'); $_sortOrder = (bool) $_xmlObj->GetParamValueByName('sort_order'); $_idGroup = $_xmlObj->GetParamValueByName('id_group'); $_lookForNode = $_xmlObj->XmlRoot->GetChildNodeByTagName('look_for'); $_lookForField = $_xmlObj->XmlRoot->GetChildValueByTagName('look_for', true); $_lookForType = 0; if ($_lookForNode) { $_lookForType = isset($_lookForNode->Attributes['type']) ? (int) $_lookForNode->Attributes['type'] : 0; } $_countArray = $contactManager->GetContactsAndGroupsCount($_idGroup, $_lookForType, $_lookForField); $_contactsNode = new XmlDomNode('contacts_groups'); $_contactsNode->AppendAttribute('contacts_count', $_countArray[0]); $_contactsNode->AppendAttribute('groups_count', $_countArray[1]); $_contactsNode->AppendAttribute('page', $_pageNumber); $_contactsNode->AppendAttribute('sort_field', $_sortField); $_contactsNode->AppendAttribute('sort_order', (int) $_sortOrder); $_contactsNode->AppendAttribute('id_group', (int) $_idGroup); $_contactsNode->AppendAttribute('added_contact_id', (int) $_newAddrId); $_newLookForNode = new XmlDomNode('look_for', $_lookForField, true); $_newLookForNode->AppendAttribute('type', $_lookForType); $_contactsNode->AppendChild($_newLookForNode); $_contacts = $contactManager->GetContactsAndGroups($_countArray, $_pageNumber, $_sortField, $_sortOrder, $_idGroup, $_lookForType, $_lookForField); $aEmailsInList = array(); if (null != $_contacts) { $_contactsKeys = array_keys($_contacts->Instance()); foreach ($_contactsKeys as $_key) { $_contact =& $_contacts->Get($_key); $_contactNode = new XmlDomNode('contact_group'); $_contactNode->AppendAttribute('id', $_contact->Id); $_contactNode->AppendAttribute('is_group', (int) $_contact->IsGroup); $_contactNode->AppendChild(new XmlDomNode('name', $_contact->Name, true)); if ($_contact->IsGroup) { $_emailsOfGroup = ''; $_groupContacts = $contactManager->GetContactsOfGroup($_contact->Id); if ($_groupContacts) { for ($_i = 0, $_c = $_groupContacts->Count(); $_i < $_c; $_i++) { $_contactOfGroup =& $_groupContacts->Get($_i); if (strlen($_contactOfGroup->Email) > 0) { $_emailsOfGroup .= strlen($_contactOfGroup->Name) > 0 && $_contactOfGroup->UseFriendlyName ? '"' . $_contactOfGroup->Name . '" <' . $_contactOfGroup->Email . '>, ' : $_contactOfGroup->Email . ', '; } } } $sEmailToAdd = trim(trim($_emailsOfGroup), ','); unset($_groupContacts); } else { $sEmailToAdd = trim(trim($_contact->Email), ','); } $_contactNode->AppendChild(new XmlDomNode('email', $sEmailToAdd, true)); if (1 === $_lookForType) { if (isset($aEmailsInList[$_contact->Name . $sEmailToAdd])) { unset($_contactNode); continue; } else { $aEmailsInList[$_contact->Name . $sEmailToAdd] = true; } } $_contactsNode->AppendChild($_contactNode); unset($_contactNode); } } $_xmlRes->XmlRoot->AppendChild($_contactsNode); if ($_newAddrId > 0) { $_bigContactNode = CXmlProcessing::GetContactNodeFromAddressBookRecord($_account, $_settings, $_newAddrId); if (null != $_bigContactNode) { $_xmlRes->XmlRoot->AppendChild($_bigContactNode); } } } else { CXmlProcessing::PrintErrorAndExit(getGlobalError(), $_xmlRes); } }
$newContact->IdUser = $account->IdUser; if ($newContact->validateData() === true) { $ContactArray[] = $newContact; } } } @fclose($handle); } else { $ErrorInt = 0; } // delete import file @unlink($fs->GetFolderFullPath($attfolder) . '/' . $tempname); $contactsCount = count($ContactArray); if ($contactsCount > 0) { $insertResult = true; $contactManager =& ContactCreator::CreateContactStorage($account, $settings); for ($i = 0; $i < $contactsCount; $i++) { $insertResult &= $contactManager->CreateContact($ContactArray[$i]); } if ($insertResult) { $_SESSION['action_report'] = JS_LANG_InfoHaveImported . ' ' . $contactsCount . ' ' . JS_LANG_InfoNewContacts; } else { $ErrorInt = 0; } } else { if ($isNullFile) { $ErrorInt = $ErrorInt == 1 ? 2 : $ErrorInt; } else { $ErrorInt = 2; } }
function DoDeleteContacts() { $_dbStorage = $_settings = $_xmlObj = $_xmlRes = $_accountId = null; $this->_initFuncArgs($_dbStorage, $_settings, $_xmlObj, $_xmlRes, $_accountId); if (!$_settings->AllowContacts) { CXmlProcessing::PrintErrorAndExit(PROC_CANT_DEL_CONT_GROUPS, $_xmlRes); } $_result = true; $_account =& CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_accountId, false, false); $contactManager =& ContactCreator::CreateContactStorage($_account, $_settings); $log =& CLog::CreateInstance(); $log->SetEventPrefixByAccount($_account); $_contactsNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('contacts'); $_contactsKeys = array_keys($_contactsNode->Children); foreach ($_contactsKeys as $_key) { $_cc =& $_contactsNode->Children[$_key]; if (isset($_cc->Attributes['id'])) { $_result &= $contactManager->DeleteContact($_cc->Attributes['id']); if ($_result) { $log->WriteEvent('User delete PAB (contact id="' . $_cc->Attributes['id'] . '")'); } } else { $_result = false; } unset($_cc); } $_groupsNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('groups'); $_groupsKeys = array_keys($_groupsNode->Children); foreach ($_groupsKeys as $_key) { $_gc =& $_groupsNode->Children[$_key]; if (isset($_gc->Attributes['id'])) { $_result &= $contactManager->DeleteGroup($_gc->Attributes['id']); if ($_result) { $log->WriteEvent('User delete PAB (group id="' . $_gc->Attributes['id'] . '")'); } } else { $_result = false; } unset($_gc); } if ($_result) { CXmlProcessing::GetContactList($_account, $_settings, $_xmlObj, $_xmlRes); } else { CXmlProcessing::PrintErrorAndExit(PROC_CANT_DEL_CONT_GROUPS, $_xmlRes); } }