/** * For a give User name, run a partial search by * full name and retrieve user models. * */ public static function getUsersByPartialFullName($partialName, $pageSize) { assert('is_string($partialName)'); assert('is_int($pageSize)'); $personTableName = RedBeanModel::getTableName('Person'); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $joinTablesAdapter->addFromTableAndGetAliasName($personTableName, "{$personTableName}_id"); $fullNameSql = DatabaseCompatibilityUtil::concat(array('person.firstname', '\' \'', 'person.lastname')); $where = " (person.firstname like lower('{$partialName}%') or " . " person.lastname like lower('{$partialName}%') or " . " {$fullNameSql} like lower('{$partialName}%')) "; return User::getSubset($joinTablesAdapter, null, $pageSize, $where, "person.firstname, person.lastname"); }
public static function getUsersByEmailAddress($emailAddress, $operatorType = null) { assert('is_string($emailAddress)'); assert('$operatorType == null || is_string($operatorType)'); if ($operatorType == null) { $operatorType = 'equals'; } $metadata = array(); $metadata['clauses'] = array(1 => array('attributeName' => 'primaryEmail', 'relatedAttributeName' => 'emailAddress', 'operatorType' => $operatorType, 'value' => $emailAddress)); $metadata['structure'] = '(1)'; $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $metadata, $joinTablesAdapter); $users = User::getSubset($joinTablesAdapter, null, null, $where); return $users; }
/** * For a given email find user. * Function consider that user sent email to dropbox (To, CC or BCC), * or forwarded email to dropbox, via his email client. * @param ImapMessage $emailMessage * @return User $user */ public static function resolveOwnerOfEmailMessage(ImapMessage $emailMessage) { if (isset($emailMessage->fromEmail) && $emailMessage->fromEmail != '') { $searchAttributeData = array(); $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'primaryEmail', 'relatedAttributeName' => 'emailAddress', 'operatorType' => 'equals', 'value' => $emailMessage->fromEmail)); $searchAttributeData['structure'] = '1'; $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $searchAttributeData, $joinTablesAdapter); $models = User::getSubset($joinTablesAdapter, null, null, $where, null); } if (count($models) == 1) { return $models[0]; } else { throw new NotFoundException(); } }
/** * Test users count using NonSystemUsersStateMetadataAdapter */ public function testGetUsersListUsingNonSystemUsersStateMetadataAdapter() { $users = User::getAll(); $this->assertEquals(5, count($users)); $user = UserTestHelper::createBasicUser('mysysuser'); $user->setIsSystemUser(); $this->assertTrue($user->save()); $nonSystemUsersStateMetadataAdapter = new NonSystemUsersStateMetadataAdapter(array('clauses' => array(), 'structure' => '')); $metadata = $nonSystemUsersStateMetadataAdapter->getAdaptedDataProviderMetadata(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $metadata, $joinTablesAdapter); $models = User::getSubset($joinTablesAdapter, null, null, $where, null); $this->assertEquals(5, count($models)); $actualUsers = User::getAll(); $this->assertEquals(6, count($actualUsers)); unset($user); $user = User::getByUsername('mysysuser'); $this->assertTrue((bool) $user->isSystemUser); $user->setIsNotSystemUser(); $this->assertTrue($user->save()); unset($user); $user = User::getByUsername('mysysuser'); $this->assertEquals(0, $user->isSystemUser); $where = RedBeanModelDataProvider::makeWhere('User', $metadata, $joinTablesAdapter); $models = User::getSubset($joinTablesAdapter, null, null, $where, null); $this->assertEquals(6, count($models)); }
/** * Get active users. * @return array */ public static function getActiveUsers($includeRootUser = false) { $searchAttributeData = self::makeActiveUsersQuerySearchAttributeData($includeRootUser); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $searchAttributeData, $joinTablesAdapter); return User::getSubset($joinTablesAdapter, null, null, $where); }
/** * Check if user email is unique in system. Two users can't share same email address. * @param string $email * @return bool */ public function isUserEmailUnique($email) { if (!$email) { return true; } $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'primaryEmail', 'relatedAttributeName' => 'emailAddress', 'operatorType' => 'equals', 'value' => $email)); if ($this->id > 0) { $searchAttributeData['clauses'][2] = array('attributeName' => 'id', 'operatorType' => 'doesNotEqual', 'value' => $this->id); $searchAttributeData['structure'] = '(1 AND 2)'; } else { $searchAttributeData['structure'] = '1'; } $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $searchAttributeData, $joinTablesAdapter); $models = User::getSubset($joinTablesAdapter, null, null, $where, null); if (count($models) > 0 && is_array($models)) { // Todo: fix form element name below $this->primaryEmail->addError('emailAddress', Zurmo::t('UsersModule', 'Email address already exists in system.')); return false; } return true; }
public static function getUsersByPartialFullNameOrAnyEmailAddress($partialNameOrEmailAddress, $pageSize, $stateMetadataAdapterClassName = null, $operatorType = null, $autoCompleteOptions = null) { $modelName = 'User'; assert('is_string($partialNameOrEmailAddress)'); assert('is_int($pageSize)'); assert('$stateMetadataAdapterClassName == null || is_string($stateMetadataAdapterClassName)'); assert('$operatorType == null || is_string($operatorType)'); assert('$autoCompleteOptions == null || is_string($autoCompleteOptions)'); if ($operatorType == null) { $operatorType = 'startsWith'; } $metadata = array(); $metadata['clauses'] = array(1 => array('attributeName' => 'primaryEmail', 'relatedAttributeName' => 'emailAddress', 'operatorType' => $operatorType, 'value' => $partialNameOrEmailAddress), 2 => array('attributeName' => 'hideFromSelecting', 'operatorType' => 'equals', 'value' => 0), 3 => array('attributeName' => 'hideFromSelecting', 'operatorType' => 'isNull', 'value' => null)); $metadata['structure'] = '((1 or partialnamesearch) and (2 or 3))'; $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter($modelName); if ($stateMetadataAdapterClassName != null) { $stateMetadataAdapter = new $stateMetadataAdapterClassName($metadata); $metadata = $stateMetadataAdapter->getAdaptedDataProviderMetadata(); } $where = RedBeanModelDataProvider::makeWhere($modelName, $metadata, $joinTablesAdapter); $partialNameWherePart = self::getWherePartForPartialNameSearchByPartialName($partialNameOrEmailAddress); $where = strtr(strtolower($where), array('partialnamesearch' => $partialNameWherePart)); static::handleAutoCompleteOptions($joinTablesAdapter, $where, $autoCompleteOptions); return User::getSubset($joinTablesAdapter, null, $pageSize, $where, "person.firstname, person.lastname"); }
public function getUsersExceptSystemUsers() { $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'isSystemUser', 'operatorType' => 'equals', 'value' => 0), 2 => array('attributeName' => 'isSystemUser', 'operatorType' => 'isNull', 'value' => null)); if ($this->name == Group::EVERYONE_GROUP_NAME) { $searchAttributeData['structure'] = '1 or 2'; } else { $searchAttributeData['clauses'][3] = array('attributeName' => 'groups', 'relatedAttributeName' => 'id', 'operatorType' => 'equals', 'value' => $this->id); $searchAttributeData['structure'] = '(1 or 2) and 3'; } $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('User'); $where = RedBeanModelDataProvider::makeWhere('User', $searchAttributeData, $joinTablesAdapter); return User::getSubset($joinTablesAdapter, null, null, $where); }