public function testUsingStateAdapters() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $contactStates = ContactState::getAll(); $this->assertTrue(count($contactStates) > 1); $firstContactState = $contactStates[0]; $lastContactState = $contactStates[count($contactStates) - 1]; $contact = new Contact(); $contact->title->value = 'Mr.'; $contact->firstName = 'Sallyy'; $contact->lastName = 'Sallyyson'; $contact->owner = $super; $contact->state = $firstContactState; $contact->primaryEmail = new Email(); $contact->primaryEmail->emailAddress = '*****@*****.**'; $contact->secondaryEmail = new Email(); $contact->secondaryEmail->emailAddress = '*****@*****.**'; $this->assertTrue($contact->save()); $data = ContactSearch::getContactsByPartialFullNameOrAnyEmailAddress('sally', 5); $this->assertEquals(2, count($data)); $data = ContactSearch::getContactsByPartialFullName('sally', 5); $this->assertEquals(2, count($data)); //Use contact state adapter $data = ContactSearch::getContactsByPartialFullNameOrAnyEmailAddress('sally', 5, 'ContactsStateMetadataAdapter'); $this->assertEquals(1, count($data)); $this->assertEquals($lastContactState, $data[0]->state); $data = ContactSearch::getContactsByPartialFullName('sally', 5, 'ContactsStateMetadataAdapter'); $this->assertEquals(1, count($data)); $this->assertEquals($lastContactState, $data[0]->state); //Use lead state adapter $data = ContactSearch::getContactsByPartialFullNameOrAnyEmailAddress('sally', 5, 'LeadsStateMetadataAdapter'); $this->assertEquals(1, count($data)); $this->assertEquals($firstContactState, $data[0]->state); $data = ContactSearch::getContactsByPartialFullName('sally', 5, 'LeadsStateMetadataAdapter'); $this->assertEquals(1, count($data)); $this->assertEquals($firstContactState, $data[0]->state); }
/** * Given a partial name or e-mail address, search for all Users, Leads or Contacts * JSON encode the resulting array of contacts. */ public function actionAutoCompleteForMultiSelectAutoComplete($term, $autoCompleteOptions = null) { $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('autoCompleteListPageSize', get_class($this->getModule())); $usersByFullName = UserSearch::getUsersByPartialFullName($term, $pageSize, $autoCompleteOptions); $usersByEmailAddress = UserSearch::getUsersByEmailAddress($term, 'contains', true, $autoCompleteOptions, $pageSize); $contacts = ContactSearch::getContactsByPartialFullNameOrAnyEmailAddress($term, $pageSize, null, 'contains', $autoCompleteOptions); $autoCompleteResults = array(); foreach ($usersByEmailAddress as $user) { if (isset($user->primaryEmail->emailAddress)) { $autoCompleteResults[] = array('id' => strval($user->primaryEmail), 'name' => strval($user) . ' (' . $user->primaryEmail . ')'); } } foreach ($usersByFullName as $user) { if (isset($user->primaryEmail->emailAddress)) { $autoCompleteResults[] = array('id' => strval($user->primaryEmail), 'name' => strval($user) . ' (' . $user->primaryEmail . ')'); } } foreach ($contacts as $contact) { if (isset($contact->primaryEmail->emailAddress)) { $autoCompleteResults[] = array('id' => strval($contact->primaryEmail), 'name' => strval($contact) . ' (' . $contact->primaryEmail . ')'); } } $emailValidator = new CEmailValidator(); if (count($autoCompleteResults) == 0 && $emailValidator->validateValue($term)) { $autoCompleteResults[] = array('id' => $term, 'name' => $term); } echo CJSON::encode($autoCompleteResults); }
/** * Given a partial name or e-mail address, search for all contacts or users regardless of contact state unless * the current user has security restrictions on some states. If the adapter resolver returns false, then the * user does not have access to the Leads or Contacts module. * JSON encode the resulting array of contacts. */ public function actionAutoCompleteAllContactsOrUsersForMultiSelectAutoComplete($term, $autoCompleteOptions = null) { $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('autoCompleteListPageSize', get_class($this->getModule())); $adapterName = ContactsUtil::resolveContactStateAdapterByModulesUserHasAccessTo('LeadsModule', 'ContactsModule', Yii::app()->user->userModel); if ($adapterName === false) { $messageView = new AccessFailureView(); $view = new AccessFailurePageView($messageView); echo $view->render(); Yii::app()->end(0, false); } $contacts = ContactSearch::getContactsByPartialFullNameOrAnyEmailAddress($term, $pageSize, $adapterName, null, $autoCompleteOptions); $autoCompleteResults = array(); foreach ($contacts as $contact) { $autoCompleteResults[] = array('id' => Meeting::CONTACT_ATTENDEE_PREFIX . $contact->id, 'name' => MultipleContactsForMeetingElement::renderHtmlContentLabelFromContactAndKeyword($contact, $term)); } $users = UserSearch::getUsersByPartialFullNameOrAnyEmailAddress($term, $pageSize, null, null, $autoCompleteOptions); foreach ($users as $user) { $autoCompleteResults[] = array('id' => Meeting::USER_ATTENDEE_PREFIX . $user->id, 'name' => MultipleContactsForMeetingElement::renderHtmlContentLabelFromUserAndKeyword($user, $term)); } echo CJSON::encode($autoCompleteResults); }