You can subscribe to this list here.
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(84) |
Oct
(70) |
Nov
(164) |
Dec
(71) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
(52) |
Feb
(77) |
Mar
(70) |
Apr
(58) |
May
(81) |
Jun
(74) |
Jul
(87) |
Aug
(30) |
Sep
(45) |
Oct
(37) |
Nov
(51) |
Dec
(31) |
2013 |
Jan
(47) |
Feb
(29) |
Mar
(40) |
Apr
(33) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <gem...@li...> - 2011-11-24 14:25:22
|
Revision: 280 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=280&view=rev Author: michieltcs Date: 2011-11-24 14:25:16 +0000 (Thu, 24 Nov 2011) Log Message: ----------- Allow longer inputs Modified Paths: -------------- trunk/library/classes/Gems/Default/GroupAction.php Modified: trunk/library/classes/Gems/Default/GroupAction.php =================================================================== --- trunk/library/classes/Gems/Default/GroupAction.php 2011-11-24 11:11:14 UTC (rev 279) +++ trunk/library/classes/Gems/Default/GroupAction.php 2011-11-24 14:25:16 UTC (rev 280) @@ -66,7 +66,7 @@ $bridge->addCheckbox('ggp_group_active'); $bridge->addCheckbox('ggp_staff_members'); $bridge->addCheckbox('ggp_respondent_members'); - $bridge->addText('ggp_allowed_ip_ranges', 'size', 50, 'validator', new Gems_Validate_IPRanges()); + $bridge->addText('ggp_allowed_ip_ranges', 'size', 50, 'validator', new Gems_Validate_IPRanges(), 'maxlength', 500); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-24 11:11:20
|
Revision: 279 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=279&view=rev Author: matijsdejong Date: 2011-11-24 11:11:14 +0000 (Thu, 24 Nov 2011) Log Message: ----------- Moved functionality from OrganizationAction.php to User->setCurrentOrganization() Moved determination of password rule codes from PasswordChecker.php to User.php (seemed more logical and better extensible) Modified Paths: -------------- trunk/library/changelog.txt trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/Project/ProjectSettings.php trunk/library/classes/Gems/User/Organization.php trunk/library/classes/Gems/User/PasswordChecker.php trunk/library/classes/Gems/User/User.php trunk/library/classes/Gems/User/UserLoader.php Modified: trunk/library/changelog.txt =================================================================== --- trunk/library/changelog.txt 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/changelog.txt 2011-11-24 11:11:14 UTC (rev 279) @@ -4,6 +4,7 @@ Setting rules for user passwords has changed and has become more powerfull, unless you do not set them. The table gems__staff is split into gems__staff, gems__user_logins with generic login data and gems__users_passwords containing db stored password information. GemsEscort->afterLogin(), ->afterLogout() and ->loadLoginInfo(0 are now all handled by Gems_User_UserDefinitionInterface objects. +GemsEscort->session kept for compatibility reasons, but use should be stopped. The table gems__user_ids provides unique and non-sequential user ids accross gems__staff and gems__respondents. The gems__respondent.grs_bsn has been renamed to grs_ssn, to make the code more international. MailController is now called MailTemplateController. Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-24 11:11:14 UTC (rev 279) @@ -79,49 +79,14 @@ $allowedOrganizations = $user->getAllowedOrganizations(); if (isset($allowedOrganizations[$orgId])) { - $this->session->user_organization_id = $orgId; - $this->session->user_organization_name = $allowedOrganizations[$orgId]; + $user->setCurrentOrganization($orgId); - if ($this->escort instanceof Gems_Project_Layout_MultiLayoutInterface) { - $this->session->user_style = $this->db->fetchOne( - "SELECT gor_style - FROM gems__organizations - WHERE gor_id_organization = ?", $orgId - ); + if ($url) { + $this->getResponse()->setRedirect($url); + } else { + $user->gotoStartPage($this->menu, $request); } - - // Now update the requestcache to change the oldOrgId to the new orgId - // Don't do it when the oldOrgId doesn't match - $requestCache = $this->session->requestCache; - - //Create the list of request cache keys that match an organization ID (to be extended) - $possibleOrgIds = array( - 'gr2o_id_organization', - 'gto_id_organization'); - - foreach ($requestCache as $key => $value) { - if (is_array($value)) { - foreach ($value as $paramKey => $paramValue) { - if (in_array($paramKey, $possibleOrgIds)) { - if ($paramValue == $oldOrgId) { - $requestCache[$key][$paramKey] = $orgId; - } - } - } - } - } - $this->session->requestCache = $requestCache; - - if (Gems_Cookies::setOrganization($orgId, $this->basepath->getBasePath())) { - if ($url) { - $this->getResponse()->setRedirect($url); - } else { - $user->gotoStartPage($this->menu, $request); - } - return; - } - - throw new Exception($this->_('Cookies must be enabled.')); + return; } throw new Exception($this->_('Invalid organization.')); @@ -137,27 +102,6 @@ parent::createAction(); } - - public function chooseAction() - { - $this->addSnippet('Organization_ChooseOrganizationSnippet'); - $this->html->h3($this->_('Choose an organization')); - - $user = $this->loader->getCurrentUser(); - $request = $this->getRequest(); - - foreach ($user->getAllowedOrganizations() as $orgId => $name) { - $org = $this->loader->getOrganization($orgId); - - if ($org->canHaveRespondents()) { - $url = array($request->getActionKey() => 'change-ui'); - $url['org'] = $orgId; - - $this->html->pInfo()->actionLink($url, $name, array('style' => 'font-size: 120%;')); - } - } - } - /** * Creates a model for getModel(). Called only for each new $action. * Modified: trunk/library/classes/Gems/Project/ProjectSettings.php =================================================================== --- trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-24 11:11:14 UTC (rev 279) @@ -100,13 +100,21 @@ $this->checkRequiredValues(); } - protected function _getPasswordRules(array $current, array $keys, array &$rules) + /** + * Add recursively the rules active for this specific set of codes. + * + * @param array $current The current (part)sub) array of $this->passwords to check + * @param array $codes An array of code names that identify rules that should be used only for those codes. + * @param array $rules The array that stores the activated rules. + * @return void + */ + protected function _getPasswordRules(array $current, array $codes, array &$rules) { foreach ($current as $key => $value) { if (is_array($value)) { // Only act when this is in the set of key values - if (isset($keys[strtolower($key)])) { - $this->_getPasswordRules($value, $keys, $rules); + if (isset($codes[strtolower($key)])) { + $this->_getPasswordRules($value, $codes, $rules); } } else { $rules[$key] = $value; @@ -195,6 +203,30 @@ } /** + * Returns an array with throttling settings for the ask + * controller + * + * @return array + */ + public function getAskThrottleSettings() + { + // Check for the 'askThrottle' config section + if (!empty($this->askThrottle)) { + return $this->askThrottle; + } else { + // Set some sensible defaults + // Detection window: 15 minutes + // Threshold: 20 requests per minute + // Delay: 10 seconds + $throttleSettings = array( + 'period' => 15 * 60, + 'threshold' => 15 * 20, + 'delay' => 10 + ); + } + } + + /** * Returns the public name of this project. * @return string */ @@ -204,20 +236,20 @@ } /** + * Get the rules active for this specific set of codes. * - * @param string $userDefinition - * @param string $role + * @param array $codes An array of code names that identify rules that should be used only for those codes. * @return array */ - public function getPasswordRules($userDefinition, $role) + public function getPasswordRules(array $codes) { - $args = MUtil_Ra::flatten(func_get_args()); - $args = array_change_key_case(array_flip(array_filter($args))); - // MUtil_Echo::track($args); + // Process the codes array to a format better used for filtering + $codes = array_change_key_case(array_flip(array_filter($codes))); + // MUtil_Echo::track($codes); $rules = array(); if (isset($this->passwords) && is_array($this->passwords)) { - $this->_getPasswordRules($this->passwords, $args, $rules); + $this->_getPasswordRules($this->passwords, $codes, $rules); } return $rules; @@ -238,30 +270,6 @@ } /** - * Returns an array with throttling settings for the ask - * controller - * - * @return array - */ - public function getAskThrottleSettings() - { - // Check for the 'askThrottle' config section - if (!empty($this->askThrottle)) { - return $this->askThrottle; - } else { - // Set some sensible defaults - // Detection window: 15 minutes - // Threshold: 20 requests per minute - // Delay: 10 seconds - $throttleSettings = array( - 'period' => 15 * 60, - 'threshold' => 15 * 20, - 'delay' => 10 - ); - } - } - - /** * Returns the super admin name, if any * * @return string @@ -296,7 +304,7 @@ return $this->admin['ipRanges']; } } - + /** * Returns a salted hash on the * Modified: trunk/library/classes/Gems/User/Organization.php =================================================================== --- trunk/library/classes/Gems/User/Organization.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/User/Organization.php 2011-11-24 11:11:14 UTC (rev 279) @@ -186,7 +186,7 @@ } /** - * Get the style attribute. + * Get the code attribute. * * @return string */ @@ -196,6 +196,26 @@ } /** + * Get the organization id. + * + * @return int + */ + public function getId() + { + return $this->_organizationData['gor_id_organization']; + } + + /** + * Get the name of the organization. + * + * @return string + */ + public function getName() + { + return $this->_organizationData['gor_name']; + } + + /** * Get the style attribute. * * @return string Modified: trunk/library/classes/Gems/User/PasswordChecker.php =================================================================== --- trunk/library/classes/Gems/User/PasswordChecker.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/User/PasswordChecker.php 2011-11-24 11:11:14 UTC (rev 279) @@ -206,16 +206,16 @@ /** * Check for password weakness. * - * @param Gems_User_User $user The user for e.g. name checks * @param string $password + * @param array $codes An array of code names that identify rules that should be used only for those codes. * @return mixed String or array of strings containing warning messages */ - public function reportPasswordWeakness(Gems_User_User $user, $password) + public function reportPasswordWeakness(Gems_User_User $user, $password, array $codes) { + $this->user = $user; $this->_errors = array(); - $this->user = $user; - $rules = $this->project->getPasswordRules($user->getOrganizationCode(), $user->getRoles(), $user->getDefinitionName()); + $rules = $this->project->getPasswordRules($codes); // MUtil_Echo::track($rules); foreach ($rules as $rule => $parameter) { Modified: trunk/library/classes/Gems/User/User.php =================================================================== --- trunk/library/classes/Gems/User/User.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/User/User.php 2011-11-24 11:11:14 UTC (rev 279) @@ -59,30 +59,42 @@ private $_vars; /** + * Required * * @var MUtil_Acl */ protected $acl; /** + * Required * + * @var Gems_Util_BasePath + */ + protected $basepath; + + /** + * Required + * * @var Zend_Db_Adapter_Abstract */ protected $db; /** + * Required, set in constructor * * @var Gems_User_UserDefinitionInterface */ protected $definition; /** + * Required * * @var Zend_Session_Namespace */ protected $session; /** + * Required * * @var Gems_User_UserLoader */ @@ -260,7 +272,7 @@ */ public function checkRegistryRequestsAnswers() { - if (! $this->session instanceof Zend_Session_Namespace) { + if (! (($this->db instanceof Zend_Db_Adapter_Abstract) && ($this->session instanceof Zend_Session_Namespace))) { return false; } @@ -292,7 +304,7 @@ $this->refreshAllowedOrganizations(); } - return true; + return (boolean) $this->acl && $this->basepath && $this->userLoader; } /** @@ -319,11 +331,11 @@ * Returns the name of the user definition. * * @return string - */ + * NOT NEEDED FOR THE MOMENT / public function getDefinitionName() { return $this->_getVar('__user_definition'); - } + } // */ /** * Return true if this user has a password. @@ -390,6 +402,15 @@ /** * + * @return Gems_User_Organization + */ + public function getOrganization() + { + return $this->userLoader->getOrganization($this->getOrganizationId()); + } + + /** + * * @return int */ public function getOrganizationId() @@ -407,13 +428,13 @@ * Gets the (optional) organization code. * * @return string - */ + * NOT NEEDED FOR THE MOMENT / public function getOrganizationCode() { $organizationId = $this->getOrganizationId(); return $this->userLoader->getOrganization($organizationId)->getCode(); - } + } // */ /** * Return a password reset key @@ -632,7 +653,11 @@ if ($this->canSetPassword()) { $checker = $this->userLoader->getPasswordChecker(); - return $checker->reportPasswordWeakness($this, $password); + $codes[] = $this->getOrganization()->getCode(); + $codes[] = $this->getRoles(); + $codes[] = $this->_getVar('__user_definition'); + + return $checker->reportPasswordWeakness($this, $password, MUtil_Ra::flatten($codes)); } } @@ -667,7 +692,64 @@ return $this; } + /** + * Set the currently selected organization for this user + * + * @param mixed $organization Gems_User_Organization or an organization id. + * @return Gems_User_User (continuation pattern) + */ + public function setCurrentOrganization($organization) + { + if ($organization instanceof Gems_User_Organization) { + $organizationId = $organization->getId(); + } else { + $organizationId = $organization; + $organization = $this->userLoader->getOrganization($organizationId); + } + $oldOrganizationId = $this->getOrganizationId(); + + if ($organizationId != $oldOrganizationId) { + $this->_setVar('user_organization_id', $organizationId); + + // Depreciation warning: the settings will be removed in + // version 1.6 at the latest. + $this->_setVar('user_organization_name', $organization->getName()); + $this->_setVar('user_style', $organization->getStyle()); + // End depreciation warning + + if ($this->isCurrentUser()) { + // Now update the requestcache to change the oldOrgId to the new orgId + // Don't do it when the oldOrgId doesn't match + $requestCache = $this->session->requestCache; + + //Create the list of request cache keys that match an organization ID (to be extended) + $possibleOrgIds = array( + 'gr2o_id_organization', + 'gto_id_organization'); + + foreach ($requestCache as $key => $value) { + if (is_array($value)) { + foreach ($value as $paramKey => $paramValue) { + if (in_array($paramKey, $possibleOrgIds)) { + if ($paramValue == $oldOrganizationId) { + $requestCache[$key][$paramKey] = $organizationId; + } + } + } + } + } + $this->session->requestCache = $requestCache; + } + } + + if (! Gems_Cookies::setOrganization($organizationId, $this->basepath->getBasePath())) { + throw new Exception($this->_('Cookies must be enabled for this site.')); + } + + return $this; + } + /** * Set the password, if allowed for this user type. * Modified: trunk/library/classes/Gems/User/UserLoader.php =================================================================== --- trunk/library/classes/Gems/User/UserLoader.php 2011-11-23 18:52:36 UTC (rev 278) +++ trunk/library/classes/Gems/User/UserLoader.php 2011-11-24 11:11:14 UTC (rev 279) @@ -299,7 +299,7 @@ { $checker = $this->_getClass('passwordChecker'); - return $checker->reportPasswordWeakness($user, $password); + return $user->reportPasswordWeakness($password); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-23 18:52:44
|
Revision: 278 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=278&view=rev Author: matijsdejong Date: 2011-11-23 18:52:36 +0000 (Wed, 23 Nov 2011) Log Message: ----------- MENU: Rebuilt menu to simpler parameter processing form using a single ParameterCollector instead of looping through sources (and treating each differently). You should not notice anything, but keep an eye out for missing or not working links. Specifying extra parameters should have become simpler. HTML: $html->input() could not create a simple element, now it can. ORGANIZATIONS: You can now specify the organizations that can have respondents. 90% ready, works except for adding new respondents. Logging in with an organization that cannot have a respondent will show either a message or a selection of allowed organization that do have patients. Modified Paths: -------------- trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/Default/RespondentAction.php trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/Gems/Menu/ParameterSourceInterface.php trunk/library/classes/Gems/Menu/SubMenuItem.php trunk/library/classes/Gems/Menu.php trunk/library/classes/Gems/Pdf.php trunk/library/classes/Gems/User/Organization.php trunk/library/classes/GemsEscort.php trunk/library/classes/MUtil/Html/InputRenderer.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__organizations.20.sql trunk/library/languages/default-en.mo trunk/library/languages/default-en.po trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po trunk/library/snippets/Organization/OrganizationTableSnippet.php Added Paths: ----------- trunk/library/classes/Gems/Menu/ParameterCollector.php trunk/library/snippets/Organization/ChooseOrganizationSnippet.php Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 18:52:36 UTC (rev 278) @@ -61,17 +61,24 @@ protected $createEditSnippets = 'Organization_OrganizationEditSnippet'; /** + * + * @var Gems_Loader + */ + public $loader; + + /** * Switch the active organization */ public function changeUiAction() { - $request = $this->getRequest(); - $org = urldecode($request->getParam('org')); - $url = base64_decode($request->getParam('current_uri')); - $oldOrgId = $this->session->user_organization_id; + $user = $this->loader->getCurrentUser(); + $request = $this->getRequest(); + $orgId = urldecode($request->getParam('org')); + $url = base64_decode($request->getParam('current_uri')); + $oldOrgId = $user->getOrganizationId(); - $allowedOrganizations = $this->loader->getCurrentUser()->getAllowedOrganizations(); - if ($orgId = array_search($org, $allowedOrganizations)) { + $allowedOrganizations = $user->getAllowedOrganizations(); + if (isset($allowedOrganizations[$orgId])) { $this->session->user_organization_id = $orgId; $this->session->user_organization_name = $allowedOrganizations[$orgId]; @@ -83,8 +90,8 @@ ); } - //Now update the requestcache to change the oldOrgId to the new orgId - //Don't do it when the oldOrgId doesn't match + // Now update the requestcache to change the oldOrgId to the new orgId + // Don't do it when the oldOrgId doesn't match $requestCache = $this->session->requestCache; //Create the list of request cache keys that match an organization ID (to be extended) @@ -106,7 +113,11 @@ $this->session->requestCache = $requestCache; if (Gems_Cookies::setOrganization($orgId, $this->basepath->getBasePath())) { - $this->getResponse()->setRedirect($url); + if ($url) { + $this->getResponse()->setRedirect($url); + } else { + $user->gotoStartPage($this->menu, $request); + } return; } @@ -126,6 +137,27 @@ parent::createAction(); } + + public function chooseAction() + { + $this->addSnippet('Organization_ChooseOrganizationSnippet'); + $this->html->h3($this->_('Choose an organization')); + + $user = $this->loader->getCurrentUser(); + $request = $this->getRequest(); + + foreach ($user->getAllowedOrganizations() as $orgId => $name) { + $org = $this->loader->getOrganization($orgId); + + if ($org->canHaveRespondents()) { + $url = array($request->getActionKey() => 'change-ui'); + $url['org'] = $orgId; + + $this->html->pInfo()->actionLink($url, $name, array('style' => 'font-size: 120%;')); + } + } + } + /** * Creates a model for getModel(). Called only for each new $action. * @@ -141,7 +173,7 @@ { $model = new MUtil_Model_TableModel('gems__organizations'); - $model->setDeleteValues('gor_active', 0, 'gor_add_patients', 0); + $model->setDeleteValues('gor_active', 0, 'gor_add_respondents', 0); $model->set('gor_name', 'label', $this->_('Name'), 'size', 25); $model->set('gor_location', 'label', $this->_('Location'), 'size', 25); @@ -161,8 +193,8 @@ ); $yesNo = $this->util->getTranslated()->getYesNo(); $model->set('gor_active', 'label', $this->_('Active'), 'description', $this->_('Can the organization be used?'), 'elementClass', 'Checkbox', 'multiOptions', $yesNo); - $model->set('gor_add_patients', 'label', $this->_('Accepting'), 'description', $this->_('Can new respondents be added to the organization?'), 'elementClass', 'CheckBox', 'multiOptions', $yesNo); - $model->set('gor_has_patients', 'label', $this->_('Respondents'), 'description', $this->_('Does the organization have respondents?'), 'elementClass', 'Exhibitor', 'multiOptions', $yesNo); + $model->set('gor_add_respondents', 'label', $this->_('Accepting'), 'description', $this->_('Can new respondents be added to the organization?'), 'elementClass', 'CheckBox', 'multiOptions', $yesNo); + $model->set('gor_has_respondents', 'label', $this->_('Respondents'), 'description', $this->_('Does the organization have respondents?'), 'elementClass', 'Exhibitor', 'multiOptions', $yesNo); if ($detailed) { $model->set('gor_name', 'validator', $model->createUniqueValidator('gor_name')); Modified: trunk/library/classes/Gems/Default/RespondentAction.php =================================================================== --- trunk/library/classes/Gems/Default/RespondentAction.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Default/RespondentAction.php 2011-11-23 18:52:36 UTC (rev 278) @@ -341,6 +341,19 @@ } /** + * Overrule default index for the case that the current + * organization cannot have users. + */ + public function indexAction() + { + if ($this->loader->getOrganization()->canHaveRespondents()) { + parent::indexAction(); + } else { + $this->addSnippet('Organization_ChooseOrganizationSnippet'); + } + } + + /** * Initialize translate and html objects * * Called from {@link __construct()} as final step of object instantiation. Modified: trunk/library/classes/Gems/Menu/MenuAbstract.php =================================================================== --- trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-11-23 18:52:36 UTC (rev 278) @@ -85,7 +85,7 @@ } } - protected function _toNavigationArray(array $parameterSources) + protected function _toNavigationArray(Gems_Menu_ParameterCollector $source) { if ($this->_subItems) { $lastParams = null; @@ -93,7 +93,7 @@ $pages = array(); foreach ($this->_subItems as $item) { if (! $item->get('button_only')) { - $page = $item->_toNavigationArray($parameterSources); + $page = $item->_toNavigationArray($source); if (($this instanceof Gems_Menu_SubMenuItem) && (! $this->notSet('controller', 'action')) && Added: trunk/library/classes/Gems/Menu/ParameterCollector.php =================================================================== --- trunk/library/classes/Gems/Menu/ParameterCollector.php (rev 0) +++ trunk/library/classes/Gems/Menu/ParameterCollector.php 2011-11-23 18:52:36 UTC (rev 278) @@ -0,0 +1,105 @@ +<?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. + * + * + * @package Gems + * @subpackage Menu + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Sample.php 203 2011-07-07 12:51:32Z matijs $ + */ + +/** + * + * + * @package Gems + * @subpackage Menu + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_Menu_ParameterCollector +{ + protected $sources = array(); + protected $values = array(); + + public function __construct() + { + $sources = MUtil_Ra::flatten(func_get_args()); + foreach ($sources as $source) { + $this->addSource($source); + } + } + + public function addSource($source) + { + array_unshift($this->sources, $source); + } + + /** + * Returns a value to use as parameter for $name or + * $default if this object does not contain the value. + * + * @param string $name + * @param mixed $default + * @return mixed + */ + public function getMenuParameter($name, $altname = null) + { + if (array_key_exists($name, $this->values)) { + return $this->values[$name]; + } + + $this->values[$name] = null; + foreach ($this->sources as $source) { + if ($source instanceof Zend_Controller_Request_Abstract) { + $value = $source->getParam($name, null); + if (null === $value) { + $value = $source->getParam($altname, $this->values[$name]); + } + $this->values[$name] = $value; + + } elseif ($source instanceof Gems_Menu_ParameterSourceInterface) { + $this->values[$name] = $source->getMenuParameter($name, $this->values[$name]); + + } elseif ($source instanceof MUtil_Lazy_RepeatableInterface) { + $this->values[$name] = $source->__get($name); + + } elseif (is_array($source)) { + if (isset($source[$name])) { + $this->values[$name] = $source[$name]; + } + } + if (null !== $this->values[$name]) { + break; + } + } + return $this->values[$name]; + } +} Modified: trunk/library/classes/Gems/Menu/ParameterSourceInterface.php =================================================================== --- trunk/library/classes/Gems/Menu/ParameterSourceInterface.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Menu/ParameterSourceInterface.php 2011-11-23 18:52:36 UTC (rev 278) @@ -1,6 +1,5 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -51,7 +50,7 @@ */ interface Gems_Menu_ParameterSourceInterface { - /** + /** * Returns a value to use as parameter for $name or * $default if this object does not contain the value. * Modified: trunk/library/classes/Gems/Menu/SubMenuItem.php =================================================================== --- trunk/library/classes/Gems/Menu/SubMenuItem.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Menu/SubMenuItem.php 2011-11-23 18:52:36 UTC (rev 278) @@ -92,11 +92,11 @@ return print_r($this->_itemOptions, true); } - private function _applyParameterFilter($source, $paramFunction, $raiseConditions, &$condition) + private function _applyParameterFilter(Gems_Menu_ParameterCollector $source, $raiseConditions, &$condition) { if ($this->_parameterFilter) { foreach ($this->_parameterFilter as $name => $testValue) { - $paramValue = call_user_func($paramFunction, $source, $name, null); + $paramValue = $source->getMenuParameter($name); if ($paramValue instanceof MUtil_Lazy_LazyInterface) { if ($raiseConditions) { @@ -124,20 +124,12 @@ } } - private function _applyParameterSource($source, $paramFunction, array &$parameters) + private function _applyParameterSource(Gems_Menu_ParameterCollector $source, array &$parameters) { // Fill in required parameters if ($this->_parameters && is_array($this->_parameters)) { foreach ($this->_parameters as $param => $name) { - - $default = isset($parameters[$param]) ? $parameters[$param] : null; - - $check = $name; - if ($source instanceof Zend_Controller_Request_Abstract) $check = $param; - - if ($value = call_user_func($paramFunction, $source, $check, $default)) { - $parameters[$param] = $value; - } + $parameters[$param] = $source->getMenuParameter($name, $param); // MUtil_Echo::r($param . '/' . $name . ' => ' . $value, $this->get('label')); } } @@ -145,31 +137,16 @@ return false; } - private function _applyParameterSources(array $parameterSources, array &$parameters, $raiseConditions) + private function _applyParameterSources(Gems_Menu_ParameterCollector $source, array &$parameters, $raiseConditions) { + // Gems_Menu::$verbose = true; // MUtil_Echo::r($this->get('label')); $condition = true; - foreach ($parameterSources as $source) { - if ($source instanceof Zend_Controller_Request_Abstract) { - $this->_applyParameterSource($source, array(__CLASS__, '_getRequestValue'), $parameters); - - } elseif ($source instanceof Gems_Menu_ParameterSourceInterface) { - if ($this->_applyParameterFilter($source, array(__CLASS__, '_getSourceValue'), $raiseConditions, $condition)) { - return false; - } - $this->_applyParameterSource($source, array(__CLASS__, '_getSourceValue'), $parameters); - - } elseif ($source instanceof MUtil_Lazy_RepeatableInterface) { - if ($this->_applyParameterFilter($source, array(__CLASS__, '_getRepeatableValue'), $raiseConditions, $condition)) { - return false; - } - $this->_applyParameterSource($source, array(__CLASS__, '_getRepeatableValue'), $parameters); - - } elseif (is_array($source)) { - $this->_applyParameterSource($source, array(__CLASS__, '_getArrayValue'), $parameters); - } + if ($this->_applyParameterFilter($source, $raiseConditions, $condition)) { + return false; } + $this->_applyParameterSource($source, $parameters); // Test required parameters if ($this->_requiredParameters) { @@ -186,39 +163,14 @@ return $condition; } - private static function _getArrayValue($source, $name, $default) + private function _toHRef(Gems_Menu_ParameterCollector $source, &$condition) { - if (isset($source[$name])) { - return $source[$name]; - } else { - return $default; - } - } - - private static function _getRepeatableValue($source, $name, $default) - { - return $source->$name; - } - - private static function _getRequestValue($source, $name, $default) - { - return $source->getParam($name, $default); - } - - private static function _getSourceValue($source, $name, $default) - { - return $source->getMenuParameter($name, $default); - } - - private function _toHRef(array $parameterSources, &$condition) - { if ($this->get('allowed')) { $parameters = array(); - if ($condition = $this->_applyParameterSources($parameterSources, $parameters, ! $condition)) { + if ($condition = $this->_applyParameterSources($source, $parameters, ! $condition)) { $url = new MUtil_Html_HrefArrayAttribute($parameters); - // $url->setRequest($request); // TODO: Filter from $parameterSources? $url->setRouteReset($this->get('reset_param', true)); foreach (array('module', 'controller', 'action', 'route') as $name) { @@ -234,10 +186,10 @@ } } - private function _toLi(array $parameterSources) + private function _toLi(Gems_Menu_ParameterCollector $source) { $condition = false; - if ($href = $this->_toHRef($parameterSources, $condition)) { + if ($href = $this->_toHRef($source, $condition)) { $li = MUtil_Html::create()->li(); $li->a($href, $this->get('label')); @@ -246,13 +198,13 @@ } } - protected function _toNavigationArray(array $parameterSources) + protected function _toNavigationArray(Gems_Menu_ParameterCollector $source) { $result = $this->_itemOptions; if ($result['visible']) { $parameters = array(); - if ($this->_applyParameterSources($parameterSources, $parameters, true)) { + if ($this->_applyParameterSources($source, $parameters, true)) { $result['params'] = $parameters; } else { $result['visible'] = false; @@ -260,7 +212,7 @@ } if ($this->hasChildren()) { - $result['pages'] = parent::_toNavigationArray($parameterSources); + $result['pages'] = parent::_toNavigationArray($source); } // Get any missing MVC keys from children, even when invisible @@ -301,11 +253,11 @@ return $result; } - protected function _toRouteArray(array $parameterSources) + protected function _toRouteArray(Gems_Menu_ParameterCollector $source) { if ($this->get('allowed')) { $result = array(); - if ($this->_applyParameterSources($parameterSources, $result, true)) { + if ($this->_applyParameterSources($source, $result, true)) { if (isset($this->_itemOptions['controller'])) { $result['controller'] = $this->_itemOptions['controller']; } @@ -323,7 +275,7 @@ if ($this->hasChildren()) { foreach ($this->getChildren() as $child) { if ($child->check(array('allowed', true))) { - $firstChild = $firstChild->toRouteArray($parameterSources); + $firstChild = $firstChild->toRouteArray($source); break; } } @@ -387,6 +339,13 @@ return $this->addAction(null, $this->get('privilege'), 'autofilter'); } + /** + * Add an "Create new" action to the current subMenuItem + * + * @param string $privilege The privilege for the item + * @param array $other Array of extra options for this item, e.g. 'visible', 'allowed', 'class', 'icon', 'target', 'type', 'button_only' + * @return Gems_Menu_SubMenuItem + */ public function addCreateAction($privilege = null, array $other = array()) { if (isset($other['label'])) { @@ -725,6 +684,7 @@ public function is($key, $value) { + // MUtil_Echo::track($key, $value); $target = $this->get($key); if (is_array($value)) { @@ -856,7 +816,7 @@ } $condition = true; - if ($href = $this->_toHRef($parameterSources, $condition)) { + if ($href = $this->_toHRef(new Gems_Menu_ParameterCollector($parameterSources), $condition)) { if ($condition instanceof MUtil_Lazy_LazyInterface) { if ($showDisabled) { @@ -937,14 +897,14 @@ $parameterSources = func_get_args(); $condition = true; - return $this->_toHRef($parameterSources, $condition); + return $this->_toHRef(new Gems_Menu_ParameterCollector($parameterSources), $condition); } public function toRouteUrl($parameterSources_args = null) { $parameterSources = func_get_args(); - return $this->_toRouteArray($parameterSources); + return $this->_toRouteArray(new Gems_Menu_ParameterCollector($parameterSources)); } public function toUl($actionController = null) @@ -955,7 +915,7 @@ $ul = MUtil_Html_ListElement::ul(); foreach ($this->getChildren() as $menuItem) { - if ($li = $menuItem->_toLi($parameterSources)) { + if ($li = $menuItem->_toLi(new Gems_Menu_ParameterCollector($parameterSources))) { $ul->append($li); } } Modified: trunk/library/classes/Gems/Menu.php =================================================================== --- trunk/library/classes/Gems/Menu.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Menu.php 2011-11-23 18:52:36 UTC (rev 278) @@ -264,7 +264,7 @@ // MAIN RESPONDENTS ITEM $page = $this->addPage($label, 'pr.respondent', 'respondent'); $page->addAutofilterAction(); - $page->addCreateAction('pr.respondent.create'); + $page->addCreateAction('pr.respondent.create')->setParameterFilter('can_add_respondents', true);; $page->addShowAction()->addNamedParameters(MUtil_Model::REQUEST_ID, 'gr2o_patient_nr'); /* @@ -517,6 +517,11 @@ // MAIN RESPONDENTS ITEM $this->addRespondentPage($this->_('Respondents')); + /* + if ($this->escort instanceof Gems_Project_Organization_MultiOrganizationInterface) { + $this->addPage($this->_('Switch'), 'pr.respondent', 'organization', 'choose'); + } // */ + // MAIN PLANNING ITEM $this->addPlanPage($this->_('Overview')); @@ -625,14 +630,13 @@ $parameterSources = func_get_args(); if ($this->_menuParameters) { - // array_unshift($parameterSources, $this->_menuParameters); - // MUtil_echo::track($this->_menuParameters); $parameterSources[] = $this->_menuParameters; } + $source = new Gems_Menu_ParameterCollector($parameterSources); // self::$verbose = true; - $nav = new Zend_Navigation($this->_toNavigationArray($parameterSources)); + $nav = new Zend_Navigation($this->_toNavigationArray($source)); // MUtil_Echo::r($this->_toNavigationArray($parameterSources)); Modified: trunk/library/classes/Gems/Pdf.php =================================================================== --- trunk/library/classes/Gems/Pdf.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/Pdf.php 2011-11-23 18:52:36 UTC (rev 278) @@ -126,7 +126,7 @@ $content = $pdf->render(); - MUtil_Echo::track($filename); + // MUtil_Echo::track($filename); if ($download) { // Download & save header('Content-Type: application/x-download'); Modified: trunk/library/classes/Gems/User/Organization.php =================================================================== --- trunk/library/classes/Gems/User/Organization.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/Gems/User/Organization.php 2011-11-23 18:52:36 UTC (rev 278) @@ -125,6 +125,37 @@ } /** + * Set menu parameters from the organization + * + * @param Gems_Menu_ParameterSource $source + * @return Gems_Tracker_Token (continuation pattern) + */ + public function applyToMenuSource(Gems_Menu_ParameterSource $source) + { + $source->offsetSet('can_add_respondents', $this->canCreateRespondents()); + } + + /** + * Returns true when this organization has or can have respondents + * + * @return boolean + */ + public function canCreateRespondents() + { + return (boolean) $this->_organizationData['gor_add_respondents']; + } + + /** + * Returns true when this organization has or can have respondents + * + * @return boolean + */ + public function canHaveRespondents() + { + return (boolean) $this->_organizationData['gor_has_respondents'] || $this->_organizationData['gor_add_respondents']; + } + + /** * Should be called after answering the request to allow the Target * to check if all required registry values have been set correctly. * Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/GemsEscort.php 2011-11-23 18:52:36 UTC (rev 278) @@ -801,21 +801,20 @@ $orgSwitch = MUtil_Html::create('div', array('id' => 'organizations')); $currentUri = base64_encode($this->view->url()); + $url = $this->view->getHelper('url')->url(array('controller' => 'organization', 'action' => 'change-ui'), null, true); - $url = $this->view->getHelper('url')->url(array( - 'controller' => 'organization', - 'action' => 'change-ui'), null, true); - $orgSwitch->raw('<form method="get" action="' . $url . '"><div><input type="hidden" name="current_uri" value="' . $currentUri . '" /><select name="org" onchange="javascript:this.form.submit();">'); + $formDiv = $orgSwitch->form(array('method' => 'get', 'action' => $url))->div(); + $formDiv->input(array('type' => "hidden", 'name' => "current_uri", 'value' => $currentUri)); + + $select = $formDiv->select(array('name' => "org", 'onchange' => "javascript:this.form.submit();")); foreach ($orgs as $id => $org) { $selected = ''; if ($id == $user->getOrganizationId()) { - $selected = ' selected="selected"'; - - } else { + $selected = array('selected' => "selected"); } - $orgSwitch->raw('<option value="' . urlencode($org) . '"' . $selected . '>' . $org . '</option>'); + $select->option(array('value' => $id), $org, $selected); } - $orgSwitch->raw('</select></div></form>'); + return $orgSwitch; } else { return; @@ -1455,6 +1454,9 @@ $this->menu = $loader->createMenu($this); $this->_updateVariable('menu'); + $source = $this->menu->getParameterSource(); + $this->getLoader()->getOrganization()->applyToMenuSource($source); + /** * Check if we are in maintenance mode or not. This is triggeren by a file in the var/settings * directory with the name lock.txt @@ -1531,7 +1533,7 @@ } if (isset($menuItem)) { - $menuItem->applyHiddenParameters($request, $this->menu->getParameterSource()); + $menuItem->applyHiddenParameters($request, $source); $this->menu->setCurrent($menuItem); } } Modified: trunk/library/classes/MUtil/Html/InputRenderer.php =================================================================== --- trunk/library/classes/MUtil/Html/InputRenderer.php 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/classes/MUtil/Html/InputRenderer.php 2011-11-23 18:52:36 UTC (rev 278) @@ -1,45 +1,52 @@ <?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. - */ - /** - * @author Matijs de Jong - * @since 1.0 - * @version 1.1 - * @package MUtil + * 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. + * + * + * @package MUtil * @subpackage Html + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** - * @author Matijs de Jong - * @package MUtil + * This class handles the rendering of input elements. + * + * If a Zend_Form object is passed as first parameter, then it is rendered appropriately. + * Otherwise the constructor tries to handle it as an attempt to create a raw HtmlElement + * input element. + * + * @package MUtil * @subpackage Html + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 */ class MUtil_Html_InputRenderer implements MUtil_Html_HtmlInterface { @@ -48,6 +55,7 @@ const MODE_ELEMENT = 'except'; const MODE_EXCEPT = 'except'; const MODE_FORM = 'form'; + const MODE_HTML = 'html'; const MODE_ONLY = 'only'; const MODE_UNTIL = 'until'; const MODE_UPTO = 'upto'; @@ -97,8 +105,23 @@ $this->_mode = $mode; } else { - throw new MUtil_Html_HtmlException(sprintf(self::ARGUMENT_ERROR, get_class($element), __CLASS__ . ' constructor')); + if (self::MODE_ELEMENT === $mode) { + // Was the second argument not specified? + // Then the arguments should be passed in $element. + $args = $element; + } else { + // Use all args + $args = func_get_args(); + } + if (is_array($args)) { + // Treat this as a standard Html Element + $this->_element = new MUtil_Html_HtmlElement('input', $args); + $this->_mode = self::MODE_HTML; + // MUtil_Echo::track($args); + } else { + throw new MUtil_Html_HtmlException(sprintf(self::ARGUMENT_ERROR, (is_object($element) ? get_class($element) : gettype($element)), __CLASS__ . ' constructor')); + } } } @@ -272,6 +295,9 @@ case self::MODE_FORM: return self::renderForm($view, $this->_element); + case self::MODE_HTML: + return $this->_element->render($view); + case self::MODE_ONLY: return self::renderOnly($view, $this->_element, $this->_decorators); Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/configs/db/patches.sql 2011-11-23 18:52:36 UTC (rev 278) @@ -316,12 +316,15 @@ ALTER TABLE `gems__organizations` ADD UNIQUE INDEX (`gor_code`); -ALTER TABLE `gems__organizations` ADD gor_accessible_by text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER gor_task, - ADD gor_has_patients boolean not null default 1 AFTER gor_iso_lang, - ADD gor_add_patients boolean not null default 1 AFTER gor_has_patients; +ALTER TABLE `gems__organizations` ADD gor_accessible_by text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER gor_task; -UPDATE `gems__organizations` SET gor_has_patients = COALESCE((SELECT 1 FROM gems__respondent2org WHERE gr2o_id_organization = gor_id_organization GROUP BY gr2o_id_organization), 0); +ALTER TABLE `gems__organizations` + ADD gor_has_respondents boolean not null default 1 AFTER gor_iso_lang, + ADD gor_add_respondents boolean not null default 1 AFTER gor_has_respondents; +UPDATE `gems__organizations` SET gor_has_respondents = COALESCE((SELECT 1 FROM gems__respondent2org WHERE gr2o_id_organization = gor_id_organization GROUP BY gr2o_id_organization), 0); +UPDATE `gems__organizations` SET gor_add_respondents = CASE WHEN gor_has_respondents = 1 AND gor_active = 1 THEN 1 ELSE 0 END; + -- PATCH: Log failed logins INSERT INTO `gems__log_actions` (`glac_id_action`, `glac_name`, `glac_change`, `glac_log`, `glac_created`) VALUES (NULL , 'loginFail', '0', '1', CURRENT_TIMESTAMP); Modified: trunk/library/configs/db/tables/gems__organizations.20.sql =================================================================== --- trunk/library/configs/db/tables/gems__organizations.20.sql 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/configs/db/tables/gems__organizations.20.sql 2011-11-23 18:52:36 UTC (rev 278) @@ -20,8 +20,8 @@ gor_iso_lang char(2) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null default 'en' references gems__languages (gml_iso_lang), - gor_has_patients boolean not null default 1, - gor_add_patients boolean not null default 1, + gor_has_respondents boolean not null default 1, + gor_add_respondents boolean not null default 1, gor_active boolean not null default 1, gor_changed timestamp not null default current_timestamp on update current_timestamp, Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/languages/default-en.po 2011-11-23 18:52:36 UTC (rev 278) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-23 14:53+0100\n" +"POT-Creation-Date: 2011-11-23 19:43+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -23,53 +23,53 @@ msgid "Path %s not writable" msgstr "Path %s not writable" -#: classes/GemsEscort.php:888 +#: classes/GemsEscort.php:887 #, php-format msgid "User: %s" msgstr "User: %s" -#: classes/GemsEscort.php:912 +#: classes/GemsEscort.php:911 msgid "version" msgstr "version" -#: classes/GemsEscort.php:1343 +#: classes/GemsEscort.php:1342 msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" msgstr "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -#: classes/GemsEscort.php:1467 +#: classes/GemsEscort.php:1469 msgid "Please check back later." msgstr "Please check back later." -#: classes/GemsEscort.php:1469 -#: classes/GemsEscort.php:1473 -#: classes/GemsEscort.php:1474 +#: classes/GemsEscort.php:1471 +#: classes/GemsEscort.php:1475 +#: classes/GemsEscort.php:1476 msgid "System is in maintenance mode" msgstr "System is in maintenance mode" -#: classes/GemsEscort.php:1484 +#: classes/GemsEscort.php:1486 msgid "No access to site." msgstr "No access to site." -#: classes/GemsEscort.php:1486 -#: classes/GemsEscort.php:1522 +#: classes/GemsEscort.php:1488 +#: classes/GemsEscort.php:1524 msgid "You have no access to this site." msgstr "You have no access to this site." -#: classes/GemsEscort.php:1502 +#: classes/GemsEscort.php:1504 msgid "No access to page" msgstr "No access to page" -#: classes/GemsEscort.php:1504 +#: classes/GemsEscort.php:1506 #, php-format msgid "Access to this page is not allowed for current role: %s." msgstr "Access to this page is not allowed for current role: %s." -#: classes/GemsEscort.php:1509 -#: classes/GemsEscort.php:1520 +#: classes/GemsEscort.php:1511 +#: classes/GemsEscort.php:1522 msgid "You are no longer logged in." msgstr "You are no longer logged in." -#: classes/GemsEscort.php:1510 +#: classes/GemsEscort.php:1512 msgid "You must login to access this page." msgstr "You must login to access this page." @@ -310,31 +310,31 @@ msgid "Respondents" msgstr "Patients" -#: classes/Gems/Menu.php:521 +#: classes/Gems/Menu.php:526 msgid "Overview" msgstr "Overview" -#: classes/Gems/Menu.php:528 +#: classes/Gems/Menu.php:533 msgid "Project" msgstr "Project" -#: classes/Gems/Menu.php:531 +#: classes/Gems/Menu.php:536 msgid "Setup" msgstr "Setup" -#: classes/Gems/Menu.php:534 +#: classes/Gems/Menu.php:539 msgid "Mail" msgstr "Mail" -#: classes/Gems/Menu.php:537 +#: classes/Gems/Menu.php:542 msgid "Track Builder" msgstr "Track Builder" -#: classes/Gems/Menu.php:546 +#: classes/Gems/Menu.php:551 msgid "Contact" msgstr "Contact" -#: classes/Gems/Menu.php:559 +#: classes/Gems/Menu.php:564 msgid "Changelog" msgstr "Changelog" @@ -1484,7 +1484,7 @@ msgstr "Login Name" #: classes/Gems/Default/OptionAction.php:188 -#: classes/Gems/Default/OrganizationAction.php:158 +#: classes/Gems/Default/OrganizationAction.php:191 #: classes/Gems/Default/RespondentAction.php:173 #: classes/Gems/Default/StaffAction.php:224 msgid "Language" @@ -1513,96 +1513,100 @@ msgid "Item" msgstr "Item" -#: classes/Gems/Default/OrganizationAction.php:114 +#: classes/Gems/Default/OrganizationAction.php:124 msgid "Cookies must be enabled." msgstr "Cookies must be enabled." -#: classes/Gems/Default/OrganizationAction.php:117 +#: classes/Gems/Default/OrganizationAction.php:127 msgid "Invalid organization." msgstr "Invalid organization." -#: classes/Gems/Default/OrganizationAction.php:125 +#: classes/Gems/Default/OrganizationAction.php:135 msgid "New organization..." msgstr "New organization..." -#: classes/Gems/Default/OrganizationAction.php:147 +#: classes/Gems/Default/OrganizationAction.php:144 +msgid "Choose an organization" +msgstr "Choose an organization" + +#: classes/Gems/Default/OrganizationAction.php:180 msgid "Url" msgstr "Url" -#: classes/Gems/Default/OrganizationAction.php:148 +#: classes/Gems/Default/OrganizationAction.php:181 msgid "Task" msgstr "Task" -#: classes/Gems/Default/OrganizationAction.php:149 +#: classes/Gems/Default/OrganizationAction.php:182 msgid "Contact name" msgstr "Contact name" -#: classes/Gems/Default/OrganizationAction.php:150 +#: classes/Gems/Default/OrganizationAction.php:183 msgid "Contact email" msgstr "Contact email" -#: classes/Gems/Default/OrganizationAction.php:153 +#: classes/Gems/Default/OrganizationAction.php:186 msgid "Style" msgstr "Style" -#: classes/Gems/Default/OrganizationAction.php:162 +#: classes/Gems/Default/OrganizationAction.php:195 msgid "Can the organization be used?" msgstr "Can the organization be used?" -#: classes/Gems/Default/OrganizationAction.php:163 +#: classes/Gems/Default/OrganizationAction.php:196 msgid "Accepting" msgstr "Accepting" -#: classes/Gems/Default/OrganizationAction.php:163 +#: classes/Gems/Default/OrganizationAction.php:196 msgid "Can new respondents be added to the organization?" msgstr "Can new patients be added to the organization?" -#: classes/Gems/Default/OrganizationAction.php:164 +#: classes/Gems/Default/OrganizationAction.php:197 msgid "Does the organization have respondents?" msgstr "Does the organization have patients?" -#: classes/Gems/Default/OrganizationAction.php:168 +#: classes/Gems/Default/OrganizationAction.php:201 msgid "Greeting" msgstr "Greeting" -#: classes/Gems/Default/OrganizationAction.php:168 -#: classes/Gems/Default/OrganizationAction.php:169 +#: classes/Gems/Default/OrganizationAction.php:201 +#: classes/Gems/Default/OrganizationAction.php:202 msgid "For emails and token forward screen." msgstr "For emails and token forward screen." -#: classes/Gems/Default/OrganizationAction.php:169 +#: classes/Gems/Default/OrganizationAction.php:202 msgid "Signature" msgstr "Signature" -#: classes/Gems/Default/OrganizationAction.php:171 +#: classes/Gems/Default/OrganizationAction.php:204 msgid "Accessible by" msgstr "Accessible by" -#: classes/Gems/Default/OrganizationAction.php:171 +#: classes/Gems/Default/OrganizationAction.php:204 msgid "Checked organizations see this organizations respondents." msgstr "Checked organizations see this organizations patients." -#: classes/Gems/Default/OrganizationAction.php:180 +#: classes/Gems/Default/OrganizationAction.php:214 msgid "Code name" msgstr "Code name" -#: classes/Gems/Default/OrganizationAction.php:180 +#: classes/Gems/Default/OrganizationAction.php:214 msgid "Only for programmers." msgstr "Only for programmers." -#: classes/Gems/Default/OrganizationAction.php:193 +#: classes/Gems/Default/OrganizationAction.php:228 msgid "Delete organization" msgstr "Delete organization" -#: classes/Gems/Default/OrganizationAction.php:203 +#: classes/Gems/Default/OrganizationAction.php:238 msgid "Edit organization" msgstr "Edit organization" -#: classes/Gems/Default/OrganizationAction.php:213 +#: classes/Gems/Default/OrganizationAction.php:248 msgid "Participating organizations" msgstr "Participating organizations" -#: classes/Gems/Default/OrganizationAction.php:223 +#: classes/Gems/Default/OrganizationAction.php:258 msgid "Show organization" msgstr "Show organization" @@ -1942,7 +1946,7 @@ msgstr[0] "patient" msgstr[1] "patients" -#: classes/Gems/Default/RespondentAction.php:392 +#: classes/Gems/Default/RespondentAction.php:405 msgid "Please settle the informed consent form for this respondent." msgstr "Please settle the informed consent form for this patient." @@ -2853,15 +2857,15 @@ msgid "Check all assignments" msgstr "Check all assignments" -#: classes/Gems/Menu/SubMenuItem.php:396 +#: classes/Gems/Menu/SubMenuItem.php:355 msgid "New" msgstr "New" -#: classes/Gems/Menu/SubMenuItem.php:450 +#: classes/Gems/Menu/SubMenuItem.php:409 msgid "Export the current data set to Excel" msgstr "Export the current data set to Excel" -#: classes/Gems/Menu/SubMenuItem.php:454 +#: classes/Gems/Menu/SubMenuItem.php:413 msgid "Excel export" msgstr "Excel export" @@ -3231,11 +3235,15 @@ msgstr "Answers for token %s, patient number %s: %s." #: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:223 +#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:124 +#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:164 #, php-format msgid "Token %s not found." msgstr "Token %s not found." #: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:227 +#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:128 +#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:168 msgid "No token specified." msgstr "No token specified." @@ -3801,12 +3809,10 @@ msgstr "Recalculate track" #: snippets/RespondentDetailsSnippet.php:59 -#: snippets/RespondentDetailsWithAssignmentsSnippet.php:74 msgid "Respondent information" msgstr "Patient information" #: snippets/RespondentDetailsSnippet.php:71 -#: snippets/RespondentDetailsWithAssignmentsSnippet.php:97 msgid "Respondent nr: " msgstr "Patient nr:" @@ -3894,6 +3900,14 @@ msgid "This track can be assigned since %s." msgstr "This track can be assigned since %s." +#: snippets/Organization/ChooseOrganizationSnippet.php:93 +msgid "This organization cannot have any respondents, please choose one that does:" +msgstr "This organization cannot have any patients, please choose one that does:" + +#: snippets/Organization/ChooseOrganizationSnippet.php:105 +msgid "This organization cannot have any respondents." +msgstr "This organization cannot have any patients." + #~ msgid "Allow new respondents" #~ msgstr "Allow new patients" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-11-23 14:20:20 UTC (rev 277) +++ trunk/library/languages/default-nl.po 2011-11-23 18:52:36 UTC (rev 278) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-23 14:50+0100\n" +"POT-Creation-Date: 2011-11-23 19:43+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -23,53 +23,53 @@ msgid "Path %s not writable" msgstr "Path %s niet schrijfbaar" -#: classes/GemsEscort.php:888 +#: classes/GemsEscort.php:887 #, php-format msgid "User: %s" msgstr "Login: %s" -#: classes/GemsEscort.php:912 +#: classes/GemsEscort.php:911 msgid "version" msgstr "versie" -#: classes/GemsEscort.php:1343 +#: classes/GemsEscort.php:1342 msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" msgstr "Let op: uw sessie is verlopen, uw invoer is niet opgeslagen. Controleer uw gegevens en probeer a.u.b. opnieuw." -#: classes/GemsEscort.php:1467 +#: classes/GemsEscort.php:1469 msgid "Please check back later." msgstr "Probeer het later opnieuw." -#: classes/GemsEscort.php:1469 -#: classes/GemsEscort.php:1473 -#: classes/GemsEscort.php:1474 +#: classes/GemsEscort.php:1471 +#: classes/GemsEscort.php:1475 +#: classes/GemsEscort.php:1476 msgid "System is in maintenance mode" msgstr "Systeem is in onderhoudsmodus" -#: classes/GemsEscort.php:1484 +#: classes/GemsEscort.php:1486 msgid "No access to site." msgstr "Geen toegang tot website." -#: classes/GemsEscort.php:1486 -#: classes/GemsEscort.php:1522 +#: classes/GemsEscort.php:1488 +#: classes/GemsEscort.php:1524 msgid "You have no access to this site." msgstr "U heeft geen toegang tot deze website." -#: classes/GemsEscort.php:1502 +#: classes/GemsEscort.php:1504 msgid "No access to page" msgstr "Geen toegang tot pagina" -#: classes/GemsEscort.php:1504 +#: classes/GemsEscort.php:1506 #, php-format msgid "Access to this page is not allowed for current role: %s." msgstr "U heeft geen toegang tot deze pagina. Uw huidige rol is: %s." -#: classes/GemsEscort.php:1509 -#: classes/GemsEscort.php:1520 +#: classes/GemsEscort.php:1511 +#: classes/GemsEscort.php:1522 msgid "You are no longer logged in." msgstr "U bent niet meer ingelogd." -#: classes/GemsEscort.php:1510 +#: classes/GemsEscort.php:1512 msgid "You must login to access this page." msgstr "U moet ingelogd zijn voor toegang tot deze pagina." @@ -310,31 +310,31 @@ msgid "Respondents" msgstr "Patiënten" -#: classes/Gems/Menu.php:521 +#: classes/Gems/Menu.php:526 msgid "Overview" msgstr "Overzicht" -#: classes/Gems/Menu.php:528 +#: classes/Gems/Menu.php:533 msgid "Project" msgstr "Project" -#: classes/Gems/Menu.php:531 +#: classes/Gems/Menu.php:536 msgid "Setup" msgstr "Beheer" -#: classes/Gems/Menu.php:534 +#: classes/Gems/Menu.php:539 msgid "Mail" msgstr "Email" -#: classes/Gems/Menu.php:537 +#: classes/Gems/Menu.php:542 msgid "Track Builder" msgstr "Traject bouwer" -#: classes/Gems/Menu.php:546 +#: classes/Gems/Menu.php:551 msgid "Contact" msgstr "Contact" -#: classes/Gems/Menu.php:559 +#: classes/Gems/Menu.php:564 msgid "Changelog" msgstr "Changelog" @@ -1484,7 +1484,7 @@ msgstr "Login Naam" #: classes/Gems/Default/OptionAction.php:188 -#: classes/Gems/Default/OrganizationAction.php:158 +#: classes/Gems/Default/OrganizationAction.php:191 #: classes/Gems/Default/RespondentAction.php:173 #: classes/Gems/Default/StaffAction.php:224 msgid "Language" @@ -1513,96 +1513,100 @@ msgid "Item" msgstr "Item" -#: classes/Gems/Default/OrganizationAction.php:114 +#: classes/Gems/Default/OrganizationAction.php:124 msgid "Cookies must be enabled." msgstr "Zonder cookies kan de taal niet ingesteld worden." -#: classes/Gems/Default/OrganizationAction.php:117 +#: classes/Gems/Default/OrganizationAction.php:127 msgid "Invalid organization." msgstr "Ongeldige organisatie." -#: classes/Gems/Default/OrganizationAction.php:125 +#: classes/Gems/Default/OrganizationAction.php:135 msgid "New organization..." msgstr "Nieuwe organisatie..." -#: classes/Gems/Default/OrganizationAction.php:147 +#: classes/Gems/Default/OrganizationAction.php:144 +msgid "Choose an organization" +msgstr "Kies een organisatie" + +#: classes/Gems/Default/OrganizationAction.php:180 msgid "Url" msgstr "Url" -#: classes/Gems/Default/OrganizationAction.php:148 +#: classes/Gems/Default/OrganizationAction.php:181 msgid "Task" msgstr "Taak" -#: classes/Gems/Default/OrganizationAction.php:149 +#: classes/Gems/Default/OrganizationAction.php:182 msgid "Contact name" msgstr "Contact naam" -#: classes/Gems/Default/OrganizationAction.php:150 +#: classes/Gems/Default/OrganizationAction.php:183 msgid "Contact email" msgstr "Contact email" -#: classes/Gems/Default/OrganizationAction.php:153 +#: classes/Gems/Default/OrganizationAction.php:186 msgid "Style" msgstr "Stijl" -#: classes/Gems/Default/OrganizationAction.php:162 +#: classes/Gems/Default/OrganizationAction.php:195 msgid "Can the organization be used?" msgstr "Is de organisatie in gebruik?" -#: classes/Gems/Default/OrganizationAction.php:163 +#: classes/Gems/Default/OrganizationAction.php:196 msgid "Accepting" msgstr "Accepteerd" -#: classes/Gems/Default/OrganizationAction.php:163 +#: classes/Gems/Default/OrganizationAction.php:196 msgid "Can new respondents be added to the organization?" msgstr "Accepteert de organisatie nieuwe patiënten?" -#: classes/Gems/Default/OrganizationAction.php:164 +#: classes/Gems/Default/OrganizationAction.php:197 msgid "Does the organization have respondents?" msgstr "Heeft de organisatie patiënten?" -#: classes/Gems/Default/OrganizationAction.php:168 +#: classes/Gems/Default/OrganizationAction.php:201 msgid "Greeting" msgstr "Begroeting" -#: classes/Gems/Default/OrganizationAction.php:168 -#: classes/Gems/Default/OrganizationAction.php:169 +#: classes/Gems/Default/OrganizationAction.php:201 +#: classes/Gems/Default/OrganizationAction.php:202 msgid "For emails and token forward screen." msgstr "Voor emails en kenmerk scherm." -#: classes/Gems/Default/OrganizationAction.php:169 +#: classes/Gems/Default/OrganizationAction.php:202 msgid "Signature" msgstr "Handtekening" -#: classes/Gems/Default/OrganizationAction.php:171 +#: classes/Gems/Default/OrganizationAction.php:204 msgid "Accessible by" msgstr "Toegankelijk voor" -#: classes/Gems/Default/OrganizationAction.php:171 +#: classes/Gems/Default/OrganizationAction.php:204 msgid "Checked organizations see this organizations respondents." msgstr "Geselecteerde organizaties kunnen de patiënten van deze organisatie bekijken." -#: classes/Gems/Default/OrganizationAction.php:180 +#: classes/Gems/Default/OrganizationAction.php:214 msgid "Code name" msgstr "Code naam" -#: classes/Gems/Default/OrganizationAction.php:180 +#: classes/Gems/Default/OrganizationAction.php:214 msgid "Only for programmers." msgstr "Uitsluitend voor programmeurs." -#: classes/Gems/Default/OrganizationAction.php:193 +#: classes/Gems/Default/OrganizationAction.php:228 msgid "Delete organization" msgstr "Verwijder organisatie" -#: classes/Gems/Default/OrganizationAction.php:203 +#: classes/Gems/Default/OrganizationAction.php:238 msgid "Edit organization" msgstr "Bewerk organisatie" -#: classes/Gems/Default/OrganizationAction.php:213 +#: classes/Gems/Default/OrganizationAction.php:248 msgid "Participating organizations" msgstr "Deelnemende organisaties" -#: classes/Gems/Default/OrganizationAction.php:223 +#: classes/Gems/Default/OrganizationAction.php:258 msgid "Show organization" msgstr "Toon organisatie" @@ -1942,7 +1946,7 @@ msgstr[0] "patiënt" msgstr[1] "patiënten" -#: classes/Gems/Default/RespondentAction.php:392 +#: classes/Gems/Default/RespondentAction.php:405 msgid "Please settle the informed consent form for this respondent." msgstr "A.u.b. het informed consent formulier doornemen met deze patiënt" @@ -2853,15 +2857,15 @@ msgid "Check all assignments" msgstr "Controleer alle toewijzingen" -#: classes/Gems/Menu/SubMenuItem.php:396 +#: classes/Gems/Menu/SubMenuItem.php:355 msgid "New" msgstr "Nieuw" -#: classes/Gems/Menu/SubMenuItem.php:450 +#: classes/Gems/Menu/SubMenuItem.php:409 msgid "Export the current data set to Excel" msgstr "Exporteer de huidige gegevens naar Excel" -#: classes/Gems/Menu/SubMenuItem.php:454 +#: classes/Gems/Menu/SubMenuItem.php:413 msgid "Excel export" msgstr "Excel export" @@ -3231,11 +3235,15 @@ msgstr "Antwoorden voor kenmerk %s, patientnummer %s: %s." #: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:223 +#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:124 +#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:164 #, php-format msgid "Token %s not found." msgstr "Kenmerk %s niet gevonden" #: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:227 +#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:128 +#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:168 msgid "No token specified." msgstr "Geen kenmerk opgegeven." @@ -3801,12 +3809,10 @@ msgstr "Berekening traject opnieuw" #: snippets/RespondentDetailsSnippet.php:59 -#: snippets/RespondentDetailsWithAssignmentsSnippet.php:74 msgid "Respondent information" msgstr "Patiënt informatie" #: snippets/RespondentDetailsSnippet.php:71 -#: snippets/RespondentDetailsWithAssignmentsSnippet.php:97 msgid "Respondent nr: " msgstr "Patiënt nr:" @@ -3894,6 +3900,14 @@ msgid "This track can be assigned since %s." msgstr "Dit traject kan sinds %s aan een patiënt toegewezen worden." +#: snippets/Organization/ChooseOrganizationSnippet.php:93 +msgid "This organization cannot have any respondents, please choose one that does:" +msgstr "Deze organisatie heeft geen patiënten. Kies een organisatie met patiënten." + +#: snippets/Organization/ChooseOrganizationSnippet.php:105 +msgid "This organization cannot have any respondents." +msgstr "Deze organisatie heeft geen patiënten." + #~ msgid "Allow new respondents" #~ msgstr "Nieuwe patiënten toestaan" Added: trunk/library/snippets/Organization/ChooseOrganizationSnippet.php =================================================================== --- trunk/library/snippets/Organization/ChooseOrganizationSnippet.php (rev 0) +++ trunk/library/snippets/Organization/ChooseOrganizationSnippet.php 2011-11-23 18:52:36 UTC (rev 278) @@ -0,0 +1,110 @@ +<?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... [truncated message content] |
From: <gem...@li...> - 2011-11-23 14:20:29
|
Revision: 277 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=277&view=rev Author: matijsdejong Date: 2011-11-23 14:20:20 +0000 (Wed, 23 Nov 2011) Log Message: ----------- Added model 'description' as title to sort fields. Small fixes for organization. Corrected translation Modified Paths: -------------- trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/MUtil/Model/TableBridge.php trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po trunk/library/snippets/Organization/OrganizationTableSnippet.php Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 14:19:16 UTC (rev 276) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 14:20:20 UTC (rev 277) @@ -174,12 +174,12 @@ $tp = new MUtil_Model_Type_ConcatenatedRow(':', ', '); $tp->apply($model, 'gor_accessible_by'); - if ($this->project->multiLocale) { + if ($detailed && $this->project->multiLocale) { $model->set('gor_name', 'description', 'ENGLISH please! Use translation file to translate.'); $model->set('gor_url', 'description', 'ENGLISH link preferred. Use translation file to translate.'); $model->set('gor_task', 'description', 'ENGLISH please! Use translation file to translate.'); - $model->set('gor_code', 'label', $this->_('Code name'), 'size', 10, 'description', $this->_('Only for programmers.')); } + $model->setIfExists('gor_code', 'label', $this->_('Code name'), 'size', 10, 'description', $this->_('Only for programmers.')); $model->addColumn("CASE WHEN gor_active = 1 THEN '' ELSE 'deleted' END", 'row_class'); Modified: trunk/library/classes/MUtil/Model/TableBridge.php =================================================================== --- trunk/library/classes/MUtil/Model/TableBridge.php 2011-11-23 14:19:16 UTC (rev 276) +++ trunk/library/classes/MUtil/Model/TableBridge.php 2011-11-23 14:20:20 UTC (rev 277) @@ -36,7 +36,7 @@ */ /** - * + * * @package MUtil * @subpackage Model * @copyright Copyright (c) 2011 Erasmus MC @@ -214,7 +214,7 @@ // $sortUrl['RouteReset'] = false; // Prevents tabs from being communicated $sortUrl = $sortUrl + $this->baseUrl; - return MUtil_Html::create()->a($sortUrl, array('class' => $class), $label); + return MUtil_Html::create()->a($sortUrl, array('class' => $class, 'title' => $this->model->get($name, 'description')), $label); } /** Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-11-23 14:19:16 UTC (rev 276) +++ trunk/library/languages/default-nl.po 2011-11-23 14:20:20 UTC (rev 277) @@ -1547,7 +1547,7 @@ #: classes/Gems/Default/OrganizationAction.php:162 msgid "Can the organization be used?" -msgstr "Is de organisatie in gebruik" +msgstr "Is de organisatie in gebruik?" #: classes/Gems/Default/OrganizationAction.php:163 msgid "Accepting" Modified: trunk/library/snippets/Organization/OrganizationTableSnippet.php =================================================================== --- trunk/library/snippets/Organization/OrganizationTableSnippet.php 2011-11-23 14:19:16 UTC (rev 276) +++ trunk/library/snippets/Organization/OrganizationTableSnippet.php 2011-11-23 14:20:20 UTC (rev 277) @@ -80,7 +80,7 @@ $BR = $HTML->br(); $orgName[] = MUtil_Lazy::iff($bridge->gor_url, - MUtil_Html_AElement::a($bridge->gor_name, array('href' => $bridge->gor_url, 'target' => '_blank')), + MUtil_Html_AElement::a($bridge->gor_name, array('href' => $bridge->gor_url, 'target' => '_blank', 'class' => 'globe')), $bridge->gor_name); $orgName[] = $bridge->createSortLink('gor_name'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-23 14:19:27
|
Revision: 276 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=276&view=rev Author: matijsdejong Date: 2011-11-23 14:19:16 +0000 (Wed, 23 Nov 2011) Log Message: ----------- Added a.globe and a.pdf classes with image. Modified Paths: -------------- trunk/new_project/htdocs/gems/css/gems-new.css trunk/new_project/htdocs/gems/css/gems.css Added Paths: ----------- trunk/new_project/htdocs/gems/images/globe.png Modified: trunk/new_project/htdocs/gems/css/gems-new.css =================================================================== --- trunk/new_project/htdocs/gems/css/gems-new.css 2011-11-23 14:03:58 UTC (rev 275) +++ trunk/new_project/htdocs/gems/css/gems-new.css 2011-11-23 14:19:16 UTC (rev 276) @@ -95,6 +95,16 @@ text-decoration: underline !important; } +a.globe { + background: transparent url(../images/globe.png) no-repeat scroll right center; + padding-right: 20px; +} + +a.pdf { + background: transparent url(../images/pdf_small.gif) no-repeat scroll right center; + padding-right: 20px !important; +} + body { margin: 0; padding: 0; Modified: trunk/new_project/htdocs/gems/css/gems.css =================================================================== --- trunk/new_project/htdocs/gems/css/gems.css 2011-11-23 14:03:58 UTC (rev 275) +++ trunk/new_project/htdocs/gems/css/gems.css 2011-11-23 14:19:16 UTC (rev 276) @@ -34,6 +34,16 @@ text-decoration: underline !important; } +a.globe { + background: transparent url(../images/globe.png) no-repeat scroll right center; + padding-right: 20px; +} + +a.pdf { + background: transparent url(../images/pdf_small.gif) no-repeat scroll right center; + padding-right: 20px !important; +} + #all, #all_full_width { margin: 0 auto; max-width: 1012px; Added: trunk/new_project/htdocs/gems/images/globe.png =================================================================== (Binary files differ) Property changes on: trunk/new_project/htdocs/gems/images/globe.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-23 14:04:10
|
Revision: 275 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=275&view=rev Author: matijsdejong Date: 2011-11-23 14:03:58 +0000 (Wed, 23 Nov 2011) Log Message: ----------- Made Organization display more agreeable (and switched to snippet use. Removed dead code and documented AElement.php Modified Paths: -------------- trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/MUtil/Html/AElement.php trunk/library/languages/default-en.mo trunk/library/languages/default-en.po trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po Added Paths: ----------- trunk/library/snippets/Organization/ trunk/library/snippets/Organization/OrganizationEditSnippet.php trunk/library/snippets/Organization/OrganizationTableSnippet.php Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-22 17:34:49 UTC (rev 274) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-23 14:03:58 UTC (rev 275) @@ -44,21 +44,25 @@ * @license New BSD License * @since Class available since version 1.0 */ -class Gems_Default_OrganizationAction extends Gems_Controller_BrowseEditAction // Gems_Controller_ModelSnippetActionAbstract +class Gems_Default_OrganizationAction extends Gems_Controller_ModelSnippetActionAbstract { - public $autoFilter = false; + /** + * The snippets used for the autofilter action. + * + * @var mixed String or array of snippets name + */ + protected $autofilterSnippets = 'Organization_OrganizationTableSnippet'; - public function afterSave(array $data, $isNew) - { - $org = $this->loader->getOrganization($data['gor_id_organization']); - $org->invalidateCache(); + /** + * The snippets used for the create and edit actions. + * + * @var mixed String or array of snippets name + */ + protected $createEditSnippets = 'Organization_OrganizationEditSnippet'; - // Make sure any changes in the allowed list are reflected. - $this->loader->getCurrentUser()->refreshAllowedOrganizations(); - - return parent::afterSave($data, $isNew); - } - + /** + * Switch the active organization + */ public function changeUiAction() { $request = $this->getRequest(); @@ -112,7 +116,16 @@ throw new Exception($this->_('Invalid organization.')); } + /** + * Action for showing a create new item page + */ + public function createAction() + { + $this->createEditParameters['formTitle'] = $this->_('New organization...'); + parent::createAction(); + } + /** * Creates a model for getModel(). Called only for each new $action. * @@ -128,12 +141,14 @@ { $model = new MUtil_Model_TableModel('gems__organizations'); + $model->setDeleteValues('gor_active', 0, 'gor_add_patients', 0); + $model->set('gor_name', 'label', $this->_('Name'), 'size', 25); $model->set('gor_location', 'label', $this->_('Location'), 'size', 25); $model->set('gor_url', 'label', $this->_('Url'), 'size', 50); $model->set('gor_task', 'label', $this->_('Task'), 'size', 25); $model->set('gor_contact_name', 'label', $this->_('Contact name'), 'size', 25); - $model->set('gor_contact_email', 'label', $this->_('Contact email'), 'size', 50); + $model->set('gor_contact_email', 'label', $this->_('Contact email'), 'size', 50, 'validator', 'SimpleEmail'); if ($this->escort instanceof Gems_Project_Layout_MultiLayoutInterface) { $model->setIfExists( 'gor_style', 'label', $this->_('Style'), @@ -145,10 +160,10 @@ 'multiOptions', $this->util->getLocalized()->getLanguages(), 'default', 'nl' ); $yesNo = $this->util->getTranslated()->getYesNo(); - $model->set('gor_active', 'label', $this->_('Active'), 'elementClass', 'Checkbox', 'multiOptions', $yesNo); - $model->set('gor_add_patients', 'label', $this->_('Allow new respondents'), 'elementClass', 'CheckBox', 'multiOptions', $yesNo); + $model->set('gor_active', 'label', $this->_('Active'), 'description', $this->_('Can the organization be used?'), 'elementClass', 'Checkbox', 'multiOptions', $yesNo); + $model->set('gor_add_patients', 'label', $this->_('Accepting'), 'description', $this->_('Can new respondents be added to the organization?'), 'elementClass', 'CheckBox', 'multiOptions', $yesNo); + $model->set('gor_has_patients', 'label', $this->_('Respondents'), 'description', $this->_('Does the organization have respondents?'), 'elementClass', 'Exhibitor', 'multiOptions', $yesNo); - if ($detailed) { $model->set('gor_name', 'validator', $model->createUniqueValidator('gor_name')); $model->set('gor_welcome', 'label', $this->_('Greeting'), 'description', $this->_('For emails and token forward screen.'), 'elementClass', 'Textarea', 'rows', 5); @@ -166,18 +181,50 @@ $model->set('gor_code', 'label', $this->_('Code name'), 'size', 10, 'description', $this->_('Only for programmers.')); } + $model->addColumn("CASE WHEN gor_active = 1 THEN '' ELSE 'deleted' END", 'row_class'); + Gems_Model::setChangeFieldsByPrefix($model, 'gor'); return $model; } - public function getTopic($count = 1) + /** + * Action for showing a delete item page + */ + public function deleteAction() { - return $this->plural('organization', 'organizations', $count); + $this->html->h3($this->_('Delete organization')); + + parent::deleteAction(); } - public function getTopicTitle() + /** + * Action for showing a edit item page + */ + public function editAction() { - return $this->_('Participating organizations'); + $this->createEditParameters['formTitle'] = $this->_("Edit organization"); + + parent::editAction(); } + + /** + * Action for showing a browse page + */ + public function indexAction() + { + $this->html->h3($this->_('Participating organizations')); + + parent::indexAction(); + } + + /** + * Action for showing an item page + */ + public function showAction() + { + $this->html->h3($this->_('Show organization')); + + parent::showAction(); + } } Modified: trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-11-22 17:34:49 UTC (rev 274) +++ trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-11-23 14:03:58 UTC (rev 275) @@ -126,7 +126,6 @@ if ($editMenuItem = $this->getEditMenuItem()) { $bridge->addItemLink($editMenuItem->toActionLinkLower($this->request, $bridge)); } - } /** Modified: trunk/library/classes/MUtil/Html/AElement.php =================================================================== --- trunk/library/classes/MUtil/Html/AElement.php 2011-11-22 17:34:49 UTC (rev 274) +++ trunk/library/classes/MUtil/Html/AElement.php 2011-11-23 14:03:58 UTC (rev 275) @@ -1,6 +1,5 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -26,14 +25,25 @@ * 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. + * + * + * @package MUtil + * @subpackage Html + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** - * @author Matijs de Jong - * @since 1.0 - * @version 1.1 - * @package MUtil + * Class for A/link element. Assumes first passed argument is the href attribute, + * unless specified otherwise. + * + * @package MUtil * @subpackage Html + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 */ class MUtil_Html_AElement extends MUtil_Html_HtmlElement @@ -54,10 +64,6 @@ } /** - * Overrule the target attribute and provide the same functionality in a W3C compliant way - * - * If a realtarget attribute is specified this functionaluti is skipped (and the realtarget attribute is removed). - * * If the target attribute is specified and no onclick attribute is specified the target is removed and * a compatible javascript onclick attribute is created. * @@ -68,15 +74,7 @@ */ protected function _htmlAttribs($attribs) { - if (isset($attribs['realtarget'])) { - unset($attribs['realtarget']); - - } elseif (isset($attribs['target']) && (! isset($attribs['onclick']))) { - // It was so nice, but IE 9 really needs target - /* - $target = $attribs['target']; - $attribs['onclick'] = "event.cancelBubble = true; window.open(this.href, '$target'); return false;"; - unset($attribs['target']); // */ + if (isset($attribs['target']) && (! isset($attribs['onclick']))) { // Assumption that is not tested, but when clicking on a target link, no further bubble is needed. $attribs['onclick'] = "event.cancelBubble = true;"; } Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-11-22 17:34:49 UTC (rev 274) +++ trunk/library/languages/default-en.po 2011-11-23 14:03:58 UTC (rev 275) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-22 16:14+0100\n" +"POT-Creation-Date: 2011-11-23 14:53+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -23,53 +23,53 @@ msgid "Path %s not writable" msgstr "Path %s not writable" -#: classes/GemsEscort.php:887 +#: classes/GemsEscort.php:888 #, php-format msgid "User: %s" msgstr "User: %s" -#: classes/GemsEscort.php:911 +#: classes/GemsEscort.php:912 msgid "version" msgstr "version" -#: classes/GemsEscort.php:1342 +#: classes/GemsEscort.php:1343 msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" msgstr "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -#: classes/GemsEscort.php:1466 +#: classes/GemsEscort.php:1467 msgid "Please check back later." msgstr "Please check back later." -#: classes/GemsEscort.php:1468 -#: classes/GemsEscort.php:1472 +#: classes/GemsEscort.php:1469 #: classes/GemsEscort.php:1473 +#: classes/GemsEscort.php:1474 msgid "System is in maintenance mode" msgstr "System is in maintenance mode" -#: classes/GemsEscort.php:1483 +#: classes/GemsEscort.php:1484 msgid "No access to site." msgstr "No access to site." -#: classes/GemsEscort.php:1485 -#: classes/GemsEscort.php:1521 +#: classes/GemsEscort.php:1486 +#: classes/GemsEscort.php:1522 msgid "You have no access to this site." msgstr "You have no access to this site." -#: classes/GemsEscort.php:1501 +#: classes/GemsEscort.php:1502 msgid "No access to page" msgstr "No access to page" -#: classes/GemsEscort.php:1503 +#: classes/GemsEscort.php:1504 #, php-format msgid "Access to this page is not allowed for current role: %s." msgstr "Access to this page is not allowed for current role: %s." -#: classes/GemsEscort.php:1508 -#: classes/GemsEscort.php:1519 +#: classes/GemsEscort.php:1509 +#: classes/GemsEscort.php:1520 msgid "You are no longer logged in." msgstr "You are no longer logged in." -#: classes/GemsEscort.php:1509 +#: classes/GemsEscort.php:1510 msgid "You must login to access this page." msgstr "You must login to access this page." @@ -1484,7 +1484,7 @@ msgstr "Login Name" #: classes/Gems/Default/OptionAction.php:188 -#: classes/Gems/Default/OrganizationAction.php:140 +#: classes/Gems/Default/OrganizationAction.php:158 #: classes/Gems/Default/RespondentAction.php:173 #: classes/Gems/Default/StaffAction.php:224 msgid "Language" @@ -1513,77 +1513,99 @@ msgid "Item" msgstr "Item" -#: classes/Gems/Default/OrganizationAction.php:105 +#: classes/Gems/Default/OrganizationAction.php:114 msgid "Cookies must be enabled." msgstr "Cookies must be enabled." -#: classes/Gems/Default/OrganizationAction.php:108 +#: classes/Gems/Default/OrganizationAction.php:117 msgid "Invalid organization." msgstr "Invalid organization." -#: classes/Gems/Default/OrganizationAction.php:129 +#: classes/Gems/Default/OrganizationAction.php:125 +msgid "New organization..." +msgstr "New organization..." + +#: classes/Gems/Default/OrganizationAction.php:147 msgid "Url" msgstr "Url" -#: classes/Gems/Default/OrganizationAction.php:130 +#: classes/Gems/Default/OrganizationAction.php:148 msgid "Task" msgstr "Task" -#: classes/Gems/Default/OrganizationAction.php:131 +#: classes/Gems/Default/OrganizationAction.php:149 msgid "Contact name" msgstr "Contact name" -#: classes/Gems/Default/OrganizationAction.php:132 +#: classes/Gems/Default/OrganizationAction.php:150 msgid "Contact email" msgstr "Contact email" -#: classes/Gems/Default/OrganizationAction.php:135 +#: classes/Gems/Default/OrganizationAction.php:153 msgid "Style" msgstr "Style" -#: classes/Gems/Default/OrganizationAction.php:145 -msgid "Allow new respondents" -msgstr "Allow new patients" +#: classes/Gems/Default/OrganizationAction.php:162 +msgid "Can the organization be used?" +msgstr "Can the organization be used?" -#: classes/Gems/Default/OrganizationAction.php:150 +#: classes/Gems/Default/OrganizationAction.php:163 +msgid "Accepting" +msgstr "Accepting" + +#: classes/Gems/Default/OrganizationAction.php:163 +msgid "Can new respondents be added to the organization?" +msgstr "Can new patients be added to the organization?" + +#: classes/Gems/Default/OrganizationAction.php:164 +msgid "Does the organization have respondents?" +msgstr "Does the organization have patients?" + +#: classes/Gems/Default/OrganizationAction.php:168 msgid "Greeting" msgstr "Greeting" -#: classes/Gems/Default/OrganizationAction.php:150 -#: classes/Gems/Default/OrganizationAction.php:151 +#: classes/Gems/Default/OrganizationAction.php:168 +#: classes/Gems/Default/OrganizationAction.php:169 msgid "For emails and token forward screen." msgstr "For emails and token forward screen." -#: classes/Gems/Default/OrganizationAction.php:151 +#: classes/Gems/Default/OrganizationAction.php:169 msgid "Signature" msgstr "Signature" -#: classes/Gems/Default/OrganizationAction.php:153 +#: classes/Gems/Default/OrganizationAction.php:171 msgid "Accessible by" msgstr "Accessible by" -#: classes/Gems/Default/OrganizationAction.php:153 +#: classes/Gems/Default/OrganizationAction.php:171 msgid "Checked organizations see this organizations respondents." msgstr "Checked organizations see this organizations patients." -#: classes/Gems/Default/OrganizationAction.php:162 +#: classes/Gems/Default/OrganizationAction.php:180 msgid "Code name" msgstr "Code name" -#: classes/Gems/Default/OrganizationAction.php:162 +#: classes/Gems/Default/OrganizationAction.php:180 msgid "Only for programmers." msgstr "Only for programmers." -#: classes/Gems/Default/OrganizationAction.php:172 -msgid "organization" -msgid_plural "organizations" -msgstr[0] "organization" -msgstr[1] "organizations" +#: classes/Gems/Default/OrganizationAction.php:193 +msgid "Delete organization" +msgstr "Delete organization" -#: classes/Gems/Default/OrganizationAction.php:177 +#: classes/Gems/Default/OrganizationAction.php:203 +msgid "Edit organization" +msgstr "Edit organization" + +#: classes/Gems/Default/OrganizationAction.php:213 msgid "Participating organizations" msgstr "Participating organizations" +#: classes/Gems/Default/OrganizationAction.php:223 +msgid "Show organization" +msgstr "Show organization" + #: classes/Gems/Default/OverviewPlanAction.php:115 #: classes/Gems/Default/ProjectSurveysAction.php:88 #: classes/Gems/Default/SurveyAction.php:203 @@ -3693,6 +3715,10 @@ msgid "Invalid type given. String, integer or float expected" msgstr "Invalid type given. String, integer or float expected" +#: languages/FakeTranslations.php:97 +msgid "One or more IPs are illegal." +msgstr "One or more IPs are illegal." + #: snippets/AddTracksSnippet.php:95 msgid "by Respondents" msgstr "by Patients" @@ -3868,6 +3894,9 @@ msgid "This track can be assigned since %s." msgstr "This track can be assigned since %s." +#~ msgid "Allow new respondents" +#~ msgstr "Allow new patients" + #~ msgid "Please update the database" #~ msgstr "Please update the database" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-11-22 17:34:49 UTC (rev 274) +++ trunk/library/languages/default-nl.po 2011-11-23 14:03:58 UTC (rev 275) @@ -1,4446 +1,4492 @@ -msgid "" -msgstr "" -"Project-Id-Version: Pulse NL\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-22 16:58+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Michiel Rook <in...@to...>\n" -"Language-Team: Erasmus MGZ <mat...@ma...>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Poedit-Language: Dutch\n" -"X-Poedit-Country: NETHERLANDS\n" -"X-Poedit-SourceCharset: iso-8859-1\n" -"X-Poedit-Basepath: ../\n" -"X-Poedit-KeywordsList: plural:1,2\n" -"X-Poedit-SearchPath-0: .\n" - -#: classes/GemsEscort.php:207 -#, php-format -msgid "Path %s not writable" -msgstr "Path %s niet schrijfbaar" - -#: classes/GemsEscort.php:887 -#, php-format -msgid "User: %s" -msgstr "Login: %s" - -#: classes/GemsEscort.php:911 -msgid "version" -msgstr "versie" - -#: classes/GemsEscort.php:1342 -msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -msgstr "Let op: uw sessie is verlopen, uw invoer is niet opgeslagen. Controleer uw gegevens en probeer a.u.b. opnieuw." - -#: classes/GemsEscort.php:1466 -msgid "Please check back later." -msgstr "Probeer het later opnieuw." - -#: classes/GemsEscort.php:1468 -#: classes/GemsEscort.php:1473 -msgid "System is in maintenance mode" -msgstr "Systeem is in onderhoudsmodus" - -#: classes/GemsEscort.php:1483 -msgid "No access to site." -msgstr "Geen toegang tot website." - -#: classes/GemsEscort.php:1485 -msgid "You have no access to this site." -msgstr "U heeft geen toegang tot deze website." - -#: classes/GemsEscort.php:1501 -msgid "No access to page" -msgstr "Geen toegang tot pagina" - -#: classes/GemsEscort.php:1503 -#, php-format -msgid "Access to this page is not allowed for current role: %s." -msgstr "U heeft geen toegang tot deze pagina. Uw huidige rol is: %s." - -#: classes/GemsEscort.php:1508 -msgid "You are no longer logged in." -msgstr "U bent niet meer ingelogd." - -#: classes/GemsEscort.php:1509 -msgid "You must login to access this page." -msgstr "U moet ingelogd zijn voor toegang tot deze pagina." - -#: classes/Gems/Pdf.php:195 -#, php-format -msgid "PDF Source File '%s' not found!" -msgstr "PDF bron bestand %s niet gevonden!" - -#: classes/Gems/Pdf.php:237 -#, php-format -msgid "Could not create '%s' directory." -msgstr "Kon de directory '%s' niet aanmaken." - -#: classes/Gems/Pdf.php:280 -#, php-format -msgid " The error message is: %s" -msgstr "De foutmelding is: %s" - -#: classes/Gems/Tracker.php:732 -msgid "Checks performed" -msgstr "Controle uitgevoerd" - -#: classes/Gems/AccessLog.php:239 -msgid "Database needs to be updated!" -msgstr "Database dient ververst te worden!" - -#: classes/Gems/Html.php:154 -msgid "<< First" -msgstr "<< Eerste" - -#: classes/Gems/Html.php:155 -msgid "< Previous" -msgstr "< Terug" - -#: classes/Gems/Html.php:156 -msgid "Next >" -msgstr "Verder >" - -#: classes/Gems/Html.php:157 -msgid "Last >>" -msgstr "Laatste >>" - -#: classes/Gems/Html.php:158 -msgid " | " -msgstr " | " - -#: classes/Gems/Html.php:162 -msgid "to" -msgstr "tot" - -#: classes/Gems/Html.php:163 -msgid "of" -msgstr "van" - -#: classes/Gems/Menu.php:139 -#, php-format -msgid "About %s" -msgstr "Over %s" - -#: classes/Gems/Menu.php:143 -msgid "Reporting bugs" -msgstr "Meld een bug" - -#: classes/Gems/Menu.php:146 -msgid "Support" -msgstr "Ondersteuning" - -#: classes/Gems/Menu.php:166 -msgid "Project setup" -msgstr "Projectinfo" - -#: classes/Gems/Menu.php:169 -msgid "Database" -msgstr "Database" - -#: classes/Gems/Menu.php:173 -msgid "Content" -msgstr "Inhoud" - -#: classes/Gems/Menu.php:176 -msgid "Execute" -msgstr "Uitvoeren" - -#: classes/Gems/Menu.php:181 -msgid "Patches" -msgstr "Patches" - -#: classes/Gems/Menu.php:182 -msgid "Execute new" -msgstr "Nieuwe aanmaken" - -#: classes/Gems/Menu.php:184 -msgid "Refresh translateables" -msgstr "Ververs vertaalbaren" - -#: classes/Gems/Menu.php:186 -msgid "Run SQL" -msgstr "SQL uitvoeren" - -#: classes/Gems/Menu.php:189 -msgid "Reception codes" -msgstr "Ontvangst codes" - -#: classes/Gems/Menu.php:192 -msgid "Consents" -msgstr "Toestemmingen" - -#: classes/Gems/Menu.php:195 -msgid "Roles" -msgstr "Rollen" - -#: classes/Gems/Menu.php:196 -msgid "Assigned" -msgstr "Toegewezen" - -#: classes/Gems/Menu.php:197 -msgid "Privileges" -msgstr "Priviléges" - -#: classes/Gems/Menu.php:200 -msgid "Groups" -msgstr "Groepen" - -#: classes/Gems/Menu.php:203 -msgid "Organizations" -msgstr "Organisaties" - -#: classes/Gems/Menu.php:206 -msgid "Staff" -msgstr "Medewerkers" - -#: classes/Gems/Menu.php:209 -msgid "Logging" -msgstr "Logboek" - -#: classes/Gems/Menu.php:213 -msgid "Maintenance" -msgstr "Onderhoud" - -#: classes/Gems/Menu.php:218 -msgid "Upgrade" -msgstr "Upgrade" - -#: classes/Gems/Menu.php:219 -msgid "Show" -msgstr "Toon" - -#: classes/Gems/Menu.php:220 -msgid "Execute all" -msgstr "Alles uitvoeren" - -#: classes/Gems/Menu.php:221 -msgid "Execute this" -msgstr "Dit uitvoeren" - -#: classes/Gems/Menu.php:222 -msgid "Execute from here" -msgstr "Uitvoeren vanaf hier" - -#: classes/Gems/Menu.php:223 -msgid "Execute to here" -msgstr "Uitvoeren tot hier" - -#: classes/Gems/Menu.php:235 -#, php-format -msgid "Stand-alone privilige: %s" -msgstr "Zelfstandig privilege: %s" - -#: classes/Gems/Menu.php:242 -msgid "Logon" -msgstr "Login" - -#: classes/Gems/Menu.php:243 -msgid "Lost password" -msgstr "Wachtwoord zoek" - -#: classes/Gems/Menu.php:244 -msgid "Your account" -msgstr "Uw account" - -#: classes/Gems/Menu.php:245 -msgid "Activity overview" -msgstr "Activiteiten overzicht" - -#: classes/Gems/Menu.php:246 -msgid "Change password" -msgstr "Uw wachtwoord" - -#: classes/Gems/Menu.php:247 -#: classes/Gems/Menu.php:322 -msgid "Token" -msgstr "Kenmerk" - -#: classes/Gems/Menu.php:248 -msgid "Logoff" -msgstr "Uitloggen" - -#: classes/Gems/Menu.php:283 -msgid "Track" -msgstr "Traject" - -#: classes/Gems/Menu.php:290 -#: classes/Gems/Menu.php:341 -msgid "Add" -msgstr "Voeg toe" - -#: classes/Gems/Menu.php:294 -msgid "Preview" -msgstr "Preview" - -#: classes/Gems/Menu.php:301 -msgid "Tracks" -msgstr "Trajecten" - -#: classes/Gems/Menu.php:314 -msgid "Assignments" -msgstr "Toewijzingen" - -#: classes/Gems/Menu.php:326 -msgid "Edit" -msgstr "Wijzig" - -#: classes/Gems/Menu.php:330 -msgid "Delete" -msgstr "Verwijder" - -#: classes/Gems/Menu.php:335 -msgid "Surveys" -msgstr "Vragenlijsten" - -#: classes/Gems/Menu.php:367 -msgid "Fill in" -msgstr "Vul in" - -#: classes/Gems/Menu.php:371 -msgid "Print PDF" -msgstr "Print PDF" - -#: classes/Gems/Menu.php:374 -msgid "E-Mail now!" -msgstr "Email nu!" - -#: classes/Gems/Menu.php:380 -msgid "Answers" -msgstr "Antwoorden" - -#: classes/Gems/Menu.php:518 -msgid "Respondents" -msgstr "Patiënten" - -#: classes/Gems/Menu.php:521 -msgid "Overview" -msgstr "Overzicht" - -#: classes/Gems/Menu.php:528 -msgid "Project" -msgstr "Project" - -#: classes/Gems/Menu.php:531 -msgid "Setup" -msgstr "Beheer" - -#: classes/Gems/Menu.php:534 -msgid "Mail" -msgstr "Email" - -#: classes/Gems/Menu.php:537 -msgid "Track Builder" -msgstr "Traject bouwer" - -#: classes/Gems/Menu.php:546 -msgid "Contact" -msgstr "Contact" - -#: classes/Gems/Menu.php:559 -msgid "Changelog" -msgstr "Changelog" - -#: classes/Gems/Model.php:193 -msgid "Respondent nr" -msgstr "Patiënt nr" - -#: classes/Gems/Model.php:194 -msgid "Opened" -msgstr "Bekeken" - -#: classes/Gems/Model.php:195 -msgid "Consent" -msgstr "Toestemming" - -#: classes/Gems/Model.php:197 -msgid "E-Mail" -msgstr "Email" - -#: classes/Gems/Model.php:202 -msgid "Gender" -msgstr "Geslacht" - -#: classes/Gems/Model.php:203 -msgid "First name" -msgstr "Voornaam" - -#: classes/Gems/Model.php:204 -msgid "Surname prefix" -msgstr "Tussenvoegsel" - -#: classes/Gems/Model.php:205 -msgid "Last name" -msgstr "Achternaam" - -#: classes/Gems/Model.php:207 -msgid "Name" -msgstr "Naam" - -#: classes/Gems/Model.php:210 -msgid "Street" -msgstr "Straat" - -#: classes/Gems/Model.php:211 -msgid "Zipcode" -msgstr "Postcode" - -#: classes/Gems/Model.php:212 -msgid "City" -msgstr "Stad" - -#: classes/Gems/Model.php:214 -msgid "Phone" -msgstr "Telefoon" - -#: classes/Gems/Model.php:216 -msgid "Birthday" -msgstr "Geboren op" - -#: classes/Gems/UpgradesAbstract.php:164 -msgid "Already at max. level." -msgstr "Al op het hoogste niveau." - -#: classes/Gems/UpgradesAbstract.php:171 -#, php-format -msgid "Trying upgrade for %s from level %s to level %s" -msgstr "Probeert upgrade voor %s van niveau %s naar niveau %s uit te voeren" - -#: classes/Gems/UpgradesAbstract.php:179 -#, php-format -msgid "Trying upgrade for %s to level %s: %s" -msgstr "Probeert upgrade voor %s naar niveau %s: %s" - -#: classes/Gems/UpgradesAbstract.php:337 -msgid "Cache cleaned" -msgstr "Cache opgeschoond" - -#: classes/Gems/Auth.php:241 -msgid "Combination of organization, username and password not found." -msgstr "Combinatie van organisatie, gebruikersnaam en wachtwoord niet gevonden." - -#: classes/Gems/Export/Spss.php:59 -msgid "Which file" -msgstr "Kies bestand" - -#: classes/Gems/Export/Spss.php:60 -msgid "syntax" -msgstr "syntax" - -#: classes/Gems/Export/Spss.php:61 -msgid "data" -msgstr "data" - -#: classes/Gems/Export/Spss.php:66 -msgid "Some help for this export" -msgstr "Uitleg over deze export mogelijkheid" - -#: classes/Gems/Export/Excel.php:60 -msgid "Excel options" -msgstr "Excel opties" - -#: classes/Gems/Export/Excel.php:62 -msgid "Export questions instead of variable names" -msgstr "Exporteer vragen in plaats van variabele namen" - -#: classes/Gems/Export/Excel.php:63 -msgid "Format answers" -msgstr "Antwoorden opmaken" - -#: classes/Gems/Util/Translated.php:84 -msgid "-" -msgstr "n.v.t." - -#: classes/Gems/Util/Translated.php:99 -msgid "forever" -msgstr "altijd" - -#: classes/Gems/Util/Translated.php:108 -msgid "n/a" -msgstr "n.v.t." - -#: classes/Gems/Util/Translated.php:117 -msgid "never" -msgstr "nooit" - -#: classes/Gems/Util/Translated.php:126 -msgid "unknown" -msgstr "onbekend" - -#: classes/Gems/Util/Translated.php:142 -msgid "2 days ago" -msgstr "Eergisteren" - -#: classes/Gems/Util/Translated.php:145 -msgid "Yesterday" -msgstr "Gisteren" - -#: classes/Gems/Util/Translated.php:148 -msgid "Today" -msgstr "Vandaag" - -#: classes/Gems/Util/Translated.php:151 -msgid "Tomorrow" -msgstr "Morgen" - -#: classes/Gems/Util/Translated.php:154 -msgid "Over 2 days" -msgstr "Overmorgen" - -#: classes/Gems/Util/Translated.php:159 -#, php-format -msgid "Over %d days" -msgstr "Over %d dagen" - -#: classes/Gems/Util/Translated.php:161 -#, php-format -msgid "%d days ago" -msgstr "%d dagen terug" - -#: classes/Gems/Util/Translated.php:180 -msgid "Send multiple mails per respondent, one for each checked token." -msgstr "Verstuur meerdere emails per patiënt, één per gekozen kenmerk." - -#: classes/Gems/Util/Translated.php:181 -msgid "Send one mail per respondent, mark all checked tokens as send." -msgstr "Verstuur één email per patiënt, zet alle gekozen kenmerken op verzonden." - -#: classes/Gems/Util/Translated.php:182 -msgid "Send one mail per respondent, mark only mailed tokens as send." -msgstr "Verstuur één email per patiënt, zet alleen de verzonden kenmerken op verzonden." - -#: classes/Gems/Util/Translated.php:201 -msgid "Male" -msgstr "Man" - -#: classes/Gems/Util/Translated.php:201 -msgid "Female" -msgstr "Vrouw" - -#: classes/Gems/Util/Translated.php:201 -msgid "Unknown" -msgstr "Onbekend" - -#: classes/Gems/Util/Translated.php:206 -msgid "mr." -msgstr "meneer" - -#: classes/Gems/Util/Translated.php:206 -msgid "mrs." -msgstr "mevrouw" - -#: classes/Gems/Util/Translated.php:206 -msgid "mr./mrs." -msgstr "de heer/mevrouw" - -#: classes/Gems/Util/Translated.php:211 -msgid "Mr." -msgstr "De heer" - -#: classes/Gems/Util/Translated.php:211 -msgid "Mrs." -msgstr "Mevrouw" - -#: classes/Gems/Util/Translated.php:211 -msgid "Mr./Mrs." -msgstr "De heer/Mevrouw" - -#: classes/Gems/Util/Translated.php:229 -#: classes/Gems/Controller/BrowseEditAction.php:785 -msgid "No" -msgstr "Nee" - -#: classes/Gems/Util/Translated.php:229 -msgid "Yes (forget answers)" -msgstr "Ja (vergeet antwoorden)" - -#: classes/Gems/Util/Translated.php:229 -msgid "Yes (keep answers)" -msgstr "Ja (met behoud van antwoorden)" - -#: classes/Gems/Util/Translated.php:240 -#: classes/Gems/Controller/BrowseEditAction.php:784 -msgid "Yes" -msgstr "Ja" - -#: classes/Gems/Controller/ModelActionAbstract.php:97 -msgid "Cancel" -msgstr "Annuleren" - -#: classes/Gems/Controller/ModelSnippetActionAbstract.php:181 -msgid "No data found." -msgstr "Geen gegevens gevonden." - -#: classes/Gems/Controller/BrowseEditAction.php:346 -#, php-format -msgid "New %s..." -msgstr "Nieuw %s..." - -#: classes/Gems/Controller/BrowseEditAction.php:378 -#, php-format -msgid "Delete %s" -msgstr "Verwijder %s" - -#: classes/Gems/Controller/BrowseEditAction.php:382 -#, php-format -msgid "%2$u %1$s deleted" -msgstr "%2$u %1$s verwijderd" - -#: classes/Gems/Controller/BrowseEditAction.php:396 -#, php-format -msgid "Edit %s" -msgstr "Bewerk %s" - -#: classes/Gems/Controller/BrowseEditAction.php:493 -msgid "Free search text" -msgstr "Vrije zoek tekst" - -#: classes/Gems/Controller/BrowseEditAction.php:564 -msgid "Search" -msgstr "Zoeken" - -#: classes/Gems/Controller/BrowseEditAction.php:580 -#, php-format -msgid "No %s found" -msgstr "Geen %s gevonden" - -#: classes/Gems/Controller/BrowseEditAction.php:653 -#, php-format -msgid "No %s found." -msgstr "Geen %s gevonden." - -#: classes/Gems/Controller/BrowseEditAction.php:768 -msgid "Are you sure?" -msgstr "Weet u het zeker?" - -#: classes/Gems/Controller/BrowseEditAction.php:838 -#, php-format -msgid "Unknown %s requested" -msgstr "Onjuist %s verzoek" - -#: classes/Gems/Controller/BrowseEditAction.php:861 -#, php-format -msgid "New %1$s..." -msgstr "Nieuwe %1$s..." - -#: classes/Gems/Controller/BrowseEditAction.php:869 -msgid "Save" -msgstr "Opslaan" - -#: classes/Gems/Controller/BrowseEditAction.php:905 -#, php-format -msgid "%2$u %1$s saved" -msgstr "%2$u %1$s opgeslagen" - -#: classes/Gems/Controller/BrowseEditAction.php:908 -msgid "No changes to save." -msgstr "Geen verandering om op te slaan." - -#: classes/Gems/Controller/BrowseEditAction.php:917 -msgid "Input error! No changes saved!" -msgstr "Invoer fout! Veranderingen niet opgeslagen!" - -#: classes/Gems/Controller/BrowseEditAction.php:945 -#, php-format -msgid "Show %s" -msgstr "Toon %s" - -#: classes/Gems/Controller/BrowseEditAction.php:952 -#, php-format -msgid "Unknown %s." -msgstr "%s is onbekend." - -#: classes/Gems/Email/MailTemplateForm.php:56 -msgid "Send (test)" -msgstr "Verstuur (test)" - -#: classes/Gems/Email/MailTemplateForm.php:81 -#: classes/Gems/Email/EmailFormAbstract.php:193 -#: classes/Gems/Email/EmailFormAbstract.php:250 -msgid "From" -msgstr "Van" - -#: classes/Gems/Email/MailTemplateForm.php:95 -msgid "Test using" -msgstr "Test met" - -#: classes/Gems/Email/MailTemplateForm.php:124 -msgid "To (test)" -msgstr "Aan (test)" - -#: classes/Gems/Email/MailTemplateForm.php:168 -msgid "Test mail send, changes not saved!" -msgstr "Test email verstuurd. De veranderingen zijn nog niet opgeslagen!" - -#: classes/Gems/Email/EmailFormAbstract.php:101 -msgid "no email adress" -msgstr "geen email adres" - -#: classes/Gems/Email/EmailFormAbstract.php:145 -msgid "Available fields" -msgstr "Beschikbare velden" - -#: classes/Gems/Email/EmailFormAbstract.php:153 -msgid "BBCode" -msgstr "BBCode" - -#: classes/Gems/Email/EmailFormAbstract.php:168 -msgid "Message" -msgstr "Bericht" - -#: classes/Gems/Email/EmailFormAbstract.php:216 -msgid "Organization does not have an e-mail address." -msgstr "Organisatie heeft geen email adres." - -#: classes/Gems/Email/EmailFormAbstract.php:231 -msgid "You do not have an e-mail address." -msgstr "U heeft geen email adres." - -#: classes/Gems/Email/EmailFormAbstract.php:289 -msgid "Preview HTML" -msgstr "Html voorbeeld" - -#: classes/Gems/Email/EmailFormAbstract.php:298 -msgid "Preview text" -msgstr "Tekstvoorbeeld" - -#: classes/Gems/Email/EmailFormAbstract.php:306 -msgid "Template" -msgstr "Sjabloon" - -#: classes/Gems/Email/EmailFormAbstract.php:330 -msgid "Send" -msgstr "Verstuur" - -#: classes/Gems/Email/EmailFormAbstract.php:347 -msgid "Subject" -msgstr "Onderwerp" - -#: classes/Gems/Email/EmailFormAbstract.php:427 -msgid "Input error! No changes made!" -msgstr "Invoer fout! Veranderingen niet uitgevoerd!" - -#: classes/Gems/Email/EmailFormAbstract.php:444 -msgid "Subject:" -msgstr "Onderwerp:" - -#: classes/Gems/Email/EmailFormAbstract.php:472 -msgid "Field" -msgstr "Veld" - -#: classes/Gems/Email/EmailFormAbstract.php:473 -msgid "Value" -msgstr "waarde" - -#: classes/Gems/Email/EmailFormAbstract.php:476 -msgid "BBCode info page" -msgstr "BBCode info pagina" - -#: classes/Gems/Email/OneMailForm.php:47 -#: classes/Gems/Email/MultiMailForm.php:49 -msgid "On this test system all mail will be delivered to the from address." -msgstr "Op dit test systeem worden alle emails gestuurd naar het \"van\" adres." - -#: classes/Gems/Email/OneMailForm.php:55 -msgid "Round" -msgstr "Ronde" - -#: classes/Gems/Email/OneMailForm.php:57 -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:705 -msgid "Survey" -msgstr "Vragenlijst" - -#: classes/Gems/Email/OneMailForm.php:58 -msgid "Last contact" -msgstr "Contactdatum" - -#: classes/Gems/Email/OneMailForm.php:87 -#: classes/Gems/Email/MultiMailForm.php:101 -msgid "To" -msgstr "Aan" - -#: classes/Gems/Email/OneMailForm.php:131 -#: classes/Gems/Email/TemplateMailer.php:217 -msgid "The sending of emails was blocked for this installation." -msgstr "Het versturen van emails is geblokkeerd in deze installatie." - -#: classes/Gems/Email/OneMailForm.php:140 -#: classes/Gems/Email/TemplateMailer.php:250 -msgid "Mail failed to send." -msgstr "Mail sturen mislukt." - -#: classes/Gems/Email/OneMailForm.php:144 -#, php-format -msgid "Sent email to %s." -msgstr "Email naar %s verzonden." - -#: classes/Gems/Email/TemplateMailer.php:266 -#, php-format -msgid "Sent %d e-mails, updated %d tokens." -msgstr "%d emails verzonden en %d kenmerken bijgewerkt." - -#: classes/Gems/Email/MultiMailForm.php:75 -msgid "Method" -msgstr "Methode" - -#: classes/Gems/Email/MultiMailForm.php:122 -msgid "Survey has been taken." -msgstr "Vragenlijsten is al afgenomen" - -#: classes/Gems/Email/MultiMailForm.php:125 -msgid "Respondent does not have an e-mail address." -msgstr "Patiënt heeft geen email adres" - -#: classes/Gems/Email/MultiMailForm.php:128 -msgid "Survey cannot be taken by a respondent." -msgstr "Deze vragenlijst kan niet door een patiënt ingevuld worden." - -#: classes/Gems/Email/MultiMailForm.php:130 -msgid "Survey cannot be taken at this moment." -msgstr "Deze vragenlijst kan op dit moment niet afgenomen worden." - -#: classes/Gems/Tracker/ChangeTracker.php:63 -#, php-format -msgid "Checked %d tracks." -msgstr "%d trajecten gecontroleerd." - -#: classes/Gems/Tracker/ChangeTracker.php:66 -#, php-format -msgid "Checked %d tokens." -msgstr "%d kenmerken gecontroleerd." - -#: classes/Gems/Tracker/ChangeTracker.php:71 -#, php-format -msgid "Answers changed by survey completion event for %d tokens." -msgstr "Bij %d kenmerken zijn de antwoorden aangepast door vragenlijst afrondingscode." - -#: classes/Gems/Tracker/ChangeTracker.php:74 -#, php-format -msgid "Results and timing changed for %d tokens." -msgstr "Bij %d kenmerken zijn de resultaten en/of de tijdstippen aangepast." - -#: classes/Gems/Tracker/ChangeTracker.php:77 -#, php-format -msgid "%d token round completion events caused changed to %d tokens." -msgstr "%2$d kenmerken zijn aangepast vanwege %1$d ronde voltooiingen." - -#: classes/Gems/Tracker/ChangeTracker.php:80 -#, php-format -msgid "%2$d token date changes in %1$d tracks." -msgstr "De datum van %2$d kenmerken is aangepast in %1$d trajecten." - -#: classes/Gems/Tracker/ChangeTracker.php:83 -#, php-format -msgid "Round changes propagated to %d tokens." -msgstr "%d kenmerken veranderd door ronde aanpassingen." - -#: classes/Gems/Tracker/ChangeTracker.php:86 -#, php-format -msgid "%d tokens created to by round changes." -msgstr "Vanwege ronde aanpassingen zijn nieuwe %d kenmerken gecreëerd." - -#: classes/Gems/Tracker/ChangeTracker.php:89 -msgid "No tokens were changed." -msgstr "Geen kenmerken veranderd." - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:365 -msgid "Track start" -msgstr "Traject start" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:366 -msgid "Track end" -msgstr "Traject einde" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:380 -msgid "Valid from" -msgstr "Geldig vanaf" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:381 -msgid "Valid until" -msgstr "Geldig tot" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:382 -msgid "Start time" -msgstr "Starten tijd" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:383 -msgid "Completion time" -msgstr "Datum invullen" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:398 -msgid "Minutes" -msgstr "Minuten" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:399 -msgid "Hours" -msgstr "Uren" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:400 -msgid "Days" -msgstr "Dagen" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:401 -msgid "Weeks" -msgstr "Weken" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:402 -msgid "Months" -msgstr "Maanden" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:403 -msgid "Quarters" -msgstr "Kwartieren" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:404 -msgid "Years" -msgstr "Jaren" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:438 -msgid "Valid from calculation" -msgstr "Berekening datum geldig vanaf" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:439 -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:447 -msgid "Date source" -msgstr "Datum bron" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:440 -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:448 -msgid "Round used" -msgstr "Gebruikte ronde" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:441 -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:449 -msgid "Date used" -msgstr "Gebruikte datum" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:442 -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:450 -msgid "Add to date" -msgstr "Optellen bij datum" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:443 -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:451 -msgid "Add to date unit" -msgstr "Datumoptel eenheid" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:446 -msgid "Valid for calculation" -msgstr "Berekening datum geldig tot" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:480 -msgid "Does not expire" -msgstr "Blijft altijd geldig" - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:483 -msgid "Use an answer from a survey." -msgstr "Gebruikt een antwoord uit een vragenlijst." - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:484 -msgid "Use a standard token date." -msgstr "Gebruik een datum uit een kenmerk." - -#: classes/Gems/Tracker/Engine/StepEngineAbstract.php:486 -msgid "Use a track level date." -msgstr "Gebruik een op traject niveau ingestelde datum." - -#: classes/Gems/Tracker/Engine/AnyStepEngine.php:95 -msgid "This round" -msgstr "Deze ronde" - -#: classes/Gems/Tracker/Engine/AnyStepEngine.php:106 -msgid "Engine for tracks where a rounds activation can depend on any previous survey." -msgstr "Een traject type waar de activatie van een ronde van elke willekeurige eerdere ronde afhankelijk kan zijn." - -#: classes/Gems/Tracker/Engine/AnyStepEngine.php:116 -msgid "Previous Survey" -msgstr "Eerdere vragenlijst" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:414 -#, php-format -msgid "%s track engines cannot be converted to %s track engines." -msgstr "Traject type %s kan niet geconverteerd worden naar %s." - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:657 -#, php-format -msgid "%d: %s - %s" -msgstr "%d: %s - %s" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:660 -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:663 -#, php-format -msgid "%d: %s" -msgstr "%d: %s" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:666 -#, php-format -msgid "%s - %s" -msgstr "%s - %s" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:706 -msgid "Order" -msgstr "Volgorde" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:707 -msgid "Description" -msgstr "Omschrijving" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:708 -msgid "After change" -msgstr "Ronde veranderingscode" - -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:709 -msgid "Active" -msgstr "Actief" - -#: classes/Gems/Tracker/Engine/SingleSurveyEngine.php:117 -msgid "Engine for tracks containing a single survey." -msgstr "Een traject type voor trajecten die bestaan uit een enkele vragenlijst." - -#: classes/Gems/Tracker/Engine/SingleSurveyEngine.php:127 -msgid "Single Survey" -msgstr "Losse vragenlijst" - -#: classes/Gems/Tracker/Engine/SingleSurveyEngine.php:149 -msgid "This track type does not allow the creation of new rounds." -msgstr "Dit type traject staat het niet toe dat nieuwe rondes aangemaakt worden." - -#: classes/Gems/Tracker/Engine/NextStepEngine.php:147 -msgid "Engine for tracks where the next round is always dependent on the previous step." -msgstr "Een traject type waar de activatie van een volgende ronde alleen afhangt van de ronde ervoor." - -#: classes/Gems/Tracker/Engine/NextStepEngine.php:158 -msgid "Next Step" -msgstr "Stap voor stap" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:209 -msgid "Measure(d) on" -msgstr "Afname op" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:212 -msgid "Completed" -msgstr "Ingevuld" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:213 -msgid "Duration in seconds" -msgstr "Antwoordtijd (in sec.)" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:214 -msgid "Score" -msgstr "Score" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:215 -msgid "Comments" -msgstr "Opmerkingen" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:216 -msgid "Changed on" -msgstr "Veranderd op" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:219 -msgid "Assigned by" -msgstr "Toewijzer" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:220 -msgid "Respondent name" -msgstr "Patiënt naam" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:223 -msgid "Assigned to" -msgstr "invuller" - -#: classes/Gems/Tracker/Model/StandardTokenModel.php:224 -msgid "Rejection code" -msgstr "Afkeuringscode" - -#: classes/Gems/Tracker/Model/TrackModel.php:107 -msgid "Track Engine" -msgstr "Traject type" - -#: classes/Gems/Tracker/Model/TrackModel.php:112 -msgid "Use until" -msgstr "Geldig tot" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:149 -msgid "Uncertain" -msgstr "Weet niet" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:152 -msgid "Increase" -msgstr "Toenemend" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:153 -msgid "Same" -msgstr "Zelfde" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:154 -msgid "Decrease" -msgstr "Afnemend" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:162 -msgid "Checked" -msgstr "Aangevinkt" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:163 -msgid "Not checked" -msgstr "Niet aangevinkt" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:258 -#, php-format -msgid "Rank %d" -msgstr "Schaal %d" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:277 -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:300 -msgid "Comment" -msgstr "Opmerkingen" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:277 -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:300 -msgid " (comment)" -msgstr "(opmerkingen)" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:289 -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:338 -msgid "Other" -msgstr "Overige" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:472 -msgid "Date" -msgstr "Datum" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:475 -msgid "Free number" -msgstr "Vrij getal" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:481 -msgid "Free text (long)" -msgstr "Vrije tekst (lang)" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:484 -msgid "Free text (very long)" -msgstr "Vrije tekst (zeer lang)" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:487 -msgid "Free text" -msgstr "Vrije tekst" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:623 -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:680 -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:735 -#, php-format -msgid "%s: %s" -msgstr "%s: %s" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php:755 -#, php-format -msgid "- %s" -msgstr "- %s" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:507 -msgid "Submitdate" -msgstr "Invoerdatum" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:883 -#, php-format -msgid "Updated %d Gems tokens to new token definition." -msgstr "%d Gems kenmerken zijn aangepast aan de nieuwe kenmerk definitie." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:903 -#, php-format -msgid "The '%s' survey is no longer active. The survey was removed from LimeSurvey!" -msgstr "De vragenlijst '%s' is niet meer actief. De vragenlijst is verwijderd uit LimeSurvey!" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1020 -#, php-format -msgid "Updated %d token to new token definition in survey '%s'." -msgid_plural "Updated %d tokens to new token definition in survey '%s'." -msgstr[0] "%d kenmerk in de vragenlijst '%s' is aangepast aan de nieuwe kenmerk definitie." -msgstr[1] "%d kenmerken in de vragenlijst '%s' zijn aangepast aan de nieuwe kenmerk definitie." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1038 -#, php-format -msgid "The status of the '%s' survey has changed." -msgstr "De status van de vragenlijst '%s' is veranderd." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1044 -#, php-format -msgid "Survey '%s' IS NO LONGER ACTIVE!!!" -msgstr "De vragenlijst '%s' IS NIET MEER ACTIEF!!!" - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1050 -#, php-format -msgid "The status of the '%s' survey has changed to '%s'." -msgstr "De status van de vragenlijst '%s' is veranderd naar '%s'." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1053 -#, php-format -msgid "The status warning for the '%s' survey was removed." -msgstr "De status waarschuwing voor de vragenlijst '%s' is verdwenen." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1059 -#, php-format -msgid "The name of the '%s' survey has changed to '%s'." -msgstr "De naam van de vragenlijst '%s' is veranderd in '%s'." - -#: classes/Gems/Tracker/Source/LimeSurvey1m9Database.php:1069 -#, php-format -msgid "Imported the '%s' survey." -msgstr "De vragenlijst '%s' is geïmporteerd." - -#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:164 -#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:124 -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:223 -#, php-format -msgid "Token %s not found." -msgstr "Kenmerk %s niet gevonden" - -#: classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php:168 -#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:128 -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:227 -msgid "No token specified." -msgstr "Geen kenmerk opgegeven." - -#: classes/Gems/Tracker/Snippets/ShowTrackUsageAbstract.php:149 -msgid "Enter the particulars concerning the assignment to this respondent." -msgstr "Beschrijf de redenen om dit aan deze patiënt toe te wijzen." - -#: classes/Gems/Tracker/Snippets/ShowTrackUsageAbstract.php:151 -#: classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php:152 -msgid "Start" -msgstr "Aanvang" - -#: classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php:132 -#, php-format -msgid "%s round" -msgstr "%s ronde" - -#: classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php:144 -msgid "No round specified." -msgstr "Geen ronde opgegeven." - -#: classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php:163 -msgid "< Previous" -msgstr "< Terug" - -#: classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php:168 -msgid "Next >" -msgstr "Verder >" - -#: classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php:141 -msgid "token" -msgid_plural "tokens" -msgstr[0] "kenmerk" -msgstr[1] "kenmerken" - -#: classes/Gems/Tracker/Snippets/EditSingleSurveyTokenSnippetAbstract.php:157 -msgid "survey" -msgid_plural "surveys" -msgstr[0] "vragenlijst" -msgstr[1] "vragenlijsten" - -#: classes/Gems/Tracker/Snippets/EditSingleSurveyTokenSnippetAbstract.php:179 -msgid "Add survey" -msgstr "Vragenlijst toevoegen" - -#: classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php:169 -msgid "track" -msgid_plural "tracks" -msgstr[0] "traject" -msgstr[1] "trajecten" - -#: classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php:179 -#: classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php:229 -msgid "Add track" -msgstr "Voeg traject toe" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:134 -msgid "Status" -msgstr "Status" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:135 -msgid "OK" -msgstr "OK" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:138 -msgid "Question" -msgstr "Vraag" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:207 -#, php-format -msgid "%s answers for patient number %s" -msgstr "%s antwoorden voor patientnummer %s" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:210 -#, php-format -msgid "Answers for token %s, patient number %s: %s." -msgstr "Antwoorden voor kenmerk %s, patientnummer %s: %s." - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:232 -msgid "Close" -msgstr "Sluiten" - -#: classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php:233 -msgid "Print" -msgstr "Afdrukken" - -#: classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php:119 -msgid "round" -msgid_plural "rounds" -msgstr[0] "ronde" -msgstr[1] "rondes" - -#: classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php:129 -msgid "Add new round" -msgstr "Nieuwe ronde toevoegen" - -#: classes/Gems/Menu/SubMenuItem.php:396 -msgid "New" -msgstr "Nieuw" - -#: classes/Gems/Menu/SubMenuItem.php:450 -msgid "Export the current data set to Excel" -msgstr "Exporteer de huidige gegevens naar Excel" - -#: classes/Gems/Menu/SubMenuItem.php:454 -msgid "Excel export" -msgstr "Excel export" - -#: classes/Gems/Menu/MenuAbstract.php:243 -msgid "Activity log" -msgstr "Activiteit" - -#: classes/Gems/Menu/MenuAbstract.php:249 -msgid "Automatic mail" -msgstr "Automatische mail" - -#: classes/Gems/Menu/MenuAbstract.php:250 -msgid "Turn Automatic Mail Jobs OFF" -msgstr "Automatische mail opdrachten UITzetten" - -#: classes/Gems/Menu/MenuAbstract.php:251 -msgid "Run" -msgstr "Uitvoeren" - -#: classes/Gems/Menu/MenuAbstract.php:254 -msgid "Servers" -msgstr "Servers" - -#: classes/Gems/Menu/MenuAbstract.php:258 -msgid "Templates" -msgstr "Sjablonen" - -#: classes/Gems/Menu/MenuAbstract.php:290 -msgid "By period" -msgstr "Per periode" - -#: classes/Gems/Menu/MenuAbstract.php:291 -msgid "By token" -msgstr "Per kenmerk" - -#: classes/Gems/Menu/MenuAbstract.php:292 -msgid "By respondent" -msgstr "Per patiënt" - -#: classes/Gems/Menu/MenuAbstract.php:296 -msgid "Bulk mail" -msgstr "Bulk mail" - -#: classes/Gems/Menu/MenuAbstract.php:314 -msgid "Errors" -msgstr "Foutmeldingen" - -#: classes/Gems/Menu/MenuAbstract.php:315 -msgid "PHP" -msgstr "PHP" - -#: classes/Gems/Menu/MenuAbstract.php:317 -msgid "Session" -msgstr "Sessie" - -#: classes/Gems/Menu/MenuAbstract.php:318 -msgid "Maintenance mode" -msgstr "Onderhoudsmodus" - -#: classes/Gems/Menu/MenuAbstract.php:319 -msgid "Clean cache" -msgstr "Cache opruimen" - -#: classes/Gems/Menu/MenuAbstract.php:408 -msgid "Survey Sources" -msgstr "Bronnen" - -#: classes/Gems/Menu/MenuAbstract.php:410 -msgid "Check status" -msgstr "Status controle" - -#: classes/Gems/Menu/MenuAbstract.php:411 -msgid "Synchronize surveys" -msgstr "Synchroniseer vragenlijsten" - -#: classes/Gems/Menu/MenuAbstract.php:412 -#: classes/Gems/Menu/MenuAbstract.php:423 -msgid "Check answers" -msgstr "Antwoord controle" - -#: classes/Gems/Menu/MenuAbstract.php:413 -msgid "Synchronize all surveys" -msgstr "Synchroniseer alle vragenlijsten" - -#: classes/Gems/Menu/MenuAbstract.php:414 -#: classes/Gems/Menu/MenuAbstract.php:424 -msgid "Check all answers" -msgstr "Controleer alle antwoorden" - -#: classes/Gems/Menu/MenuAbstract.php:420 -msgid "PDF" -msgstr "PDF" - -#: classes/Gems/Menu/MenuAbstract.php:432 -msgid "Fields" -msgstr "Velden" - -#: classes/Gems/Menu/MenuAbstract.php:439 -msgid "Rounds" -msgstr "Rondes" - -#: classes/Gems/Menu/MenuAbstract.php:454 -msgid "Check assignments" -msgstr "Controleer toewijzingen" - -#: classes/Gems/Menu/MenuAbstract.php:457 -msgid "Check all assignments" -msgstr "Controleer alle toewijzingen" - -#: classes/Gems/Selector/DateSelectorAbstract.php:309 -msgid "<<" -msgstr "<<" - -#: classes/Gems/Selector/DateSelectorAbstract.php:311 -msgid ">>" -msgstr ">>" - -#: classes/Gems/Selector/DateSelectorAbstract.php:315 -msgid "<" -msgstr "<" - -#: classes/Gems/Selector/DateSelectorAbstract.php:317 -msgid ">" -msgstr ">" - -#: classes/Gems/Selector/DateSelectorAbstract.php:320 -msgid "Now!" -msgstr "Nu!" - -#: classes/Gems/Selector/DateSelectorAbstract.php:360 -msgid "Show by day" -msgstr "Toon per dag" - -#: classes/Gems/Selector/DateSelectorAbstract.php:361 -msgid "Show by week" -msgstr "Toon per weerk" - -#: classes/Gems/Selector/DateSelectorAbstract.php:362 -msgid "Show by month" -msgstr "Toon per maand" - -#: classes/Gems/Selector/DateSelectorAbstract.php:363 -msgid "Show by year" -msgstr "Toon per jaar" - -#: classes/Gems/Selector/DateSelectorAbstract.php:370 -msgid "D" -msgstr "D" - -#: classes/Gems/Selector/DateSelectorAbstract.php:371 -msgid "W" -msgstr "W" - -#: classes/Gems/Selector/DateSelectorAbstract.php:372 -msgid "M" -msgstr "M" - -#: classes/Gems/Selector/DateSelectorAbstract.php:373 -msgid "Y" -msgstr "J" - -#: classes/Gems/Selector/DateSelectorAbstract.php:605 -msgid "Period" -msgstr "Periode" - -#: classes/Gems/Selector/DateSelectorAbstract.php:633 -#, php-format -msgid "week %s" -msgstr "week %s" - -#: classes/Gems/Selector/TokenDateSelector.php:82 -#: classes/Gems/Selector/TokenByGroupDateSelector.php:83 -msgid "for respondents" -msgstr "voor patiënten" - -#: classes/Gems/Selector/TokenDateSelector.php:83 -#: classes/Gems/Selector/TokenByGroupDateSelector.php:84 -msgid "for staff" -msgstr "voor medewerkers" - -#: classes/Gems/Selector/TokenDateSelector.php:86 -msgid "Activated surveys" -msgstr "Geactiveerde vragenlijsten" - -#: classes/Gems/Selector/TokenDateSelector.php:90 -msgid "Unanswered surveys" -msgstr "Onbeantwoorde vragenlijsten" - -#: classes/Gems/Selector/TokenDateSelector.php:94 -#: classes/Gems/Selector/TokenByGroupDateSelector.php:109 -msgid "Partially completed" -msgstr "Gedeeltelijk ingevoerd" - -#: classes/Gems/Selector/TokenDateSelector.php:103 -msgid "Expired surveys" -msgstr "Verlopen vragenlijsten" - -#: classes/Gems/Selector/TokenDateSelector.php:107 -msgid "Answered surveys" -msgstr "Beantwoorde vragenlijsten" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:87 -msgid "Tokens" -msgstr "Kenmerken" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:99 -msgid "Todo" -msgstr "Te doen" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:119 -msgid "Time left in days - average" -msgstr "Tijd over in dagen - gemiddeld" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:122 -msgid "least time left" -msgstr "de minste tijd over" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:125 -msgid "most time left" -msgstr "de meeste tijd over" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:129 -msgid "Missed" -msgstr "Gemist" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:139 -msgid "Answered" -msgstr "Beantwoord" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:149 -msgid "Answer time in days - average" -msgstr "Antwoordtijd in dagen - gemiddeld" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:152 -msgid "fastest answer" -msgstr "snelste antwoord" - -#: classes/Gems/Selector/TokenByGroupDateSelector.php:155 -msgid "slowest answer" -msgstr "meest langzame antwoord" - -#: classes/Gems/User/UserPasswordValidator.php:115 -msgid "Wrong password." -msgstr "Verkeerd wachtwoord." - -#: classes/Gems/User/PasswordChecker.php:95 -#, php-format -msgid "A password should contain at least one uppercase character." -msgid_plural "A password should contain at least %d uppercase characters." -msgstr[0] "Het wachtwoord moet minstens een hoofdletter bevatten." -msgstr[1] "Het wachtwoord moet minstens %d hoofdletters bevatten." - -#: classes/Gems/User/PasswordChecker.php:112 -#, php-format -msgid "A password should contain at least one lowercase character." -msgid_plural "A password should contain at least %d lowercase characters." -msgstr[0] "Het wachtwoord moet minstens een kleine letter bevatten." -msgstr[1] "Het wachtwoord moet minstens %d kleine letters bevatten." - -#: classes/Gems/User/PasswordChecker.php:127 -#, php-format -msgid "A password should be at least %d characters long." -msgstr "Het wachtwoordt moet minstens %d tekens lang zijn." - -#: classes/Gems/User/PasswordChecker.php:145 -#, php-format -msgid "A password should contain at least one not alphabetic character." -msgid_plural "A password should contain at least %d not alphabetic characters." -msgstr[0] "Het wachtwoord moet minstens een niet-alphabetisch teken bevatten." -msgstr[1] "Het wachtwoord moet minstens %d niet-alphabetisch tekens bevatten." - -#: classes/Gems/User/PasswordChecker.php:165 -#, php-format -msgid "A password should contain at least one not alphanumeric character." -msgid_plural "A password should contain at least %d not alphanumeric characters." -msgstr[0] "Het wachtwoord moet minstens een teken anders dan getallen of letters bevatten." -msgstr[1] "Het wachtwoord moet minstens %d tekens anders dan getallen of letters bevatten." - -#: classes/Gems/User/PasswordChecker.php:184 -msgid "A password should not contain the login name." -msgstr "Het wachtwoord mag niet de gebruikersnaam bevatten." - -#: classes/Gems/User/PasswordChecker.php:201 -#, php-format -msgid "A password should contain at least one number." -msgid_plural "A password should contain at least %d numbers." -msgstr[0] "Het wachtwoord moe... [truncated message content] |
From: <gem...@li...> - 2011-11-22 17:34:58
|
Revision: 274 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=274&view=rev Author: matijsdejong Date: 2011-11-22 17:34:49 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Allow org switching for orgs accessible by others for #40 Modified Paths: -------------- trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/User/OldStaffUserDefinition.php trunk/library/classes/Gems/User/ProjectUserDefinition.php trunk/library/classes/Gems/User/StaffUserDefinition.php trunk/library/classes/Gems/User/User.php trunk/library/classes/Gems/User/UserLoader.php trunk/library/classes/GemsEscort.php Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-22 17:34:49 UTC (rev 274) @@ -52,6 +52,10 @@ { $org = $this->loader->getOrganization($data['gor_id_organization']); $org->invalidateCache(); + + // Make sure any changes in the allowed list are reflected. + $this->loader->getCurrentUser()->refreshAllowedOrganizations(); + return parent::afterSave($data, $isNew); } Modified: trunk/library/classes/Gems/User/OldStaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 17:34:49 UTC (rev 274) @@ -148,7 +148,7 @@ // For a multi-layout project we need to select the appropriate style too, // but as PATCHES may not be in effect we have to try two selects $select2 = clone $select; - $select2->columns(array('user_style' => 'gor_style', 'user_allowed_ip_ranges' => 'ggp_allowed_ip_ranges'), 'gems__organizations'); + $select2->columns(array('user_style' => 'gor_style', 'user_allowed_ip_ranges' => 'ggp_allowed_ip_ranges', 'accessible_by' => 'gor_accessible_by'), 'gems__organizations'); try { // Fails before patch has run... Modified: trunk/library/classes/Gems/User/ProjectUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 17:34:49 UTC (rev 274) @@ -77,7 +77,6 @@ 'user_organization_id' => $organization, 'user_organization_name' => 'SUPER ADMIN', 'user_allowed_ip_ranges' => $this->project->getSuperAdminIPRanges(), - 'allowedOrgs' => array($organization => 'SUPER ADMIN') ); } } \ No newline at end of file Modified: trunk/library/classes/Gems/User/StaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-22 17:34:49 UTC (rev 274) @@ -193,9 +193,10 @@ ->join('gems__groups', 'gsf_id_primary_group = ggp_id_group', array('user_role'=>'ggp_role', 'user_allowed_ip_ranges' => 'ggp_allowed_ip_ranges')) ->join('gems__organizations', 'gul_id_organization = gor_id_organization', array( - 'user_organization_id'=>'gor_id_organization', - 'user_organization_name'=>'gor_name', - 'user_style' => 'gor_style')) + 'user_organization_id' => 'gor_id_organization', + 'user_organization_name' => 'gor_name', + 'user_style' => 'gor_style', + 'accessible_by' => 'gor_accessible_by')) ->joinLeft('gems__user_passwords', 'gul_id_user = gup_id_user', array('user_password_reset' => 'gup_reset_required')) ->where('ggp_group_active = 1') Modified: trunk/library/classes/Gems/User/User.php =================================================================== --- trunk/library/classes/Gems/User/User.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/User/User.php 2011-11-22 17:34:49 UTC (rev 274) @@ -66,6 +66,12 @@ /** * + * @var Zend_Db_Adapter_Abstract + */ + protected $db; + + /** + * * @var Gems_User_UserDefinitionInterface */ protected $definition; @@ -204,9 +210,9 @@ public function authenticate($formValues) { $auth = Gems_Auth::getInstance(); - + $formValues['allowed_ip_ranges'] = $this->getAllowedIPRanges(); - + $adapter = $this->definition->getAuthAdapter($formValues); $authResult = $auth->authenticate($adapter, $formValues); @@ -280,17 +286,33 @@ $this->setAsCurrentUser(); } } + + if (! $this->_hasVar('__allowedOrgs')) { + // Is always requested so no win in waiting. + $this->refreshAllowedOrganizations(); + } + return true; } /** + * Returns the list of allowed IP ranges (separated by colon) + * + * @return string + */ + public function getAllowedIPRanges() + { + return $this->_getVar('user_allowed_ip_ranges'); + } + + /** * Get an array of OrgId => Org Name for all allowed organizations for the current loggedin user * * @return array */ public function getAllowedOrganizations() { - return $this->_getVar('allowedOrgs'); + return $this->_getVar('__allowedOrgs'); } /** @@ -346,16 +368,6 @@ { return $this->_getVar('user_group'); } - - /** - * Returns the list of allowed IP ranges (separated by colon) - * - * @return string - */ - public function getAllowedIPRanges() - { - return $this->_getVar('user_allowed_ip_ranges'); - } /** * The locale set for this user.. @@ -519,7 +531,18 @@ } /** + * Returns true if the role of the current user has the given privilege * + * @param string $privilege + * @return bool + */ + public function hasPrivilege($privilege) + { + return (! $this->acl) || $this->acl->isAllowed($this->getRole(), null, $privilege); + } + + /** + * * @return boolean True when a user can log in. */ public function isActive() @@ -558,6 +581,47 @@ } /** + * Allowes a refresh of the existing list of organizations + * for this user. + * + * @return Gems_User_User (continuation pattern) + */ + public function refreshAllowedOrganizations() + { + $sql = "SELECT gor_id_organization, gor_name FROM gems__organizations WHERE "; + + // Privilege overrules organizational settings + if (! $this->hasPrivilege('pr.organization-switch')) { + if ($by = $this->_getVar('accessible_by')) { + $orgs = explode(':', trim($by, ':')); + + if ($orgs) { + // Not to forget: the users own organization + $orgs[] = $this->getOrganizationId(); + + $sql .= "gor_id_organization IN ("; + $sql .= implode(', ', $orgs); + $sql .= ") AND "; + } else { + $sql = false; + } + } else { + $sql = false; + } + } + if ($sql) { + $sql .= " gor_active = 1 ORDER BY gor_name"; + $orgs = $this->db->fetchPairs($sql); + } else { + $orgs = array(); + } + + $this->_setVar('__allowedOrgs', $orgs); + + return $this; + } + + /** * Check for password weakness. * * @param string $password Modified: trunk/library/classes/Gems/User/UserLoader.php =================================================================== --- trunk/library/classes/Gems/User/UserLoader.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/Gems/User/UserLoader.php 2011-11-22 17:34:49 UTC (rev 274) @@ -207,10 +207,6 @@ $values['user_active'] = true; } - if (! isset($values['allowedOrgs'])) { - //Load the allowed organizations - $values['allowedOrgs'] = $this->getAllowedOrganizations(); - } $values['__user_definition'] = $defName; return $this->_loadClass('User', true, array($values, $definition)); Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-11-22 15:59:21 UTC (rev 273) +++ trunk/library/classes/GemsEscort.php 2011-11-22 17:34:49 UTC (rev 274) @@ -795,7 +795,8 @@ */ protected function _layoutOrganizationSwitcher() // Gems_Project_Organization_MultiOrganizationInterface { - if ($this->hasPrivilege('pr.organization-switch')) { + $user = $this->getLoader()->getCurrentUser(); + if ($orgs = $user->getAllowedOrganizations()) { // Organization switcher $orgSwitch = MUtil_Html::create('div', array('id' => 'organizations')); $currentUri = base64_encode($this->view->url()); @@ -805,9 +806,9 @@ 'controller' => 'organization', 'action' => 'change-ui'), null, true); $orgSwitch->raw('<form method="get" action="' . $url . '"><div><input type="hidden" name="current_uri" value="' . $currentUri . '" /><select name="org" onchange="javascript:this.form.submit();">'); - foreach ($this->getLoader()->getCurrentUser()->getAllowedOrganizations() as $id => $org) { + foreach ($orgs as $id => $org) { $selected = ''; - if ($id == $this->session->user_organization_id) { + if ($id == $user->getOrganizationId()) { $selected = ' selected="selected"'; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 15:59:31
|
Revision: 273 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=273&view=rev Author: michieltcs Date: 2011-11-22 15:59:21 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - add Gems_Validate_IPRanges class, use in GroupAction Modified Paths: -------------- trunk/library/classes/Gems/Default/GroupAction.php trunk/library/languages/FakeTranslations.php trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po Added Paths: ----------- trunk/library/classes/Gems/Validate/IPRanges.php Modified: trunk/library/classes/Gems/Default/GroupAction.php =================================================================== --- trunk/library/classes/Gems/Default/GroupAction.php 2011-11-22 15:43:20 UTC (rev 272) +++ trunk/library/classes/Gems/Default/GroupAction.php 2011-11-22 15:59:21 UTC (rev 273) @@ -66,7 +66,7 @@ $bridge->addCheckbox('ggp_group_active'); $bridge->addCheckbox('ggp_staff_members'); $bridge->addCheckbox('ggp_respondent_members'); - $bridge->addText('ggp_allowed_ip_ranges'); + $bridge->addText('ggp_allowed_ip_ranges', 'size', 50, 'validator', new Gems_Validate_IPRanges()); } /** Added: trunk/library/classes/Gems/Validate/IPRanges.php =================================================================== --- trunk/library/classes/Gems/Validate/IPRanges.php (rev 0) +++ trunk/library/classes/Gems/Validate/IPRanges.php 2011-11-22 15:59:21 UTC (rev 273) @@ -0,0 +1,97 @@ +<?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. + * + * @package Gems + * @subpackage Validate + * @author Michiel Rook <mi...@to...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * Not used anymore, checked if we could use soap connection. As soap is no longer a reliable + * interface in LimeSurvey it is deprecated for now. + * + * @package Gems + * @subpackage Validate + * @author Michiel Rook <mi...@to...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + */ +class Gems_Validate_IPRanges extends Zend_Validate_Abstract +{ + /** + * Error constants + */ + const ERROR_INVALID_IP = 'invalidIPInRange'; + + /** + * Error messages + * @var array + */ + protected $_messageTemplates = array( + self::ERROR_INVALID_IP => 'One or more IPs are illegal.' + ); + + /** + * Returns true if and only if $value meets the validation requirements + * + * If $value fails validation, then this method returns false, and + * getMessages() will return an array of messages that explain why the + * validation failed. + * + * @param mixed $value + * @return boolean + * @throws Zend_Valid_Exception If validation of $value is impossible + */ + public function isValid($value, $context = array()) + { + $result = true; + + $ranges = explode('|', $value); + + foreach ($ranges as $range) { + if (($sep = strpos($range, '-')) !== false) { + $min = ip2long(substr($range, 0, $sep)); + $max = ip2long(substr($range, $sep + 1)); + + if ($min === false || $max === false) { + $result = false; + } + } else if (ip2long($range) === false) { + $result = false; + } + } + + if (!$result) { + $this->_error(self::ERROR_INVALID_IP); + } + + return $result; + } +} Property changes on: trunk/library/classes/Gems/Validate/IPRanges.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Added: svn:eol-style + native Modified: trunk/library/languages/FakeTranslations.php =================================================================== --- trunk/library/languages/FakeTranslations.php 2011-11-22 15:43:20 UTC (rev 272) +++ trunk/library/languages/FakeTranslations.php 2011-11-22 15:59:21 UTC (rev 273) @@ -93,6 +93,9 @@ _("'%value%' is an empty string"); _("Invalid type given. String, integer or float expected"); +// Gems_Validate_IPRanges +_("One or more IPs are illegal."); + // Zend_Validate_EmailAddress replaced by MUtil_Validate_SimpleEmail /* _("Invalid type given, value should be a string"); Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-11-22 15:43:20 UTC (rev 272) +++ trunk/library/languages/default-nl.po 2011-11-22 15:59:21 UTC (rev 273) @@ -1,4463 +1,4446 @@ -msgid "" -msgstr "" -"Project-Id-Version: Pulse NL\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-22 16:14+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Matijs de Jong <mj...@ma...>\n" -"Language-Team: Erasmus MGZ <mat...@ma...>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Poedit-Language: Dutch\n" -"X-Poedit-Country: NETHERLANDS\n" -"X-Poedit-SourceCharset: iso-8859-1\n" -"X-Poedit-Basepath: ../\n" -"X-Poedit-KeywordsList: plural:1,2\n" -"X-Poedit-SearchPath-0: .\n" - -#: classes/GemsEscort.php:207 -#, php-format -msgid "Path %s not writable" -msgstr "Path %s niet schrijfbaar" - -#: classes/GemsEscort.php:887 -#, php-format -msgid "User: %s" -msgstr "Login: %s" - -#: classes/GemsEscort.php:911 -msgid "version" -msgstr "versie" - -#: classes/GemsEscort.php:1342 -msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -msgstr "Let op: uw sessie is verlopen, uw invoer is niet opgeslagen. Controleer uw gegevens en probeer a.u.b. opnieuw." - -#: classes/GemsEscort.php:1466 -msgid "Please check back later." -msgstr "Probeer het later opnieuw." - -#: classes/GemsEscort.php:1468 -#: classes/GemsEscort.php:1472 -#: classes/GemsEscort.php:1473 -msgid "System is in maintenance mode" -msgstr "Systeem is in onderhoudsmodus" - -#: classes/GemsEscort.php:1483 -msgid "No access to site." -msgstr "Geen toegang tot website." - -#: classes/GemsEscort.php:1485 -#: classes/GemsEscort.php:1521 -msgid "You have no access to this site." -msgstr "U heeft geen toegang tot deze website." - -#: classes/GemsEscort.php:1501 -msgid "No access to page" -msgstr "Geen toegang tot pagina" - -#: classes/GemsEscort.php:1503 -#, php-format -msgid "Access to this page is not allowed for current role: %s." -msgstr "U heeft geen toegang tot deze pagina. Uw huidige rol is: %s." - -#: classes/GemsEscort.php:1508 -#: classes/GemsEscort.php:1519 -msgid "You are no longer logged in." -msgstr "U bent niet meer ingelogd." - -#: classes/GemsEscort.php:1509 -msgid "You must login to access this page." -msgstr "U moet ingelogd zijn voor toegang tot deze pagina." - -#: classes/Gems/AccessLog.php:239 -msgid "Database needs to be updated!" -msgstr "Database dient ververst te worden!" - -#: classes/Gems/Auth.php:241 -msgid "Combination of organization, username and password not found." -msgstr "Combinatie van organisatie, gebruikersnaam en wachtwoord niet gevonden." - -#: classes/Gems/Html.php:154 -msgid "<< First" -msgstr "<< Eerste" - -#: classes/Gems/Html.php:155 -msgid "< Previous" -msgstr "< Terug" - -#: classes/Gems/Html.php:156 -msgid "Next >" -msgstr "Verder >" - -#: classes/Gems/Html.php:157 -msgid "Last >>" -msgstr "Laatste >>" - -#: classes/Gems/Html.php:158 -msgid " | " -msgstr " | " - -#: classes/Gems/Html.php:162 -msgid "to" -msgstr "tot" - -#: classes/Gems/Html.php:163 -msgid "of" -msgstr "van" - -#: classes/Gems/Menu.php:139 -#, php-format -msgid "About %s" -msgstr "Over %s" - -#: classes/Gems/Menu.php:143 -msgid "Reporting bugs" -msgstr "Meld een bug" - -#: classes/Gems/Menu.php:146 -msgid "Support" -msgstr "Ondersteuning" - -#: classes/Gems/Menu.php:166 -msgid "Project setup" -msgstr "Projectinfo" - -#: classes/Gems/Menu.php:169 -msgid "Database" -msgstr "Database" - -#: classes/Gems/Menu.php:173 -msgid "Content" -msgstr "Inhoud" - -#: classes/Gems/Menu.php:176 -msgid "Execute" -msgstr "Uitvoeren" - -#: classes/Gems/Menu.php:181 -msgid "Patches" -msgstr "Patches" - -#: classes/Gems/Menu.php:182 -msgid "Execute new" -msgstr "Nieuwe aanmaken" - -#: classes/Gems/Menu.php:184 -msgid "Refresh translateables" -msgstr "Ververs vertaalbaren" - -#: classes/Gems/Menu.php:186 -msgid "Run SQL" -msgstr "SQL uitvoeren" - -#: classes/Gems/Menu.php:189 -msgid "Reception codes" -msgstr "Ontvangst codes" - -#: classes/Gems/Menu.php:192 -msgid "Consents" -msgstr "Toestemmingen" - -#: classes/Gems/Menu.php:195 -msgid "Roles" -msgstr "Rollen" - -#: classes/Gems/Menu.php:196 -#: classes/Gems/Menu.php:345 -msgid "Assigned" -msgstr "Toegewezen" - -#: classes/Gems/Menu.php:197 -msgid "Privileges" -msgstr "Priviléges" - -#: classes/Gems/Menu.php:200 -msgid "Groups" -msgstr "Groepen" - -#: classes/Gems/Menu.php:203 -msgid "Organizations" -msgstr "Organisaties" - -#: classes/Gems/Menu.php:206 -msgid "Staff" -msgstr "Medewerkers" - -#: classes/Gems/Menu.php:209 -msgid "Logging" -msgstr "Logboek" - -#: classes/Gems/Menu.php:213 -msgid "Maintenance" -msgstr "Onderhoud" - -#: classes/Gems/Menu.php:218 -msgid "Upgrade" -msgstr "Upgrade" - -#: classes/Gems/Menu.php:219 -#: classes/Gems/Menu.php:318 -msgid "Show" -msgstr "Toon" - -#: classes/Gems/Menu.php:220 -msgid "Execute all" -msgstr "Alles uitvoeren" - -#: classes/Gems/Menu.php:221 -msgid "Execute this" -msgstr "Dit uitvoeren" - -#: classes/Gems/Menu.php:222 -msgid "Execute from here" -msgstr "Uitvoeren vanaf hier" - -#: classes/Gems/Menu.php:223 -msgid "Execute to here" -msgstr "Uitvoeren tot hier" - -#: classes/Gems/Menu.php:235 -#, php-format -msgid "Stand-alone privilige: %s" -msgstr "Zelfstandig privilege: %s" - -#: classes/Gems/Menu.php:242 -msgid "Logon" -msgstr "Login" - -#: classes/Gems/Menu.php:243 -msgid "Lost password" -msgstr "Wachtwoord zoek" - -#: classes/Gems/Menu.php:244 -msgid "Your account" -msgstr "Uw account" - -#: classes/Gems/Menu.php:245 -msgid "Activity overview" -msgstr "Activiteiten overzicht" - -#: classes/Gems/Menu.php:246 -msgid "Change password" -msgstr "Uw wachtwoord" - -#: classes/Gems/Menu.php:247 -#: classes/Gems/Menu.php:287 -#: classes/Gems/Menu.php:322 -msgid "Token" -msgstr "Kenmerk" - -#: classes/Gems/Menu.php:248 -msgid "Logoff" -msgstr "Uitloggen" - -#: classes/Gems/Menu.php:283 -msgid "Track" -msgstr "Traject" - -#: classes/Gems/Menu.php:290 -#: classes/Gems/Menu.php:310 -#: classes/Gems/Menu.php:341 -msgid "Add" -msgstr "Voeg toe" - -#: classes/Gems/Menu.php:294 -#: classes/Gems/Menu.php:377 -msgid "Preview" -msgstr "Preview" - -#: classes/Gems/Menu.php:301 -msgid "Tracks" -msgstr "Trajecten" - -#: classes/Gems/Menu.php:314 -msgid "Assignments" -msgstr "Toewijzingen" - -#: classes/Gems/Menu.php:326 -msgid "Edit" -msgstr "Wijzig" - -#: classes/Gems/Menu.php:330 -msgid "Delete" -msgstr "Verwijder" - -#: classes/Gems/Menu.php:335 -msgid "Surveys" -msgstr "Vragenlijsten" - -#: classes/Gems/Menu.php:367 -msgid "Fill in" -msgstr "Vul in" - -#: classes/Gems/Menu.php:371 -msgid "Print PDF" -msgstr "Print PDF" - -#: classes/Gems/Menu.php:374 -msgid "E-Mail now!" -msgstr "Email nu!" - -#: classes/Gems/Menu.php:380 -msgid "Answers" -msgstr "Antwoorden" - -#: classes/Gems/Menu.php:518 -msgid "Respondents" -msgstr "Patiënten" - -#: classes/Gems/Menu.php:521 -msgid "Overview" -msgstr "Overzicht" - -#: classes/Gems/Menu.php:528 -msgid "Project" -msgstr "Project" - -#: classes/Gems/Menu.php:531 -msgid "Setup" -msgstr "Beheer" - -#: classes/Gems/Menu.php:534 -msgid "Mail" -msgstr "Email" - -#: classes/Gems/Menu.php:537 -msgid "Track Builder" -msgstr "Traject bouwer" - -#: classes/Gems/Menu.php:546 -msgid "Contact" -msgstr "Contact" - -#: classes/Gems/Menu.php:559 -msgid "Changelog" -msgstr "Changelog" - -#: classes/Gems/Model.php:193 -msgid "Respondent nr" -msgstr "Patiënt nr" - -#: classes/Gems/Model.php:194 -msgid "Opened" -msgstr "Bekeken" - -#: classes/Gems/Model.php:195 -msgid "Consent" -msgstr "Toestemming" - -#: classes/Gems/Model.php:197 -msgid "E-Mail" -msgstr "Email" - -#: classes/Gems/Model.php:202 -msgid "Gender" -msgstr "Geslacht" - -#: classes/Gems/Model.php:203 -msgid "First name" -msgstr "Voornaam" - -#: classes/Gems/Model.php:204 -msgid "Surname prefix" -msgstr "Tussenvoegsel" - -#: classes/Gems/Model.php:205 -msgid "Last name" -msgstr "Achternaam" - -#: classes/Gems/Model.php:207 -msgid "Name" -msgstr "Naam" - -#: classes/Gems/Model.php:210 -msgid "Street" -msgstr "Straat" - -#: classes/Gems/Model.php:211 -msgid "Zipcode" -msgstr "Postcode" - -#: classes/Gems/Model.php:212 -msgid "City" -msgstr "Stad" - -#: classes/Gems/Model.php:214 -msgid "Phone" -msgstr "Telefoon" - -#: classes/Gems/Model.php:216 -msgid "Birthday" -msgstr "Geboren op" - -#: classes/Gems/Pdf.php:195 -#, php-format -msgid "PDF Source File '%s' not found!" -msgstr "PDF bron bestand %s niet gevonden!" - -#: classes/Gems/Pdf.php:237 -#, php-format -msgid "Could not create '%s' directory." -msgstr "Kon de directory '%s' niet aanmaken." - -#: classes/Gems/Pdf.php:280 -#, php-format -msgid " The error message is: %s" -msgstr "De foutmelding is: %s" - -#: classes/Gems/Tracker.php:732 -msgid "Checks performed" -msgstr "Controle uitgevoerd" - -#: classes/Gems/UpgradesAbstract.php:164 -msgid "Already at max. level." -msgstr "Al op het hoogste niveau." - -#: classes/Gems/UpgradesAbstract.php:171 -#, php-format -msgid "Trying upgrade for %s from level %s to level %s" -msgstr "Probeert upgrade voor %s van niveau %s naar niveau %s uit te voeren" - -#: classes/Gems/UpgradesAbstract.php:179 -#, php-format -msgid "Trying upgrade for %s to level %s: %s" -msgstr "Probeert upgrade voor %s naar niveau %s: %s" - -#: classes/Gems/UpgradesAbstract.php:337 -msgid "Cache cleaned" -msgstr "Cache opgeschoond" - -#: classes/Gems/Controller/BrowseEditAction.php:346 -#, php-format -msgid "New %s..." -msgstr "Nieuw %s..." - -#: classes/Gems/Controller/BrowseEditAction.php:378 -#, php-format -msgid "Delete %s" -msgstr "Verwijder %s" - -#: classes/Gems/Controller/BrowseEditAction.php:382 -#, php-format -msgid "%2$u %1$s deleted" -msgstr "%2$u %1$s verwijderd" - -#: classes/Gems/Controller/BrowseEditAction.php:396 -#, php-format -msgid "Edit %s" -msgstr "Bewerk %s" - -#: classes/Gems/Controller/BrowseEditAction.php:493 -msgid "Free search text" -msgstr "Vrije zoek tekst" - -#: classes/Gems/Controller/BrowseEditAction.php:564 -msgid "Search" -msgstr "Zoeken" - -#: classes/Gems/Controller/BrowseEditAction.php:580 -#, php-format -msgid "No %s found" -msgstr "Geen %s gevonden" - -#: classes/Gems/Controller/BrowseEditAction.php:653 -#, php-format -msgid "No %s found." -msgstr "Geen %s gevonden." - -#: classes/Gems/Controller/BrowseEditAction.php:768 -msgid "Are you sure?" -msgstr "Weet u het zeker?" - -#: classes/Gems/Controller/BrowseEditAction.php:784 -msgid "Yes" -msgstr "Ja" - -#: classes/Gems/Controller/BrowseEditAction.php:785 -msgid "No" -msgstr "Nee" - -#: classes/Gems/Controller/BrowseEditAction.php:838 -#, php-format -msgid "Unknown %s requested" -msgstr "Onjuist %s verzoek" - -#: classes/Gems/Controller/BrowseEditAction.php:861 -#, php-format -msgid "New %1$s..." -msgstr "Nieuwe %1$s..." - -#: classes/Gems/Controller/BrowseEditAction.php:869 -msgid "Save" -msgstr "Opslaan" - -#: classes/Gems/Controller/BrowseEditAction.php:905 -#, php-format -msgid "%2$u %1$s saved" -msgstr "%2$u %1$s opgeslagen" - -#: classes/Gems/Controller/BrowseEditAction.php:908 -msgid "No changes to save." -msgstr "Geen verandering om op te slaan." - -#: classes/Gems/Controller/BrowseEditAction.php:917 -msgid "Input error! No changes saved!" -msgstr "Invoer fout! Veranderingen niet opgeslagen!" - -#: classes/Gems/Controller/BrowseEditAction.php:945 -#, php-format -msgid "Show %s" -msgstr "Toon %s" - -#: classes/Gems/Controller/BrowseEditAction.php:952 -#, php-format -msgid "Unknown %s." -msgstr "%s is onbekend." - -#: classes/Gems/Controller/ModelActionAbstract.php:97 -#: classes/Gems/Default/AskAction.php:150 -#: classes/Gems/Default/DatabaseAction.php:532 -msgid "Cancel" -msgstr "Annuleren" - -#: classes/Gems/Controller/ModelSnippetActionAbstract.php:181 -msgid "No data found." -msgstr "Geen gegevens gevonden." - -#: classes/Gems/Default/AskAction.php:128 -#, php-format -msgid "Welcome %s," -msgstr "Welkom %s," - -#: classes/Gems/Default/AskAction.php:131 -#, php-format -msgid "Thank you for answering the survey for token %s." -msgstr "Dank u voor het invullen van de vragenlijst voor kenmerk %s." - -#: classes/Gems/Default/AskAction.php:132 -msgid "Please click the button below to answer the next survey." -msgstr "Klik op de onderstaande knop om de volgende vragenlijst in te vullen." - -#: classes/Gems/Default/AskAction.php:137 -#, php-format -msgid "Please click the button below to answer the survey for token %s." -msgstr "Klik op de onderstaande knop om de vragenlijst behorende bij kenmerk %s in te vullen." - -#: classes/Gems/Default/AskAction.php:141 -#, php-format -msgid "Wait one second to open the survey automatically or click on Cancel to stop." -msgid_plural "Wait %d seconds to open the survey automatically or click on Cancel to stop." -msgstr[0] "Over één seconde start de vragenlijst automatisch. Klik op annuleren om dit te onderbreken." -msgstr[1] "Over %d seconden start de vragenlijst automatisch. Klik op annuleren om dit te onderbreken." - -#: classes/Gems/Default/AskAction.php:156 -#, php-format -msgid "After this survey there is one other survey we would like you to answer." -msgid_plural "After this survey there are another %d surveys we would like you to answer." -msgstr[0] "Na deze vragenlijst hebben we nog één andere vragenlijst voor u." -msgstr[1] "Na deze vragenlijst hebben we nog %d andere vragenlijsten voor u." - -#: classes/Gems/Default/AskAction.php:166 -#, php-format -msgid "The survey for token %s is no longer active." -msgstr "De vragenlijst voor kenmerk %s is niet meer in gebruik." - -#: classes/Gems/Default/AskAction.php:170 -#, php-format -msgid "The token %s does not exist." -msgstr "Het kenmerk %s bestaat niet." - -#: classes/Gems/Default/AskAction.php:172 -#, php-format -msgid "Thank you for answering. At the moment we have no further surveys for you to take." -msgstr "Dank u voor uw antwoorden. Op dit moment hebben we geen vragenlijsten meer voor u." - -#: classes/Gems/Default/AskAction.php:174 -#, php-format -msgid "The survey for token %s has been answered and no further surveys are open." -msgstr "De vragenlijst met het kenmerk %s is beantwoord en er staan verder geen vragenlijsten open." - -#: classes/Gems/Default/AskAction.php:181 -#, php-format -msgid "The token %s does not exist (any more)." -msgstr "Het kenmerk %s bestaat niet (meer)." - -#: classes/Gems/Default/AskAction.php:198 -#, php-format -msgid "Enter your %s token" -msgstr "Voer uw %s kenmerk in" - -#: classes/Gems/Default/AskAction.php:203 -#, php-format -msgid "Enter tokens as %s." -msgstr "Kenmerk invoeren als %s." - -#: classes/Gems/Default/AskAction.php:213 -msgid "OK" -msgstr "OK" - -#: classes/Gems/Default/AskAction.php:233 -msgid "The server is currently busy, please wait a while and try again." -msgstr "De server is bezet, wacht u alstublieft een moment en probeer het dan nogmaals." - -#: classes/Gems/Default/AskAction.php:255 -msgid "Tokens identify a survey that was assigned to you personally." -msgstr "Elk kenmerk verwijst naar een specifiek aan u toegekende vragenlijst." - -#: classes/Gems/Default/AskAction.php:255 -msgid "Entering the token and pressing OK will open that survey." -msgstr "Vul uw kenmerk in en druk op OK om die vragenlijst te openen." - -#: classes/Gems/Default/AskAction.php:259 -msgid "After answering the survey you will be logged off automatically." -msgstr "Na het invullen wordt u automatisch uitgelogd." - -#: classes/Gems/Default/AskAction.php:261 -msgid "After answering the survey you will return to the respondent overview screen." -msgstr "Na het invullen van de vragenlijst komt u terug in het patient scherm." - -#: classes/Gems/Default/AskAction.php:268 -msgid "A token consists of two groups of four letters and numbers, separated by an optional hyphen. Tokens are case insensitive." -msgstr "Een kenmerk bestaat uit twee groepen van vier cijfers en letters met een (niet verplicht) streepje ertussen. Hoofdletters of gewone letters maakt niets uit." - -#: classes/Gems/Default/AskAction.php:269 -msgid "The number zero and the letter O are treated as the same; the same goes for the number one and the letter L." -msgstr "Er wordt geen verschil gemaakt tussen het getal nul en de letter O en ook niet tussen het getal één en de letter L." - -#: classes/Gems/Default/ConsentAction.php:68 -#: classes/Gems/Default/GroupAction.php:88 -msgid "Description" -msgstr "Omschrijving" - -#: classes/Gems/Default/ConsentAction.php:70 -#: classes/Gems/Default/DatabaseAction.php:167 -msgid "Order" -msgstr "Volgorde" - -#: classes/Gems/Default/ConsentAction.php:71 -msgid "Determines order of presentation in interface." -msgstr "Bepaald de presentatie volgorde." - -#: classes/Gems/Default/ConsentAction.php:73 -msgid "Consent code" -msgstr "Consent code" - -#: classes/Gems/Default/ConsentAction.php:75 -msgid "Internal code, not visible to users, copied with the token information to the source." -msgstr "Interne code, niet zichtbaar voor gebruikers maar wordt met de token informatie aan de bron doorgegeven." - -#: classes/Gems/Default/ConsentAction.php:92 -msgid "respondent consent" -msgid_plural "respondent consents" -msgstr[0] "patiënt toestemming" -msgstr[1] "patiënt toestemmingen" - -#: classes/Gems/Default/ConsentAction.php:97 -msgid "Respondent consents" -msgstr "Patiënt toestemming" - -#: classes/Gems/Default/ContactAction.php:71 -#, php-format -msgid "%s is a web application." -msgstr "%s is een web applicatie." - -#: classes/Gems/Default/ContactAction.php:76 -#, php-format -msgid "The %s project is run by: " -msgstr "%s is een project van: " - -#: classes/Gems/Default/ContactAction.php:82 -#, php-format -msgid "%s is a collaboration of these organizations:" -msgstr "Deze organisaties werken samen voor het %s project:" - -#: classes/Gems/Default/ContactAction.php:103 -#, php-format -msgid "The %s project" -msgstr "Het %s project" - -#: classes/Gems/Default/ContactAction.php:106 -msgid "Information on this application" -msgstr "Information over deze website" - -#: classes/Gems/Default/ContactAction.php:107 -msgid "Links concerning this web application:" -msgstr "Links met informatie over deze website:" - -#: classes/Gems/Default/CronAction.php:148 -msgid "Cron jobs turned off." -msgstr "Cron opdrachten uitgezet." - -#: classes/Gems/Default/CronAction.php:218 -msgid "No mails sent." -msgstr "Geen mail verzonden." - -#: classes/Gems/Default/CronAction.php:221 -msgid "On this test system all mail will be delivered to the from address." -msgstr "Op dit test systeem worden alle emails gestuurd naar het \"van\" adres." - -#: classes/Gems/Default/DatabaseAction.php:64 -#, php-format -msgid "Executed %2$s creation script %1$s:" -msgstr "Uitvoerresultaat %2$s script %1$s:" - -#: classes/Gems/Default/DatabaseAction.php:74 -#, php-format -msgid "%d record(s) returned as result set %d in step %d of %d." -msgstr "%d rij(en) in resultaat %d in stap %d van %d." - -#: classes/Gems/Default/DatabaseAction.php:78 -#, php-format -msgid "%d record(s) updated in step %d of %d." -msgstr "In stap %2$d van %3$d zijn %1$d rij(en) aangepast." - -#: classes/Gems/Default/DatabaseAction.php:81 -#, php-format -msgid "Script ran step %d of %d succesfully." -msgstr "Stap %d van %d in het script met succes uitgevoerd." - -#: classes/Gems/Default/DatabaseAction.php:84 -msgid " in step " -msgstr " in stap " - -#: classes/Gems/Default/DatabaseAction.php:89 -#, php-format -msgid "No script for %1$s." -msgstr "Geen script voor %1$s:" - -#: classes/Gems/Default/DatabaseAction.php:133 -#, php-format -msgid "No rows in %s." -msgstr "Geen gegevens in %s." - -#: classes/Gems/Default/DatabaseAction.php:162 -msgid "Type" -msgstr "Type" - -#: classes/Gems/Default/DatabaseAction.php:166 -msgid "Group" -msgstr "Groep" - -#: classes/Gems/Default/DatabaseAction.php:168 -msgid "Location" -msgstr "Locatie" - -#: classes/Gems/Default/DatabaseAction.php:171 -msgid "Status" -msgstr "Status" - -#: classes/Gems/Default/DatabaseAction.php:172 -msgid "created" -msgstr "bestaat" - -#: classes/Gems/Default/DatabaseAction.php:173 -msgid "not created" -msgstr "niet aanwezig" - -#: classes/Gems/Default/DatabaseAction.php:174 -msgid "unknown" -msgstr "onbekend" - -#: classes/Gems/Default/DatabaseAction.php:177 -msgid "Script" -msgstr "Script" - -#: classes/Gems/Default/DatabaseAction.php:179 -msgid "Changed on" -msgstr "Veranderd op" - -#: classes/Gems/Default/DatabaseAction.php:198 -msgid "This database object does not exist. You cannot delete it." -msgstr "Dit database object bestaat. Het kan dus ook niet verwijderd worden." - -#: classes/Gems/Default/DatabaseAction.php:203 -#, php-format -msgid "Drop %s" -msgstr "Verwijder %s" - -#: classes/Gems/Default/DatabaseAction.php:211 -#, php-format -msgid "There are %d rows in the table." -msgstr "Er zijn %d rijen in deze tabel." - -#: classes/Gems/Default/DatabaseAction.php:213 -#, php-format -msgid "Drop table with %d rows" -msgstr "Tabel met %d rijen aan data verwijderen" - -#: classes/Gems/Default/DatabaseAction.php:214 -msgid "Are you really sure?" -msgstr "Weet u het heel erg zeker?" - -#: classes/Gems/Default/DatabaseAction.php:230 -#, php-format -msgid "%1$s %2$s dropped" -msgstr "%1$s %2$s verwijderd" - -#: classes/Gems/Default/DatabaseAction.php:235 -msgid " during statement " -msgstr " tijdens het commando " - -#: classes/Gems/Default/DatabaseAction.php:246 -#, php-format -msgid "%s no longer exists in the database." -msgstr "%s bestaat niet meer in de database." - -#: classes/Gems/Default/DatabaseAction.php:249 -#, php-format -msgid "%s does not yet exist in the database." -msgstr "%s bestaat nog niet in de database." - -#: classes/Gems/Default/DatabaseAction.php:252 -#, php-format -msgid "%s object does exist." -msgstr "%s object bestaat." - -#: classes/Gems/Default/DatabaseAction.php:270 -msgid "Object is not a table." -msgstr "Niet een tabel object." - -#: classes/Gems/Default/DatabaseAction.php:293 -msgid "Structure" -msgstr "Structuur" - -#: classes/Gems/Default/DatabaseAction.php:302 -msgid "database object" -msgid_plural "database objects" -msgstr[0] "database object" -msgstr[1] "database objects" - -#: classes/Gems/Default/DatabaseAction.php:307 -msgid "Database object overview" -msgstr "Database object overzicht" - -#: classes/Gems/Default/DatabaseAction.php:316 -#: classes/Gems/Default/DatabaseAction.php:368 -msgid "Level" -msgstr "Niveau" - -#: classes/Gems/Default/DatabaseAction.php:317 -#: classes/Gems/Default/DatabaseAction.php:369 -msgid "Subtype" -msgstr "Subtype" - -#: classes/Gems/Default/DatabaseAction.php:319 -msgid "To be executed" -msgstr "Uit te voeren" - -#: classes/Gems/Default/DatabaseAction.php:320 -#: classes/Gems/Default/DatabaseAction.php:372 -msgid "Executed" -msgstr "Uitgevoerd" - -#: classes/Gems/Default/DatabaseAction.php:321 -#: classes/Gems/Default/DatabaseAction.php:373 -msgid "Finished" -msgstr "Afgerond" - -#: classes/Gems/Default/DatabaseAction.php:324 -msgid "Create the patch table!" -msgstr "De patch tabel bestaat nog niet!" - -#: classes/Gems/Default/DatabaseAction.php:326 -#, php-format -msgid "%d new or changed patch(es)." -msgstr "%d nieuwe of veranderde patch(es)." - -#: classes/Gems/Default/DatabaseAction.php:331 -msgid "Gems build" -msgstr "Gems bouwnummer" - -#: classes/Gems/Default/DatabaseAction.php:332 -msgid "Database build" -msgstr "Database versie" - -#: classes/Gems/Default/DatabaseAction.php:334 -msgid "Execute level" -msgstr "Uit te voeren versie" - -#: classes/Gems/Default/DatabaseAction.php:338 -msgid "Ignore finished" -msgstr "Afgeronde patches overslaan" - -#: classes/Gems/Default/DatabaseAction.php:339 -msgid "Ignore executed" -msgstr "Uitgevoerde patches overslaan" - -#: classes/Gems/Default/DatabaseAction.php:340 -msgid "Show patches" -msgstr "Toon patches" - -#: classes/Gems/Default/DatabaseAction.php:354 -#, php-format -msgid "%d patch(es) executed." -msgstr "%d patch(es) uitgevoerd." - -#: classes/Gems/Default/DatabaseAction.php:367 -msgid "Patch" -msgstr "Patch" - -#: classes/Gems/Default/DatabaseAction.php:371 -msgid "Query" -msgstr "Query" - -#: classes/Gems/Default/DatabaseAction.php:374 -msgid "Result" -msgstr "Resultaat" - -#: classes/Gems/Default/DatabaseAction.php:398 -msgid "Patch maintenance" -msgstr "Patch onderhoud" - -#: classes/Gems/Default/DatabaseAction.php:402 -msgid "Patch overview" -msgstr "Patch overzicht" - -#: classes/Gems/Default/DatabaseAction.php:464 -msgid "This database object does not exist. You cannot create it." -msgstr "Dit database object bestaat niet en kan ook niet aangemaakt worden." - -#: classes/Gems/Default/DatabaseAction.php:470 -msgid "This database object has no script. You cannot execute it." -msgstr "Dit database object heeft geen script. Het kan dus ook niet uitgevoerd worden." - -#: classes/Gems/Default/DatabaseAction.php:481 -#, php-format -msgid "Run %s" -msgstr "Voer %s script uit" - -#: classes/Gems/Default/DatabaseAction.php:500 -#, php-format -msgid "Starting %d object creation scripts." -msgstr "Aanvang %d object aanmaak scripts." - -#: classes/Gems/Default/DatabaseAction.php:505 -#, php-format -msgid "Finished %s creation script for object %d of %d" -msgstr "Klaar %s met aanmaak script voor object %d van %d" - -#: classes/Gems/Default/DatabaseAction.php:509 -msgid "All objects exist. Nothing was executed." -msgstr "Alle objects bestaan. Niets was uitgevoerd." - -#: classes/Gems/Default/DatabaseAction.php:515 -msgid "Create not-existing database objects" -msgstr "Aanmaak van database objecten die nog niet bestaan" - -#: classes/Gems/Default/DatabaseAction.php:517 -#, php-format -msgid "One database object does not exist." -msgid_plural "These %d database objects do not exist." -msgstr[0] "Één object bestaat nog niet in de database." -msgstr[1] "%d objecten bestaan nog niet in de database." - -#: classes/Gems/Default/DatabaseAction.php:518 -msgid "Are you sure you want to create it?" -msgid_plural "Are you sure you want to create them all?" -msgstr[0] "Weet je zeker dat je dat object wil aanmaken?" -msgstr[1] "Weet je zeker dat je ze allemaal wil aanmaken?" - -#: classes/Gems/Default/DatabaseAction.php:531 -msgid "All database objects exist. There is nothing to create." -msgstr "Alle database objecten bestaan. Er valt niets te maken." - -#: classes/Gems/Default/DatabaseAction.php:544 -msgid "Separate multiple commands with semicolons (;)." -msgstr "Scheidt meerdere commando's met punt-comma's (;)." - -#: classes/Gems/Default/DatabaseAction.php:551 -msgid "Run" -msgstr "Uitvoeren" - -#: classes/Gems/Default/DatabaseAction.php:560 -msgid "raw" -msgstr "rauw" - -#: classes/Gems/Default/DatabaseAction.php:569 -#, php-format -msgid "Result set %s." -msgstr "Resultaat %s." - -#: classes/Gems/Default/DatabaseAction.php:592 -msgid "Execute raw SQL" -msgstr "SQL direct uitvoeren" - -#: classes/Gems/Default/DatabaseAction.php:595 -msgid "Result sets" -msgstr "Resultaten" - -#: classes/Gems/Default/DatabaseAction.php:620 -msgid "This database object does not exist. You cannot view it." -msgstr "Dit database object bestaat. Het kan dus ook niet bekeken worden." - -#: classes/Gems/Default/DatabaseAction.php:625 -#, php-format -msgid "The data in table %s" -msgstr "De gegevens in tabel %s" - -#: classes/Gems/Default/DatabaseAction.php:626 -#, php-format -msgid "Contents of %s %s" -msgstr "De inhoud van %s %s" - -#: classes/Gems/Default/ExportAction.php:69 -msgid "Data" -msgstr "Data" - -#: classes/Gems/Default/ExportAction.php:74 -msgid "Export data" -msgstr "Exporteer gegevens" - -#: classes/Gems/Default/ExportAction.php:153 -#: classes/Gems/Default/MailJobAction.php:121 -msgid "Survey" -msgstr "Vragenlijst" - -#: classes/Gems/Default/ExportAction.php:168 -#, php-format -msgid "%s records found." -msgstr "%s records gevonden." - -#: classes/Gems/Default/ExportAction.php:172 -#: classes/Gems/Default/IndexAction.php:162 -#: classes/Gems/Default/MailJobAction.php:119 -msgid "Organization" -msgstr "Organisatie" - -#: classes/Gems/Default/ExportAction.php:181 -msgid "Export to" -msgstr "Exporteer naar" - -#: classes/Gems/Default/GroupAction.php:89 -#: classes/Gems/Default/LogAction.php:170 -msgid "Role" -msgstr "Rol" - -#: classes/Gems/Default/GroupAction.php:92 -#: classes/Gems/Default/MailJobAction.php:104 -msgid "Active" -msgstr "Actief" - -#: classes/Gems/Default/GroupAction.php:96 -msgid "Allowed IP Ranges" -msgstr "Toegestane IP adres reeksen" - -#: classes/Gems/Default/GroupAction.php:105 -msgid "group" -msgid_plural "groups" -msgstr[0] "groep" -msgstr[1] "groepen" - -#: classes/Gems/Default/GroupAction.php:110 -msgid "Administrative groups" -msgstr "Beheer groepen" - -#: classes/Gems/Default/IndexAction.php:83 -msgid "Enter your token..." -msgstr "Voer uw kenmerk in..." - -#: classes/Gems/Default/IndexAction.php:124 -#, php-format -msgid "Login to %s application" -msgstr "%s login" - -#: classes/Gems/Default/IndexAction.php:128 -msgid "Login" -msgstr "Login" - -#: classes/Gems/Default/IndexAction.php:145 -msgid "Back to login" -msgstr "Terug naar de login" - -#: classes/Gems/Default/IndexAction.php:183 -msgid "Password" -msgstr "Wachtwoord" - -#: classes/Gems/Default/IndexAction.php:198 -#, php-format -msgid "Reset password for %s application" -msgstr "Reset wachtwoord voor %s" - -#: classes/Gems/Default/IndexAction.php:202 -msgid "Reset password" -msgstr "Reset wachtwoord" - -#: classes/Gems/Default/IndexAction.php:248 -msgid "Username" -msgstr "Gebruikersnaam" - -#: classes/Gems/Default/IndexAction.php:288 -msgid "Your password must be changed." -msgstr "Uw wachtwoord moet veranderd worden." - -#: classes/Gems/Default/IndexAction.php:301 -#, php-format -msgid "Login successful, welcome %s." -msgstr "Login in orde, welkom %s." - -#: classes/Gems/Default/IndexAction.php:341 -#, php-format -msgid "Good bye: %s." -msgstr "Tot ziens: %s." - -#: classes/Gems/Default/IndexAction.php:366 -msgid "Reset accepted, enter your new password." -msgstr "Reset geaccepteerd, voer uw nieuwe wachtwoord in." - -#: classes/Gems/Default/IndexAction.php:370 -msgid "This key timed out or does not belong to this user." -msgstr "Te oude sleutel of sleutel hoort niet bij gebruiker." - -#: classes/Gems/Default/IndexAction.php:387 -msgid "Password reset requested" -msgstr "Wachtwoord reset aangevraagd" - -#: classes/Gems/Default/IndexAction.php:388 -#, php-format -msgid "To reset your password for %s, please click this link: %s" -msgstr "Om uw wachtwoord voor %s te resetten, klik op deze link: %s" - -#: classes/Gems/Default/IndexAction.php:393 -msgid "We sent you an e-mail with a reset link. Click on the link in the e-mail." -msgstr "We hebben u een email met reset link gestuurd. Klik op de link in de email." - -#: classes/Gems/Default/IndexAction.php:395 -msgid "Unable to send e-mail." -msgstr "Verzenden e-mail mislukt." - -#: classes/Gems/Default/IndexAction.php:400 -msgid "No such user found or no e-mail address known or user cannot be reset." -msgstr "Gebruiker niet gevonden of e-mail adres onbekend of gebruiker kan niet gereset worden." - -#: classes/Gems/Default/IndexAction.php:404 -msgid "We received your password reset key." -msgstr "Wachtwoord resetsleutel ontvangen." - -#: classes/Gems/Default/IndexAction.php:405 -msgid "Please enter the organization and username belonging to this key." -msgstr "Geef de organisatie en gebruikersnaam die bij deze sleutel horen op." - -#: classes/Gems/Default/InvitationAction.php:52 -msgid "Invite" -msgstr "Uitnodigen" - -#: classes/Gems/Default/LanguageAction.php:63 -msgid "Cookies must be enabled for setting the language." -msgstr "Zonder cookies kan de taal niet ingesteld worden." - -#: classes/Gems/Default/LanguageAction.php:66 -msgid "Invalid language setting." -msgstr "Ongeldige taal instelling." - -#: classes/Gems/Default/LogAction.php:61 -msgid "from" -msgstr "vanaf" - -#: classes/Gems/Default/LogAction.php:66 -msgid "until" -msgstr "tot" - -#: classes/Gems/Default/LogAction.php:72 -msgid "days" -msgstr "dagen" - -#: classes/Gems/Default/LogAction.php:73 -msgid "weeks" -msgstr "weken" - -#: classes/Gems/Default/LogAction.php:74 -msgid "months" -msgstr "maanden" - -#: classes/Gems/Default/LogAction.php:75 -msgid "years" -msgstr "jaren" - -#: classes/Gems/Default/LogAction.php:96 -msgid "Staff:" -msgstr "Medewerkers:" - -#: classes/Gems/Default/LogAction.php:100 -msgid "All staff" -msgstr "Alle medewerkers" - -#: classes/Gems/Default/LogAction.php:102 -msgid "Patient:" -msgstr "Patiënt:" - -#: classes/Gems/Default/LogAction.php:106 -msgid "All patients" -msgstr "Alle patiënten" - -#: classes/Gems/Default/LogAction.php:109 -msgid "Action:" -msgstr "Actie:" - -#: classes/Gems/Default/LogAction.php:112 -msgid "All actions" -msgstr "Alle acties" - -#: classes/Gems/Default/LogAction.php:163 -msgid "Date" -msgstr "Datum" - -#: classes/Gems/Default/LogAction.php:164 -#: classes/Gems/Default/LogMaintenanceAction.php:52 -msgid "Action" -msgstr "Actie" - -#: classes/Gems/Default/LogAction.php:165 -msgid "Message" -msgstr "Bericht" - -#: classes/Gems/Default/LogAction.php:167 -msgid "Respondent" -msgstr "Patiënt" - -#: classes/Gems/Default/LogAction.php:171 -msgid "IP address" -msgstr "IP adres" - -#: classes/Gems/Default/LogAction.php:178 -#: classes/Gems/Default/LogMaintenanceAction.php:53 -msgid "Log" -msgstr "Logboek" - -#: classes/Gems/Default/LogMaintenanceAction.php:70 -msgid "Log:" -msgstr "Logboek:" - -#: classes/Gems/Default/LogMaintenanceAction.php:71 -msgid "All" -msgstr "Alles" - -#: classes/Gems/Default/LogMaintenanceAction.php:77 -msgid "Log action" -msgstr "Logboek actie" - -#: classes/Gems/Default/LogMaintenanceAction.php:81 -msgid "Log maintenance" -msgstr "Logboek onderhoud" - -#: classes/Gems/Default/MailJobAction.php:62 -msgid "No automatic mail jobs found..." -msgstr "Geen automatische mail opdrachten gevonden.." - -#: classes/Gems/Default/MailJobAction.php:72 -msgid "New automatic mail job..." -msgstr "Nieuwe automatische mail opdracht..." - -#: classes/Gems/Default/MailJobAction.php:100 -msgid "Template" -msgstr "Sjabloon" - -#: classes/Gems/Default/MailJobAction.php:101 -msgid "By staff member" -msgstr "Door medewerke" - -#: classes/Gems/Default/MailJobAction.php:103 -msgid "Used for logging and possibly from address." -msgstr "Gebruikt voor activiteiten log en eventueel voor vanaf adres." - -#: classes/Gems/Default/MailJobAction.php:106 -msgid "Job is only run when active." -msgstr "Een opdracht wordt alleen uitgevoerd als deze actief is." - -#: classes/Gems/Default/MailJobAction.php:109 -msgid "From address used" -msgstr "Gebruikte vanaf adres" - -#: classes/Gems/Default/MailJobAction.php:111 -msgid "From other" -msgstr "Vanaf overig" - -#: classes/Gems/Default/MailJobAction.php:112 -#, php-format -msgid "Only when '%s' is '%s'." -msgstr "Aleen als '%s' is '%s'." - -#: classes/Gems/Default/MailJobAction.php:114 -msgid "Processing Method" -msgstr "Verwerkings methode" - -#: classes/Gems/Default/MailJobAction.php:115 -msgid "Filter for" -msgstr "Selecteer op" - -#: classes/Gems/Default/MailJobAction.php:116 -msgid "Days between reminders" -msgstr "Aantal dagen tussen herinneringen" - -#: classes/Gems/Default/MailJobAction.php:132 -msgid "Do you want to delete this mail job?" -msgstr "Weet je zeker dat deze automatische mail opdracht verwijderd moet worden?" - -#: classes/Gems/Default/MailJobAction.php:143 -msgid "Edit automatic mail job" -msgstr "Automatische mail opdracht bewerken" - -#: classes/Gems/Default/MailJobAction.php:156 -msgid "First mail" -msgstr "Eerste mail" - -#: classes/Gems/Default/MailJobAction.php:157 -msgid "Reminder" -msgstr "Herinnering" - -#: classes/Gems/Default/MailJobAction.php:168 -msgid "Use organizational from address" -msgstr "Gebruik vanaf adres van organisatie" - -#: classes/Gems/Default/MailJobAction.php:171 -#, php-format -msgid "Use site %s address" -msgstr "Gebruik %s adres van de site" - -#: classes/Gems/Default/MailJobAction.php:174 -msgid "Use the 'By staff member' address" -msgstr "Gebruik 'Door medewerker' adres" - -#: classes/Gems/Default/MailJobAction.php:175 -msgid "Other" -msgstr "Overige" - -#: classes/Gems/Default/MailJobAction.php:185 -msgid "Automatic mail jobs" -msgstr "Automatische mail opdrachten " - -#: classes/Gems/Default/MailJobAction.php:189 -#, php-format -msgid "Automatic mails have been turned off since %s." -msgstr "Automatische mail opdrachten staan sinds %s uit." - -#: classes/Gems/Default/MailJobAction.php:193 -msgid "Turn Automatic Mail Jobs ON" -msgstr "Automatische mail opdrachten AANzetten" - -#: classes/Gems/Default/MailJobAction.php:199 -msgid "With automatic mail jobs and a cron job on the server, mails can be sent without manual user action." -msgstr "Met automatische mail opdrachten en een cron opdracht op de server, kunnen mails verstuurd worden zonder dat een gebruiker actie hoeft te ondernemen." - -#: classes/Gems/Default/MailJobAction.php:207 -msgid "Automatic mail job details" -msgstr "Automatische mail opdracht details" - -#: classes/Gems/Default/MailLogAction.php:107 -msgid "Date sent" -msgstr "Verzend datum" - -#: classes/Gems/Default/MailLogAction.php:108 -msgid "Receiver" -msgstr "Ontvanger" - -#: classes/Gems/Default/MailLogAction.php:109 -msgid "To address" -msgstr "Adres aan" - -#: classes/Gems/Default/MailLogAction.php:110 -msgid "Sender" -msgstr "Verzender" - -#: classes/Gems/Default/MailLogAction.php:111 -msgid "From address" -msgstr "Adres van" - -#: classes/Gems/Default/MailLogAction.php:113 -#: classes/Gems/Default/MailTemplateAction.php:61 -msgid "Subject" -msgstr "Onderwerp" - -#: classes/Gems/Default/MailLogAction.php:129 -msgid "Mail Activity Log" -msgstr "Logboek Mail Activiteit" - -#: classes/Gems/Default/MailLogAction.php:140 -msgid "Show Mail Activity Log item" -msgstr "Toon Logboek Mail item" - -#: classes/Gems/Default/MailServerAction.php:68 -msgid "From address [part]" -msgstr "Vanaf adres [gedeelte]" - -#: classes/Gems/Default/MailServerAction.php:70 -msgid "E.g.: '%', '%.org' or '%@gemstracker.org' or 'ro...@ge...'." -msgstr "Bijvoorbeeld: '%', '%.nl' of '%@gemstracker.nl' of 'ro...@ge...'." - -#: classes/Gems/Default/MailServerAction.php:71 -msgid "Server" -msgstr "Server" - -#: classes/Gems/Default/MailServerAction.php:73 -msgid "Encryption" -msgstr "Encryptie" - -#: classes/Gems/Default/MailServerAction.php:76 -msgid "None" -msgstr "Geen" - -#: classes/Gems/Default/MailServerAction.php:77 -msgid "SSL" -msgstr "SSL" - -#: classes/Gems/Default/MailServerAction.php:78 -msgid "TLS" -msgstr "TLS" - -#: classes/Gems/Default/MailServerAction.php:80 -msgid "Port" -msgstr "Poort" - -#: classes/Gems/Default/MailServerAction.php:82 -msgid "Normal values: 25 for TLS and no encryption, 465 for SSL" -msgstr "Standaard waardes: 25 voor TLS en voor geen encryptie, 465 voor SSL" - -#: classes/Gems/Default/MailServerAction.php:84 -msgid "User ID" -msgstr "Gebruikers ID" - -#: classes/Gems/Default/MailServerAction.php:90 -#: classes/Gems/Default/OptionAction.php:113 -#: classes/Gems/Default/OptionAction.php:118 -#: classes/Gems/Default/SourceAction.php:95 -#: classes/Gems/Default/StaffAction.php:151 -msgid "Repeat password" -msgstr "Herhaal wachtwoord" - -#: classes/Gems/Default/MailServerAction.php:91 -#: classes/Gems/Default/SourceAction.php:74 -#: classes/Gems/Default/StaffAction.php:126 -msgid "Enter only when changing" -msgstr "Alleen invoeren om het wachtwoord te wijzigen" - -#: classes/Gems/Default/MailServerAction.php:100 -msgid "email server" -msgid_plural "email servers" -msgstr[0] "email server" -msgstr[1] "email servers" - -#: classes/Gems/Default/MailServerAction.php:105 -msgid "Email servers" -msgstr "Email servers" - -#: classes/Gems/Default/MailTemplateAction.php:75 -#: classes/Gems/Default/StaffAction.php:239 -msgid "(all organizations)" -msgstr "(alle organisaties)" - -#: classes/Gems/Default/MailTemplateAction.php:94 -msgid "email template" -msgid_plural "email templates" -msgstr[0] "email sjabloon" -msgstr[1] "email sjablonen" - -#: classes/Gems/Default/MailTemplateAction.php:99 -msgid "Email templates" -msgstr "Email sjabloon" - -#: classes/Gems/Default/OptionAction.php:84 -msgid "You are not allowed to change your password." -msgstr "U mag uw wachtwoord niet wijzigen." - -#: classes/Gems/Default/OptionAction.php:96 -msgid "Current password" -msgstr "Huidig wachtwoord" - -#: classes/Gems/Default/OptionAction.php:107 -#: classes/Gems/Default/OptionAction.php:123 -msgid "New password" -msgstr "Nieuw wachtwoord" - -#: classes/Gems/Default/OptionAction.php:137 -msgid "New password is active." -msgstr "Nieuwe wachtwoord geactiveerd." - -#: classes/Gems/Default/OptionAction.php:143 -msgid "Caps Lock seems to be on!" -msgstr "De Caps Lock toets lijkt aan te staan!" - -#: classes/Gems/Default/OptionAction.php:181 -msgid "Login Name" -msgstr "Login Naam" - -#: classes/Gems/Default/OptionAction.php:188 -#: classes/Gems/Default/OrganizationAction.php:140 -#: classes/Gems/Default/RespondentAction.php:173 -#: classes/Gems/Default/StaffAction.php:224 -msgid "Language" -msgstr "Taal" - -#: classes/Gems/Default/OptionAction.php:198 -#, php-format -msgid "Options" -msgstr "Instellingen" - -#: classes/Gems/Default/OptionAction.php:207 -msgid "This overview provides information about the last login activity on your account." -msgstr "Dit overzicht geeft informatie over de recente inlog activiteit op uw account." - -#: classes/Gems/Default/OptionAction.php:227 -msgid "Date / time" -msgstr "Datum / tijd" - -#: classes/Gems/Default/OptionAction.php:233 -msgid "item" -msgid_plural "items" -msgstr[0] "item" -msgstr[1] "items" - -#: classes/Gems/Default/OptionAction.php:238 -msgid "Item" -msgstr "Item" - -#: classes/Gems/Default/OrganizationAction.php:105 -msgid "Cookies must be enabled." -msgstr "Zonder cookies kan de taal niet ingesteld worden." - -#: classes/Gems/Default/OrganizationAction.php:108 -msgid "Invalid organization." -msgstr "Ongeldige organisatie." - -#: classes/Gems/Default/OrganizationAction.php:129 -msgid "Url" -msgstr "Url" - -#: classes/Gems/Default/OrganizationAction.php:130 -msgid "Task" -msgstr "Taak" - -#: classes/Gems/Default/OrganizationAction.php:131 -msgid "Contact name" -msgstr "Contact naam" - -#: classes/Gems/Default/OrganizationAction.php:132 -msgid "Contact email" -msgstr "Contact email" - -#: classes/Gems/Default/OrganizationAction.php:135 -msgid "Style" -msgstr "Stijl" - -#: classes/Gems/Default/OrganizationAction.php:145 -msgid "Allow new respondents" -msgstr "Nieuwe patiënten toestaan" - -#: classes/Gems/Default/OrganizationAction.php:150 -msgid "Greeting" -msgstr "Begroeting" - -#: classes/Gems/Default/OrganizationAction.php:150 -#: classes/Gems/Default/OrganizationAction.php:151 -msgid "For emails and token forward screen." -msgstr "Voor emails en kenmerk scherm." - -#: classes/Gems/Default/OrganizationAction.php:151 -msgid "Signature" -msgstr "Handtekening" - -#: classes/Gems/Default/OrganizationAction.php:153 -msgid "Accessible by" -msgstr "Toegankelijk voor" - -#: classes/Gems/Default/OrganizationAction.php:153 -msgid "Checked organizations see this organizations respondents." -msgstr "Geselecteerde organizaties kunnen de patiënten van deze organisatie bekijken." - -#: classes/Gems/Default/OrganizationAction.php:162 -msgid "Code name" -msgstr "Code naam" - -#: classes/Gems/Default/OrganizationAction.php:162 -msgid "Only for programmers." -msgstr "Uitsluitend voor programmeurs." - -#: classes/Gems/Default/OrganizationAction.php:172 -msgid "organization" -msgid_plural "organizations" -msgstr[0] "organisatie" -msgstr[1] "organisaties" - -#: classes/Gems/Default/OrganizationAction.php:177 -msgid "Participating organizations" -msgstr "Deelnemende organisaties" - -#: classes/Gems/Default/OverviewPlanAction.php:115 -#: classes/Gems/Default/ProjectSurveysAction.php:88 -#: classes/Gems/Default/SurveyAction.php:203 -msgid "survey" -msgid_plural "surveys" -msgstr[0] "vragenlijst" -msgstr[1] "vragenlijsten" - -#: classes/Gems/Default/OverviewPlanAction.php:120 -msgid "Planning overview" -msgstr "Planning overzicht" - -#: classes/Gems/Default/ProjectInformationAction.php:83 -msgid "empty file" -msgstr "leeg bestand" - -#: classes/Gems/Default/ProjectInformationAction.php:87 -msgid "file not found" -msgstr "bestand niet gevonden" - -#: classes/Gems/Default/ProjectInformationAction.php:120 -msgid "Logged errors" -msgstr "Opgeslagen foutmeldingen" - -#: classes/Gems/Default/ProjectInformationAction.php:120 -msgid "Empty logfile" -msgstr "Verwijder alle foutmeldingen" - -#: classes/Gems/Default/ProjectInformationAction.php:125 -msgid "Project information" -msgstr "Project informatie" - -#: classes/Gems/Default/ProjectInformationAction.php:129 -msgid "Project name" -msgstr "Project naam" - -#: classes/Gems/Default/ProjectInformationAction.php:130 -msgid "Project version" -msgstr "Project versie" - -#: classes/Gems/Default/ProjectInformationAction.php:131 -msgid "Gems version" -msgstr "Gems versie" - -#: classes/Gems/Default/ProjectInformationAction.php:133 -msgid "Gems project" -msgstr "Gems project" - -#: classes/Gems/Default/ProjectInformationAction.php:134 -msgid "Gems web directory" -msgstr "Gems web folder" - -#: classes/Gems/Default/ProjectInformationAction.php:135 -msgid "Gems code directory" -msgstr "Gems code folder" - -#: classes/Gems/Default/ProjectInformationAction.php:136 -msgid "Gems project path" -msgstr "Gems project folder" - -#: classes/Gems/Default/ProjectInformationAction.php:137 -msgid "MUtil version" -msgstr "MUtil versie" - -#: classes/Gems/Default/ProjectInformationAction.php:138 -msgid "Zend version" -msgstr "Zend versie" - -#: classes/Gems/Default/ProjectInformationAction.php:139 -msgid "Application environment" -msgstr "Applicatie omgeving" - -#: classes/Gems/Default/ProjectInformationAction.php:140 -msgid "Application baseuri" -msgstr "Applicatie baseuri" - -#: classes/Gems/Default/ProjectInformationAction.php:141 -msgid "Application directory" -msgstr "Applicatie folder" - -#: classes/Gems/Default/ProjectInformationAction.php:142 -msgid "PHP version" -msgstr "PHP versie" - -#: classes/Gems/Default/ProjectInformationAction.php:143 -msgid "Server Hostname" -msgstr "Webserver naam" - -#: classes/Gems/Default/ProjectInformationAction.php:144 -msgid "Server OS" -msgstr "Server besturingssysteem" - -#: classes/Gems/Default/ProjectInformationAction.php:145 -msgid "Time on server" -msgstr "De tijd op de server" - -#: classes/Gems/Default/ProjectInformationAction.php:149 -msgid "Turn Maintenance Mode OFF" -msgstr "Onderhoudsmodus UITzetten" - -#: classes/Gems/Default/ProjectInformationAction.php:151 -msgid "Turn Maintenance Mode ON" -msgstr "Onderhoudsmodus AANzetten" - -#: classes/Gems/Default/ProjectInformationAction.php:161 -msgid "Version information" -msgstr "Versie informatie" - -#: classes/Gems/Default/ProjectInformationAction.php:195 -msgid "Server PHP Info" -msgstr "Server PHP Info" - -#: classes/Gems/Default/ProjectInformationAction.php:208 -msgid "Project settings" -msgstr "Project instellingen" - -#: classes/Gems/Default/ProjectInformationAction.php:215 -msgid "Session content" -msgstr "Sessie inhoud" - -#: classes/Gems/Default/ProjectInformationAction.php:216 -msgid "Session" -msgstr "Sessie" - -#: classes/Gems/Default/ProjectSurveysAction.php:68 -#: classes/Gems/Default/SurveyAction.php:192 -msgid "By" -msgstr "Door" - -#: classes/Gems/Default/ProjectSurveysAction.php:69 -#: classes/Gems/Default/ProjectTracksAction.php:67 -#: classes/Gems/Default/SurveyAction.php:193 -msgid "From" -msgstr "Van" - -#: classes/Gems/Default/ProjectSurveysAction.php:70 -#: classes/Gems/Default/ProjectTracksAction.php:68 -#: classes/Gems/Default/SurveyAction.php:195 -msgid "Until" -msgstr "Tot" - -#: classes/Gems/Default/ProjectSurveysAction.php:93 -msgid "Active surveys" -msgstr "Beschikbare vragenlijsten" - -#: classes/Gems/Default/ProjectTracksAction.php:65 -msgid "Survey #" -msgstr "Vragenlijsten" - -#: classes/Gems/Default/ProjectTracksAction.php:85 -msgid "track" -msgid_plural "tracks" -msgstr[0] "traject" -msgstr[1] "trajecten" - -#: classes/Gems/Default/ProjectTracksAction.php:90 -msgid "Active tracks" -msgstr "Beschikbare trajecten" - -#: classes/Gems/Default/ProjectTracksAction.php:110 -#, php-format -msgid "Questions in survey %s" -msgstr "Vragen in vragenlijsten %s" - -#: classes/Gems/Default/ProjectTracksAction.php:118 -#: classes/Gems/Default/SurveyAction.php:85 -#, php-format -msgid "Survey %s does not exist." -msgstr "Vragenlijst %s bestaat niet." - -#: classes/Gems/Default/ProjectTracksAction.php:121 -msgid "Survey not specified." -msgstr "Vragenlijst niet opgegeven." - -#: classes/Gems/Default/ProjectTracksAction.php:132 -#, php-format -msgid "Track %s does not exist." -msgstr "Trajectnummer %s bestaat niet." - -#: classes/Gems/Default/ReceptionAction.php:55 -msgid "Can be assigned to" -msgstr "Kan toegewezen worden aan" - -#: classes/Gems/Default/ReceptionAction.php:56 -msgid "Additional action" -msgstr "Aanvullende actie" - -#: classes/Gems/Default/ReceptionAction.php:79 -msgid "Code" -msgstr "Code" - -#: classes/Gems/Default/ReceptionAction.php:82 -msgid "Is success code" -msgstr "Is succes code" - -#: classes/Gems/Default/ReceptionAction.php:86 -msgid "This reception code is a success code." -msgstr "Aanzetten als deze ontvangst code positief is." - -#: classes/Gems/Default/ReceptionAction.php:90 -msgid "Only active codes can be selected." -msgstr "Alleen actieve codes kunnen geselecteerd worden." - -#: classes/Gems/Default/ReceptionAction.php:91 -msgid "For respondents" -msgstr "Voor patiënten" - -#: classes/Gems/Default/ReceptionAction.php:94 -msgid "This reception code can be assigned to a respondent." -msgstr "Deze ontvangstcode kan aan een patiënt toegewezen worden." - -#: classes/Gems/Default/ReceptionAction.php:95 -msgid "For tracks" -msgstr "Voor trajecten" - -#: classes/Gems/Default/ReceptionAction.php:98 -msgid "This reception code can be assigned to a track." -msgstr "Deze ontvangstcode kan aan een traject toegewezen worden." - -#: classes/Gems/Default/ReceptionAction.php:99 -msgid "For surveys" -msgstr "Voor vragenlijsten" - -#: classes/Gems/Default/ReceptionAction.php:102 -msgid "This reception code can be assigned to a survey." -msgstr "Deze ontvangstcode kan aan een vragenlijst toegewezen worden." - -#: classes/Gems/Default/ReceptionAction.php:103 -msgid "Redo survey" -msgstr "Vragenlijsten herhalen" - -#: classes/Gems/Default/ReceptionAction.php:106 -msgid "Redo a survey on this reception code." -msgstr "Herhaal vragenlijst bij deze ontvangstcode." - -#: classes/Gems/Default/ReceptionAction.php:107 -msgid "Overwrite ansers" -msgstr "Overschrijf bestaande antwoorden" - -#: classes/Gems/Default/ReceptionAction.php:110 -msgid "Remove the consent from already answered surveys." -msgstr "Verwijder \"informed consent\" van beantwoorde vragenlijsten" - -#: classes/Gems/Default/ReceptionAction.php:128 -msgid "reception code" -msgid_plural "reception codes" -msgstr[0] "Ontvangst code" -msgstr[1] "Ontvangst code" - -#: classes/Gems/Default/RespondentAction.php:119 -#, php-format -msgid "Random Example BSN: %s" -msgstr "Willekeurig voorbeeld BSN: %s" - -#: classes/Gems/Default/RespondentAction.php:122 -msgid "Enter a 9-digit SSN number." -msgstr "Voer een BSN nummer van 9 cijfers in." - -#: classes/Gems/Default/RespondentAction.php:131 -msgid "Identification" -msgstr "Identificatie" - -#: classes/Gems/Default/RespondentAction.php:132 -msgid "SSN" -msgstr "SSN" - -#: classes/Gems/Default/RespondentAction.php:136 -msgid "Patient number" -msgstr "Patiënt nummer" - -#: classes/Gems/Default/RespondentAction.php:145 -msgid "Medical data" -msgstr "Medische gegevens" - -#: classes/Gems/Default/RespondentAction.php:152 -msgid "DBC's, etc..." -msgstr "DBC's, etc..." - -#: classes/Gems/Default/RespondentAction.php:155 -msgid "Contact information" -msgstr "Contact informatie" - -#: classes/Gems/Default/RespondentAction.php:160 -msgid "Respondent has no e-mail" -msgstr "Patiënt zonder e-mail" - -#: classes/Gems/Default/RespondentAction.php:161 -msgid "With housenumber" -msgstr "Met huisnummer" - -#: classes/Gems/Default/RespondentAction.php:168 -msgid "Country" -msgstr "Land" - -#: classes/Gems/Default/RespondentAction.php:172 -msgid "Settings" -msgstr "Instellingen" - -#: classes/Gems/Default/RespondentAction.php:174 -msgid "Has the respondent signed the informed consent letter?" -msgstr "Heeft de patiënt het \"informed consent\" formulier ondertekend?" - -#: classes/Gems/Default/RespondentAction.php:199 -msgid "Comments" -msgstr "Opmerkingen" - -#: classes/Gems/Default/RespondentAction.php:200 -msgid "Physician" -msgstr "Dokter" - -#: classes/Gems/Default/RespondentAction.php:201 -msgid "Treatment" -msgstr "Behandeling" - -#: classes/Gems/Default/RespondentAction.php:230 -msgid "Rejection code" -msgstr "Afkeuringscode" - -#: classes/Gems/Default/RespondentAction.php:237 -msgid "Delete respondent" -msgstr "Verwijder patiënt" - -#: classes/Gems/Default/RespondentAction.php:288 -msgid "Respondent deleted." -msgstr "Patiënt verwijderd" - -#: classes/Gems/Default/RespondentAction.php:291 -msgid "Choose a reception code to delete." -msgstr "Kies een ontvangst code om te verwijderen." - -#: classes/Gems/Default/RespondentAction.php:335 -msgid "respondent" -msgid_plural "respondents" -msgstr[0] "patiënt" -msgstr[1] "patiënten" - -#: classes/Gems/Default/RespondentAction.php:392 -msgid "Please settle the informed consent form for this respondent." -msgstr "A.u.b. het informed consent formulier doornemen met deze patiënt" - -#: classes/Gems/Default/RespondentPlanAction.php:67 -#: classes/Gems/Default/SurveyAction.php:171 -msgid "Show respondent" -msgstr "Toon patiënt" - -#: classes/Gems/Default/RespondentPlanAction.php:73 -msgid "Show track" -msgstr "Toon traject" - -#: classes/Gems/Default/RespondentPlanAction.php:136 -msgid " of " -msgstr " van " - -#: classes/Gems/Default/RespondentPlanAction.php:137 -msgid "Progress" -msgstr "Voortgang" - -#: classes/Gems/Default/RespondentPlanAction.php:144 -msgid "Respondent planning" -msgstr "Per patiënt plannen" - -#: classes/Gems/Default/RoleAction.php:175 -msgid "Illegal name" -msgstr "Naam niet toegestaan" - -#: classes/Gems/Default/RoleAction.php:199 -#: classes/Gems/Default/RoleAction.php:258 -msgid "Parents" -msgstr "Afgeleid van" - -#: classes/Gems/Default/RoleAction.php:214 -msgid "Editing... [truncated message content] |
From: <gem...@li...> - 2011-11-22 15:43:26
|
Revision: 272 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=272&view=rev Author: matijsdejong Date: 2011-11-22 15:43:20 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Changelog for ticket #43: Flexible user password constraints: Modified Paths: -------------- trunk/library/changelog.txt Modified: trunk/library/changelog.txt =================================================================== --- trunk/library/changelog.txt 2011-11-22 15:30:41 UTC (rev 271) +++ trunk/library/changelog.txt 2011-11-22 15:43:20 UTC (rev 272) @@ -1,6 +1,7 @@ Important changes from 1.4.3 => 1.5 ============================================================ Passwords should be set with a project.ini->salt. Salt is now a required project setting! +Setting rules for user passwords has changed and has become more powerfull, unless you do not set them. The table gems__staff is split into gems__staff, gems__user_logins with generic login data and gems__users_passwords containing db stored password information. GemsEscort->afterLogin(), ->afterLogout() and ->loadLoginInfo(0 are now all handled by Gems_User_UserDefinitionInterface objects. The table gems__user_ids provides unique and non-sequential user ids accross gems__staff and gems__respondents. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 15:30:53
|
Revision: 271 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=271&view=rev Author: mennodekker Date: 2011-11-22 15:30:41 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Unrelated fix to IndexAction resetpassword (dev email removed) to be ported to trunk some day :) + added some first thoughts on changes needed to allow projects to work with the new system Modified Paths: -------------- branches/userloader/classes/Gems/Default/IndexAction.php branches/userloader/classes/Gems/Default/StaffAction.php branches/userloader/classes/Gems/User/UserLoader.php Modified: branches/userloader/classes/Gems/Default/IndexAction.php =================================================================== --- branches/userloader/classes/Gems/Default/IndexAction.php 2011-11-22 15:18:23 UTC (rev 270) +++ branches/userloader/classes/Gems/Default/IndexAction.php 2011-11-22 15:30:41 UTC (rev 271) @@ -1,5 +1,4 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -360,12 +359,14 @@ $this->addMessage($this->_('This key timed out or does not belong to this user.')); } } else { - // P{ass mail by key + // Pass mail by key $mail = new MUtil_Mail(); - $mail->setFrom('mj...@ma...'); $mail->addTo($user->getEmailAddress(), $user->getFullName()); - if (isset($this->escort->project->email) && isset($this->escort->project->email['bcc'])) { + if (isset($this->escort->project->email['site'])) { + $mail->setFrom($this->escort->project->email['site']); + } + if (isset($this->escort->project->email['bcc'])) { $mail->addBcc($this->escort->project->email['bcc']); } Modified: branches/userloader/classes/Gems/Default/StaffAction.php =================================================================== --- branches/userloader/classes/Gems/Default/StaffAction.php 2011-11-22 15:18:23 UTC (rev 270) +++ branches/userloader/classes/Gems/Default/StaffAction.php 2011-11-22 15:30:41 UTC (rev 271) @@ -44,6 +44,8 @@ */ class Gems_Default_StaffAction extends Gems_Controller_BrowseEditAction { + //@@TODO What if we want a different one per organization? + //Maybe check if org has a default and otherwise use this one? public $defaultStaffDefinition = Gems_User_UserLoader::USER_STAFF; public $filterStandard = array('gsf_active' => 1); @@ -94,21 +96,22 @@ { $dbLookup = $this->util->getDbLookup(); - switch ($data['gul_user_class']) { - case Gems_User_UserLoader::USER_STAFF: + $passwordField = false; + + //@@TODO Like this? should work when user is not saved, but storing the password should be done when + //we do have a user... + $definition = $this->loader->getUserLoader()->getUserDefinition($data['gul_user_class']); + + if ($definition->canSetPassword()) { + //@@TODO: Should we handle it like this? The userdef has a setpassword method... + if ($definition instanceof Gems_User_StaffUserDefinition) { Gems_Model::addUserPassword($model); $passwordField = 'gup_password'; $model->setOnSave($passwordField, array($this->project, 'getValueHash')); - break; - - case Gems_User_UserLoader::USER_OLD_STAFF: + } elseif ($definition instanceof Gems_User_OldStaffUserDefinition) { $passwordField = 'gsf_password'; $model->setOnSave($passwordField, array($this, 'getOldPasswordHash')); - break; - - default: - $passwordField = false; - break; + } } $model->set('gsf_id_primary_group', 'multiOptions', MUtil_Lazy::call($dbLookup->getAllowedStaffGroups)); @@ -125,6 +128,8 @@ $bridge->addHidden( 'gul_id_user'); $bridge->addHidden( 'gup_id_user'); $bridge->addHidden( 'gul_user_class'); + //@@TODO: How do we change this? Only per org, or allow per user? + //What classes are available? Maybe use something like event loader and add a little desc. to each type? $bridge->addText( 'gsf_login', 'size', 15, 'minlength', 4, 'validator', $model->createUniqueValidator('gsf_login', array('gsf_id_user'))); Modified: branches/userloader/classes/Gems/User/UserLoader.php =================================================================== --- branches/userloader/classes/Gems/User/UserLoader.php 2011-11-22 15:18:23 UTC (rev 270) +++ branches/userloader/classes/Gems/User/UserLoader.php 2011-11-22 15:30:41 UTC (rev 271) @@ -188,7 +188,7 @@ { $defName = $this->getUserClassName($login_name, $organization); - $definition = $this->_getClass($defName); + $definition = $this->getUserDefinition($defName); $values = $definition->getUserData($login_name, $organization); @@ -206,6 +206,20 @@ } /** + * Retrieve a userdefinition, so we can check it's capabilities without + * instantiating a user + * + * @param type $userClassName + * @return Gems_User_UserDefinitionInterface + */ + public function getUserDefinition($userClassName) + { + $definition = $this->_getClass($userClassName); + + return $definition; + } + + /** * Get a staff user using the $staff_id * * @param int $staff_id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 15:18:36
|
Revision: 270 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=270&view=rev Author: matijsdejong Date: 2011-11-22 15:18:23 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Ticket #43: Flexible user password constraints: - IndexAction checks if the user password is according to the password constraints - StaffAction checks the password, but only for new users - OptionAction uses validators (with Gems_Auth) as otherwise the checks became to complex for me Updated translations Modified Paths: -------------- trunk/library/classes/Gems/Default/IndexAction.php trunk/library/classes/Gems/Default/OptionAction.php trunk/library/classes/Gems/Default/ProjectTracksAction.php trunk/library/classes/Gems/Default/StaffAction.php trunk/library/classes/Gems/Project/ProjectSettings.php trunk/library/classes/Gems/User/OldStaffUserDefinition.php trunk/library/classes/Gems/User/PasswordChecker.php trunk/library/classes/Gems/User/User.php trunk/library/classes/Gems/User/UserLoader.php trunk/library/languages/default-en.mo trunk/library/languages/default-en.po trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po Added Paths: ----------- trunk/library/classes/Gems/User/UserNewPasswordValidator.php trunk/library/classes/Gems/User/UserPasswordValidator.php Modified: trunk/library/classes/Gems/Default/IndexAction.php =================================================================== --- trunk/library/classes/Gems/Default/IndexAction.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/Default/IndexAction.php 2011-11-22 15:18:23 UTC (rev 270) @@ -282,6 +282,13 @@ $user->afterLogin($form->getValues()); + //* + if ($messages = $user->reportPasswordWeakness($request->getParam('password'))) { + $user->setPasswordResetRequired(true); + $this->addMessage($this->_('Your password must be changed.')); + $this->addMessage($messages); + } // */ + /** * Fix current locale / organization in cookies */ @@ -301,7 +308,10 @@ if ($previousRequestParameters = $this->session->previousRequestParameters) { $this->_reroute(array('controller' => $previousRequestParameters['controller'], 'action' => $previousRequestParameters['action']), false); } else { - // This reroutes to the first available menu page after login + // This reroutes to the first available menu page after login. + // + // Do not user $user->gotoStartPage() as the menu is still set + // for no login. $this->_reroute(array('controller' => null, 'action' => null), true); } return; Modified: trunk/library/classes/Gems/Default/OptionAction.php =================================================================== --- trunk/library/classes/Gems/Default/OptionAction.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/Default/OptionAction.php 2011-11-22 15:18:23 UTC (rev 270) @@ -98,6 +98,7 @@ $element->setAttrib('maxlength', 20); $element->setRenderPassword(true); $element->setRequired(true); + $element->addValidator(new Gems_User_UserPasswordValidator($user, $this->translate)); $form->addElement($element); } @@ -108,7 +109,7 @@ $element->setAttrib('maxlength', 20); $element->setRequired(true); $element->setRenderPassword(true); - $element->addValidator('StringLength', true, array('min' => $this->project->passwords['MinimumLength'], 'max' => 20)); + $element->addValidator(new Gems_User_UserNewPasswordValidator($user)); $element->addValidator(new MUtil_Validate_IsConfirmed('repeat_password', $this->_('Repeat password'))); $form->addElement($element); @@ -130,26 +131,16 @@ /**************** * Process form * ****************/ - if ($this->_request->isPost()) { - if ($form->isValid($_POST)) { - $authResult = $user->authenticate(array('userlogin' => $user->getLoginName(), - 'password' => $_POST['old_password'], - 'organization' =>$user->getOrganizationId())); - if ($authResult->isValid()) { - $user->setPassword($_POST['new_password']); + if ($this->_request->isPost() && $form->isValid($_POST)) { + $user->setPassword($_POST['new_password']); - $this->addMessage($this->_('New password is active.')); - $this->_reroute(array($this->getRequest()->getActionKey() => 'edit')); - } else { - if (isset($_POST['old_password'])) { - if ($_POST['old_password'] === strtoupper($_POST['old_password'])) { - $this->addMessage($this->_('Caps Lock seems to be on!')); - } else { - $errors = $authResult->getMessages(); - $this->addMessage($errors); + $this->addMessage($this->_('New password is active.')); + $this->_reroute(array($this->getRequest()->getActionKey() => 'edit')); - } - } + } else { + if (isset($_POST['old_password'])) { + if ($_POST['old_password'] === strtoupper($_POST['old_password'])) { + $this->addMessage($this->_('Caps Lock seems to be on!')); } } $form->populate($_POST); Modified: trunk/library/classes/Gems/Default/ProjectTracksAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-11-22 15:18:23 UTC (rev 270) @@ -90,6 +90,18 @@ return $this->_('Active tracks'); } + /* + public function indexAction() + { + parent::indexAction(); + + $user = $this->loader->getCurrentUser(); + foreach (array('X1X', 'adminijadIran', 'xx!2yy2z', 'admin2') as $password) { + $this->addMessage($password); + $this->addMessage($user->reportPasswordWeakness($password)); + } + } // */ + public function questionsAction() { if ($sid = $this->_getParam(Gems_Model::SURVEY_ID)) { Modified: trunk/library/classes/Gems/Default/StaffAction.php =================================================================== --- trunk/library/classes/Gems/Default/StaffAction.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/Default/StaffAction.php 2011-11-22 15:18:23 UTC (rev 270) @@ -92,6 +92,14 @@ */ protected function addFormElements(MUtil_Model_FormBridge $bridge, MUtil_Model_ModelAbstract $model, array $data, $new = false) { + // Sorry, for the time being no password complexity checking on new + // users. Can be done, but is to complex for the moment. + if ($new) { + $user = false; + } else { + $user = $this->loader->getUserLoader()->getUserByStaffId($data['gsf_id_user']); + // MUtil_Echo::track($data['gsf_id_user'], $user->getLoginName()); + } $dbLookup = $this->util->getDbLookup(); switch ($data['gul_user_class']) { @@ -137,14 +145,17 @@ } if ($passwordField) { - $bridge->addPassword($passwordField, + $pwdElem = $bridge->addPassword($passwordField, 'label', $this->_('Password'), - 'minlength', $this->project->passwords['MinimumLength'], // 'renderPassword', true, 'repeatLabel', $this->_('Repeat password'), 'required', $new, 'size', 15 ); + + if ($user instanceof Gems_User_User) { + $pwdElem->addValidator(new Gems_User_UserNewPasswordValidator($user)); + } } $bridge->addRadio( 'gsf_gender', 'separator', ''); $bridge->addText( 'gsf_first_name', 'label', $this->_('First name')); Modified: trunk/library/classes/Gems/Project/ProjectSettings.php =================================================================== --- trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-22 15:18:23 UTC (rev 270) @@ -213,7 +213,7 @@ { $args = MUtil_Ra::flatten(func_get_args()); $args = array_change_key_case(array_flip(array_filter($args))); - //MUtil_Echo::track($args); + // MUtil_Echo::track($args); $rules = array(); if (isset($this->passwords) && is_array($this->passwords)) { @@ -225,7 +225,7 @@ /** * Timeout for sessions in seconds. - * + * * @return int */ public function getSessionTimeOut() @@ -236,16 +236,16 @@ return $this->defaultSessionTimeout; } } - + /** * Returns an array with throttling settings for the ask * controller - * + * * @return array */ public function getAskThrottleSettings() { - // Check for the 'askThrottle' config section + // Check for the 'askThrottle' config section if (!empty($this->askThrottle)) { return $this->askThrottle; } else { Modified: trunk/library/classes/Gems/User/OldStaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 15:18:23 UTC (rev 270) @@ -67,6 +67,7 @@ */ public function afterLogin(Zend_Auth_Result $authResult, $formValues) { + // MUtil_Echo::track($authResult->isValid(), $formValues); if ($authResult->isValid()) { $login_name = $formValues['userlogin']; $organization = $formValues['organization']; Modified: trunk/library/classes/Gems/User/PasswordChecker.php =================================================================== --- trunk/library/classes/Gems/User/PasswordChecker.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/User/PasswordChecker.php 2011-11-22 15:18:23 UTC (rev 270) @@ -90,7 +90,7 @@ { $len = intval($parameter); $results = array(); - if (preg_match_all('/[A-Z]/', $password, $results) < $len) { + if ($len && (preg_match_all('/[A-Z]/', $password, $results) < $len)) { $this->_addError(sprintf( $this->translate->plural('A password should contain at least one uppercase character.', 'A password should contain at least %d uppercase characters.', $len), $len)); @@ -107,7 +107,7 @@ { $len = intval($parameter); $results = array(); - if (preg_match_all('/[a-z]/', $password, $results) < $len) { + if ($len && (preg_match_all('/[a-z]/', $password, $results) < $len)) { $this->_addError(sprintf( $this->translate->plural('A password should contain at least one lowercase character.', 'A password should contain at least %d lowercase characters.', $len), $len)); @@ -123,7 +123,7 @@ protected function minLength($parameter, $password) { $len = intval($parameter); - if (strlen($password) < $len) { + if ($len && (strlen($password) < $len)) { $this->_addError(sprintf($this->translate->_('A password should be at least %d characters long.'), $len)); } } @@ -137,12 +137,14 @@ protected function notAlphaCount($parameter, $password) { $len = intval($parameter); - $results = array(); - $count = preg_match_all('/[A-Za-z]/', $password, $results); - if (strlen($password) - $count < $len) { - $this->_addError(sprintf( - $this->translate->plural('A password should contain at least one not alphabetic character.', 'A password should contain at least %d not alphabetic characters.', $len), - $len)); + if ($len) { + $results = array(); + $count = preg_match_all('/[A-Za-z]/', $password, $results); + if (strlen($password) - $count < $len) { + $this->_addError(sprintf( + $this->translate->plural('A password should contain at least one not alphabetic character.', 'A password should contain at least %d not alphabetic characters.', $len), + $len)); + } } } @@ -155,12 +157,14 @@ protected function notAlphaNumCount($parameter, $password) { $len = intval($parameter); - $results = array(); - $count = preg_match_all('/[A-Za-z]/', $password, $results); - if (strlen($password) - $count < $len) { - $this->_addError(sprintf( - $this->translate->plural('A password should contain at least one not alphanumeric character.', 'A password should contain at least %d not alphanumeric characters.', $len), - $len)); + if ($len) { + $results = array(); + $count = preg_match_all('/[A-Za-z]/', $password, $results); + if (strlen($password) - $count < $len) { + $this->_addError(sprintf( + $this->translate->plural('A password should contain at least one not alphanumeric character.', 'A password should contain at least %d not alphanumeric characters.', $len), + $len)); + } } } @@ -192,7 +196,7 @@ { $len = intval($parameter); $results = array(); - if (preg_match_all('/[0-9]/', $password, $results) < $len) { + if ($len && (preg_match_all('/[0-9]/', $password, $results) < $len)) { $this->_addError(sprintf( $this->translate->plural('A password should contain at least one number.', 'A password should contain at least %d numbers.', $len), $len)); @@ -211,7 +215,7 @@ $this->_errors = array(); $this->user = $user; - $rules = $this->project->getPasswordRules($user->getOrganizationCode(), $user->getRoles()); + $rules = $this->project->getPasswordRules($user->getOrganizationCode(), $user->getRoles(), $user->getDefinitionName()); // MUtil_Echo::track($rules); foreach ($rules as $rule => $parameter) { @@ -219,6 +223,7 @@ $this->$rule($parameter, $password); } } + // MUtil_Echo::track($this->_errors); return $this->_errors; } Modified: trunk/library/classes/Gems/User/User.php =================================================================== --- trunk/library/classes/Gems/User/User.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/User/User.php 2011-11-22 15:18:23 UTC (rev 270) @@ -294,6 +294,16 @@ } /** + * Returns the name of the user definition. + * + * @return string + */ + public function getDefinitionName() + { + return $this->_getVar('__user_definition'); + } + + /** * Return true if this user has a password. * * @return boolean @@ -304,6 +314,20 @@ } /** + * Get the array to use for authenticate() + * + * @param string $password + * @return array + */ + public function getFormValuesForPassword($password) + { + return array( + 'userlogin' => $this->getLoginName(), + 'password' => $password, + 'organization' => $this->getOrganizationId()); + } + + /** * Returns the full user name (first, prefix, last). * * @return string @@ -534,6 +558,21 @@ } /** + * Check for password weakness. + * + * @param string $password + * @return mixed String or array of strings containing warning messages or nothing + */ + public function reportPasswordWeakness($password) + { + if ($this->canSetPassword()) { + $checker = $this->userLoader->getPasswordChecker(); + + return $checker->reportPasswordWeakness($this, $password); + } + } + + /** * Set this user as the current user. * * This means that the data about this user will be stored in a session. Modified: trunk/library/classes/Gems/User/UserLoader.php =================================================================== --- trunk/library/classes/Gems/User/UserLoader.php 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/classes/Gems/User/UserLoader.php 2011-11-22 15:18:23 UTC (rev 270) @@ -114,9 +114,9 @@ // is removed from GemsEscort if (! $this->session instanceof Zend_Session_Namespace) { $this->session = new Zend_Session_Namespace('gems.' . GEMS_PROJECT_NAME . '.session'); - + $idleTimeout = $this->project->getSessionTimeout(); - + $this->session->setExpirationSeconds($idleTimeout); $extras['session'] = $this->session; @@ -178,6 +178,16 @@ } /** + * Get password weakness checker. + * + * @return Gems_User_PasswordChecker + */ + public function getPasswordChecker() + { + return $this->_getClass('passwordChecker'); + } + + /** * Returns a user object, that may be empty if no user exist. * * @param string $login_name @@ -191,6 +201,7 @@ $definition = $this->_getClass($defName); $values = $definition->getUserData($login_name, $organization); + // MUtil_Echo::track($defName, $login_name, $organization, $values); if (! isset($values['user_active'])) { $values['user_active'] = true; @@ -215,6 +226,7 @@ { $data = $this->db->fetchRow("SELECT gsf_login, gsf_id_organization FROM gems__staff WHERE gsf_id_user = ?", $staff_id); + // MUtil_Echo::track($data); if (false == $data) { $data = array('gsf_login' => null, 'gsf_id_organization' => null); } Added: trunk/library/classes/Gems/User/UserNewPasswordValidator.php =================================================================== --- trunk/library/classes/Gems/User/UserNewPasswordValidator.php (rev 0) +++ trunk/library/classes/Gems/User/UserNewPasswordValidator.php 2011-11-22 15:18:23 UTC (rev 270) @@ -0,0 +1,113 @@ +<?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. + * + * + * @package Gems + * @subpackage User + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Sample.php 203 2011-07-07 12:51:32Z matijs $ + */ + +/** + * + * + * @package Gems + * @subpackage User + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_User_UserNewPasswordValidator implements Zend_Validate_Interface +{ + /** + * The reported problems with the password. + * + * @var array or null + */ + private $_report; + + /** + * + * @var Gems_User_User + */ + private $_user; + + /** + * + * @param Gems_User_User $user The user to check + */ + public function __construct(Gems_User_User $user) + { + $this->_user = $user; + } + + /** + * Returns true if and only if $value meets the validation requirements + * + * If $value fails validation, then this method returns false, and + * getMessages() will return an array of messages that explain why the + * validation failed. + * + * @param mixed $value + * @param mixed $content + * @return boolean + * @throws Zend_Validate_Exception If validation of $value is impossible + */ + public function isValid($value, $context = array()) + { + $this->_report = $this->_user->reportPasswordWeakness($value); + + // MUtil_Echo::track($value, $this->_report); + + return ! (boolean) $this->_report; + } + + /** + * Returns an array of messages that explain why the most recent isValid() + * call returned false. The array keys are validation failure message identifiers, + * and the array values are the corresponding human-readable message strings. + * + * If isValid() was never called or if the most recent isValid() call + * returned true, then this method returns an empty array. + * + * @return array + */ + public function getMessages() + { + if ($this->_report) { + return $this->_report; + + } else { + return array(); + } + + + } +} Copied: trunk/library/classes/Gems/User/UserPasswordValidator.php (from rev 216, trunk/library/classes/Gems/User/UserPasswordValidator.php) =================================================================== --- trunk/library/classes/Gems/User/UserPasswordValidator.php (rev 0) +++ trunk/library/classes/Gems/User/UserPasswordValidator.php 2011-11-22 15:18:23 UTC (rev 270) @@ -0,0 +1,120 @@ +<?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. + * + * + * @package Gems + * @subpackage User + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Sample.php 203 2011-07-07 12:51:32Z matijs $ + */ + +/** + * + * + * @package Gems + * @subpackage User + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_User_UserPasswordValidator implements Zend_Validate_Interface +{ + /** + * + * @var Gems_User_User + */ + private $_user; + + /** + * + * @var Zend_Translate + */ + private $_translate; + + /** + * + * @var boolean + */ + private $_valid = false; + + /** + * + * @param Gems_User_User $user The user to check + * @param Zend_Translate $translate Optional translator + */ + public function __construct(Gems_User_User $user, Zend_Translate $translate = null) + { + $this->_user = $user; + $this->_translate = $translate ? $translate : new MUtil_Translate_Adapter_Potemkin(); + } + + /** + * Returns true if and only if $value meets the validation requirements + * + * If $value fails validation, then this method returns false, and + * getMessages() will return an array of messages that explain why the + * validation failed. + * + * @param mixed $value + * @param mixed $content + * @return boolean + * @throws Zend_Validate_Exception If validation of $value is impossible + */ + public function isValid($value, $context = array()) + { + $authResult = $this->_user->authenticate($this->_user->getFormValuesForPassword($value)); + + $this->_valid = $authResult->isValid(); + + return $this->_valid; + } + + /** + * Returns an array of messages that explain why the most recent isValid() + * call returned false. The array keys are validation failure message identifiers, + * and the array values are the corresponding human-readable message strings. + * + * If isValid() was never called or if the most recent isValid() call + * returned true, then this method returns an empty array. + * + * @return array + */ + public function getMessages() + { + if ($this->_valid) { + return array(); + + } else { + return array($this->_translate->_('Wrong password.')); + } + + + } +} Property changes on: trunk/library/classes/Gems/User/UserPasswordValidator.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/newUser/classes/Gems/User/UserPasswordValidator.php:113-150 /branches/newUser2/classes/Gems/User/UserPasswordValidator.php:175-207 Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-11-22 15:09:32 UTC (rev 269) +++ trunk/library/languages/default-en.po 2011-11-22 15:18:23 UTC (rev 270) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-16 19:09+0100\n" +"POT-Creation-Date: 2011-11-22 16:14+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -18,58 +18,58 @@ "X-Poedit-KeywordsList: plural:1,2\n" "X-Poedit-SearchPath-0: .\n" -#: classes/GemsEscort.php:201 +#: classes/GemsEscort.php:207 #, php-format msgid "Path %s not writable" msgstr "Path %s not writable" -#: classes/GemsEscort.php:876 +#: classes/GemsEscort.php:887 #, php-format msgid "User: %s" msgstr "User: %s" -#: classes/GemsEscort.php:900 +#: classes/GemsEscort.php:911 msgid "version" msgstr "version" -#: classes/GemsEscort.php:1330 -msgid "Take note: your session has expired, your inputs where not saved. Please check the input data and try again" -msgstr "Take note: your session has expired, your inputs where not saved. Please check the input data and try again" +#: classes/GemsEscort.php:1342 +msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" +msgstr "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -#: classes/GemsEscort.php:1454 +#: classes/GemsEscort.php:1466 msgid "Please check back later." msgstr "Please check back later." -#: classes/GemsEscort.php:1456 -#: classes/GemsEscort.php:1460 -#: classes/GemsEscort.php:1461 +#: classes/GemsEscort.php:1468 +#: classes/GemsEscort.php:1472 +#: classes/GemsEscort.php:1473 msgid "System is in maintenance mode" msgstr "System is in maintenance mode" -#: classes/GemsEscort.php:1470 +#: classes/GemsEscort.php:1483 msgid "No access to site." msgstr "No access to site." -#: classes/GemsEscort.php:1472 -#: classes/GemsEscort.php:1508 +#: classes/GemsEscort.php:1485 +#: classes/GemsEscort.php:1521 msgid "You have no access to this site." msgstr "You have no access to this site." -#: classes/GemsEscort.php:1488 +#: classes/GemsEscort.php:1501 msgid "No access to page" msgstr "No access to page" -#: classes/GemsEscort.php:1490 +#: classes/GemsEscort.php:1503 #, php-format msgid "Access to this page is not allowed for current role: %s." msgstr "Access to this page is not allowed for current role: %s." -#: classes/GemsEscort.php:1495 -#: classes/GemsEscort.php:1506 +#: classes/GemsEscort.php:1508 +#: classes/GemsEscort.php:1519 msgid "You are no longer logged in." msgstr "You are no longer logged in." -#: classes/GemsEscort.php:1496 +#: classes/GemsEscort.php:1509 msgid "You must login to access this page." msgstr "You must login to access this page." @@ -77,7 +77,7 @@ msgid "Database needs to be updated!" msgstr "Database needs to be updated!" -#: classes/Gems/Auth.php:228 +#: classes/Gems/Auth.php:241 msgid "Combination of organization, username and password not found." msgstr "Combination of organization, username and password not found." @@ -338,62 +338,77 @@ msgid "Changelog" msgstr "Changelog" -#: classes/Gems/Model.php:190 +#: classes/Gems/Model.php:193 msgid "Respondent nr" msgstr "Patient nr" -#: classes/Gems/Model.php:191 +#: classes/Gems/Model.php:194 msgid "Opened" msgstr "Opened" -#: classes/Gems/Model.php:192 +#: classes/Gems/Model.php:195 msgid "Consent" msgstr "Consent" -#: classes/Gems/Model.php:194 +#: classes/Gems/Model.php:197 msgid "E-Mail" msgstr "E-Mail" -#: classes/Gems/Model.php:199 +#: classes/Gems/Model.php:202 msgid "Gender" msgstr "Gender" -#: classes/Gems/Model.php:200 +#: classes/Gems/Model.php:203 msgid "First name" msgstr "First name" -#: classes/Gems/Model.php:201 +#: classes/Gems/Model.php:204 msgid "Surname prefix" msgstr "Surname prefix" -#: classes/Gems/Model.php:202 +#: classes/Gems/Model.php:205 msgid "Last name" msgstr "Last name" -#: classes/Gems/Model.php:204 +#: classes/Gems/Model.php:207 msgid "Name" msgstr "Name" -#: classes/Gems/Model.php:207 +#: classes/Gems/Model.php:210 msgid "Street" msgstr "Street" -#: classes/Gems/Model.php:208 +#: classes/Gems/Model.php:211 msgid "Zipcode" msgstr "Zipcode" -#: classes/Gems/Model.php:209 +#: classes/Gems/Model.php:212 msgid "City" msgstr "City" -#: classes/Gems/Model.php:211 +#: classes/Gems/Model.php:214 msgid "Phone" msgstr "Phone" -#: classes/Gems/Model.php:213 +#: classes/Gems/Model.php:216 msgid "Birthday" msgstr "Birthday" +#: classes/Gems/Pdf.php:195 +#, php-format +msgid "PDF Source File '%s' not found!" +msgstr "PDF Source File '%s' not found!" + +#: classes/Gems/Pdf.php:237 +#, php-format +msgid "Could not create '%s' directory." +msgstr "Could not create '%s' directory." + +#: classes/Gems/Pdf.php:280 +#, php-format +msgid " The error message is: %s" +msgstr " The error message is: %s" + #: classes/Gems/Tracker.php:732 msgid "Checks performed" msgstr "Checks performed" @@ -412,96 +427,100 @@ msgid "Trying upgrade for %s to level %s: %s" msgstr "Trying upgrade for %s to level %s: %s" -#: classes/Gems/Controller/BrowseEditAction.php:344 +#: classes/Gems/UpgradesAbstract.php:337 +msgid "Cache cleaned" +msgstr "Cache cleaned" + +#: classes/Gems/Controller/BrowseEditAction.php:346 #, php-format msgid "New %s..." msgstr "New %s..." -#: classes/Gems/Controller/BrowseEditAction.php:376 +#: classes/Gems/Controller/BrowseEditAction.php:378 #, php-format msgid "Delete %s" msgstr "Delete %s" -#: classes/Gems/Controller/BrowseEditAction.php:380 +#: classes/Gems/Controller/BrowseEditAction.php:382 #, php-format msgid "%2$u %1$s deleted" msgstr "%2$u %1$s deleted" -#: classes/Gems/Controller/BrowseEditAction.php:394 +#: classes/Gems/Controller/BrowseEditAction.php:396 #, php-format msgid "Edit %s" msgstr "Edit %s" -#: classes/Gems/Controller/BrowseEditAction.php:491 +#: classes/Gems/Controller/BrowseEditAction.php:493 msgid "Free search text" msgstr "Free search text" -#: classes/Gems/Controller/BrowseEditAction.php:562 +#: classes/Gems/Controller/BrowseEditAction.php:564 msgid "Search" msgstr "Search" -#: classes/Gems/Controller/BrowseEditAction.php:578 +#: classes/Gems/Controller/BrowseEditAction.php:580 #, php-format msgid "No %s found" msgstr "No %s found" -#: classes/Gems/Controller/BrowseEditAction.php:651 +#: classes/Gems/Controller/BrowseEditAction.php:653 #, php-format msgid "No %s found." msgstr "No %s found." -#: classes/Gems/Controller/BrowseEditAction.php:766 +#: classes/Gems/Controller/BrowseEditAction.php:768 msgid "Are you sure?" msgstr "Are you sure?" -#: classes/Gems/Controller/BrowseEditAction.php:782 +#: classes/Gems/Controller/BrowseEditAction.php:784 msgid "Yes" msgstr "Yes" -#: classes/Gems/Controller/BrowseEditAction.php:783 +#: classes/Gems/Controller/BrowseEditAction.php:785 msgid "No" msgstr "No" -#: classes/Gems/Controller/BrowseEditAction.php:836 +#: classes/Gems/Controller/BrowseEditAction.php:838 #, php-format msgid "Unknown %s requested" msgstr "Unknown %s requested" -#: classes/Gems/Controller/BrowseEditAction.php:859 +#: classes/Gems/Controller/BrowseEditAction.php:861 #, php-format msgid "New %1$s..." msgstr "New %1$s..." -#: classes/Gems/Controller/BrowseEditAction.php:867 +#: classes/Gems/Controller/BrowseEditAction.php:869 msgid "Save" msgstr "Save" -#: classes/Gems/Controller/BrowseEditAction.php:903 +#: classes/Gems/Controller/BrowseEditAction.php:905 #, php-format msgid "%2$u %1$s saved" msgstr "%2$u %1$s saved" -#: classes/Gems/Controller/BrowseEditAction.php:906 +#: classes/Gems/Controller/BrowseEditAction.php:908 msgid "No changes to save." msgstr "No changes to save." -#: classes/Gems/Controller/BrowseEditAction.php:915 +#: classes/Gems/Controller/BrowseEditAction.php:917 msgid "Input error! No changes saved!" msgstr "Input error! No changes saved!" -#: classes/Gems/Controller/BrowseEditAction.php:943 +#: classes/Gems/Controller/BrowseEditAction.php:945 #, php-format msgid "Show %s" msgstr "Show %s" -#: classes/Gems/Controller/BrowseEditAction.php:950 +#: classes/Gems/Controller/BrowseEditAction.php:952 #, php-format msgid "Unknown %s." msgstr "Unknown %s." #: classes/Gems/Controller/ModelActionAbstract.php:97 #: classes/Gems/Default/AskAction.php:150 -#: classes/Gems/Default/DatabaseAction.php:524 +#: classes/Gems/Default/DatabaseAction.php:532 msgid "Cancel" msgstr "Cancel" @@ -581,32 +600,36 @@ msgid "OK" msgstr "OK" -#: classes/Gems/Default/AskAction.php:229 +#: classes/Gems/Default/AskAction.php:233 +msgid "The server is currently busy, please wait a while and try again." +msgstr "The server is currently busy, please wait a while and try again." + +#: classes/Gems/Default/AskAction.php:255 msgid "Tokens identify a survey that was assigned to you personally." msgstr "Tokens identify a survey that was assigned to you personally." -#: classes/Gems/Default/AskAction.php:229 +#: classes/Gems/Default/AskAction.php:255 msgid "Entering the token and pressing OK will open that survey." msgstr "Entering the token and pressing OK will open that survey." -#: classes/Gems/Default/AskAction.php:233 +#: classes/Gems/Default/AskAction.php:259 msgid "After answering the survey you will be logged off automatically." msgstr "After answering the survey you will be logged off automatically." -#: classes/Gems/Default/AskAction.php:235 +#: classes/Gems/Default/AskAction.php:261 msgid "After answering the survey you will return to the respondent overview screen." msgstr "After answering the survey you will return to the paitent overview screen." -#: classes/Gems/Default/AskAction.php:242 +#: classes/Gems/Default/AskAction.php:268 msgid "A token consists of two groups of four letters and numbers, separated by an optional hyphen. Tokens are case insensitive." msgstr "A token consists of two groups of four letters and numbers, separated by an optional hyphen. Tokens are case insensitive." -#: classes/Gems/Default/AskAction.php:243 +#: classes/Gems/Default/AskAction.php:269 msgid "The number zero and the letter O are treated as the same; the same goes for the number one and the letter L." msgstr "The number zero and the letter O are treated as the same; the same goes for the number one and the letter L." #: classes/Gems/Default/ConsentAction.php:68 -#: classes/Gems/Default/GroupAction.php:87 +#: classes/Gems/Default/GroupAction.php:88 msgid "Description" msgstr "Description" @@ -813,12 +836,12 @@ msgstr "Database object overview" #: classes/Gems/Default/DatabaseAction.php:316 -#: classes/Gems/Default/DatabaseAction.php:360 +#: classes/Gems/Default/DatabaseAction.php:368 msgid "Level" msgstr "Level" #: classes/Gems/Default/DatabaseAction.php:317 -#: classes/Gems/Default/DatabaseAction.php:361 +#: classes/Gems/Default/DatabaseAction.php:369 msgid "Subtype" msgstr "Subtype" @@ -827,12 +850,12 @@ msgstr "To be executed" #: classes/Gems/Default/DatabaseAction.php:320 -#: classes/Gems/Default/DatabaseAction.php:364 +#: classes/Gems/Default/DatabaseAction.php:372 msgid "Executed" msgstr "Executed" #: classes/Gems/Default/DatabaseAction.php:321 -#: classes/Gems/Default/DatabaseAction.php:365 +#: classes/Gems/Default/DatabaseAction.php:373 msgid "Finished" msgstr "Finished" @@ -874,109 +897,109 @@ msgid "%d patch(es) executed." msgstr "%d patch(es) executed." -#: classes/Gems/Default/DatabaseAction.php:359 +#: classes/Gems/Default/DatabaseAction.php:367 msgid "Patch" msgstr "Patch" -#: classes/Gems/Default/DatabaseAction.php:363 +#: classes/Gems/Default/DatabaseAction.php:371 msgid "Query" msgstr "Query" -#: classes/Gems/Default/DatabaseAction.php:366 +#: classes/Gems/Default/DatabaseAction.php:374 msgid "Result" msgstr "Result" -#: classes/Gems/Default/DatabaseAction.php:390 +#: classes/Gems/Default/DatabaseAction.php:398 msgid "Patch maintenance" msgstr "Patch maintenance" -#: classes/Gems/Default/DatabaseAction.php:394 +#: classes/Gems/Default/DatabaseAction.php:402 msgid "Patch overview" msgstr "Patch overview" -#: classes/Gems/Default/DatabaseAction.php:456 +#: classes/Gems/Default/DatabaseAction.php:464 msgid "This database object does not exist. You cannot create it." msgstr "This database object does not exist. You cannot create it." -#: classes/Gems/Default/DatabaseAction.php:462 +#: classes/Gems/Default/DatabaseAction.php:470 msgid "This database object has no script. You cannot execute it." msgstr "This database object has no script. You cannot execute it." -#: classes/Gems/Default/DatabaseAction.php:473 +#: classes/Gems/Default/DatabaseAction.php:481 #, php-format msgid "Run %s" msgstr "Run %s" -#: classes/Gems/Default/DatabaseAction.php:492 +#: classes/Gems/Default/DatabaseAction.php:500 #, php-format msgid "Starting %d object creation scripts." msgstr "Starting %d object creation scripts." -#: classes/Gems/Default/DatabaseAction.php:497 +#: classes/Gems/Default/DatabaseAction.php:505 #, php-format msgid "Finished %s creation script for object %d of %d" msgstr "Finished %s creation script for object %d of %d" -#: classes/Gems/Default/DatabaseAction.php:501 +#: classes/Gems/Default/DatabaseAction.php:509 msgid "All objects exist. Nothing was executed." msgstr "All objects exist. Nothing was executed." -#: classes/Gems/Default/DatabaseAction.php:507 +#: classes/Gems/Default/DatabaseAction.php:515 msgid "Create not-existing database objects" msgstr "Create not-existing database objects" -#: classes/Gems/Default/DatabaseAction.php:509 +#: classes/Gems/Default/DatabaseAction.php:517 #, php-format msgid "One database object does not exist." msgid_plural "These %d database objects do not exist." msgstr[0] "One database object does not exist." msgstr[1] "These %d database objects do not exist." -#: classes/Gems/Default/DatabaseAction.php:510 +#: classes/Gems/Default/DatabaseAction.php:518 msgid "Are you sure you want to create it?" msgid_plural "Are you sure you want to create them all?" msgstr[0] "Are you sure you want to create it?" msgstr[1] "Are you sure you want to create them all?" -#: classes/Gems/Default/DatabaseAction.php:523 +#: classes/Gems/Default/DatabaseAction.php:531 msgid "All database objects exist. There is nothing to create." msgstr "All database objects exist. There is nothing to create." -#: classes/Gems/Default/DatabaseAction.php:536 +#: classes/Gems/Default/DatabaseAction.php:544 msgid "Separate multiple commands with semicolons (;)." msgstr "Separate multiple commands with semicolons (;)." -#: classes/Gems/Default/DatabaseAction.php:543 +#: classes/Gems/Default/DatabaseAction.php:551 msgid "Run" msgstr "Run" -#: classes/Gems/Default/DatabaseAction.php:552 +#: classes/Gems/Default/DatabaseAction.php:560 msgid "raw" msgstr "raw" -#: classes/Gems/Default/DatabaseAction.php:561 +#: classes/Gems/Default/DatabaseAction.php:569 #, php-format msgid "Result set %s." msgstr "Result set %s." -#: classes/Gems/Default/DatabaseAction.php:584 +#: classes/Gems/Default/DatabaseAction.php:592 msgid "Execute raw SQL" msgstr "Execute raw SQL" -#: classes/Gems/Default/DatabaseAction.php:587 +#: classes/Gems/Default/DatabaseAction.php:595 msgid "Result sets" msgstr "Result sets" -#: classes/Gems/Default/DatabaseAction.php:612 +#: classes/Gems/Default/DatabaseAction.php:620 msgid "This database object does not exist. You cannot view it." msgstr "This database object does not exist. You cannot view it." -#: classes/Gems/Default/DatabaseAction.php:617 +#: classes/Gems/Default/DatabaseAction.php:625 #, php-format msgid "The data in table %s" msgstr "The data in table %s" -#: classes/Gems/Default/DatabaseAction.php:618 +#: classes/Gems/Default/DatabaseAction.php:626 #, php-format msgid "Contents of %s %s" msgstr "Contents of %s %s" @@ -989,42 +1012,47 @@ msgid "Export data" msgstr "Export data" -#: classes/Gems/Default/ExportAction.php:155 +#: classes/Gems/Default/ExportAction.php:153 #: classes/Gems/Default/MailJobAction.php:121 msgid "Survey" msgstr "Survey" -#: classes/Gems/Default/ExportAction.php:170 +#: classes/Gems/Default/ExportAction.php:168 #, php-format msgid "%s records found." msgstr "%s records found." -#: classes/Gems/Default/ExportAction.php:174 +#: classes/Gems/Default/ExportAction.php:172 #: classes/Gems/Default/IndexAction.php:162 #: classes/Gems/Default/MailJobAction.php:119 msgid "Organization" msgstr "Organization" -#: classes/Gems/Default/ExportAction.php:183 +#: classes/Gems/Default/ExportAction.php:181 msgid "Export to" msgstr "Export to" -#: classes/Gems/Default/GroupAction.php:88 +#: classes/Gems/Default/GroupAction.php:89 +#: classes/Gems/Default/LogAction.php:170 msgid "Role" msgstr "Role" -#: classes/Gems/Default/GroupAction.php:91 +#: classes/Gems/Default/GroupAction.php:92 #: classes/Gems/Default/MailJobAction.php:104 msgid "Active" msgstr "Active" -#: classes/Gems/Default/GroupAction.php:102 +#: classes/Gems/Default/GroupAction.php:96 +msgid "Allowed IP Ranges" +msgstr "Allowed IP Ranges" + +#: classes/Gems/Default/GroupAction.php:105 msgid "group" msgid_plural "groups" msgstr[0] "group" msgstr[1] "groups" -#: classes/Gems/Default/GroupAction.php:107 +#: classes/Gems/Default/GroupAction.php:110 msgid "Administrative groups" msgstr "Administrative groups" @@ -1062,50 +1090,54 @@ msgid "Username" msgstr "Username" -#: classes/Gems/Default/IndexAction.php:305 +#: classes/Gems/Default/IndexAction.php:288 +msgid "Your password must be changed." +msgstr "Your password must be changed." + +#: classes/Gems/Default/IndexAction.php:301 #, php-format msgid "Login successful, welcome %s." msgstr "Login successful, welcome %s." -#: classes/Gems/Default/IndexAction.php:335 +#: classes/Gems/Default/IndexAction.php:341 #, php-format msgid "Good bye: %s." msgstr "Good bye: %s." -#: classes/Gems/Default/IndexAction.php:360 +#: classes/Gems/Default/IndexAction.php:366 msgid "Reset accepted, enter your new password." msgstr "Reset accepted, enter your new password." -#: classes/Gems/Default/IndexAction.php:364 +#: classes/Gems/Default/IndexAction.php:370 msgid "This key timed out or does not belong to this user." msgstr "This key timed out or does not belong to this user." -#: classes/Gems/Default/IndexAction.php:381 +#: classes/Gems/Default/IndexAction.php:387 msgid "Password reset requested" msgstr "Password reset requested" -#: classes/Gems/Default/IndexAction.php:382 +#: classes/Gems/Default/IndexAction.php:388 #, php-format msgid "To reset your password for %s, please click this link: %s" msgstr "To reset your password for %s, please click this link: %s" -#: classes/Gems/Default/IndexAction.php:387 +#: classes/Gems/Default/IndexAction.php:393 msgid "We sent you an e-mail with a reset link. Click on the link in the e-mail." msgstr "We sent you an e-mail with a reset link. Click on the link in the e-mail." -#: classes/Gems/Default/IndexAction.php:389 +#: classes/Gems/Default/IndexAction.php:395 msgid "Unable to send e-mail." msgstr "Unable to send e-mail." -#: classes/Gems/Default/IndexAction.php:394 +#: classes/Gems/Default/IndexAction.php:400 msgid "No such user found or no e-mail address known or user cannot be reset." msgstr "No such user found or no e-mail address known or user cannot be reset." -#: classes/Gems/Default/IndexAction.php:398 +#: classes/Gems/Default/IndexAction.php:404 msgid "We received your password reset key." msgstr "We received your password reset key." -#: classes/Gems/Default/IndexAction.php:399 +#: classes/Gems/Default/IndexAction.php:405 msgid "Please enter the organization and username belonging to this key." msgstr "Please enter the organization and username belonging to this key." @@ -1186,7 +1218,11 @@ msgid "Respondent" msgstr "Patient" -#: classes/Gems/Default/LogAction.php:173 +#: classes/Gems/Default/LogAction.php:171 +msgid "IP address" +msgstr "IP address" + +#: classes/Gems/Default/LogAction.php:178 #: classes/Gems/Default/LogMaintenanceAction.php:53 msgid "Log" msgstr "Log" @@ -1384,16 +1420,16 @@ msgstr "User ID" #: classes/Gems/Default/MailServerAction.php:90 -#: classes/Gems/Default/OptionAction.php:112 -#: classes/Gems/Default/OptionAction.php:117 +#: classes/Gems/Default/OptionAction.php:113 +#: classes/Gems/Default/OptionAction.php:118 #: classes/Gems/Default/SourceAction.php:95 -#: classes/Gems/Default/StaffAction.php:144 +#: classes/Gems/Default/StaffAction.php:151 msgid "Repeat password" msgstr "Repeat password" #: classes/Gems/Default/MailServerAction.php:91 #: classes/Gems/Default/SourceAction.php:74 -#: classes/Gems/Default/StaffAction.php:118 +#: classes/Gems/Default/StaffAction.php:126 msgid "Enter only when changing" msgstr "Enter only when changing the password" @@ -1408,7 +1444,7 @@ msgstr "Email servers" #: classes/Gems/Default/MailTemplateAction.php:75 -#: classes/Gems/Default/StaffAction.php:228 +#: classes/Gems/Default/StaffAction.php:239 msgid "(all organizations)" msgstr "(all organizations)" @@ -1430,54 +1466,50 @@ msgid "Current password" msgstr "Current password" -#: classes/Gems/Default/OptionAction.php:106 -#: classes/Gems/Default/OptionAction.php:122 +#: classes/Gems/Default/OptionAction.php:107 +#: classes/Gems/Default/OptionAction.php:123 msgid "New password" msgstr "New password" -#: classes/Gems/Default/OptionAction.php:141 +#: classes/Gems/Default/OptionAction.php:137 msgid "New password is active." msgstr "New password is active." -#: classes/Gems/Default/OptionAction.php:146 +#: classes/Gems/Default/OptionAction.php:143 msgid "Caps Lock seems to be on!" msgstr "Caps Lock seems to be on!" -#: classes/Gems/Default/OptionAction.php:190 +#: classes/Gems/Default/OptionAction.php:181 msgid "Login Name" msgstr "Login Name" -#: classes/Gems/Default/OptionAction.php:197 +#: classes/Gems/Default/OptionAction.php:188 #: classes/Gems/Default/OrganizationAction.php:140 #: classes/Gems/Default/RespondentAction.php:173 -#: classes/Gems/Default/StaffAction.php:213 +#: classes/Gems/Default/StaffAction.php:224 msgid "Language" msgstr "Language" -#: classes/Gems/Default/OptionAction.php:207 +#: classes/Gems/Default/OptionAction.php:198 #, php-format msgid "Options" msgstr "Options" -#: classes/Gems/Default/OptionAction.php:216 +#: classes/Gems/Default/OptionAction.php:207 msgid "This overview provides information about the last login activity on your account." msgstr "This overview provides information about the last login activity on your account." -#: classes/Gems/Default/OptionAction.php:236 -msgid "IP address" -msgstr "IP address" - -#: classes/Gems/Default/OptionAction.php:236 +#: classes/Gems/Default/OptionAction.php:227 msgid "Date / time" msgstr "Date / time" -#: classes/Gems/Default/OptionAction.php:242 +#: classes/Gems/Default/OptionAction.php:233 msgid "item" msgid_plural "items" msgstr[0] "item" msgstr[1] "items" -#: classes/Gems/Default/OptionAction.php:247 +#: classes/Gems/Default/OptionAction.php:238 msgid "Item" msgstr "Item" @@ -1534,6 +1566,14 @@ msgid "Checked organizations see this organizations respondents." msgstr "Checked organizations see this organizations patients." +#: classes/Gems/Default/OrganizationAction.php:162 +msgid "Code name" +msgstr "Code name" + +#: classes/Gems/Default/OrganizationAction.php:162 +msgid "Only for programmers." +msgstr "Only for programmers." + #: classes/Gems/Default/OrganizationAction.php:172 msgid "organization" msgid_plural "organizations" @@ -1652,10 +1692,6 @@ msgid "Version information" msgstr "Version information" -#: classes/Gems/Default/ProjectInformationAction.php:187 -msgid "Cache cleaned" -msgstr "Cache cleaned" - #: classes/Gems/Default/ProjectInformationAction.php:195 msgid "Server PHP Info" msgstr "Server PHP Info" @@ -1707,22 +1743,22 @@ msgid "Active tracks" msgstr "Active tracks" -#: classes/Gems/Default/ProjectTracksAction.php:98 +#: classes/Gems/Default/ProjectTracksAction.php:110 #, php-format msgid "Questions in survey %s" msgstr "Questions in survey %s" -#: classes/Gems/Default/ProjectTracksAction.php:106 +#: classes/Gems/Default/ProjectTracksAction.php:118 #: classes/Gems/Default/SurveyAction.php:85 #, php-format msgid "Survey %s does not exist." msgstr "Survey %s does not exist." -#: classes/Gems/Default/ProjectTracksAction.php:109 +#: classes/Gems/Default/ProjectTracksAction.php:121 msgid "Survey not specified." msgstr "Survey not specified." -#: classes/Gems/Default/ProjectTracksAction.php:120 +#: classes/Gems/Default/ProjectTracksAction.php:132 #, php-format msgid "Track %s does not exist." msgstr "Track %s does not exist." @@ -2051,23 +2087,23 @@ msgid "Are you sure you want to synchronize all survey sources?" msgstr "Are you sure you want to synchronize all survey sources?" -#: classes/Gems/Default/StaffAction.php:158 +#: classes/Gems/Default/StaffAction.php:169 msgid "If checked the user will logoff when answering a survey." msgstr "If checked the user will logoff when answering a survey." -#: classes/Gems/Default/StaffAction.php:174 +#: classes/Gems/Default/StaffAction.php:185 msgid "You are not allowed to edit this staff member." msgstr "You are not allowed to edit this staff member." -#: classes/Gems/Default/StaffAction.php:208 +#: classes/Gems/Default/StaffAction.php:219 msgid "Primary function" msgstr "Primary function" -#: classes/Gems/Default/StaffAction.php:214 +#: classes/Gems/Default/StaffAction.php:225 msgid "Logout on survey" msgstr "Logout on survey" -#: classes/Gems/Default/StaffAction.php:283 +#: classes/Gems/Default/StaffAction.php:295 msgid "staff member" msgid_plural "staff members" msgstr[0] "staff member" @@ -3110,23 +3146,23 @@ msgid "%s track engines cannot be converted to %s track engines." msgstr "%s track engines cannot be converted to %s track engines." -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:639 +#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:657 #, php-format msgid "%d: %s - %s" msgstr "%d: %s - %s" -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:642 -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:645 +#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:660 +#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:663 #, php-format msgid "%d: %s" msgstr "%d: %s" -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:648 +#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:666 #, php-format msgid "%s - %s" msgstr "%s - %s" -#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:690 +#: classes/Gems/Tracker/Engine/TrackEngineAbstract.php:708 msgid "After change" msgstr "After change" @@ -3332,6 +3368,54 @@ msgid "- %s" msgstr "- %s" +#: classes/Gems/User/PasswordChecker.php:95 +#, php-format +msgid "A password should contain at least one uppercase character." +msgid_plural "A password should contain at least %d uppercase characters." +msgstr[0] "A password should contain at least one uppercase character." +msgstr[1] "A password should contain at least %d uppercase characters." + +#: classes/Gems/User/PasswordChecker.php:112 +#, php-format +msgid "A password should contain at least one lowercase character." +msgid_plural "A password should contain at least %d lowercase characters." +msgstr[0] "A password should contain at least one lowercase character." +msgstr[1] "A password should contain at least %d lowercase characters." + +#: classes/Gems/User/PasswordChecker.php:127 +#, php-format +msgid "A password should be at least %d characters long." +msgstr "A password should be at least %d characters long." + +#: classes/Gems/User/PasswordChecker.php:145 +#, php-format +msgid "A password should contain at least one not alphabetic character." +msgid_plural "A password should contain at least %d not alphabetic characters." +msgstr[0] "A password should contain at least one not alphabetic character." +msgstr[1] "A password should contain at least %d not alphabetic characters." + +#: classes/Gems/User/PasswordChecker.php:165 +#, php-format +msgid "A password should contain at least one not alphanumeric character." +msgid_plural "A password should contain at least %d not alphanumeric characters." +msgstr[0] "A password should contain at least one not alphanumeric character." +msgstr[1] "A password should contain at least %d not alphanumeric characters." + +#: classes/Gems/User/PasswordChecker.php:184 +msgid "A password should not contain the login name." +msgstr "A password should not contain the login name." + +#: classes/Gems/User/PasswordChecker.php:201 +#, php-format +msgid "A password should contain at least one number." +msgid_plural "A password should contain at least %d numbers." +msgstr[0] "A password should contain at least one number." +msgstr[1] "A password should contain at least %d numbers." + +#: classes/Gems/User/UserPasswordValidator.php:115 +msgid "Wrong password." +msgstr "Wrong password." + #: classes/Gems/Util/Translated.php:99 msgid "forever" msgstr "forever" @@ -3502,7 +3586,7 @@ msgstr "Value is required and can't be empty" #: languages/FakeTranslations.php:41 -#: languages/FakeTranslations.php:84 +#: languages/FakeTranslations.php:85 msgid "Invalid type given, value should be string, integer or float" msgstr "Invalid type given, value should be string, integer or float" @@ -3515,93 +3599,97 @@ msgid "Your account is temporarily blocked, please wait %s minutes" msgstr "Your account is temporarily blocked, please wait %s minutes" -#: languages/FakeTranslations.php:49 +#: languages/FakeTranslations.php:47 +msgid "You are not allowed to login from this location." +msgstr "You are not allowed to login from this location." + +#: languages/FakeTranslations.php:50 msgid "Not a valid token. The format for valid tokens is: %tokenFormat%." msgstr "Not a valid token. The format for valid tokens is: %tokenFormat%." -#: languages/FakeTranslations.php:50 +#: languages/FakeTranslations.php:51 msgid "Unknown token." msgstr "Unknown token." -#: languages/FakeTranslations.php:51 +#: languages/FakeTranslations.php:52 msgid "This token is no longer valid." msgstr "This token is no longer valid." -#: languages/FakeTranslations.php:52 +#: languages/FakeTranslations.php:53 msgid "This token cannot be used (any more)." msgstr "This token cannot be used (any more)." -#: languages/FakeTranslations.php:53 +#: languages/FakeTranslations.php:54 msgid "This token cannot be used (yet)." msgstr "This token cannot be used (yet)." -#: languages/FakeTranslations.php:56 +#: languages/FakeTranslations.php:57 #, php-format msgid "Date should be '%dateAfter%' or later." msgstr "Date should be '%dateAfter%' or later." -#: languages/FakeTranslations.php:59 +#: languages/FakeTranslations.php:60 #, php-format msgid "Date should be '%dateBefore%' or earlier." msgstr "Date should be '%dateBefore%' or earlier." -#: languages/FakeTranslations.php:62 +#: languages/FakeTranslations.php:63 msgid "%value% is not a valid date." msgstr "%value% is not a valid date." -#: languages/FakeTranslations.php:65 +#: languages/FakeTranslations.php:66 msgid "No record matching %value% was found." msgstr "No record matching %value% was found." -#: languages/FakeTranslations.php:66 +#: languages/FakeTranslations.php:67 msgid "A duplicate record matching '%value%' was found." msgstr "A duplicate record matching '%value%' was found." -#: languages/FakeTranslations.php:69 +#: languages/FakeTranslations.php:70 msgid "This is not a valid %testDescription%." msgstr "This is not a valid %testDescription%." -#: languages/FakeTranslations.php:70 +#: languages/FakeTranslations.php:71 msgid "A %testDescription% cannot contain letters." msgstr "A %testDescription% cannot contain letters." -#: languages/FakeTranslations.php:71 +#: languages/FakeTranslations.php:72 msgid "%value% is too long for a %testDescription%. Should be %length% digits." msgstr "%value% is too long for a %testDescription%. Should be %length% digits." -#: languages/FakeTranslations.php:72 +#: languages/FakeTranslations.php:73 msgid "%value% is too short for a %testDescription%. Should be %length% digits." msgstr "%value% is too short for a %testDescription%. Should be %length% digits." -#: languages/Fake... [truncated message content] |
From: <gem...@li...> - 2011-11-22 15:09:43
|
Revision: 269 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=269&view=rev Author: michieltcs Date: 2011-11-22 15:09:32 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - add admin.ipRanges to sample config Modified Paths: -------------- trunk/new_project/application/configs/project.ini Modified: trunk/new_project/application/configs/project.ini =================================================================== --- trunk/new_project/application/configs/project.ini 2011-11-22 15:08:39 UTC (rev 268) +++ trunk/new_project/application/configs/project.ini 2011-11-22 15:09:32 UTC (rev 269) @@ -19,6 +19,7 @@ ;---------------------------------------------------------- admin.user = super ;admin.pwd = +;admin.ipRanges = css.gems = gems/css/gems-fixed.css css.print.url = gems/css/gems_print.css This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 15:08:45
|
Revision: 268 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=268&view=rev Author: michieltcs Date: 2011-11-22 15:08:39 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - Add support for admin.ipRanges setting Modified Paths: -------------- trunk/library/classes/Gems/Project/ProjectSettings.php trunk/library/classes/Gems/User/ProjectUserDefinition.php Modified: trunk/library/classes/Gems/Project/ProjectSettings.php =================================================================== --- trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-22 14:43:01 UTC (rev 267) +++ trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-22 15:08:39 UTC (rev 268) @@ -286,6 +286,18 @@ } /** + * Returns the super admin password, if it exists + * + * @return string + */ + public function getSuperAdminIPRanges() + { + if (isset($this->admin['ipRanges'])) { + return $this->admin['ipRanges']; + } + } + + /** * Returns a salted hash on the * * @param string $value The value to hash Modified: trunk/library/classes/Gems/User/ProjectUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 14:43:01 UTC (rev 267) +++ trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 15:08:39 UTC (rev 268) @@ -76,7 +76,7 @@ 'user_style' => 'gems', 'user_organization_id' => $organization, 'user_organization_name' => 'SUPER ADMIN', - 'user_allowed_ip_ranges' => '', + 'user_allowed_ip_ranges' => $this->project->getSuperAdminIPRanges(), 'allowedOrgs' => array($organization => 'SUPER ADMIN') ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:43:11
|
Revision: 267 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=267&view=rev Author: michieltcs Date: 2011-11-22 14:43:01 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - change delimiter to | Modified Paths: -------------- trunk/library/classes/Gems/Util.php trunk/test/classes/Gems/UtilTest.php Modified: trunk/library/classes/Gems/Util.php =================================================================== --- trunk/library/classes/Gems/Util.php 2011-11-22 14:36:11 UTC (rev 266) +++ trunk/library/classes/Gems/Util.php 2011-11-22 14:43:01 UTC (rev 267) @@ -236,7 +236,7 @@ $ipLong = ip2long($ip); - $ranges = explode(':', $ipRanges); + $ranges = explode('|', $ipRanges); foreach ($ranges as $range) { if (($sep = strpos($range, '-')) !== false) { Modified: trunk/test/classes/Gems/UtilTest.php =================================================================== --- trunk/test/classes/Gems/UtilTest.php 2011-11-22 14:36:11 UTC (rev 266) +++ trunk/test/classes/Gems/UtilTest.php 2011-11-22 14:43:01 UTC (rev 267) @@ -64,7 +64,7 @@ } public function testAllowedIP5() { - $this->assertTrue(Gems_Util::isAllowedIP('127.0.0.1', '192.168.0.1:127.0.0.1')); + $this->assertTrue(Gems_Util::isAllowedIP('127.0.0.1', '192.168.0.1|127.0.0.1')); } public function testAllowedIPEmptyRange() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:36:17
|
Revision: 266 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=266&view=rev Author: michieltcs Date: 2011-11-22 14:36:11 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Update translations Modified Paths: -------------- trunk/library/languages/FakeTranslations.php trunk/library/languages/default-nl.mo trunk/library/languages/default-nl.po Modified: trunk/library/languages/FakeTranslations.php =================================================================== --- trunk/library/languages/FakeTranslations.php 2011-11-22 14:32:11 UTC (rev 265) +++ trunk/library/languages/FakeTranslations.php 2011-11-22 14:36:11 UTC (rev 266) @@ -44,6 +44,7 @@ // Gems_Validate_GemsPasswordUsername _('Installation not complete! Login is not yet possible!'); _('Your account is temporarily blocked, please wait %s minutes'); +_('You are not allowed to login from this location.'); // Gems_Validate_TokenValidator _('Not a valid token. The format for valid tokens is: %tokenFormat%.'); Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-11-22 14:32:11 UTC (rev 265) +++ trunk/library/languages/default-nl.po 2011-11-22 14:36:11 UTC (rev 266) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-21 13:55+0100\n" +"POT-Creation-Date: 2011-11-22 15:34+0100\n" "PO-Revision-Date: \n" "Last-Translator: Michiel Rook <in...@to...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -33,9 +33,8 @@ msgstr "versie" #: classes/GemsEscort.php:1342 -#, fuzzy msgid "Take note: your session has expired, your inputs were not saved. Please check the input data and try again" -msgstr "Let op: uw sessie is verlopen, uw invoer is niet opgeslagen. Controleer de gegevens en probeer a.u.b. opnieuw." +msgstr "Let op: uw sessie is verlopen, uw invoer is niet opgeslagen. Controleer uw gegevens en probeer a.u.b. opnieuw." #: classes/GemsEscort.php:1466 msgid "Please check back later." @@ -71,6 +70,21 @@ msgid "You must login to access this page." msgstr "U moet ingelogd zijn voor toegang tot deze pagina." +#: classes/Gems/Pdf.php:195 +#, php-format +msgid "PDF Source File '%s' not found!" +msgstr "PDF bron bestand %s niet gevonden!" + +#: classes/Gems/Pdf.php:237 +#, php-format +msgid "Could not create '%s' directory." +msgstr "Kon de directory '%s' niet aanmaken." + +#: classes/Gems/Pdf.php:280 +#, php-format +msgid " The error message is: %s" +msgstr "De foutmelding is: %s" + #: classes/Gems/Tracker.php:732 msgid "Checks performed" msgstr "Controle uitgevoerd" @@ -405,7 +419,7 @@ msgid "Cache cleaned" msgstr "Cache opgeschoond" -#: classes/Gems/Auth.php:234 +#: classes/Gems/Auth.php:241 msgid "Combination of organization, username and password not found." msgstr "Combinatie van organisatie, gebruikersnaam en wachtwoord niet gevonden." @@ -536,7 +550,7 @@ msgstr "De heer/Mevrouw" #: classes/Gems/Util/Translated.php:229 -#: classes/Gems/Controller/BrowseEditAction.php:783 +#: classes/Gems/Controller/BrowseEditAction.php:785 msgid "No" msgstr "Nee" @@ -549,7 +563,7 @@ msgstr "Ja (met behoud van antwoorden)" #: classes/Gems/Util/Translated.php:240 -#: classes/Gems/Controller/BrowseEditAction.php:782 +#: classes/Gems/Controller/BrowseEditAction.php:784 msgid "Yes" msgstr "Ja" @@ -561,81 +575,81 @@ msgid "No data found." msgstr "Geen gegevens gevonden." -#: classes/Gems/Controller/BrowseEditAction.php:344 +#: classes/Gems/Controller/BrowseEditAction.php:346 #, php-format msgid "New %s..." msgstr "Nieuw %s..." -#: classes/Gems/Controller/BrowseEditAction.php:376 +#: classes/Gems/Controller/BrowseEditAction.php:378 #, php-format msgid "Delete %s" msgstr "Verwijder %s" -#: classes/Gems/Controller/BrowseEditAction.php:380 +#: classes/Gems/Controller/BrowseEditAction.php:382 #, php-format msgid "%2$u %1$s deleted" msgstr "%2$u %1$s verwijderd" -#: classes/Gems/Controller/BrowseEditAction.php:394 +#: classes/Gems/Controller/BrowseEditAction.php:396 #, php-format msgid "Edit %s" msgstr "Bewerk %s" -#: classes/Gems/Controller/BrowseEditAction.php:491 +#: classes/Gems/Controller/BrowseEditAction.php:493 msgid "Free search text" msgstr "Vrije zoek tekst" -#: classes/Gems/Controller/BrowseEditAction.php:562 +#: classes/Gems/Controller/BrowseEditAction.php:564 msgid "Search" msgstr "Zoeken" -#: classes/Gems/Controller/BrowseEditAction.php:578 +#: classes/Gems/Controller/BrowseEditAction.php:580 #, php-format msgid "No %s found" msgstr "Geen %s gevonden" -#: classes/Gems/Controller/BrowseEditAction.php:651 +#: classes/Gems/Controller/BrowseEditAction.php:653 #, php-format msgid "No %s found." msgstr "Geen %s gevonden." -#: classes/Gems/Controller/BrowseEditAction.php:766 +#: classes/Gems/Controller/BrowseEditAction.php:768 msgid "Are you sure?" msgstr "Weet u het zeker?" -#: classes/Gems/Controller/BrowseEditAction.php:836 +#: classes/Gems/Controller/BrowseEditAction.php:838 #, php-format msgid "Unknown %s requested" msgstr "Onjuist %s verzoek" -#: classes/Gems/Controller/BrowseEditAction.php:859 +#: classes/Gems/Controller/BrowseEditAction.php:861 #, php-format msgid "New %1$s..." msgstr "Nieuwe %1$s..." -#: classes/Gems/Controller/BrowseEditAction.php:867 +#: classes/Gems/Controller/BrowseEditAction.php:869 msgid "Save" msgstr "Opslaan" -#: classes/Gems/Controller/BrowseEditAction.php:903 +#: classes/Gems/Controller/BrowseEditAction.php:905 #, php-format msgid "%2$u %1$s saved" msgstr "%2$u %1$s opgeslagen" -#: classes/Gems/Controller/BrowseEditAction.php:906 +#: classes/Gems/Controller/BrowseEditAction.php:908 msgid "No changes to save." msgstr "Geen verandering om op te slaan." -#: classes/Gems/Controller/BrowseEditAction.php:915 +#: classes/Gems/Controller/BrowseEditAction.php:917 msgid "Input error! No changes saved!" msgstr "Invoer fout! Veranderingen niet opgeslagen!" -#: classes/Gems/Controller/BrowseEditAction.php:943 +#: classes/Gems/Controller/BrowseEditAction.php:945 #, php-format msgid "Show %s" msgstr "Toon %s" -#: classes/Gems/Controller/BrowseEditAction.php:950 +#: classes/Gems/Controller/BrowseEditAction.php:952 #, php-format msgid "Unknown %s." msgstr "%s is onbekend." @@ -1585,19 +1599,23 @@ msgid "Missing track identifier." msgstr "Ontbrekende traject identificatie." -#: classes/Gems/Default/GroupAction.php:88 +#: classes/Gems/Default/GroupAction.php:89 #: classes/Gems/Default/LogAction.php:170 #: classes/Gems/Default/RoleAction.php:257 msgid "Role" msgstr "Rol" -#: classes/Gems/Default/GroupAction.php:102 +#: classes/Gems/Default/GroupAction.php:96 +msgid "Allowed IP Ranges" +msgstr "Toegestane IP adres reeksen" + +#: classes/Gems/Default/GroupAction.php:105 msgid "group" msgid_plural "groups" msgstr[0] "groep" msgstr[1] "groepen" -#: classes/Gems/Default/GroupAction.php:107 +#: classes/Gems/Default/GroupAction.php:110 msgid "Administrative groups" msgstr "Beheer groepen" @@ -3559,93 +3577,97 @@ msgid "Your account is temporarily blocked, please wait %s minutes" msgstr "Uw account is tijdelijk geblokkeerd. U kunt opnieuw inloggen over %s minuten." -#: languages/FakeTranslations.php:49 +#: languages/FakeTranslations.php:47 +msgid "You are not allowed to login from this location." +msgstr "U kunt vanaf deze locatie niet inloggen." + +#: languages/FakeTranslations.php:50 msgid "Not a valid token. The format for valid tokens is: %tokenFormat%." msgstr "Geen geldig kenmerk. Uw token moet het volgende formaat volgen: %tokenFormat%." -#: languages/FakeTranslations.php:50 +#: languages/FakeTranslations.php:51 msgid "Unknown token." msgstr "Onbekend kenmerk." -#: languages/FakeTranslations.php:51 +#: languages/FakeTranslations.php:52 msgid "This token is no longer valid." msgstr "Dit kenmerk is niet meer geldig." -#: languages/FakeTranslations.php:52 +#: languages/FakeTranslations.php:53 msgid "This token cannot be used (any more)." msgstr "Dit kenmerk kan niet (meer) gebruikt worden." -#: languages/FakeTranslations.php:53 +#: languages/FakeTranslations.php:54 msgid "This token cannot be used (yet)." msgstr "Dit kenmerk kan (nog) niet gebruikt worden." -#: languages/FakeTranslations.php:56 +#: languages/FakeTranslations.php:57 #, php-format msgid "Date should be '%dateAfter%' or later." msgstr "Datum moet later vallen dan '%dateAfter%' of er gelijk aan zijn." -#: languages/FakeTranslations.php:59 +#: languages/FakeTranslations.php:60 #, php-format msgid "Date should be '%dateBefore%' or earlier." msgstr "Datum moet vallen voor '%dateBefore%' of er gelijk aan zijn." -#: languages/FakeTranslations.php:62 +#: languages/FakeTranslations.php:63 msgid "%value% is not a valid date." msgstr "%value% is geen geldige datum." -#: languages/FakeTranslations.php:65 +#: languages/FakeTranslations.php:66 msgid "No record matching %value% was found." msgstr "Geen gegevens gevonden die overeenkomen met %value%." -#: languages/FakeTranslations.php:66 +#: languages/FakeTranslations.php:67 msgid "A duplicate record matching '%value%' was found." msgstr "De waarde '%value%' is al in gebruik." -#: languages/FakeTranslations.php:69 +#: languages/FakeTranslations.php:70 msgid "This is not a valid %testDescription%." msgstr "%testDescription% is niet geldig." -#: languages/FakeTranslations.php:70 +#: languages/FakeTranslations.php:71 msgid "A %testDescription% cannot contain letters." msgstr "Een %testDescription% mag geen letters bevatten." -#: languages/FakeTranslations.php:71 +#: languages/FakeTranslations.php:72 msgid "%value% is too long for a %testDescription%. Should be %length% digits." msgstr "%value% is te lang voor een %testDescription%. Die moet %length% cijfers lang zijn." -#: languages/FakeTranslations.php:72 +#: languages/FakeTranslations.php:73 msgid "%value% is too short for a %testDescription%. Should be %length% digits." msgstr "%value% is te kort voor een %testDescription%. Die moet %length% cijfers lang zijn." -#: languages/FakeTranslations.php:75 +#: languages/FakeTranslations.php:76 msgid "Must be the same as %fieldDescription%." msgstr "Moet identiek zijn aan %fieldDescription%." -#: languages/FakeTranslations.php:78 +#: languages/FakeTranslations.php:79 msgid "'%value%' is not a phone number (e.g. +12 (0)34-567 890)." msgstr "'%value%' is geen telefoonnummer (zoals: +12 (0)34-567 890)." -#: languages/FakeTranslations.php:81 +#: languages/FakeTranslations.php:82 msgid "To set '%description%' you have to set '%fieldDescription%'." msgstr " '%fieldDescription%' moet ingevoerd worden om '%description%' te kunnen kiezen." -#: languages/FakeTranslations.php:85 +#: languages/FakeTranslations.php:86 msgid "'%value%' is not an email address (e.g. na...@so...)." msgstr "'%value%' is niet een email address (zoals na...@er...)." -#: languages/FakeTranslations.php:88 +#: languages/FakeTranslations.php:89 msgid "'%value%' is not a series of email addresses (e.g. na...@so..., no...@no...)." msgstr "'%value%' is niet een verzameling email adressen (zoals na...@er..., ni...@ne...)." -#: languages/FakeTranslations.php:91 +#: languages/FakeTranslations.php:92 msgid "'%value%' must contain only digits" msgstr "'%value%' mag alleen cijfers bevatten" -#: languages/FakeTranslations.php:92 +#: languages/FakeTranslations.php:93 msgid "'%value%' is an empty string" msgstr "'%value%' is leeg" -#: languages/FakeTranslations.php:93 +#: languages/FakeTranslations.php:94 msgid "Invalid type given. String, integer or float expected" msgstr "Ongeldige invoer, geef een tekst of een nummer op" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:32:20
|
Revision: 265 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=265&view=rev Author: matijsdejong Date: 2011-11-22 14:32:11 +0000 (Tue, 22 Nov 2011) Log Message: ----------- One more character Modified Paths: -------------- trunk/new_project/application/configs/project.ini Modified: trunk/new_project/application/configs/project.ini =================================================================== --- trunk/new_project/application/configs/project.ini 2011-11-22 14:31:33 UTC (rev 264) +++ trunk/new_project/application/configs/project.ini 2011-11-22 14:32:11 UTC (rev 265) @@ -18,7 +18,7 @@ ; On production pwd should be empty or langer than 10 chars ;---------------------------------------------------------- admin.user = super -admin.pwd = +;admin.pwd = css.gems = gems/css/gems-fixed.css css.print.url = gems/css/gems_print.css This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:31:43
|
Revision: 264 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=264&view=rev Author: matijsdejong Date: 2011-11-22 14:31:33 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Added admin part Modified Paths: -------------- trunk/new_project/application/configs/project.ini Modified: trunk/new_project/application/configs/project.ini =================================================================== --- trunk/new_project/application/configs/project.ini 2011-11-22 14:29:43 UTC (rev 263) +++ trunk/new_project/application/configs/project.ini 2011-11-22 14:31:33 UTC (rev 264) @@ -12,6 +12,14 @@ ;--------------------------------------------------- salt = +;---------------------------------------------------------- +; The non database super user +; +; On production pwd should be empty or langer than 10 chars +;---------------------------------------------------------- +admin.user = super +admin.pwd = + css.gems = gems/css/gems-fixed.css css.print.url = gems/css/gems_print.css css.print.media = print This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:29:49
|
Revision: 263 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=263&view=rev Author: michieltcs Date: 2011-11-22 14:29:43 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - added ggp_allowed_ip_ranges, load in Gems_User_User and use in Gems_Auth::authenticate() Modified Paths: -------------- trunk/library/classes/Gems/Auth.php trunk/library/classes/Gems/Default/GroupAction.php trunk/library/classes/Gems/User/OldStaffUserDefinition.php trunk/library/classes/Gems/User/ProjectUserDefinition.php trunk/library/classes/Gems/User/StaffUserDefinition.php trunk/library/classes/Gems/User/User.php trunk/library/configs/db/patches.sql Modified: trunk/library/classes/Gems/Auth.php =================================================================== --- trunk/library/classes/Gems/Auth.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/Auth.php 2011-11-22 14:29:43 UTC (rev 263) @@ -54,13 +54,15 @@ */ const ERROR_DATABASE_NOT_INSTALLED = -11; const ERROR_PASSWORD_DELAY = -12; + const ERROR_INVALID_IP = -13; /** * @var array Message templates */ protected $_messageTemplates = array( self::ERROR_DATABASE_NOT_INSTALLED => 'Installation not complete! Login is not yet possible!', - self::ERROR_PASSWORD_DELAY => 'Your account is temporarily blocked, please wait %s seconds' + self::ERROR_PASSWORD_DELAY => 'Your account is temporarily blocked, please wait %s seconds', + self::ERROR_INVALID_IP => 'You are not allowed to login from this location.' ); /** @@ -144,7 +146,12 @@ // We only forward to auth adapter when we have no timeout to prevent hammering the auth system if (! isset($result) ) { - $result = parent::authenticate($adapter); + // Check if the client IP address is within allowed IP ranges + if (isset($formValues['allowed_ip_ranges']) && !Gems_Util::isAllowedIP($_SERVER['REMOTE_ADDR'], $formValues['allowed_ip_ranges'])) { + $result = $this->_error(self::ERROR_INVALID_IP); + } else { + $result = parent::authenticate($adapter); + } } if ($result->isValid()) { Modified: trunk/library/classes/Gems/Default/GroupAction.php =================================================================== --- trunk/library/classes/Gems/Default/GroupAction.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/Default/GroupAction.php 2011-11-22 14:29:43 UTC (rev 263) @@ -66,6 +66,7 @@ $bridge->addCheckbox('ggp_group_active'); $bridge->addCheckbox('ggp_staff_members'); $bridge->addCheckbox('ggp_respondent_members'); + $bridge->addText('ggp_allowed_ip_ranges'); } /** @@ -91,6 +92,8 @@ $model->set('ggp_group_active', 'label', $this->_('Active'), 'multiOptions', $yesNo); $model->set('ggp_staff_members', 'label', $this->_('Staff'), 'multiOptions', $yesNo); $model->set('ggp_respondent_members', 'label', $this->_('Respondents'), 'multiOptions', $yesNo); + + $model->set('ggp_allowed_ip_ranges', 'label', $this->_('Allowed IP Ranges')); Gems_Model::setChangeFieldsByPrefix($model, 'ggp'); Modified: trunk/library/classes/Gems/User/OldStaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-22 14:29:43 UTC (rev 263) @@ -147,7 +147,7 @@ // For a multi-layout project we need to select the appropriate style too, // but as PATCHES may not be in effect we have to try two selects $select2 = clone $select; - $select2->columns(array('user_style' => 'gor_style'), 'gems__organizations'); + $select2->columns(array('user_style' => 'gor_style', 'user_allowed_ip_ranges' => 'ggp_allowed_ip_ranges'), 'gems__organizations'); try { // Fails before patch has run... Modified: trunk/library/classes/Gems/User/ProjectUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-22 14:29:43 UTC (rev 263) @@ -76,6 +76,7 @@ 'user_style' => 'gems', 'user_organization_id' => $organization, 'user_organization_name' => 'SUPER ADMIN', + 'user_allowed_ip_ranges' => '', 'allowedOrgs' => array($organization => 'SUPER ADMIN') ); } Modified: trunk/library/classes/Gems/User/StaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-22 14:29:43 UTC (rev 263) @@ -190,7 +190,7 @@ '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__groups', 'gsf_id_primary_group = ggp_id_group', array('user_role'=>'ggp_role', 'user_allowed_ip_ranges' => 'ggp_allowed_ip_ranges')) ->join('gems__organizations', 'gul_id_organization = gor_id_organization', array( 'user_organization_id'=>'gor_id_organization', Modified: trunk/library/classes/Gems/User/User.php =================================================================== --- trunk/library/classes/Gems/User/User.php 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/classes/Gems/User/User.php 2011-11-22 14:29:43 UTC (rev 263) @@ -204,6 +204,9 @@ public function authenticate($formValues) { $auth = Gems_Auth::getInstance(); + + $formValues['allowed_ip_ranges'] = $this->getAllowedIPRanges(); + $adapter = $this->definition->getAuthAdapter($formValues); $authResult = $auth->authenticate($adapter, $formValues); @@ -319,6 +322,16 @@ { return $this->_getVar('user_group'); } + + /** + * Returns the list of allowed IP ranges (separated by colon) + * + * @return string + */ + public function getAllowedIPRanges() + { + return $this->_getVar('user_allowed_ip_ranges'); + } /** * The locale set for this user.. Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-22 14:29:03 UTC (rev 262) +++ trunk/library/configs/db/patches.sql 2011-11-22 14:29:43 UTC (rev 263) @@ -324,4 +324,7 @@ -- PATCH: Log failed logins INSERT INTO `gems__log_actions` (`glac_id_action`, `glac_name`, `glac_change`, `glac_log`, `glac_created`) - VALUES (NULL , 'loginFail', '0', '1', CURRENT_TIMESTAMP); \ No newline at end of file + VALUES (NULL , 'loginFail', '0', '1', CURRENT_TIMESTAMP); + +-- PATCH: IP ranges for groups +ALTER TABLE `gems__groups` ADD `ggp_allowed_ip_ranges` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER `ggp_respondent_members`; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 14:29:14
|
Revision: 262 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=262&view=rev Author: matijsdejong Date: 2011-11-22 14:29:03 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Added password section documentation and settings Modified Paths: -------------- trunk/new_project/application/configs/project.ini Modified: trunk/new_project/application/configs/project.ini =================================================================== --- trunk/new_project/application/configs/project.ini 2011-11-22 13:32:52 UTC (rev 261) +++ trunk/new_project/application/configs/project.ini 2011-11-22 14:29:03 UTC (rev 262) @@ -10,7 +10,7 @@ ; Put %s somewhere within the salt to mix the value ; in the salt. ;--------------------------------------------------- -salt = +salt = css.gems = gems/css/gems-fixed.css css.print.url = gems/css/gems_print.css @@ -56,7 +56,7 @@ ; ASK THROTTLE SECTION ; ; Sets values that control the throttling (slowdowns to -; combat brute-force attacks) of the ask / token +; combat brute-force attacks) of the ask / token ; controller. ; ; askThrottle.period @@ -193,11 +193,34 @@ locales.en = "en" locales.nl = "nl" -;-------------------- +;---------------------------------------------------------------------- ; PASSWORDS SECTION -;-------------------- +; +; The last key must be a function name in your PasswordChecker class. +; That function must accept as parameters the array value and the +; password. +; +; In between keys can contain case insensitive organization codes, user +; roles and user definition names in any order and can overrule previous +; defined values. +; BEWARE keep keys in fixed array order: +; passwords.staff.mgz.capsCount = 1 +; passwords.mgz.staff.lowerCount = 1 +; passwords.staff.mgz.lowerCount = 2 +; will be processed as: +; passwords.staff.mgz.capsCount = 1 +; passwords.staff.mgz.lowerCount = 2 +; passwords.mgz.staff.lowerCount = 1 +;---------------------------------------------------------------------- -passwords.MinimumLength = 5 +passwords.notTheName = 1 +passwords.guest.minLength = 6 +passwords.staff.capsCount = 1 +passwords.staff.lowerCount = 1 +passwords.staff.minLength = 8 +passwords.staff.numCount = 0 +passwords.staff.notAlphaCount = 1 +passwords.staff.notAlphaNumCount = 0 ;------------------------------------------------------- ; TOKEN SECTION @@ -234,3 +257,10 @@ admin.pwd = superadmin email.bounce = 1 + +passwords.staff.capsCount = 0 +passwords.staff.lowerCount = 0 +passwords.staff.minLength = 6 +passwords.staff.numCount = 0 +passwords.staff.notAlphaCount = 0 +passwords.staff.notAlphaNumCount = 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 13:33:02
|
Revision: 261 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=261&view=rev Author: michieltcs Date: 2011-11-22 13:32:52 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Refs #307 - add Gems_Util::isAllowedIP() and associated unit tests Modified Paths: -------------- trunk/library/classes/Gems/Util.php Added Paths: ----------- trunk/test/classes/Gems/UtilTest.php Modified: trunk/library/classes/Gems/Util.php =================================================================== --- trunk/library/classes/Gems/Util.php 2011-11-22 12:13:40 UTC (rev 260) +++ trunk/library/classes/Gems/Util.php 2011-11-22 13:32:52 UTC (rev 261) @@ -215,4 +215,51 @@ { return $this->_getClass('translated'); } + + /** + * Checks if a given IP is allowed according to a set + * of IP addresses / ranges. + * + * Multiple addresses/ranges are separated by a colon, + * an individual range takes the form of + * 10.0.0.0-10.0.0.255 (subnet masks are not supported) + * + * @param string $ip + * @param string $ipRanges + * @return bool + */ + public static function isAllowedIP($ip, $ipRanges = "") + { + if (!strlen($ipRanges)) { + return true; + } + + $ipLong = ip2long($ip); + + $ranges = explode(':', $ipRanges); + + foreach ($ranges as $range) { + if (($sep = strpos($range, '-')) !== false) { + $min = ip2long(substr($range, 0, $sep)); + $max = ip2long(substr($range, $sep + 1)); + + $validate = new Zend_Validate_Between( + array( + 'min' => $min, + 'max' => $max + ) + ); + + if ($min <= $ipLong && $ipLong <= $max) { + return true; + } + } else { + if ($ipLong == ip2long($range)) { + return true; + } + } + } + + return false; + } } Added: trunk/test/classes/Gems/UtilTest.php =================================================================== --- trunk/test/classes/Gems/UtilTest.php (rev 0) +++ trunk/test/classes/Gems/UtilTest.php 2011-11-22 13:32:52 UTC (rev 261) @@ -0,0 +1,82 @@ +<?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. + * + * + * @package Gems + * @subpackage Util + * @author Michiel Rook <mi...@to...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * Test class for Gems_Util + * + * @author Michiel Rook <mi...@to...> + * @package Gems + * @subpackage Util + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 + */ +class Gems_UtilTest extends PHPUnit_Framework_TestCase +{ + public function testAllowedIP1() { + $this->assertTrue(Gems_Util::isAllowedIP('10.0.0.1', '10.0.0.0-10.0.0.255')); + } + + public function testAllowedIP2() { + $this->assertFalse(Gems_Util::isAllowedIP('10.0.1.1', '10.0.0.0-10.0.0.255')); + } + + public function testAllowedIP3() { + $this->assertTrue(Gems_Util::isAllowedIP('127.0.0.1', '127.0.0.1')); + } + + public function testAllowedIP4() { + $this->assertFalse(Gems_Util::isAllowedIP('127.0.0.1', '192.168.0.1')); + } + + public function testAllowedIP5() { + $this->assertTrue(Gems_Util::isAllowedIP('127.0.0.1', '192.168.0.1:127.0.0.1')); + } + + public function testAllowedIPEmptyRange() { + $this->assertTrue(Gems_Util::isAllowedIP('127.0.0.1', '')); + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + + } +} \ No newline at end of file Property changes on: trunk/test/classes/Gems/UtilTest.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 12:13:46
|
Revision: 260 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=260&view=rev Author: mennodekker Date: 2011-11-22 12:13:40 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Separate branch to explore the best way to extend the user definition objects Added Paths: ----------- branches/userloader/ Property changes on: branches/userloader ___________________________________________________________________ Added: svn:mergeinfo + /branches/newUser:113-150 /branches/newUser2:175-207 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 12:07:10
|
Revision: 259 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=259&view=rev Author: matijsdejong Date: 2011-11-22 12:07:04 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Documented and changed accessibility of some functions Modified Paths: -------------- trunk/library/classes/Gems/Pdf.php Modified: trunk/library/classes/Gems/Pdf.php =================================================================== --- trunk/library/classes/Gems/Pdf.php 2011-11-22 12:02:18 UTC (rev 258) +++ trunk/library/classes/Gems/Pdf.php 2011-11-22 12:07:04 UTC (rev 259) @@ -1,6 +1,5 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -66,7 +65,13 @@ */ protected $project; - public function addTokenToDocument(Zend_Pdf $pdf, $tokenId, $surveyId) + /** + * + * @var Zend_Translate + */ + protected $translate; + + protected function addTokenToDocument(Zend_Pdf $pdf, $tokenId, $surveyId) { $token = strtoupper($tokenId); @@ -82,7 +87,7 @@ $pdf->properties['ModDate'] = 'D:' . str_replace(':', "'", date('YmdHisP')) . "'"; } - public function addTokenToPage(Zend_Pdf_Page $page, $tokenId) + protected function addTokenToPage(Zend_Pdf_Page $page, $tokenId) { // Set $this->pageFont to false to prevent drawing of tokens on page. if ($this->pageFont) { @@ -104,13 +109,24 @@ } } - public function echoPdf(Zend_Pdf $pdf, $filename, $download = false) + /** + * Echos the pdf as output with the specified filename. + * + * When download is true the file is returned as a download link, + * otherwise the pdf is shown in the browser. + * + * @param Zend_Pdf $pdf + * @param string $filename + * @param boolean $download + */ + protected function echoPdf(Zend_Pdf $pdf, $filename, $download = false) { // We do not need to return the layout, just the above table Zend_Layout::resetMvcInstance(); $content = $pdf->render(); + MUtil_Echo::track($filename); if ($download) { // Download & save header('Content-Type: application/x-download'); @@ -126,6 +142,11 @@ echo $content; } + /** + * Reads the survey pdf and outputs the result (without token id's etc.. + * + * @param string $tokenId + */ public function echoPdfBySurveyId($surveyId) { $pdf = $this->getSurveyPdf($surveyId); @@ -133,6 +154,12 @@ $this->echoPdf($pdf, $surveyId . '.pdf'); } + /** + * Reads the survey pdf belonging to this token, puts the token id + * on de pages and outputs the result. + * + * @param string $tokenId + */ public function echoPdfByTokenId($tokenId) { $surveyId = $this->db->fetchOne('SELECT gto_id_survey FROM gems__tokens WHERE gto_id_token = ?', $tokenId); @@ -159,19 +186,26 @@ if (! $filename) { $filename = $surveyId . '.pdf'; - // $this->throwLastError("No PDF Source for survey '$surveyId' does exist!"); } $filepath = $this->getSurveysDir() . '/' . $filename; if (! file_exists($filepath)) { - MUtil_Echo::r($filepath); - $this->throwLastError("PDF Source File '$filename' not found!"); + // MUtil_Echo::r($filepath); + $this->throwLastError(sprintf($this->translate->_("PDF Source File '%s' not found!"), $filename)); } return Zend_Pdf::load($filepath); } + /** + * Returns (and optionally creates) the directory where the surveys + * are stored. + * + * Used by the Survey Controller when uploading surveys. + * + * @return string + */ public function getSurveysDir() { return $this->getUploadDir('survey_pdfs'); @@ -200,7 +234,7 @@ if (! is_dir($dir)) { $oldmask = umask(0777); if (! @mkdir($dir, 0777, true)) { - $this->throwLastError("Could not create '$dir' directory."); + $this->throwLastError(sprintf($this->translate->_("Could not create '%s' directory."), $dir)); } umask($oldmask); } @@ -240,10 +274,10 @@ } } */ - private function throwLastError($msg) + protected function throwLastError($msg) { if ($last = error_get_last()) { - $msg .= ' The error message is: ' . $last['message']; + $msg .= sprintf($this->translate->_(' The error message is: %s'), $last['message']); } throw new Gems_Exception_Coding($msg); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-22 12:02:25
|
Revision: 258 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=258&view=rev Author: mennodekker Date: 2011-11-22 12:02:18 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Modified Paths: -------------- trunk/library/classes/Gems/Controller/BrowseEditAction.php trunk/library/classes/Gems/TabForm.php Modified: trunk/library/classes/Gems/Controller/BrowseEditAction.php =================================================================== --- trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-11-21 16:49:32 UTC (rev 257) +++ trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-11-22 12:02:18 UTC (rev 258) @@ -293,16 +293,18 @@ public function beforeFormDisplay ($form, $isNew) { if ($this->useTabbedForms) { + /* Not needed anymore @@TODO: Remove when proven, as there is a set tab //Create the tabs tried in $form->render() but somehow that is never reached if ($form instanceof Gems_TabForm) { Gems_TabForm::htmlElementsToTabs($form); - } + }*/ //If needed, add a row of link buttons to the bottom of the form if ($links = $this->createMenuLinks($isNew ? $this->menuCreateIncludeLevel : $this->menuEditIncludeLevel)) { $element = new MUtil_Form_Element_Html('formLinks'); $element->setValue($links); $element->setOrder(999); + $form->resetContext(); $form->addElement($element); } } else { Modified: trunk/library/classes/Gems/TabForm.php =================================================================== --- trunk/library/classes/Gems/TabForm.php 2011-11-21 16:49:32 UTC (rev 257) +++ trunk/library/classes/Gems/TabForm.php 2011-11-22 12:02:18 UTC (rev 258) @@ -60,6 +60,17 @@ if ($this->currentTab && !($element instanceof Zend_Form_Element_Hidden)) { return $this->currentTab->addElement($element, $name, $options); } else { + if ($element instanceof Zend_Form_Element_Hidden) { + //Remove decorators + $element->removeDecorator('htmlTag'); + $element->removeDecorator('Label'); + } else { + $error = $element->getDecorator('Errors'); + if ($error instanceof Zend_Form_Decorator_Errors) { + $element->removeDecorator('Errors'); + $element->addDecorator($error); + } + } return parent::addElement($element, $name, $options); } } @@ -306,6 +317,14 @@ } } + /** + * As addElement and addDisplayGroup provide a fluent way of working with subforms + * we need to provide a method to skip back to the main form again. + */ + public function resetContext() { + $this->currentTab = null; + } + public function selectTab($tabIdx) { $this->getElement('tab')->setValue($tabIdx); $this->setAttrib('selected', $tabIdx); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-21 16:49:38
|
Revision: 257 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=257&view=rev Author: matijsdejong Date: 2011-11-21 16:49:32 +0000 (Mon, 21 Nov 2011) Log Message: ----------- Removed database name dependency Modified Paths: -------------- trunk/library/configs/db/patches.sql Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-21 16:33:16 UTC (rev 256) +++ trunk/library/configs/db/patches.sql 2011-11-21 16:49:32 UTC (rev 257) @@ -323,5 +323,5 @@ UPDATE `gems__organizations` SET gor_has_patients = COALESCE((SELECT 1 FROM gems__respondent2org WHERE gr2o_id_organization = gor_id_organization GROUP BY gr2o_id_organization), 0); -- PATCH: Log failed logins -INSERT INTO `zsd`.`gems__log_actions` (`glac_id_action`, `glac_name`, `glac_change`, `glac_log`, `glac_created`) +INSERT INTO `gems__log_actions` (`glac_id_action`, `glac_name`, `glac_change`, `glac_log`, `glac_created`) VALUES (NULL , 'loginFail', '0', '1', CURRENT_TIMESTAMP); \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-21 16:33:22
|
Revision: 256 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=256&view=rev Author: matijsdejong Date: 2011-11-21 16:33:16 +0000 (Mon, 21 Nov 2011) Log Message: ----------- Small changes useful for project specific User extensions Modified Paths: -------------- trunk/library/classes/Gems/User/OldStaffUserDefinition.php trunk/library/classes/Gems/User/StaffUserDefinition.php trunk/library/classes/Gems/User/User.php trunk/library/configs/db/patches.sql Modified: trunk/library/classes/Gems/User/OldStaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-21 15:51:49 UTC (rev 255) +++ trunk/library/classes/Gems/User/OldStaffUserDefinition.php 2011-11-21 16:33:16 UTC (rev 256) @@ -58,14 +58,14 @@ * @var Gems_Project_ProjectSettings */ protected $project; - + /** * Perform UserDefinition specific post-login logic * * @param Zend_Auth_Result $authResult * @return void */ - public function afterLogin($authResult, $formValues) + public function afterLogin(Zend_Auth_Result $authResult, $formValues) { if ($authResult->isValid()) { $login_name = $formValues['userlogin']; @@ -142,6 +142,32 @@ */ public function getUserData($login_name, $organization) { + $select = $this->getUserSelect($login_name, $organization); + + // For a multi-layout project we need to select the appropriate style too, + // but as PATCHES may not be in effect we have to try two selects + $select2 = clone $select; + $select2->columns(array('user_style' => 'gor_style'), 'gems__organizations'); + + try { + // Fails before patch has run... + return $this->db->fetchRow($select2, array($login_name), Zend_Db::FETCH_ASSOC); + + } catch (Zend_Db_Exception $e) { + // So then we try the old method + return $this->db->fetchRow($select, array($login_name), Zend_Db::FETCH_ASSOC); + } + } + + /** + * Stub to allow subclasses to add fields to the select. + * + * @param string $login_name + * @param int $organization + * @return Zend_Db_Select + */ + protected function getUserSelect($login_name, $organization) + { /** * Read the needed parameters from the different tables, lots of renames for backward * compatibility @@ -165,19 +191,7 @@ ->where('gsf_login = ?') ->limit(1); - // For a multi-layout project we need to select the appropriate style too, - // but as PATCHES may not be in effect we have to try two selects - $select2 = clone $select; - $select2->columns(array('user_style' => 'gor_style'), 'gems__organizations'); - - try { - // Fails before patch has run... - return $this->db->fetchRow($select2, array($login_name), Zend_Db::FETCH_ASSOC); - - } catch (Zend_Db_Exception $e) { - // So then we try the old method - return $this->db->fetchRow($select, array($login_name), Zend_Db::FETCH_ASSOC); - } + return $select; } /** Modified: trunk/library/classes/Gems/User/StaffUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-21 15:51:49 UTC (rev 255) +++ trunk/library/classes/Gems/User/StaffUserDefinition.php 2011-11-21 16:33:16 UTC (rev 256) @@ -166,6 +166,20 @@ */ public function getUserData($login_name, $organization) { + $select = $this->getUserSelect($login_name, $organization); + + return $this->db->fetchRow($select, array($login_name, $organization), Zend_Db::FETCH_ASSOC); + } + + /** + * Stub to allow subclasses to add fields to the select. + * + * @param string $login_name + * @param int $organization + * @return Zend_Db_Select + */ + protected function getUserSelect($login_name, $organization) + { $select = new Zend_Db_Select($this->db); $select->from('gems__user_logins', array('user_login_id' => 'gul_id_user')) ->join('gems__staff', 'gul_login = gsf_login AND gul_id_organization = gsf_id_organization', array( @@ -192,7 +206,7 @@ ->where('gul_id_organization = ?') ->limit(1); - return $this->db->fetchRow($select, array($login_name, $organization), Zend_Db::FETCH_ASSOC); + return $select; } /** Modified: trunk/library/classes/Gems/User/User.php =================================================================== --- trunk/library/classes/Gems/User/User.php 2011-11-21 15:51:49 UTC (rev 255) +++ trunk/library/classes/Gems/User/User.php 2011-11-21 16:33:16 UTC (rev 256) @@ -50,7 +50,7 @@ * * @var Zend_Auth_Result */ - private $_authResult; + protected $_authResult; /** * Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-21 15:51:49 UTC (rev 255) +++ trunk/library/configs/db/patches.sql 2011-11-21 16:33:16 UTC (rev 256) @@ -320,6 +320,8 @@ ADD gor_has_patients boolean not null default 1 AFTER gor_iso_lang, ADD gor_add_patients boolean not null default 1 AFTER gor_has_patients; +UPDATE `gems__organizations` SET gor_has_patients = COALESCE((SELECT 1 FROM gems__respondent2org WHERE gr2o_id_organization = gor_id_organization GROUP BY gr2o_id_organization), 0); + -- PATCH: Log failed logins INSERT INTO `zsd`.`gems__log_actions` (`glac_id_action`, `glac_name`, `glac_change`, `glac_log`, `glac_created`) VALUES (NULL , 'loginFail', '0', '1', CURRENT_TIMESTAMP); \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |