/** * Get Contact or Account or User, based on email address * @param string $emailAddress * @param boolean $userCanAccessContacts * @param boolean $userCanAccessLeads * @param boolean $userCanAccessAccounts * @return Contact || Account || User || NULL */ public static function resolvePersonOrAccountByEmailAddress($emailAddress, $userCanAccessContacts = false, $userCanAccessLeads = false, $userCanAccessAccounts = false) { assert('is_string($emailAddress)'); assert('is_bool($userCanAccessContacts)'); assert('is_bool($userCanAccessLeads)'); assert('is_bool($userCanAccessAccounts)'); $personOrAccount = null; $contactsOrLeads = array(); if ($userCanAccessContacts || $userCanAccessLeads) { $stateMetadataAdapterClassName = LeadsStateMetadataAdapter::resolveStateMetadataAdapterClassNameByAccess($userCanAccessContacts, $userCanAccessLeads); $contactsOrLeads = ContactSearch::getContactsByAnyEmailAddress($emailAddress, null, $stateMetadataAdapterClassName); } if (!empty($contactsOrLeads)) { $personOrAccount = $contactsOrLeads[0]; } else { $accounts = array(); // Check if email belongs to account if ($userCanAccessAccounts) { $accounts = AccountSearch::getAccountsByAnyEmailAddress($emailAddress); } if (count($accounts)) { $personOrAccount = $accounts[0]; } else { $users = UserSearch::getUsersByEmailAddress($emailAddress); if (count($users)) { $personOrAccount = $users[0]; } } } return $personOrAccount; }
public function testResolveFiltersForVariableStatesWithOneDisplayAttributeAndOneFilterForANonSuperUserWhoCanSeeAnotherState() { Yii::app()->user->userModel = User::getByUsername('sarah'); $report = new Report(); $report->setType(Report::TYPE_ROWS_AND_COLUMNS); $report->setModuleClassName('AccountsModule'); $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute->attributeIndexOrDerivedType = 'contacts___officePhone'; $report->addDisplayAttribute($displayAttribute); $reportDataProvider = new RowsAndColumnsReportDataProvider($report); $filtersStructure = '1'; $filter = new FilterForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS); $filter->attributeIndexOrDerivedType = 'opportunities___contacts___website'; $filter->operator = OperatorRules::TYPE_EQUALS; $filter->value = 'Zurmo'; $filters = array($filter); $filters = $reportDataProvider->resolveFiltersForVariableStates($filters, $filtersStructure); $stateAdapter = new LeadsStateMetadataAdapter(array('clauses' => array(), 'structure' => '')); $this->assertTrue(count($stateAdapter->getStateIds()) > 0); $this->assertEquals(3, count($filters)); $this->assertEquals('contacts___state', $filters[1]->attributeIndexOrDerivedType); $this->assertEquals(OperatorRules::TYPE_ONE_OF, $filters[1]->operator); $this->assertEquals($stateAdapter->getStateIds(), $filters[1]->value); $this->assertEquals('opportunities___contacts___state', $filters[2]->attributeIndexOrDerivedType); $this->assertEquals(OperatorRules::TYPE_ONE_OF, $filters[2]->operator); $this->assertEquals($stateAdapter->getStateIds(), $filters[2]->value); $this->assertEquals('1 and (2 and 3)', $filtersStructure); }
public function testLeadsStateMetadataAdapterWithNoStates() { $metadata = ContactsModule::getMetadata(); $metadata['global']['startingStateId'] = LeadsUtil::getStartingState()->id; ContactsModule::setMetadata($metadata); $adapter = new LeadsStateMetadataAdapter(array('clauses' => array(), 'structure' => '')); $adaptedMetadata = $adapter->getAdaptedDataProviderMetadata(); $compareMetadata = array('clauses' => array(1 => array('attributeName' => 'state', 'operatorType' => 'equals', 'value' => '-1')), 'structure' => '(1)'); $this->assertEquals($compareMetadata, $adaptedMetadata); }