} return $statuses; }; // Profiles $profilesCounter = 0; $profilesModel = new OpenSKOS_Db_Table_SearchProfiles(); foreach ($profilesModel->fetchAll() as $profile) { $searchOptions = unserialize($profile->searchOptions); if (in_array('expired', $searchOptions['status'])) { $searchOptions['status'] = $replaceExpired($searchOptions['status']); $profile->setSearchOptions($searchOptions); $profile->save(); $profilesCounter++; } } echo $profilesCounter . ' profiles were updated.' . "\n"; // Users $usersCounter = 0; $usersModel = new OpenSKOS_Db_Table_Users(); foreach ($usersModel->fetchAll() as $user) { if ($user->searchOptions !== null) { $searchOptions = unserialize($user->searchOptions); if (isset($searchOptions['status']) && in_array('expired', $searchOptions['status'])) { $searchOptions['status'] = $replaceExpired($searchOptions['status']); $user->searchOptions = serialize($searchOptions); $user->save(); $usersCounter++; } } } echo $usersCounter . ' users were updated.' . "\n";
/** * @return Editor_Forms_SearchOptions */ protected function buildUserInteraction() { $modelUsers = new OpenSKOS_Db_Table_Users(); $users = $modelUsers->fetchAll($modelUsers->select()->where('tenant=?', $this->_getCurrentTenant()->code)); $roles = OpenSKOS_Db_Table_Users::getUserRoles(); $rolesOptions = array_combine($roles, $roles); $userData = array(); foreach ($users as $user) { $userData[$user->id] = $user->name; } $userInteractionTypes = array(); if (isset($this->_searchOptions['interactiontypes'])) { $userInteractionTypes = $this->_searchOptions['interactiontypes']; } $this->addElement('hidden', 'userInteractionTypeLabel', array('label' => _('Created, modified or approved'), 'disabled' => true)); $this->addElement('multiCheckbox', 'userInteractionType', array('label' => '', 'multiOptions' => $userInteractionTypes)); $this->addElement('multiselect', 'interactionByRoles', array('label' => _('Roles'), 'multiOptions' => $rolesOptions)); $this->addElement('multiselect', 'interactionByUsers', array('label' => _('Users'), 'multiOptions' => $userData)); $this->buildDateInput('interaction'); $this->addDisplayGroup(array('userInteractionType', 'interactionByRoles', 'interactionByUsers', 'interactionDateFrom', 'interactionDateTo'), 'interaction', array('legend' => _('Created, modified or approved'), 'disableDefaultDecorators' => true, 'decorators' => array('FormElements', array('HtmlTag', array('tag' => 'div', 'id' => 'interaction'))))); return $this; }
/** * Builds query for search by users and by users from specific role. * All the users from the specified role will be added with OR to the query of users. * If the final query of users includes all users - an empty string is returned - the query should not be applied. * * @param string $field The field to search by. * @param string $usersOption The option in $this->_searchOptions to use as users to search by * @param string $usersRoleOption The option in $this->_searchOptions to use as role to search by * @return string */ protected function _buildUsersAndUserRolesQuery($field, $usersOption, $usersRoleOption, $allUsers) { $searchUsers = array(); if (isset($this->_searchOptions[$usersRoleOption]) && !empty($this->_searchOptions[$usersRoleOption])) { $modelUsers = new OpenSKOS_Db_Table_Users(); $usersByRole = $modelUsers->fetchAll($modelUsers->select()->where('tenant=?', $this->_tenant->code)->where('role IN (?)', $this->_searchOptions[$usersRoleOption])->group('id')); foreach ($usersByRole as $user) { $searchUsers[] = $user->id; } } if (isset($this->_searchOptions[$usersOption]) && !empty($this->_searchOptions[$usersOption])) { $searchUsers = array_merge($searchUsers, $this->_searchOptions[$usersOption]); $searchUsers = array_unique($searchUsers); } $query = ''; // If not all users are selected - adds each of them to the query. if (count($allUsers) != count($searchUsers)) { foreach ($searchUsers as $user) { $query .= !empty($query) ? ' OR ' : ''; $query .= $field . ':' . $user; if ($field == 'created_by') { $query .= ' OR '; $query .= 'dcterms_creator:"' . $allUsers[$user] . '"'; } } } return $query; }