/** * @param $modelClassName * @param $partialName * @param $pageSize * @return array * @throws NotImplementedException * @throws NotSupportedException */ public static function getByPartialName($modelClassName, $partialName, $pageSize, $autoCompleteOptions = null) { assert('is_string($modelClassName)'); assert('is_string($partialName)'); assert('is_int($pageSize)'); if ($modelClassName == 'User') { return ModelAutoCompleteUtil::getUserResults($partialName, $pageSize, $autoCompleteOptions); } elseif ($modelClassName == 'Contact') { throw new NotSupportedException(); } elseif ($modelClassName == 'Person') { throw new NotImplementedException(); } else { return ModelAutoCompleteUtil::getGenericResults($modelClassName, $partialName, $pageSize, $autoCompleteOptions); } }
protected function renderAutoCompleteResults($modelClassName, $term, $autoCompleteOptions = null) { $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('autoCompleteListPageSize', get_class($this->getModule())); $autoCompleteResults = ModelAutoCompleteUtil::getByPartialName($modelClassName, $term, $pageSize, $autoCompleteOptions); if (empty($autoCompleteResults)) { $autoCompleteResults = array(array('id' => null, 'value' => null, 'label' => Zurmo::t('Core', 'No results found'))); } return CJSON::encode($autoCompleteResults); }
/** * @depends testGetGlobalSearchResultsByPartialTermUsingScope */ public function testGetGlobalSearchResultsByPartialTermWithRegularUserAndElevationStepsForRegularUser() { //Unfrozen, there are too many attributes that have to be columns in the database at this point, so //now this is just a frozen test. if (RedBeanDatabase::isFrozen()) { $super = User::getByUsername('super'); $jimmy = User::getByUsername('jimmy'); Yii::app()->user->userModel = $super; //Jimmy does not have read access, so he should not be able to see any results. $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS)); $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS)); $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('OpportunitiesModule', OpportunitiesModule::RIGHT_ACCESS_OPPORTUNITIES)); Yii::app()->user->userModel = $jimmy; $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel); $this->assertEquals(array(array('href' => '', 'label' => 'No Results Found', 'iconClass' => '')), $data); //Give Jimmy access to the module, he still will not be able to see results. Yii::app()->user->userModel = $super; $jimmy->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS); $jimmy->setRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS); $jimmy->setRight('LeadsModule', LeadsModule::RIGHT_ACCESS_LEADS); $jimmy->setRight('OpportunitiesModule', OpportunitiesModule::RIGHT_ACCESS_OPPORTUNITIES); $this->assertTrue($jimmy->save()); Yii::app()->user->userModel = $jimmy; $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel); $this->assertEquals(array(array('href' => '', 'label' => 'No Results Found', 'iconClass' => '')), $data); //Give Jimmy read on 1 model. The search then should pick up this model. Yii::app()->user->userModel = $super; $accounts = Account::getByName('The Zoo'); $this->assertEquals(1, count($accounts)); $account = $accounts[0]; $this->assertEquals(Permission::NONE, $account->getEffectivePermissions($jimmy)); $account->addPermissions($jimmy, Permission::READ); $this->assertTrue($account->save()); ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($account, $jimmy); Yii::app()->user->userModel = $jimmy; $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel); $this->assertEquals(1, count($data)); $this->assertEquals('The Zoo', $data[0]['label']); //Give Jimmy read on 2 more models. The search then should pick up these models. Yii::app()->user->userModel = $super; $contacts = Contact::getByName('Big Elephant'); $this->assertEquals(1, count($contacts)); $contact = $contacts[0]; $this->assertEquals(Permission::NONE, $contact->getEffectivePermissions($jimmy)); $contact->addPermissions($jimmy, Permission::READ); $this->assertTrue($contact->save()); ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($contact, $jimmy); $opportunities = Opportunity::getByName('Animal Crackers'); $this->assertEquals(1, count($opportunities)); $opportunity = $opportunities[0]; $this->assertEquals(Permission::NONE, $opportunity->getEffectivePermissions($jimmy)); $opportunity->addPermissions($jimmy, Permission::READ); $this->assertTrue($opportunity->save()); ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($opportunity, $jimmy); Yii::app()->user->userModel = $jimmy; $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel); $this->assertEquals(3, count($data)); $this->assertEquals('The Zoo', $data[0]['label']); $this->assertEquals('Big Elephant', $data[1]['label']); $this->assertEquals('Animal Crackers', $data[2]['label']); } }
public function testGetGenericResultSanitizePartialName() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $this->assertTrue(ZurmoRedBean::$writer->doesTableExist(User::getTableName())); AccountTestHelper::createAccountByNameForOwner('Test account', $super); AccountTestHelper::createAccountByNameForOwner('Test account 2', $super); $term = "Test%');drop TABLE _user-- "; $data = ModelAutoCompleteUtil::getByPartialName('Account', $term, 5); $this->assertTrue(ZurmoRedBean::$writer->doesTableExist(User::getTableName())); $this->assertEmpty($data); }
public function actionAutoCompleteGroupsAndUsers($term) { $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('autoCompleteListPageSize', get_class($this->getModule())); $groups = ModelAutoCompleteUtil::getByPartialName('Group', $term, $pageSize); $users = UserSearch::getUsersByPartialFullNameOrAnyEmailAddress($term, $pageSize, null); $autoCompleteResults = array(); foreach ($groups as $group) { $autoCompleteResults[] = array('id' => PushDashboardUtil::GROUP_PREFIX . $group['id'], 'name' => $group['value']); } foreach ($users as $user) { $autoCompleteResults[] = array('id' => PushDashboardUtil::USER_PREFIX . $user->id, 'name' => MultipleContactsForMeetingElement::renderHtmlContentLabelFromUserAndKeyword($user, $term)); } echo CJSON::encode($autoCompleteResults); }
/** * Given a name of a customFieldData object and a term to search on return a JSON encoded * array of autocomplete search results. * @param string $name - Name of CustomFieldData * @param string $term - term to search on */ public function actionAutoCompleteCustomFieldData($name, $term) { assert('is_string($name)'); assert('is_string($term)'); $autoCompleteResults = ModelAutoCompleteUtil::getCustomFieldDataByPartialName($name, $term); if (count($autoCompleteResults) == 0) { $data = Zurmo::t('Core', 'No results found'); $autoCompleteResults[] = array('id' => '', 'name' => $data); } echo CJSON::encode($autoCompleteResults); }