|
From: <gem...@li...> - 2011-10-27 15:38:05
|
Revision: 148
http://gemstracker.svn.sourceforge.net/gemstracker/?rev=148&view=rev
Author: matijsdejong
Date: 2011-10-27 15:37:58 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
For #31: gems__staff split into gems__users
Temp fix for moving to new password situation while retaining the older versions.
DeleteValues moved up to DatabaseModelAbstract.
setModelParameters() added to menu for 2 parameter menu items.
Modified Paths:
--------------
branches/newUser/classes/Gems/Auth.php
branches/newUser/classes/Gems/Default/CronAction.php
branches/newUser/classes/Gems/Default/IndexAction.php
branches/newUser/classes/Gems/Default/OptionAction.php
branches/newUser/classes/Gems/Default/RespondentAction.php
branches/newUser/classes/Gems/Default/StaffAction.php
branches/newUser/classes/Gems/Default/TokenPlanAction.php
branches/newUser/classes/Gems/Menu/MenuAbstract.php
branches/newUser/classes/Gems/Menu/SubMenuItem.php
branches/newUser/classes/Gems/Model/UserModel.php
branches/newUser/classes/Gems/User/RespondentUser.php
branches/newUser/classes/Gems/User/StaffUser.php
branches/newUser/classes/Gems/Util/DbLookup.php
branches/newUser/classes/Gems/Validate/GemsPasswordUsername.php
branches/newUser/classes/GemsEscort.php
branches/newUser/classes/MUtil/Model/DatabaseModelAbstract.php
branches/newUser/classes/MUtil/Model/JoinModel.php
branches/newUser/classes/MUtil/Model/ModelAbstract.php
branches/newUser/classes/MUtil/Model/TableBridgeAbstract.php
branches/newUser/classes/MUtil/Model/TableModel.php
branches/newUser/configs/db/patches.sql
branches/newUser/configs/db/tables/gems__staff.20.sql
branches/newUser/configs/db/tables/gems__users.10.sql
branches/newUser/controllers/StaffController.php
Modified: branches/newUser/classes/Gems/Auth.php
===================================================================
--- branches/newUser/classes/Gems/Auth.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Auth.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -98,8 +98,8 @@
* Lookup last failed login and number of failed logins
*/
try {
- $sql = "SELECT gsf_failed_logins, UNIX_TIMESTAMP(gsf_last_failed)
- AS gsf_last_failed FROM gems__staff WHERE gsf_login = ?";
+ $sql = "SELECT gsu_failed_logins, UNIX_TIMESTAMP(gsu_last_failed)
+ AS gsu_last_failed FROM gems__users WHERE gsu_login = ?";
$results = $this->db->fetchRow($sql, array($username));
} catch (Zend_Db_Exception $zde) {
//If we need to apply a db patch, just use a default value
@@ -107,10 +107,10 @@
MUtil_Echo::r(GemsEscort::getInstance()->translate->_('Please update the database'));
}
- $delay = pow($results['gsf_failed_logins'], $this->_delayFactor);
- $remaining = ($results['gsf_last_failed'] + $delay) - time();
+ $delay = pow($results['gsu_failed_logins'], $this->_delayFactor);
+ $remaining = ($results['gsu_last_failed'] + $delay) - time();
- if ($results['gsf_failed_logins'] > 0 && $remaining > 0) {
+ if ($results['gsu_failed_logins'] > 0 && $remaining > 0) {
//$this->_obscureValue = false;
$result = $this->_error(self::ERROR_PASSWORD_DELAY, ceil($remaining / 60));
}
Modified: branches/newUser/classes/Gems/Default/CronAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/CronAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/CronAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -125,7 +125,7 @@
*/
protected function getUserLogin($userId)
{
- return $this->db->fetchOne("SELECT gsf_login FROM gems__staff WHERE gsf_id_user = ?", $userId);
+ return $this->db->fetchOne("SELECT gsu_login FROM gems__users WHERE gsu_id_user = ?", $userId);
}
public function indexAction()
Modified: branches/newUser/classes/Gems/Default/IndexAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/IndexAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/IndexAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -74,7 +74,7 @@
* @return Zend_Auth_Adapter_Interface
*/
protected function _getAuthAdapter($formValues) {
- $adapter = new Zend_Auth_Adapter_DbTable($this->db, 'gems__staff', 'gsf_login', 'gsf_password');
+ $adapter = new Zend_Auth_Adapter_DbTable($this->db, 'gems__users', 'gsu_login', 'gsu_password');
$adapter->setIdentity($formValues['userlogin']);
$adapter->setCredential($this->escort->passwordHash(null, $formValues['password'], false));
return $adapter;
@@ -201,6 +201,19 @@
$adapter = $this->_getAuthAdapter($form->getValues());
$auth = Gems_Auth::getInstance();
$result = $auth->authenticate($adapter, $_POST['userlogin']);
+
+ // Allow login using old password.
+ if ((! $result->isValid()) && ($userid = $this->db->fetchOne("SELECT gsu_id_user FROM gems__users WHERE gsu_active = 1 AND gsu_password IS NULL AND gsu_login = ?", $_POST['userlogin']))) {
+
+ $adapter = new Zend_Auth_Adapter_DbTable($this->db, 'gems__staff', 'gsf_id_user', 'gsf_password');
+ $adapter->setIdentity($userid);
+ $adapter->setCredential(md5($_POST['password'], false));
+ $result = $auth->authenticate($adapter, $_POST['userlogin']);
+ MUtil_Echo::track('old autho');
+ } else {
+ MUtil_Echo::track('new autho');
+ }
+
if (!$result->isValid()) {
// Invalid credentials
$errors = $result->getMessages();
@@ -316,19 +329,19 @@
}
if ($this->_request->isPost() && $form->isValid($_POST)) {
- $sql = $this->db->quoteInto("SELECT gsf_id_user,gsf_email,gsf_reset_key,DATEDIFF(NOW(), gsf_reset_req) AS gsf_days FROM gems__staff WHERE gsf_login = ?", $_POST['userlogin']);
+ $sql = $this->db->quoteInto("SELECT gsu_id_user, gsf_email, gsu_reset_key, DATEDIFF(NOW(), gsu_reset_requested) AS gsf_days FROM gems__users INNER JOIN gems__staff ON gsu_id_user = gsf_id_user WHERE gsu_login = ?", $_POST['userlogin']);
$result = $this->db->fetchRow($sql);
if (empty($result) || empty($result['gsf_email'])) {
$this->addMessage($this->_('No such user found or no e-mail address known'));
- } else if (!empty($result['gsf_reset_key']) && $result['gsf_days'] < 1) {
+ } else if (!empty($result['gsu_reset_key']) && $result['gsf_days'] < 1) {
$this->addMessage($this->_('Reset e-mail already sent, please try again after 24 hours'));
} else {
$email = $result['gsf_email'];
$key = md5(time() . $email);
$url = $this->util->getCurrentURI('index/resetpassword/key/' . $key);
- $this->db->update('gems__staff', array('gsf_reset_key' => $key, 'gsf_reset_req' => new Zend_Db_Expr('NOW()')), 'gsf_id_user = ' . $result['gsf_id_user']);
+ $this->db->update('gems__users', array('gsu_reset_key' => $key, 'gsu_reset_requested' => new Zend_Db_Expr('NOW()')), 'gsu_id_user = ' . $result['gsu_id_user']);
$mail->setSubject('Password reset requested');
$mail->setBodyText('To reset your password, please click this link: ' . $url);
@@ -344,7 +357,7 @@
}
}
} else if ($key = $this->_request->getParam('key')) {
- $sql = $this->db->quoteInto("SELECT gsf_id_user,gsf_email FROM gems__staff WHERE gsf_reset_key = ?", $key);
+ $sql = $this->db->quoteInto("SELECT gsu_id_user, gsf_email FROM gems__users INNER JOIN gems__staff ON gsu_id_user = gsf_id_user WHERE gsu_reset_key = ?", $key);
$result = $this->db->fetchRow($sql);
if (!empty($result)) {
@@ -360,7 +373,7 @@
try {
$mail->send();
$this->addMessage($this->_('An e-mail was sent containing your new password'));
- $this->db->update('gems__staff', array('gsf_reset_key' => new Zend_Db_Expr('NULL'), 'gsf_reset_req' => new Zend_Db_Expr('NULL'), 'gsf_password' => $passwordHash), 'gsf_id_user = ' . $result['gsf_id_user']);
+ $this->db->update('gems__users', array('gsu_reset_key' => new Zend_Db_Expr('NULL'), 'gsu_reset_requested' => new Zend_Db_Expr('NULL'), 'gsu_password' => $passwordHash), 'gsu_id_user = ' . $result['gsu_id_user']);
$this->_reroute(array('action' => 'index'), true);
} catch (Exception $e) {
$this->addMessage($this->_('Unable to send e-mail'));
Modified: branches/newUser/classes/Gems/Default/OptionAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/OptionAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/OptionAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -61,8 +61,10 @@
*/
protected function addFormElements(MUtil_Model_FormBridge $bridge, MUtil_Model_ModelAbstract $model, array $data, $new = false)
{
+ $bridge->addHidden( 'gsu_id_user');
+ $bridge->addHidden( 'gsu_id_organization');
$bridge->addHidden( 'gsf_id_user');
- $bridge->addExhibitor('gsf_login', array('size' => 15, 'minlength' => 4));
+ $bridge->addExhibitor('gsu_login', array('size' => 15, 'minlength' => 4));
$bridge->addText( 'gsf_first_name');
$bridge->addText( 'gsf_surname_prefix');
$bridge->addText( 'gsf_last_name');
@@ -71,12 +73,11 @@
$bridge->addRadio( 'gsf_gender', 'separator', '');
$bridge->addSelect( 'gsf_iso_lang', array('label' => $this->_('Language'), 'multiOptions' => $this->util->getLocalized()->getLanguages()));
- $bridge->addCheckbox( 'gsf_logout_on_survey', 'label', $this->_('Logout on survey'), 'description', $this->_('If checked you will logoff after answering a survey.'));
}
public function afterSave(array $data, $isNew)
{
- $this->escort->loadLoginInfo($data['gsf_login']);
+ $this->escort->loadLoginInfo($data['gsu_login']);
}
public function changePasswordAction()
@@ -86,15 +87,18 @@
*************/
$form = $this->createForm();
- // Veld current password
- $element = new Zend_Form_Element_Password('old_password');
- $element->setLabel($this->_('Current password'));
- $element->setAttrib('size', 10);
- $element->setAttrib('maxlength', 20);
- $element->setRenderPassword(true);
- $element->setRequired(true);
- $element->addValidator(new Gems_Validate_GemsPasswordUsername($this->session->user_login, 'old_password', $this->db));
- $form->addElement($element);
+ $sql = "SELECT CASE WHEN gsu_password IS NULL THEN 0 ELSE 1 END FROM gems__users WHERE gsu_id_user = ? AND gsu_id_organization = ?";
+ if ($this->db->fetchOne($sql, array($this->session->user_id, $this->session->user_organization_id))) {
+ // Veld current password
+ $element = new Zend_Form_Element_Password('old_password');
+ $element->setLabel($this->_('Current password'));
+ $element->setAttrib('size', 10);
+ $element->setAttrib('maxlength', 20);
+ $element->setRenderPassword(true);
+ $element->setRequired(true);
+ $element->addValidator(new Gems_Validate_GemsPasswordUsername($this->session->user_login, 'old_password', $this->db));
+ $form->addElement($element);
+ }
// Veld new password
$element = new Zend_Form_Element_Password('new_password');
@@ -127,8 +131,9 @@
****************/
if ($this->_request->isPost() && $form->isValid($_POST)) {
- $data['gsf_id_user'] = $this->session->user_id;
- $data['gsf_password'] = $this->escort->passwordHash(null,$_POST['new_password']);
+ $data['gsu_id_user'] = $this->session->user_id;
+ $data['gsu_id_organization'] = $this->session->user_organization_id;
+ $data['gsu_password'] = $this->escort->passwordHash(null, $_POST['new_password']);
$this->getModel()->save($data);
@@ -180,10 +185,10 @@
*/
public function createModel($detailed, $action)
{
- $model = new MUtil_Model_TableModel('gems__staff');
- $model->canCreate = false;
+ $model = new Gems_Model_UserModel('staff', 'gems__staff', array('gsu_id_user' => 'gsf_id_user'), 'gsf');
+ $model->copyKeys();
- $model->set('gsf_login', 'label', $this->_('Login Name'));
+ $model->set('gsu_login', 'label', $this->_('Login Name'));
$model->set('gsf_email', 'label', $this->_('E-Mail'));
$model->set('gsf_first_name', 'label', $this->_('First name'));
$model->set('gsf_surname_prefix', 'label', $this->_('Surname prefix'), 'description', 'de, van der, \'t, etc...');
@@ -191,14 +196,12 @@
$model->set('gsf_gender', 'label', $this->_('Gender'), 'multiOptions', $this->util->getTranslated()->getGenders());
- Gems_Model::setChangeFieldsByPrefix($model, 'gsf');
-
return $model;
}
public function editAction()
{
- $this->getModel()->setFilter(array('gsf_id_user' => $this->session->user_id));
+ $this->getModel()->setFilter(array('gsu_id_user' => $this->session->user_id));
if ($form = $this->processForm()) {
$this->html->h3(sprintf($this->_('Options'), $this->getTopic()));
Modified: branches/newUser/classes/Gems/Default/RespondentAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/RespondentAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/RespondentAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -326,8 +326,8 @@
$values = $this->db->fetchPairs("
SELECT gsf_id_user,
CONCAT(gsf_last_name, ', ', COALESCE(CONCAT(gsf_first_name, ' '), ''), COALESCE(gsf_surname_prefix, '')) AS name
- FROM gems__staff INNER JOIN gems__groups ON gsf_id_primary_group = ggp_id_group
- WHERE gsf_active=1 AND gsf_id_organization = ? AND ggp_role = 'physician'
+ FROM (gems__users INNER JOIN gems__staff ON gsu_id_user = gsf_id_user) INNER JOIN gems__groups ON gsf_id_primary_group = ggp_id_group
+ WHERE gsu_active=1 AND gsu_id_organization = ? AND ggp_role = 'physician'
ORDER BY 2", $organizationId);
$session->physicians = $values;
Modified: branches/newUser/classes/Gems/Default/StaffAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/StaffAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/StaffAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -44,7 +44,7 @@
*/
class Gems_Default_StaffAction extends Gems_Controller_BrowseEditAction
{
- public $filterStandard = array('gsf_active' => 1);
+ public $filterStandard = array('gsu_active' => 1);
public $sortKey = array('name' => SORT_ASC);
protected $_instanceId;
@@ -96,18 +96,27 @@
if ($new) {
$model->set('gsf_id_primary_group', 'default', $dbLookup->getDefaultGroup());
} else {
- $model->set('gsf_password', 'description', $this->_('Enter only when changing'));
- $model->setSaveWhenNotNull('gsf_password');
+ $model->set('gsu_password', 'description', $this->_('Enter only when changing'));
+ $model->setSaveWhenNotNull('gsu_password');
}
- $model->setOnSave('gsf_password', array($this->escort, 'passwordHash'));
+ $model->setOnSave('gsu_password', array($this->escort, 'passwordHash'));
$ucfirst = new Zend_Filter_Callback('ucfirst');
- $bridge->addHidden( 'gsf_id_user');
- $bridge->addText( 'gsf_login', 'size', 15, 'minlength', 4,
- 'validator', $model->createUniqueValidator('gsf_login'));
+ $bridge->addHidden( 'gsu_id_user');
+ $bridge->addHidden( 'gsf_id_user'); // Needed for e-mail validation
+ $bridge->addText( 'gsu_login', 'size', 15, 'minlength', 4,
+ 'validator', $model->createUniqueValidator('gsu_login'));
- $bridge->addPassword('gsf_password',
+ // Can the organization be changed?
+ if ($this->escort->hasPrivilege('pr.staff.edit.all')) {
+ $bridge->addHiddenMulti($model->getKeyCopyName('gsu_id_organization'));
+ $bridge->addSelect('gsu_id_organization');
+ } else {
+ $bridge->addExhibitor('gsu_id_organization');
+ }
+
+ $bridge->addPassword('gsu_password',
'label', $this->_('Password'),
'minlength', $this->project->passwords['MinimumLength'],
// 'renderPassword', true,
@@ -123,11 +132,6 @@
$bridge->addFilter( 'gsf_last_name', $ucfirst);
$bridge->addText( 'gsf_email', array('size' => 30))->addValidator('SimpleEmail')->addValidator($model->createUniqueValidator('gsf_email'));
- if ($this->escort->hasPrivilege('pr.staff.edit.all')) {
- $bridge->addSelect('gsf_id_organization');
- } else {
- $bridge->addExhibitor('gsf_id_organization');
- }
$bridge->addSelect('gsf_id_primary_group');
$bridge->addCheckbox('gsf_logout_on_survey', 'description', $this->_('If checked the user will logoff when answering a survey.'));
@@ -136,15 +140,15 @@
public function afterFormLoad(array &$data, $isNew)
{
- if (array_key_exists('gsf_login', $data)) {
- $this->_instanceId = $data['gsf_login'];
+ if (array_key_exists('gsu_login', $data)) {
+ $this->_instanceId = $data['gsu_login'];
}
$sql = "SELECT ggp_id_group,ggp_role FROM gems__groups WHERE ggp_id_group = " . (int) $data['gsf_id_primary_group'];
$groups = $this->db->fetchPairs($sql);
if (! ($this->escort->hasPrivilege('pr.staff.edit.all') ||
- $data['gsf_id_organization'] == $this->escort->getCurrentOrganization())) {
+ $data['gsu_id_organization'] == $this->escort->getCurrentOrganization())) {
throw new Zend_Exception($this->_('You are not allowed to edit this staff member.'));
}
}
@@ -164,18 +168,21 @@
{
// MUtil_Model::$verbose = true;
- $model = new MUtil_Model_TableModel('gems__staff');
+ $model = new Gems_Model_UserModel('staff', 'gems__staff', array('gsu_id_user' => 'gsf_id_user'), 'gsf');
+ if ($detailed) {
+ $model->copyKeys();
+ }
//$model->resetOrder();
- $model->set('gsf_login', 'label', $this->_('Login'));
+ $model->set('gsu_login', 'label', $this->_('Login'));
$model->set('name', 'label', $this->_('Name'),
'column_expression', "CONCAT(COALESCE(CONCAT(gsf_last_name, ', '), '-, '), COALESCE(CONCAT(gsf_first_name, ' '), ''), COALESCE(gsf_surname_prefix, ''))");
$model->set('gsf_email', 'label', $this->_('E-Mail'), 'itemDisplay', 'MUtil_Html_AElement::ifmail');
if ($detailed || $this->escort->hasPrivilege('pr.staff.see.all')) {
- $this->menu->getParameterSource()->offsetSet('gsf_id_organization', $this->escort->getCurrentOrganization());
+ $this->menu->getParameterSource()->offsetSet('gsu_id_organization', $this->escort->getCurrentOrganization());
- $model->set('gsf_id_organization', 'label', $this->_('Organization'),
+ $model->set('gsu_id_organization', 'label', $this->_('Organization'),
'multiOptions', $this->util->getDbLookup()->getOrganizations(),
'default', $this->escort->getCurrentOrganization());
}
@@ -188,10 +195,8 @@
$model->set('gsf_logout_on_survey', 'label', $this->_('Logout on survey'), 'multiOptions', $this->util->getTranslated()->getYesNo());
}
- $model->setDeleteValues('gsf_active', 0);
+ $model->setDeleteValues('gsu_active', 0);
- Gems_Model::setChangeFieldsByPrefix($model, 'gsf');
-
return $model;
}
@@ -201,8 +206,8 @@
if ($this->escort->hasPrivilege('pr.staff.see.all')) {
// Select organization
- $options = array('' => $this->_('(all organizations)')) + $this->getModel()->get('gsf_id_organization', 'multiOptions');
- $select = new Zend_Form_Element_Select('gsf_id_organization', array('multiOptions' => $options));
+ $options = array('' => $this->_('(all organizations)')) + $this->getModel()->get('gsu_id_organization', 'multiOptions');
+ $select = new Zend_Form_Element_Select('gsu_id_organization', array('multiOptions' => $options));
// Position as second element
$search = array_shift($elements);
@@ -227,7 +232,7 @@
$filter = parent::getDataFilter($data);
if (! $this->escort->hasPrivilege('pr.staff.see.all')) {
- $filter['gsf_id_organization'] = $this->escort->getCurrentOrganization();
+ $filter['gsu_id_organization'] = $this->escort->getCurrentOrganization();
}
return $filter;
}
@@ -257,8 +262,8 @@
// Model filter has now been set.
$data = $this->getModel()->loadFirst();
- $this->_setParam('gsf_id_organization', $data['gsf_id_organization']);
- $this->menu->getParameterSource()->offsetSet('gsf_id_organization', $data['gsf_id_organization']);
+ $this->_setParam('gsu_id_organization', $data['gsu_id_organization']);
+ $this->menu->getParameterSource()->offsetSet('gsu_id_organization', $data['gsu_id_organization']);
}
return parent::getShowTable($columns, $filter, $sort);
}
Modified: branches/newUser/classes/Gems/Default/TokenPlanAction.php
===================================================================
--- branches/newUser/classes/Gems/Default/TokenPlanAction.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Default/TokenPlanAction.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -351,9 +351,9 @@
COALESCE(gems__staff.gsf_first_name, ''),
COALESCE(CONCAT(' ', gems__staff.gsf_surname_prefix), '')
) AS gsf_name
- FROM gems__staff INNER JOIN gems__respondent2track ON gsf_id_user = gr2t_created_by
+ FROM (gems__users INNER JOIN gems__staff ON gsu_id_user = gsf_id_user) INNER JOIN gems__respondent2track ON gsu_id_user = gr2t_created_by
WHERE gr2t_id_organization = $orgId AND
- gsf_active = 1 AND
+ gsu_active = 1 AND
gr2t_active = 1";
$elements[] = $this->_createSelectElement('gr2t_created_by', $sql, $this->_('(all staff)'));
Modified: branches/newUser/classes/Gems/Menu/MenuAbstract.php
===================================================================
--- branches/newUser/classes/Gems/Menu/MenuAbstract.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Menu/MenuAbstract.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -381,13 +381,12 @@
$page = $this->addPage($label, 'pr.staff', 'staff', 'index', $other);
$page->addAutofilterAction();
$page->addCreateAction();
- $page->addShowAction();
- if ($this->escort->hasPrivilege('pr.staff.edit.all')) {
- $page->addEditAction();
- $page->addDeleteAction();
- } else {
- $page->addEditAction()->setParameterFilter('gsf_id_organization', $this->escort->getCurrentOrganization());
- $page->addDeleteAction()->setParameterFilter('gsf_id_organization', $this->escort->getCurrentOrganization());
+ $page->addShowAction()->setModelParameters(2);
+ $editPage = $page->addEditAction()->setModelParameters(2);
+ $delPage = $page->addDeleteAction()->setModelParameters(2);
+ if (! $this->escort->hasPrivilege('pr.staff.edit.all')) {
+ $editPage->setParameterFilter('gsu_id_organization', $this->escort->getCurrentOrganization());
+ $delPage->setParameterFilter('gsu_id_organization', $this->escort->getCurrentOrganization());
}
return $page;
Modified: branches/newUser/classes/Gems/Menu/SubMenuItem.php
===================================================================
--- branches/newUser/classes/Gems/Menu/SubMenuItem.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Menu/SubMenuItem.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -417,7 +417,7 @@
}
$menu = $this->addAction($label, $privilege, 'delete', $other);
- $menu->addParameters(MUtil_Model::REQUEST_ID);
+ $menu->setModelParameters(1);
return $menu;
}
@@ -436,7 +436,7 @@
}
$menu = $this->addAction($label, $privilege, 'edit', $other);
- $menu->addParameters(MUtil_Model::REQUEST_ID);
+ $menu->setModelParameters(1);
return $menu;
}
@@ -475,6 +475,17 @@
return $this;
}
+ /**
+ * Add required parameters - shown in the url - for this
+ * menu item.
+ *
+ * Numeric array keys are changed into the same string as the
+ * array value.
+ *
+ * @param mixed $arrayOrKey1 MUtil_Ra::pairs named array
+ * @param mixed $key2
+ * @return Gems_Menu_SubMenuItem (continuation pattern)
+ */
public function addNamedParameters($arrayOrKey1 = null, $altName1 = null)
{
$params = MUtil_Ra::pairs(func_get_args());
@@ -483,16 +494,8 @@
$this->_parameters = new MUtil_Lazy_ArrayWrap();
}
foreach ($params as $param => $name) {
- if (! $name) {
- if (is_int($param)) {
- throw new Zend_Exception('Invalid integer required parameter key with empty name.');
- } else {
- $name = $param;
- }
- } else {
- if (is_int($param)) {
- $param = $name;
- }
+ if (is_int($param)) {
+ $param = $name;
}
$this->_requiredParameters[$param] = $name;
$this->_parameters[$param] = MUtil_Lazy::L($name);
@@ -546,7 +549,7 @@
}
$menu = $this->addAction($label, $privilege, 'show', $other);
- $menu->addParameters(MUtil_Model::REQUEST_ID);
+ $menu->setModelParameters(1);
return $menu;
}
@@ -755,6 +758,41 @@
return $this;
}
+ /**
+ * Defines the number of named parameters using the model naming
+ * convention: id=x or id1=x id2=y
+ *
+ * @see setNamedParamenters()
+ *
+ * @param int $idCount The number of parameters to define
+ * @return Gems_Menu_SubMenuItem (continuation pattern)
+ */
+ public function setModelParameters($idCount)
+ {
+ $params = array();
+ if (1 == $idCount) {
+ $params[MUtil_Model::REQUEST_ID] = MUtil_Model::REQUEST_ID;
+ } else {
+ for ($i = 1; $i <= $idCount; $i++) {
+ $params[MUtil_Model::REQUEST_ID . $i] = MUtil_Model::REQUEST_ID . $i;
+ }
+ }
+ $this->setNamedParameters($params);
+
+ return $this;
+ }
+
+ /**
+ * Set the required parameters - shown in the url - for this
+ * menu item.
+ *
+ * Numeric array keys are changed into the same string as the
+ * array value.
+ *
+ * @param mixed $arrayOrKey1 MUtil_Ra::pairs named array
+ * @param mixed $key2
+ * @return Gems_Menu_SubMenuItem (continuation pattern)
+ */
public function setNamedParameters($arrayOrKey1 = null, $key2 = null)
{
$params = MUtil_Ra::pairs(func_get_args());
Modified: branches/newUser/classes/Gems/Model/UserModel.php
===================================================================
--- branches/newUser/classes/Gems/Model/UserModel.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Model/UserModel.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -82,6 +82,8 @@
*/
protected function _createUserId()
{
+ $db = $this->getAdapter();
+
$max = $this->userIdLen;
do {
@@ -92,7 +94,7 @@
// Make it a number
$out = intval($out);
- } while ($this->db->fetchOne('SELECT gsu_id_user FROM gems__users WHERE gsu_id_user = ?', $out));
+ } while ($db->fetchOne('SELECT gsu_id_user FROM gems__users WHERE gsu_id_user = ?', $out));
return $out;
}
@@ -112,6 +114,6 @@
$newValues['gsu_id_user'] = $this->_createUserId();
}
- parent::save($newValues, $filter, $saveTables);
+ return parent::save($newValues, $filter, $saveTables);
}
}
Modified: branches/newUser/classes/Gems/User/RespondentUser.php
===================================================================
--- branches/newUser/classes/Gems/User/RespondentUser.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/User/RespondentUser.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -38,6 +38,18 @@
/**
*
*
+-- PATCH: New user login structure
+INSERT INTO gems__users (gsu_id_user, gsu_login, gsu_id_organization, gsu_user_class, gsu_active,
+ gsu_password, gsu_failed_logins, gsu_last_failed, gsu_reset_key, gsu_reset_requested, gsu_reset_required,
+ gsu_changed, gsu_changed_by, gsu_created, gsu_created_by)
+ SELECT grs_id_user, gr2o_patient_nr, gr2o_id_organization, 'RespondentUser', CASE WHEN gr2o_reception_code = 'OK' THEN 1 ELSE 0 END,
+ NULL, 0, NULL, NULL, NULL, 0,
+ gr2o_changed, gr2o_changed_by, gr2o_created, gr2o_created_by
+ FROM gems__respondents INNER JOIN gems__respondent2org ON grs_id_user = gr2o_id_user
+ INNER JOIN gems__organizations ON gr2o_id_organization = gor_id_organization
+ WHERE gor_name = 'HCU / Xpert Clinic';
+
+ *
* @package Gems
* @subpackage User
* @copyright Copyright (c) 2011 Erasmus MC
Modified: branches/newUser/classes/Gems/User/StaffUser.php
===================================================================
--- branches/newUser/classes/Gems/User/StaffUser.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/User/StaffUser.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -57,11 +57,11 @@
$select->from('gems__users')
->join('gems__staff', 'gsu_login = gsf_id_user')
->join('gems__groups', 'gsf_id_primary_group = ggp_id_group')
- ->join('gems__organizations', 'gsf_id_organization = gor_id_organization')
+ ->join('gems__organizations', 'gsu_id_organization = gor_id_organization')
->where('ggp_group_active = 1')
->where('gor_active = 1')
- ->where('gsf_active = 1')
- ->where('gsf_login = ?', $this->getLoginName())
+ ->where('gsu_active = 1')
+ ->where('gsu_login = ?', $this->getLoginName())
->limit(1);
return $select;
Modified: branches/newUser/classes/Gems/Util/DbLookup.php
===================================================================
--- branches/newUser/classes/Gems/Util/DbLookup.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Util/DbLookup.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -105,7 +105,7 @@
if (! $data) {
$data = $this->db->fetchPairs("SELECT gsf_id_user, CONCAT(COALESCE(gsf_last_name, '-'), ', ', COALESCE(gsf_first_name, ''), COALESCE(CONCAT(' ', gsf_surname_prefix), ''))
- FROM gems__staff WHERE gsf_active = 1 ORDER BY gsf_last_name, gsf_first_name, gsf_surname_prefix");
+ FROM gems__users INNER JOIN gems__staff ON gsu_id_user = gsf_id_user WHERE gsu_active = 1 ORDER BY gsf_last_name, gsf_first_name, gsf_surname_prefix");
}
return $data;
Modified: branches/newUser/classes/Gems/Validate/GemsPasswordUsername.php
===================================================================
--- branches/newUser/classes/Gems/Validate/GemsPasswordUsername.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/Gems/Validate/GemsPasswordUsername.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -86,7 +86,7 @@
*/
public function __construct($usernameField, $passwordField, Zend_Db_Adapter_Abstract $adapter = null, $delayFactor = null)
{
- parent::__construct('gems__staff', 'gsf_login', null, $adapter);
+ parent::__construct('gems__users', 'gsu_login', null, $adapter);
$this->_usernameField = $usernameField;
$this->_passwordField = $passwordField;
@@ -137,7 +137,7 @@
}
}
- $condition = $this->_adapter->quoteIdentifier('gsf_password') . ' = ?';
+ $condition = $this->_adapter->quoteIdentifier('gsu_password') . ' = ?';
$this->_exclude = $this->_adapter->quoteInto($condition, md5($password));
try {
@@ -145,8 +145,8 @@
* Lookup last failed login and number of failed logins
*/
try {
- $sql = "SELECT gsf_failed_logins, UNIX_TIMESTAMP(gsf_last_failed)
- AS gsf_last_failed FROM {$this->_table} WHERE gsf_login = ?";
+ $sql = "SELECT gsu_failed_logins, UNIX_TIMESTAMP(gsu_last_failed)
+ AS gsu_last_failed FROM {$this->_table} WHERE gsu_login = ?";
$results = $this->_adapter->fetchRow($sql, array($username));
} catch (Zend_Db_Exception $zde) {
//If we need to apply a db patch, just use a default value
@@ -154,10 +154,10 @@
MUtil_Echo::r(GemsEscort::getInstance()->translate->_('Please update the database'));
}
- $delay = pow($results['gsf_failed_logins'], $this->_delayFactor);
- $remaining = ($results['gsf_last_failed'] + $delay) - time();
+ $delay = pow($results['gsu_failed_logins'], $this->_delayFactor);
+ $remaining = ($results['gsu_last_failed'] + $delay) - time();
- if ($results['gsf_failed_logins'] > 0 && $remaining > 0) {
+ if ($results['gsu_failed_logins'] > 0 && $remaining > 0) {
$this->_obscureValue = false;
$this->_error(self::ERROR_PASSWORD_DELAY, ceil($remaining / 60));
return false;
Modified: branches/newUser/classes/GemsEscort.php
===================================================================
--- branches/newUser/classes/GemsEscort.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/GemsEscort.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -927,7 +927,7 @@
* Reset number of failed logins
*/
try {
- $sql = "UPDATE gems__staff SET gsf_failed_logins = 0, gsf_last_failed = NULL WHERE gsf_login = ?";
+ $sql = "UPDATE gems__users SET gsu_failed_logins = 0, gsu_last_failed = NULL WHERE gsu_login = ?";
$this->db->query($sql, array($_POST['userlogin']));
} catch (Exception $e) {
// swallow exception
@@ -941,7 +941,7 @@
*/
try {
if (isset($_POST['userlogin'])) {
- $sql = "UPDATE gems__staff SET gsf_failed_logins = gsf_failed_logins + 1, gsf_last_failed = NOW() WHERE gsf_login = ?";
+ $sql = "UPDATE gems__users SET gsu_failed_logins = gsu_failed_logins + 1, gsu_last_failed = NOW() WHERE gsu_login = ?";
$this->db->query($sql, array($_POST['userlogin']));
}
} catch (Exception $e) {
@@ -1097,12 +1097,7 @@
//If user is current user, read from session
$allowedOrganizations = $this->session->allowedOrgs;
} else {
- //Here we read all allowed orgs for the user
- $model = new MUtil_Model_TableModel('gems__organizations');
- $data = $model->load();
- foreach ($data as $org) {
- $allowedOrganizations[$org['gor_id_organization']] = $org['gor_name'];
- }
+ $allowedOrganizations = $this->db->fetchPairs("SELECT gor_id_organization, gor_name FROM gems__organizations WHERE gor_active = 1 ORDER BY gor_name");
}
return $allowedOrganizations;
@@ -1309,22 +1304,24 @@
* compatibility
*/
$select = new Zend_Db_Select($this->db);
- $select->from('gems__staff', array('user_id'=>'gsf_id_user',
- 'user_login'=>'gsf_login',
- //don't expose the password hash
- //'user_password'=>'gsf_password',
- 'user_email'=>'gsf_email',
- 'user_group'=>'gsf_id_primary_group',
- 'user_locale'=>'gsf_iso_lang',
- 'user_logout'=>'gsf_logout_on_survey'))
+ $select->from('gems__users', array('user_id' => 'gsu_id_user',
+ 'user_login' => 'gsu_login',
+ //don't expose the password hash
+ //'user_password'=>'gsu_password',
+ ))
+ ->join('gems__staff', 'gsu_id_user = gsf_id_user', array(
+ 'user_email'=>'gsf_email',
+ 'user_group'=>'gsf_id_primary_group',
+ 'user_locale'=>'gsf_iso_lang',
+ 'user_logout'=>'gsf_logout_on_survey'))
->columns(array('user_name'=>"(concat(coalesce(concat(`gems__staff`.`gsf_first_name`,_utf8' '),_utf8''),coalesce(concat(`gems__staff`.`gsf_surname_prefix`,_utf8' '),_utf8''),coalesce(`gems__staff`.`gsf_last_name`,_utf8'')))"))
->join('gems__groups', 'gsf_id_primary_group = ggp_id_group', array('user_role'=>'ggp_role'))
- ->join('gems__organizations', 'gsf_id_organization = gor_id_organization',
+ ->join('gems__organizations', 'gsu_id_organization = gor_id_organization',
array('user_organization_id'=>'gor_id_organization', 'user_organization_name'=>'gor_name'))
->where('ggp_group_active = ?', 1)
->where('gor_active = ?', 1)
- ->where('gsf_active = ?', 1)
- ->where('gsf_login = ?', $userName)
+ ->where('gsu_active = ?', 1)
+ ->where('gsu_login = ?', $userName)
->limit(1);
//For a multi-layout project we need to select the appropriate style too
@@ -1348,7 +1345,11 @@
public function passwordHash($name, $value, $new)
{
- return md5($value, false);
+ if (isset($this->project->salt)) {
+ return md5($this->project->salt . $value, false);
+ } else {
+ return md5($value, false);
+ }
}
/**
Modified: branches/newUser/classes/MUtil/Model/DatabaseModelAbstract.php
===================================================================
--- branches/newUser/classes/MUtil/Model/DatabaseModelAbstract.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/MUtil/Model/DatabaseModelAbstract.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -60,6 +60,11 @@
// If there exists a table containing two fields that map to these, shoot the table designer!!!
/**
+ * @var array When specified delete() updates the selected rows with these values, instead of physically deleting the rows.
+ */
+ protected $_deleteValues;
+
+ /**
* Child classes may technically be able or not able to add extra rows,
* but the data model or specific circumstances may require a specific
* instance of that class to deviate from the default.
@@ -501,6 +506,21 @@
return $this;
}
+ /**
+ * Adding DeleteValues means delete() updates the selected rows with these values, instead of physically deleting the rows.
+ *
+ * @param string|array $arrayOrField1 MUtil_Ra::pairs() arguments
+ * @param mxied $value1
+ * @param string $field2
+ * @param mixed $key2
+ * @return MUtil_Model_TableModel
+ */
+ public function addDeleteValues($arrayOrField1 = null, $value1 = null, $field2 = null, $key2 = null)
+ {
+ $args = MUtil_Ra::pairs(func_get_args());
+ $this->_deleteValues = $args + $this->_deleteValues;
+ return $this;
+ }
/**
* Makes a copy for each key item in the model using $this->getKeyCopyName()
@@ -521,7 +541,6 @@
return $this;
}
-
/**
* Creates a validator that checks that this value is used in no other
* row in the table of the $name field, except that row itself.
@@ -600,11 +619,12 @@
return $this->canCreate;
}
- public function getKeyCopier()
- {
- return $this->keyCopier;
- }
-
+ /**
+ * Returns the key copy name for a field.
+ *
+ * @param string $name
+ * @return string
+ */
public function getKeyCopyName($name)
{
return sprintf($this->keyCopier, $name);
@@ -722,6 +742,22 @@
return $this;
}
+ /**
+ * Setting DeleteValues means delete() updates the selected rows with these values, instead of physically deleting the rows.
+ *
+ * @param string|array $arrayOrField1 MUtil_Ra::pairs() arguments
+ * @param mxied $value1
+ * @param string $field2
+ * @param mixed $key2
+ * @return MUtil_Model_TableModel
+ */
+ public function setDeleteValues($arrayOrField1 = null, $value1 = null, $field2 = null, $key2 = null)
+ {
+ $args = MUtil_Ra::pairs(func_get_args());
+ $this->_deleteValues = $args;
+ return $this;
+ }
+
public function setKeysToTable($keysOrTableName)
{
if (is_string($keysOrTableName)) {
Modified: branches/newUser/classes/MUtil/Model/JoinModel.php
===================================================================
--- branches/newUser/classes/MUtil/Model/JoinModel.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/MUtil/Model/JoinModel.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -174,39 +174,44 @@
}
$filter = $this->_checkFilterUsed($filter);
- $changed = 0;
- foreach ($saveTables as $table_name) {
- $table_filter = array();
- $delete = true;
+ if ($this->_deleteValues) {
+ MUtil_Echo::track($filter);
+ $changed = $this->save($this->_deleteValues, $filter, $saveTables);
+ } else {
+ $changed = 0;
+ foreach ($saveTables as $table_name) {
+ $table_filter = array();
+ $delete = true;
- // Find per table key filters
- foreach ($this->_getKeysFor($table_name) as $key) {
- if (isset($filter[$key])) {
- $table_filter[$key] = $filter[$key];
- } else {
- // If key values are missing, do not delete.
- $delete = false;
- foreach ($this->_joinFields as $source => $target) {
- $found = null;
+ // Find per table key filters
+ foreach ($this->_getKeysFor($table_name) as $key) {
+ if (isset($filter[$key])) {
+ $table_filter[$key] = $filter[$key];
+ } else {
+ // If key values are missing, do not delete.
+ $delete = false;
+ foreach ($this->_joinFields as $source => $target) {
+ $found = null;
- if ($source === $key) {
- $found = $target;
- } elseif ($target == $key) {
- $found = $source;
+ if ($source === $key) {
+ $found = $target;
+ } elseif ($target == $key) {
+ $found = $source;
+ }
+ if ($found && isset($filter[$found])) {
+ /// Found after all.
+ $delete = true;
+ $table_filter[$key] = $filter[$found];
+ break;
+ }
}
- if ($found && isset($filter[$found])) {
- /// Found after all.
- $delete = true;
- $table_filter[$key] = $filter[$found];
- break;
- }
}
}
- }
- // MUtil_Echo::r($table_filter, $table_name);
- if ($delete && $table_filter) {
- $changed = max($changed, $this->_deleteTableData($this->_tables[$table_name], $table_filter));
+ // MUtil_Echo::r($table_filter, $table_name);
+ if ($delete && $table_filter) {
+ $changed = max($changed, $this->_deleteTableData($this->_tables[$table_name], $table_filter));
+ }
}
}
@@ -239,6 +244,8 @@
* @param array $newValues The values to store for a single model item.
* @param array $filter If the filter contains old key values these are used
* to decide on update versus insert.
+ * @param array $saveTables Optional array containing the table names to save,
+ * otherwise the tables set to save at model level will be saved.
* @return array The values as they are after saving (they may change).
*/
public function save(array $newValues, array $filter = null, array $saveTables = null)
Modified: branches/newUser/classes/MUtil/Model/ModelAbstract.php
===================================================================
--- branches/newUser/classes/MUtil/Model/ModelAbstract.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/MUtil/Model/ModelAbstract.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -543,13 +543,22 @@
return $href;
}
+ /**
+ * Returns an array containing the currently defined keys for this
+ * model.
+ *
+ * When no keys are defined, the keys are derived from the model.
+ *
+ * @param boolean $reset If true, derives the key from the model.
+ * @return array
+ */
public function getKeys($reset = false)
{
if ((! $this->_keys) || $reset) {
$keys = array();
foreach ($this->_model as $name => $info) {
if (isset($info['key']) && $info['key']) {
- $keys[$name] = $name;
+ $keys[] = $name;
}
}
$this->setKeys($keys);
@@ -1025,12 +1034,29 @@
return false;
}
+ /**
+ * Sets the keys, processing the array key.
+ *
+ * When an array key is numeric MUtil_Model::REQUEST_ID is used.
+ * When there is more than one key a increasing number is added to
+ * MUtil_Model::REQUEST_ID starting with 1.
+ *
+ * String key names ar eleft as is.
+ *
+ * @param array $keys
+ * @return MUtil_Model_ModelAbstract (continuation pattern)
+ */
public function setKeys(array $keys)
{
$this->_keys = array();
if (count($keys) == 1) {
- $this->_keys[MUtil_Model::REQUEST_ID] = reset($keys);
+ $name = reset($keys);
+ if (is_numeric(key($keys))) {
+ $this->_keys[MUtil_Model::REQUEST_ID] = $name;
+ } else {
+ $this->_keys[key($keys)] = $name;
+ }
} else {
$i = 1;
foreach ($keys as $idx => $name) {
@@ -1081,15 +1107,6 @@
return $this;
}
- /* appears to be not implemented or at least not functionale so removing
- public function setOnLoad($name, $callableOrConstant)
-
- {
- $this->set($name, self::SAVE_TRANSFORMER, $callableOrConstant);
- return $this;
- }
- */
-
public function setOnSave($name, $callableOrConstant)
{
$this->set($name, self::SAVE_TRANSFORMER, $callableOrConstant);
Modified: branches/newUser/classes/MUtil/Model/TableBridgeAbstract.php
===================================================================
--- branches/newUser/classes/MUtil/Model/TableBridgeAbstract.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/MUtil/Model/TableBridgeAbstract.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -1,33 +1,33 @@
<?php
-
-/**
- * Copyright (c) 2011, Erasmus MC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Erasmus MC nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
+
/**
+ * Copyright (c) 2011, Erasmus MC
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Erasmus MC nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
* @author Matijs de Jong
* @since 1.0
* @version 1.1
@@ -39,7 +39,7 @@
protected $model;
protected $modelKeys;
protected $repeater;
-
+
/**
* The actual table
*
@@ -231,9 +231,9 @@
/**
* Set the model to use in the tablebridge
- *
+ *
* @param MUtil_Model_ModelAbstract $model
- * @return MUtil_Model_TableBridgeAbstract
+ * @return MUtil_Model_TableBridgeAbstract
*/
public function setModel(MUtil_Model_ModelAbstract $model)
{
Modified: branches/newUser/classes/MUtil/Model/TableModel.php
===================================================================
--- branches/newUser/classes/MUtil/Model/TableModel.php 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/classes/MUtil/Model/TableModel.php 2011-10-27 15:37:58 UTC (rev 148)
@@ -47,11 +47,6 @@
class MUtil_Model_TableModel extends MUtil_Model_DatabaseModelAbstract
{
/**
- * @var array When specified delete() updates the selected rows with these values, instead of physically deleting the rows.
- */
- protected $_deleteValues;
-
- /**
*
* @var Zend_Db_Table_Abstract
*/
@@ -73,22 +68,6 @@
}
/**
- * Adding DeleteValues means delete() updates the selected rows with these values, instead of physically deleting the rows.
- *
- * @param string|array $arrayOrField1 MUtil_Ra::pairs() arguments
- * @param mxied $value1
- * @param string $field2
- * @param mixed $key2
- * @return MUtil_Model_TableModel
- */
- public function addDeleteValues($arrayOrField1 = null, $value1 = null, $field2 = null, $key2 = null)
- {
- $args = MUtil_Ra::pairs(func_get_args());
- $this->_deleteValues = $args + $this->_deleteValues;
- return $this;
- }
-
- /**
* Delete items from the model
*
* @param mixed $filter True to use the stored filter, array to specify a different filter
@@ -113,16 +92,6 @@
}
/**
- * Returns the DeleteValues used to update selected rows on delete.
- *
- * @return array|null
- */
- public function getDeleteValues()
- {
- return $this->_deleteValues;
- }
-
- /**
* Returns a Zend_Db_Table_Select object to work with
*
* @return Zend_Db_Table_Select
@@ -138,26 +107,18 @@
}
}
+ /**
+ * Save a single model item.
+ *
+ * @param array $newValues The values to store for a single model item.
+ * @param array $filter If the filter contains old key values these are used
+ * to decide on update versus insert.
+ * @return array The values as they are after saving (they may change).
+ */
public function save(array $newValues, array $filter = null)
{
// $this->_saveTableData returns the new row values, including any automatic changes.
// add $newValues to throw nothing away.
return $this->_saveTableData($this->_table, $newValues, $filter) + $newValues;
}
-
- /**
- * Setting DeleteValues means delete() updates the selected rows with these values, instead of physically deleting the rows.
- *
- * @param string|array $arrayOrField1 MUtil_Ra::pairs() arguments
- * @param mxied $value1
- * @param string $field2
- * @param mixed $key2
- * @return MUtil_Model_TableModel
- */
- public function setDeleteValues($arrayOrField1 = null, $value1 = null, $field2 = null, $key2 = null)
- {
- $args = MUtil_Ra::pairs(func_get_args());
- $this->_deleteValues = $args;
- return $this;
- }
}
Modified: branches/newUser/configs/db/patches.sql
===================================================================
--- branches/newUser/configs/db/patches.sql 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/configs/db/patches.sql 2011-10-27 15:37:58 UTC (rev 148)
@@ -221,9 +221,9 @@
INSERT INTO gems__users (gsu_id_user, gsu_login, gsu_id_organization, gsu_user_class, gsu_active,
gsu_password, gsu_failed_logins, gsu_last_failed, gsu_reset_key, gsu_reset_requested, gsu_reset_required,
gsu_changed, gsu_changed_by, gsu_created, gsu_created_by)
- SELECT grs_id_user, gr2o_patient_nr, gr2o_id_organization, 'RespondentUser', CASE WHEN gr2o_reception_code = 'OK' THEN 1 ELSE 0 END,
- NULL, 0, NULL, NULL, NULL, 0,
- gr2o_changed, gr2o_changed_by, gr2o_created, gr2o_created_by
- FROM gems__respondents INNER JOIN gems__respondent2org ON grs_id_user = gr2o_id_user
- INNER JOIN gems__organizations ON gr2o_id_organization = gor_id_organization
- WHERE gor_name = 'HCU / Xpert Clinic';
+ SELECT gsf_id_user, gsf_login, gsf_id_organization, 'StaffUser', gsf_active,
+ NULL, gsf_failed_logins, gsf_last_failed, gsf_reset_key, 0, 1,
+ gsf_changed, gsf_changed_by, gsf_created, gsf_created_by
+ FROM gems__staff;
+
+ALTER TABLE `gems__staff` CHANGE `gsf_id_user` `gsf_id_user` BIGINT( 20 ) UNSIGNED NOT NULL;
Modified: branches/newUser/configs/db/tables/gems__staff.20.sql
===================================================================
--- branches/newUser/configs/db/tables/gems__staff.20.sql 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/configs/db/tables/gems__staff.20.sql 2011-10-27 15:37:58 UTC (rev 148)
@@ -2,20 +2,23 @@
-- Table containing the project staff
--
CREATE TABLE if not exists gems__staff (
- gsf_id_user bigint unsigned not null auto_increment,
+ gsf_id_user bigint unsigned not null references gems__users (gsu_id_user),
+ -- depreciated
gsf_login varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
not null unique key,
gsf_password varchar(32) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
not null,
-
gsf_active boolean not null default 1,
gsf_failed_logins int(11) unsigned not null default 0,
gsf_last_failed timestamp null,
+ gsf_id_organization bigint not null
+ references gems__organizations (gor_id_organization),
+ -- end depreciated
+
+
gsf_id_primary_group bigint unsigned
references gems__groups (ggp_id_group),
- gsf_id_organization bigint not null
- references gems__organizations (gor_id_organization),
gsf_iso_lang char(2) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
not null default 'nl' references gems__languages (gml_iso_lang),
gsf_logout_on_survey boolean not null default 0,
Modified: branches/newUser/configs/db/tables/gems__users.10.sql
===================================================================
--- branches/newUser/configs/db/tables/gems__users.10.sql 2011-10-27 13:29:59 UTC (rev 147)
+++ branches/newUser/configs/db/tables/gems__users.10.sql 2011-10-27 15:37:58 UTC (rev 148)
@@ -3,9 +3,9 @@
--
CREATE TABLE if not exists gems__users (
gsu_id_user bigint unsigned not null,
+ gsu_id_organization bigint not null references gems__organizations (gor_id_organization),
gsu_login varchar(30) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null,
- gsu_id_o...
[truncated message content] |