From: <men...@us...> - 2011-09-09 10:50:39
|
Revision: 3 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=3&view=rev Author: mennodekker Date: 2011-09-09 10:50:32 +0000 (Fri, 09 Sep 2011) Log Message: ----------- Moved contents of RespondentController to RespondentAction so the controller is a stub like all others for easier extension Modified Paths: -------------- trunk/library/classes/Gems/Default/RespondentAction.php trunk/library/controllers/RespondentController.php Modified: trunk/library/classes/Gems/Default/RespondentAction.php =================================================================== --- trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-08 13:43:14 UTC (rev 2) +++ trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-09 10:50:32 UTC (rev 3) @@ -46,7 +46,12 @@ */ abstract class Gems_Default_RespondentAction extends Gems_Controller_BrowseEditAction implements Gems_Menu_ParameterSourceInterface { - public $showSnippets; + public $showSnippets = array( + 'RespondentDetailsSnippet', + 'AddTracksSnippet', + 'RespondentTokenTabsSnippet', + 'RespondentTokenSnippet', + ); public $filterStandard = array('grc_success' => 1); @@ -80,6 +85,86 @@ } } + /** + * Adds elements from the model to the bridge that creates the form. + * + * Overrule this function to add different elements to the browse table, without + * having to recode the core table building code. + * + * @param MUtil_Model_FormBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @param array $data The data that will later be loaded into the form + * @param optional boolean $new Form should be for a new element + * @return void|array When an array of new values is return, these are used to update the $data array in the calling function + */ + protected function addFormElements(MUtil_Model_FormBridge $bridge, MUtil_Model_ModelAbstract $model, array $data, $new = false) + { + if (APPLICATION_ENV !== 'production') { + $bsn = new MUtil_Validate_Dutch_Burgerservicenummer(); + $num = mt_rand(100000000, 999999999); + + while (! $bsn->isValid($num)) { + $num++; + } + + $model->set('grs_bsn', 'description', 'Willekeurig voorbeeld BSN: ' . $num); + + } else { + $model->set('grs_bsn', 'description', $this->_('Enter a 9-digit BSN number.')); + } + + $ucfirst = new Zend_Filter_Callback('ucfirst'); + + $bridge->addHidden( 'grs_id_user'); + $bridge->addHidden( 'gr2o_id_organization'); + $bridge->addHidden( $model->getKeyCopyName('gr2o_patient_nr')); + + $bridge->addTab( 'caption1')->h4($this->_('Identification')); + $bridge->addText( 'grs_bsn', 'label', $this->_('BSN'), 'size', 10, 'maxlength', 12) + ->addValidator( new MUtil_Validate_Dutch_Burgerservicenummer()) + ->addValidator( $model->createUniqueValidator('grs_bsn')) + ->addFilter( 'Digits'); + $bridge->addText( 'gr2o_patient_nr', 'label', $this->_('Patient number'), 'size', 15, 'minlength', 4) + ->addValidator( $model->createUniqueValidator(array('gr2o_patient_nr', 'gr2o_id_organization'), array('gr2o_id_user' => 'grs_id_user', 'gr2o_id_organization'))); + + $bridge->addText( 'grs_first_name') + ->addFilter( $ucfirst); + $bridge->addText( 'grs_surname_prefix', 'description', 'de, van der, \'t, etc...'); + $bridge->addText( 'grs_last_name', 'required', true) + ->addFilter( $ucfirst); + + $bridge->addTab( 'caption2')->h4($this->_('Medical data')); + $bridge->addRadio( 'grs_gender', 'separator', '', 'multiOptions', $this->util->getTranslated()->getGenders()); + $year = intval(date('Y')); // Als jQuery 1.4 gebruikt wordt: yearRange = c-130:c0 + $bridge->addDate( 'grs_birthday', 'jQueryParams', array('defaultDate' => '-30y', 'maxDate' => 0, 'yearRange' => ($year - 130) . ':' . $year)) + ->addValidator(new MUtil_Validate_Date_DateBefore()); + + $bridge->addSelect( 'gr2o_id_physician'); + $bridge->addText( 'gr2o_treatment', 'size', 30, 'description', $this->_('DBC\'s, etc...')); + $bridge->addTextarea('gr2o_comments', 'rows', 4, 'cols', 60); + + $bridge->addTab( 'caption3')->h4($this->_('Contact information')); + // Setting e-mail to required is niet mogelijk, grijpt te diep in + // misschien later proberen met ->addGroup('required', 'true'); ??? + $bridge->addText( 'grs_email', 'size', 30) // , 'required', true, 'AutoInsertNotEmptyValidator', false) + ->addValidator( 'SimpleEmail'); + $bridge->addCheckBox('calc_email', 'label', $this->_('Respondent has no e-mail')); + $bridge->addText( 'grs_address_1', 'size', 40, 'description', $this->_('With housenumber')) + ->addFilter( $ucfirst); + $bridge->addText( 'grs_address_2', 'size', 40); + $bridge->addText( 'grs_zipcode', 'size', 7, 'description', '0000 AA'); + $bridge->addFilter( 'grs_zipcode', new Gems_Filter_DutchZipcode()); + $bridge->addText( 'grs_city') + ->addFilter( $ucfirst); + $bridge->addSelect( 'grs_iso_country', 'label', $this->_('Country'), 'multiOptions', $this->util->getLocalized()->getCountries()); + $bridge->addText( 'grs_phone_1', 'size', 15) + ->addValidator( 'Phone'); + + $bridge->addTab( 'caption4')->h4($this->_('Settings')); + $bridge->addSelect( 'grs_iso_lang', 'label', $this->_('Language'), 'multiOptions', $this->util->getLocalized()->getLanguages()); + $bridge->addRadio( 'gr2o_consent', 'separator', '', 'description', $this->_('Has the respondent signed the informed consent letter?')); + } + public function afterSave(array $data, $isNew) { $this->openedRespondent($data['gr2o_patient_nr'], $data['gr2o_id_organization'], $data['grs_id_user']); @@ -99,7 +184,19 @@ */ public function createModel($detailed, $action) { - return $this->loader->getModels()->getRespondentModel($detailed, $action); + $model = $this->loader->getModels()->getRespondentModel($detailed, $action); + + if ($detailed) { + $model->set('gr2o_comments', 'label', $this->_('Comments')); + $model->set('gr2o_id_physician', 'label', $this->_('Physician'), 'multiOptions', MUtil_Lazy::call(array($this, 'getPhysicians'))); + $model->set('gr2o_treatment', 'label', $this->_('Treatment')); + + $model->addColumn('CASE WHEN grs_email IS NULL OR LENGTH(TRIM(grs_email)) = 0 THEN 1 ELSE 0 END', 'calc_email'); + } + + $model->set('gr2o_id_organization', 'default', $model->getCurrentOrganization()); + + return $model; } public function deleteAction() @@ -210,6 +307,26 @@ $this->html[] = $form; } + public function getPhysicians() + { + $session = new Zend_Session_Namespace('Pulse_' . __FILE__); + + if (! isset($session->physicians)) { + $organizationId = $this->escort->getCurrentOrganization(); + + $values = $this->db->fetchPairs(" + SELECT gsf_id_user, + CONCAT(gsf_last_name, ', ', COALESCE(CONCAT(gsf_first_name, ' '), ''), COALESCE(gsf_surname_prefix, '')) AS name + FROM gems__staff INNER JOIN gems__groups ON gsf_id_primary_group = ggp_id_group + WHERE gsf_active=1 AND gsf_id_organization = ? AND ggp_role = 'physician' + ORDER BY 2", $organizationId); + + $session->physicians = $values; + } + + return $this->util->getTranslated()->getEmptyDropdownArray() + $session->physicians; + } + public function getMenuParameter($name, $default) { switch ($name) { Modified: trunk/library/controllers/RespondentController.php =================================================================== --- trunk/library/controllers/RespondentController.php 2011-09-08 13:43:14 UTC (rev 2) +++ trunk/library/controllers/RespondentController.php 2011-09-09 10:50:32 UTC (rev 3) @@ -1,180 +1,33 @@ <?php - -/** - * Copyright (c) 2011, Erasmus MC - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Erasmus MC nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -class RespondentController extends Gems_Default_RespondentAction -{ - public $showSnippets = array( - 'RespondentDetailsSnippet', - 'AddTracksSnippet', - 'RespondentTokenTabsSnippet', - 'RespondentTokenSnippet', - ); - /** - * Adds elements from the model to the bridge that creates the form. - * - * Overrule this function to add different elements to the browse table, without - * having to recode the core table building code. - * - * @param MUtil_Model_FormBridge $bridge - * @param MUtil_Model_ModelAbstract $model - * @param array $data The data that will later be loaded into the form - * @param optional boolean $new Form should be for a new element - * @return void|array When an array of new values is return, these are used to update the $data array in the calling function - */ - protected function addFormElements(MUtil_Model_FormBridge $bridge, MUtil_Model_ModelAbstract $model, array $data, $new = false) - { - if (APPLICATION_ENV !== 'production') { - $bsn = new MUtil_Validate_Dutch_Burgerservicenummer(); - $num = mt_rand(100000000, 999999999); +/** + * 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. + */ - while (! $bsn->isValid($num)) { - $num++; - } - - $model->set('grs_bsn', 'description', 'Willekeurig voorbeeld BSN: ' . $num); - - } else { - $model->set('grs_bsn', 'description', $this->_('Enter a 9-digit BSN number.')); - } - - $ucfirst = new Zend_Filter_Callback('ucfirst'); - - $bridge->addHidden( 'grs_id_user'); - $bridge->addHidden( 'gr2o_id_organization'); - $bridge->addHidden( $model->getKeyCopyName('gr2o_patient_nr')); - - $bridge->addTab( 'caption1')->h4($this->_('Identification')); - $bridge->addText( 'grs_bsn', 'label', $this->_('BSN'), 'size', 10, 'maxlength', 12) - ->addValidator( new MUtil_Validate_Dutch_Burgerservicenummer()) - ->addValidator( $model->createUniqueValidator('grs_bsn')) - ->addFilter( 'Digits'); - $bridge->addText( 'gr2o_patient_nr', 'label', $this->_('Patient number'), 'size', 15, 'minlength', 4) - ->addValidator( $model->createUniqueValidator(array('gr2o_patient_nr', 'gr2o_id_organization'), array('gr2o_id_user' => 'grs_id_user', 'gr2o_id_organization'))); - - $bridge->addText( 'grs_first_name') - ->addFilter( $ucfirst); - $bridge->addText( 'grs_surname_prefix', 'description', 'de, van der, \'t, etc...'); - $bridge->addText( 'grs_last_name', 'required', true) - ->addFilter( $ucfirst); - - $bridge->addTab( 'caption2')->h4($this->_('Medical data')); - $bridge->addRadio( 'grs_gender', 'separator', '', 'multiOptions', $this->util->getTranslated()->getGenders()); - $year = intval(date('Y')); // Als jQuery 1.4 gebruikt wordt: yearRange = c-130:c0 - $bridge->addDate( 'grs_birthday', 'jQueryParams', array('defaultDate' => '-30y', 'maxDate' => 0, 'yearRange' => ($year - 130) . ':' . $year)) - ->addValidator(new MUtil_Validate_Date_DateBefore()); - - $bridge->addSelect( 'gr2o_id_physician'); - $bridge->addText( 'gr2o_treatment', 'size', 30, 'description', $this->_('DBC\'s, etc...')); - $bridge->addTextarea('gr2o_comments', 'rows', 4, 'cols', 60); - - $bridge->addTab( 'caption3')->h4($this->_('Contact information')); - // Setting e-mail to required is niet mogelijk, grijpt te diep in - // misschien later proberen met ->addGroup('required', 'true'); ??? - $bridge->addText( 'grs_email', 'size', 30) // , 'required', true, 'AutoInsertNotEmptyValidator', false) - ->addValidator( 'SimpleEmail'); - $bridge->addCheckBox('calc_email', 'label', $this->_('Respondent has no e-mail')); - $bridge->addText( 'grs_address_1', 'size', 40, 'description', $this->_('With housenumber')) - ->addFilter( $ucfirst); - $bridge->addText( 'grs_address_2', 'size', 40); - $bridge->addText( 'grs_zipcode', 'size', 7, 'description', '0000 AA'); - $bridge->addFilter( 'grs_zipcode', new Gems_Filter_DutchZipcode()); - $bridge->addText( 'grs_city') - ->addFilter( $ucfirst); - $bridge->addSelect( 'grs_iso_country', 'label', $this->_('Country'), 'multiOptions', $this->util->getLocalized()->getCountries()); - $bridge->addText( 'grs_phone_1', 'size', 15) - ->addValidator( 'Phone'); - - $bridge->addTab( 'caption4')->h4($this->_('Settings')); - $bridge->addSelect( 'grs_iso_lang', 'label', $this->_('Language'), 'multiOptions', $this->util->getLocalized()->getLanguages()); - $bridge->addRadio( 'gr2o_consent', 'separator', '', 'description', $this->_('Has the respondent signed the informed consent letter?')); - } - - public function afterSave(array $data, $isNew) - { - Gems_AccessLog::getLog($this->db)->logSaveRespondent($data['grs_id_user'], $this->getRequest()); - return true; - } - - /** - * Creates a model for getModel(). Called only for each new $action. - * - * The parameters allow you to easily adapt the model to the current action. The $detailed - * parameter was added, because the most common use of action is a split between detailed - * and summarized actions. - * - * @param boolean $detailed True when the current action is not in $summarizedActions. - * @param string $action The current action. - * @return MUtil_Model_ModelAbstract - */ - public function createModel($detailed, $action) - { - $model = parent::createModel($detailed, $action); - - if ($detailed) { - $model->set('gr2o_comments', 'label', $this->_('Comments')); - $model->set('gr2o_id_physician', 'label', $this->_('Physician'), 'multiOptions', MUtil_Lazy::call(array($this, 'getPhysicians'))); - $model->set('gr2o_treatment', 'label', $this->_('Treatment')); - - $model->addColumn('CASE WHEN grs_email IS NULL OR LENGTH(TRIM(grs_email)) = 0 THEN 1 ELSE 0 END', 'calc_email'); - } - - $model->set('gr2o_id_organization', 'default', $model->getCurrentOrganization()); - - return $model; - } - - public function getPhysicians() - { - $session = new Zend_Session_Namespace('Pulse_' . __FILE__); - - if (! isset($session->physicians)) { - $organizationId = $this->escort->getCurrentOrganization(); - - $values = $this->db->fetchPairs(" - SELECT gsf_id_user, - CONCAT(gsf_last_name, ', ', COALESCE(CONCAT(gsf_first_name, ' '), ''), COALESCE(gsf_surname_prefix, '')) AS name - FROM gems__staff INNER JOIN gems__groups ON gsf_id_primary_group = ggp_id_group - WHERE gsf_active=1 AND gsf_id_organization = ? AND ggp_role = 'physician' - ORDER BY 2", $organizationId); - - $session->physicians = $values; - } - - return $this->util->getTranslated()->getEmptyDropdownArray() + $session->physicians; - } - - protected function openedRespondent($patientId, $orgId = null, $userId = null) - { - Gems_AccessLog::getLog($this->db)->logShowRespondent($userId, $this->getRequest()); - - return parent::openedRespondent($patientId, $orgId, $userId); - } -} +class RespondentController extends Gems_Default_RespondentAction +{ +} \ 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: <men...@us...> - 2011-09-09 12:43:25
|
Revision: 6 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=6&view=rev Author: mennodekker Date: 2011-09-09 12:43:19 +0000 (Fri, 09 Sep 2011) Log Message: ----------- Removing the view, had to change the validator too as it is used in change password. This needs to be changed when alternative auth backends are added Modified Paths: -------------- trunk/library/classes/Gems/Validate/GemsPasswordUsername.php Removed Paths: ------------- trunk/library/configs/db/views/ trunk/library/configs/db_multi_layout/views/ Modified: trunk/library/classes/Gems/Validate/GemsPasswordUsername.php =================================================================== --- trunk/library/classes/Gems/Validate/GemsPasswordUsername.php 2011-09-09 12:30:13 UTC (rev 5) +++ trunk/library/classes/Gems/Validate/GemsPasswordUsername.php 2011-09-09 12:43:19 UTC (rev 6) @@ -1,39 +1,39 @@ <?php - -/** - * Copyright (c) 2011, Erasmus MC - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Erasmus MC nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * Copyright (c) 2011, Erasmus MC + * All rights reserved. * - * @version $Id: GemsPasswordUsername.php 345 2011-07-28 08:39:24Z 175780 $ + * 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. + * + * @version $Id: GemsPasswordUsername.php 345 2011-07-28 08:39:24Z 175780 $ * @package Gems * @subpackage Validate * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License */ - -/** + +/** * OBSOLETE, we now use Gems_Auth with a Zend_Auth_Adapter_DbTable * * @deprecated @@ -66,7 +66,7 @@ protected $_passwordField; protected $_usernameField; - + /** * Exponent to use when calculating delay * @var int @@ -86,11 +86,11 @@ */ public function __construct($usernameField, $passwordField, Zend_Db_Adapter_Abstract $adapter = null, $delayFactor = null) { - parent::__construct('gems__login_info', 'user_login', null, $adapter); + parent::__construct('gems__staff', 'gsf_login', null, $adapter); $this->_usernameField = $usernameField; $this->_passwordField = $passwordField; - + if (isset($delayFactor)) { $this->_delayFactor = $delayFactor; } @@ -136,8 +136,8 @@ throw new Zend_Validate_Exception('No database adapter present'); } } - - $condition = $this->_adapter->quoteIdentifier('user_password') . ' = ?'; + + $condition = $this->_adapter->quoteIdentifier('gsf_password') . ' = ?'; $this->_exclude = $this->_adapter->quoteInto($condition, md5($password)); try { @@ -145,24 +145,24 @@ * Lookup last failed login and number of failed logins */ try { - $sql = "SELECT user_failed_logins, UNIX_TIMESTAMP(user_last_failed) - AS user_last_failed FROM {$this->_table} WHERE user_login = ?"; + $sql = "SELECT gsf_failed_logins, UNIX_TIMESTAMP(gsf_last_failed) + AS gsf_last_failed FROM {$this->_table} WHERE gsf_login = ?"; $results = $this->_adapter->fetchRow($sql, array($username)); } catch (Zend_Db_Exception $zde) { //If we need to apply a db patch, just use a default value $results = 0; MUtil_Echo::r(GemsEscort::getInstance()->translate->_('Please update the database')); } - - $delay = pow($results['user_failed_logins'], $this->_delayFactor); - $remaining = ($results['user_last_failed'] + $delay) - time(); - - if ($results['user_failed_logins'] > 0 && $remaining > 0) { + + $delay = pow($results['gsf_failed_logins'], $this->_delayFactor); + $remaining = ($results['gsf_last_failed'] + $delay) - time(); + + if ($results['gsf_failed_logins'] > 0 && $remaining > 0) { $this->_obscureValue = false; $this->_error(self::ERROR_PASSWORD_DELAY, ceil($remaining / 60)); return false; } - + if ($this->_query($username)) { return true; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-13 18:27:35
|
Revision: 12 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=12&view=rev Author: matijsdejong Date: 2011-09-13 17:44:45 +0000 (Tue, 13 Sep 2011) Log Message: ----------- - SingleTrack projects will now allow the addition of one track to the patient when none exist - hidden parameters in menu items are now added to parameter source instead of request, in order to allow filtering - started cleanup of _createTable in TrackActionAbstract - created new minimal snippet implementation Modified Paths: -------------- trunk/library/classes/Gems/Default/TrackAction.php trunk/library/classes/Gems/Default/TrackActionAbstract.php trunk/library/classes/Gems/Menu/SubMenuItem.php trunk/library/classes/Gems/Menu.php trunk/library/classes/GemsEscort.php trunk/library/classes/MUtil/Model/ModelAbstract.php trunk/library/classes/MUtil/Snippets/SnippetInterface.php Added Paths: ----------- trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php trunk/library/snippets/Track/ trunk/library/snippets/Track/AvailableTracksSnippets.php Modified: trunk/library/classes/Gems/Default/TrackAction.php =================================================================== --- trunk/library/classes/Gems/Default/TrackAction.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/Gems/Default/TrackAction.php 2011-09-13 17:44:45 UTC (rev 12) @@ -466,6 +466,8 @@ $request = $this->getRequest(); $model = $this->getModel(); + // Gems_Menu::$verbose = true; + if ($data = $model->applyRequest($request)->loadFirst()) { $this->setMenuParameters($data); @@ -522,6 +524,21 @@ $this->html->buttonDiv($links); } + } elseif ($this->escort instanceof Gems_Project_Tracks_SingleTrackInterface) { + + $data['gr2o_patient_nr'] = $this->_getIdParam(); + $data['gr2o_id_organization'] = $this->escort->getCurrentOrganization(); + $data['track_can_be_created'] = 1; + $this->setMenuParameters($data); + + $model = $this->createTrackModel(false, 'index'); + + // MUtil_Model::$verbose = true; + + $this->html->h3($this->_('Add track')); + $this->html->pInfo($this->_('This respondent does not yet have an active track. Add one here.')); + $this->addSnippet('Track_AvailableTracksSnippets', 'model', $model, 'trackType', $this->trackType); + } else { $this->addMessage(sprintf($this->_('Unknown %s requested'), $this->getTopic())); } Modified: trunk/library/classes/Gems/Default/TrackActionAbstract.php =================================================================== --- trunk/library/classes/Gems/Default/TrackActionAbstract.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/Gems/Default/TrackActionAbstract.php 2011-09-13 17:44:45 UTC (rev 12) @@ -74,10 +74,13 @@ $model = $this->createTrackModel(false, 'index'); $request = $this->getRequest(); + $organisation_id = $this->escort->getCurrentOrganization(); + $searchText = $this->_getParam($model->getTextFilter()); + $model->applyPostRequest($request); // $model->trackUsage(); DO NOT USE AS all is label here. - if ($searchText = $this->_getParam($model->getTextFilter())) { + if ($searchText) { $marker = new MUtil_Html_Marker($model->getTextSearches($searchText), 'strong', 'UTF-8'); foreach ($model->getItemNames() as $name) { if ($model->get($name, 'label')) { @@ -86,15 +89,13 @@ } } - $organisation_id = $this->escort->getCurrentOrganization(); - $filterText = $this->_getParam(MUtil_Model::TEXT_FILTER); - $filter = $model->getTextSearchFilter($filterText); + $filter = $model->getTextSearchFilter($searchText); $filter['gtr_track_type'] = $this->trackType; $filter['gtr_active'] = 1; $filter[] = '(gtr_date_until IS NULL OR gtr_date_until >= CURRENT_DATE) AND gtr_date_start <= CURRENT_DATE'; $filter[] = "gtr_organisations LIKE '%|$organisation_id|%'"; - $baseurl = array('action' => 'index', 'gr2o_patient_nr' => $id, MUtil_Model::TEXT_FILTER => $filterText); + $baseurl = array('action' => 'index', 'gr2o_patient_nr' => $id, MUtil_Model::TEXT_FILTER => $searchText); $bridge = new MUtil_Model_TableBridge($model, array('class' => 'browser')); $bridge->setBaseUrl($baseurl); Modified: trunk/library/classes/Gems/Menu/SubMenuItem.php =================================================================== --- trunk/library/classes/Gems/Menu/SubMenuItem.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/Gems/Menu/SubMenuItem.php 2011-09-13 17:44:45 UTC (rev 12) @@ -444,6 +444,16 @@ return $this->addActionButton($this->_('Excel export'), $this->get('privilege') . '.excel', 'excel', $options); } + /** + * Add parameter values that should not show in the url but that + * must be added to the request when this menu item is current. + * + * @see applyHiddenParameters + * + * @param string $name Name of parameter + * @param mixed $value + * @return Gems_Menu_SubMenuItem (continuation pattern + */ public function addHiddenParameter($name, $value = null) { if (null === $value) { @@ -531,11 +541,11 @@ return $menu; } - public function applyHiddenParameters(Zend_Controller_Request_Abstract $request) + public function applyHiddenParameters(Gems_Menu_ParameterSource $source) { if ($this->_hiddenParameters) { foreach ($this->_hiddenParameters as $key => $name) { - $request->setParam($key, $name); + $source[$key] = $name; } } Modified: trunk/library/classes/Gems/Menu.php =================================================================== --- trunk/library/classes/Gems/Menu.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/Gems/Menu.php 2011-09-13 17:44:45 UTC (rev 12) @@ -340,12 +340,22 @@ if ($this->escort instanceof Gems_Project_Tracks_SingleTrackInterface) { + $trType = 'T'; $subPage = $page->addPage($this->_('Track'), 'pr.track', 'track', 'show-track') ->addNamedParameters(MUtil_Model::REQUEST_ID, 'gr2o_patient_nr') ->addHiddenParameter(Gems_Model::TRACK_ID, $this->escort->getTrackId(), 'gtr_track_type', 'T'); - $tkPages['T'] = $subPage->addAction($this->_('Token'), 'pr.token', 'show') - ->addNamedParameters(MUtil_Model::REQUEST_ID, 'gto_id_token'); + $tkPages[$trType] = $subPage->addAction($this->_('Token'), 'pr.token', 'show') + ->addNamedParameters(MUtil_Model::REQUEST_ID, 'gto_id_token') + ->setParameterFilter('gtr_track_type', $trType, Gems_Model::ID_TYPE, 'token'); + $subPage->addAction($this->_('Add'), 'pr.track.create', 'create') + ->addNamedParameters(MUtil_Model::REQUEST_ID, 'gr2o_patient_nr', Gems_Model::TRACK_ID, 'gtr_id_track') + ->setParameterFilter('gtr_track_type', $trType, 'track_can_be_created', 1) + ->addHiddenParameter('track_can_be_created', 1); + $subPage->addAction($this->_('Preview'), 'pr.track', 'view') + ->addNamedParameters(MUtil_Model::REQUEST_ID, 'gr2o_patient_nr', Gems_Model::TRACK_ID, 'gtr_id_track') + ->setParameterFilter('gtr_track_type', $trType, 'track_can_be_created', 1) + ->addHiddenParameter('track_can_be_created', 1); } else { @@ -669,9 +679,12 @@ if ($this->_menuParameters) { // array_unshift($parameterSources, $this->_menuParameters); + // MUtil_echo::track($this->_menuParameters); $parameterSources[] = $this->_menuParameters; } + // self::$verbose = true; + $nav = new Zend_Navigation($this->_toNavigationArray($parameterSources)); // MUtil_Echo::r($this->_toNavigationArray($parameterSources)); Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/GemsEscort.php 2011-09-13 17:44:45 UTC (rev 12) @@ -1570,7 +1570,7 @@ } if (isset($menuItem)) { - $menuItem->applyHiddenParameters($request); + $menuItem->applyHiddenParameters($this->menu->getParameterSource()); $this->menu->setCurrent($menuItem); } } Modified: trunk/library/classes/MUtil/Model/ModelAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-09-13 17:44:45 UTC (rev 12) @@ -198,6 +198,12 @@ return $this; } + /** + * Add's one or more sort fields to the standard sort. + * + * @param mixed $value Array of sortfield => SORT_ASC|SORT_DESC or single sortfield for ascending sort. + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function addSort($value) { $value = $this->_checkSortValue($value); Added: trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php =================================================================== --- trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php (rev 0) +++ trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php 2011-09-13 17:44:45 UTC (rev 12) @@ -0,0 +1,108 @@ +<?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. + * + * Minimal implementation of Snippet interface. + * + * @package MUtil + * @subpackage Snippets + * @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 $ + */ + +/** + * Minimal implementation of Snippet interface. + * + * Use this class for a quick implementation when SnippetAbstract feels to heavvy + * + * @see MUtil_Snippets_SnippetAbstract + * + * @package MUtil + * @subpackage Snippets + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.2 + */ +abstract class MUtil_Snippets_EmptySnippetAbstract extends MUtil_Registry_TargetAbstract implements MUtil_Snippets_SnippetInterface +{ + /** + * When hasHtmlOutput() is false a snippet code user should check + * for a redirectRoute. Otherwise the redirect calling render() will + * execute the redirect. + * + * This function should never return a value when the snippet does + * not redirect. + * + * Also when hasHtmlOutput() is true this function should not be + * called. + * + * @see Zend_Controller_Action_Helper_Redirector + * + * @return mixed Nothing or either an array or a string that is acceptable for Redector->gotoRoute() + */ + public function getRedirectRoute() + { } + + /** + * The place to check if the data set in the snippet is valid + * to generate the snippet. + * + * When invalid data should result in an error, you can throw it + * here but you can also perform the check in the + * checkRegistryRequestsAnswers() function from the + * {@see MUtil_Registry_TargetInterface}. + * + * @return boolean + */ + public function hasHtmlOutput() + { + return false; + } + + /** + * When there is a redirectRoute this function will execute it. + * + * When hasHtmlOutput() is true this functions should not be called. + * + * @see Zend_Controller_Action_Helper_Redirector + */ + public function redirectRoute() + { } + + /** + * Renders the element into a html string + * + * The $view is used to correctly encode and escape the output + * + * @param Zend_View_Abstract $view + * @return string Correctly encoded and escaped html output + */ + public function render(Zend_View_Abstract $view) + { } +} Modified: trunk/library/classes/MUtil/Snippets/SnippetInterface.php =================================================================== --- trunk/library/classes/MUtil/Snippets/SnippetInterface.php 2011-09-13 14:38:14 UTC (rev 11) +++ trunk/library/classes/MUtil/Snippets/SnippetInterface.php 2011-09-13 17:44:45 UTC (rev 12) @@ -3,7 +3,7 @@ /** * 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 @@ -14,7 +14,7 @@ * * 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 @@ -25,7 +25,7 @@ * 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 Snippets * @author Matijs de Jong <mj...@ma...> @@ -35,18 +35,18 @@ */ /** - * A snippet is a piece of html output that can be reused on multiple places in the code + * A snippet is a piece of html output that can be reused on multiple places in the code * or that isolates the processing needed for that output. * - * Variables are intialized using the MUtil_Registry_TargetInterface mechanism. + * Variables are intialized using the MUtil_Registry_TargetInterface mechanism. * The snippet is then rendered using MUtil_Html_HtmlInterface. - * - * The only "program flow" that can be initiated by a snippet is that it can reroute + * + * The only "program flow" that can be initiated by a snippet is that it can reroute * the browser to another page. * * @see MUtil_Registry_TargetInterface * @see MUtil_Html_HtmlInterface - * + * * @package MUtil * @subpackage Snippets * @copyright Copyright (c) 2011 Erasmus MC @@ -57,39 +57,39 @@ { /** * When hasHtmlOutput() is false a snippet code user should check - * for a redirectRoute. Otherwise the redirect calling render() will + * for a redirectRoute. Otherwise the redirect calling render() will * execute the redirect. - * + * * This function should never return a value when the snippet does * not redirect. - * - * Also when hasHtmlOutput() is true this function should not be + * + * Also when hasHtmlOutput() is true this function should not be * called. - * + * * @see Zend_Controller_Action_Helper_Redirector - * + * * @return mixed Nothing or either an array or a string that is acceptable for Redector->gotoRoute() */ public function getRedirectRoute(); - + /** * The place to check if the data set in the snippet is valid * to generate the snippet. * - * When invalid data should result in an error, you can throw it - * here but you can also perform the check in the + * When invalid data should result in an error, you can throw it + * here but you can also perform the check in the * checkRegistryRequestsAnswers() function from the * {@see MUtil_Registry_TargetInterface}. * * @return boolean */ public function hasHtmlOutput(); - + /** * When there is a redirectRoute this function will execute it. - * + * * When hasHtmlOutput() is true this functions should not be called. - * + * * @see Zend_Controller_Action_Helper_Redirector */ public function redirectRoute(); Property changes on: trunk/library/snippets/Track ___________________________________________________________________ Added: bugtraq:number + true Added: trunk/library/snippets/Track/AvailableTracksSnippets.php =================================================================== --- trunk/library/snippets/Track/AvailableTracksSnippets.php (rev 0) +++ trunk/library/snippets/Track/AvailableTracksSnippets.php 2011-09-13 17:44:45 UTC (rev 12) @@ -0,0 +1,137 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Snippets + * @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 $ + */ + +/** + * Short description for class + * + * Long description for class (if any)... + * + * @package Gems + * @subpackage Snippets + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4 + */ +class Track_AvailableTracksSnippets extends Gems_Snippets_ModelTableSnippetAbstract +{ + /** + * + * @var MUtil_Model_ModelAbstract + */ + protected $model; + + /** + * + * @var string 'S' or 'T' + */ + protected $trackType; + + /** + * Adds columns from the model to the bridge that creates the browse table. + * + * Overrule this function to add different columns to the browse table, without + * having to recode the core table building code. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @return void + */ + protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) + { + $controller = $this->request->getControllerName(); + + $menuList = $this->menu->getMenuList(); + + $menuList->addByController($controller, 'create') + ->addByController($controller, 'view') + ->addParameterSources($bridge, $this->request) + ->setLowerCase(); //->showDisabled(); + + // Add create button + if ($menuItem = $menuList->getActionLink($controller, 'create')) { + $bridge->addItemLink($menuItem); + } + + foreach($model->getItemsOrdered() as $name) { + if ($label = $model->get($name, 'label')) { + $bridge->addSortable($name, $label); + } + } + + // Add view button + if ($menuItem = $menuList->getActionLink($controller, 'view')) { + $bridge->addItemLink($menuItem); + } + + } + + /** + * Creates the model + * + * @return MUtil_Model_ModelAbstract + */ + public function createModel() + { + $this->model->addColumn(new Zend_Db_Expr(1), 'track_can_be_created'); + + + return $this->model; + } + + /** + * Overrule to implement snippet specific filtering and sorting. + * + * @param MUtil_Model_ModelAbstract $model + */ + protected function processFilterAndSort(MUtil_Model_ModelAbstract $model) + { + $filter = array(); + + if ($this->trackType) { + $filter['gtr_track_type'] = $this->trackType; + } + + $sort = array('gtr_track_name' => SORT_ASC); + + // MUtil_Echo::track($filter); + + $model->addFilter($filter); + $model->addSort($sort); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-15 10:46:10
|
Revision: 15 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=15&view=rev Author: matijsdejong Date: 2011-09-15 10:46:03 +0000 (Thu, 15 Sep 2011) Log Message: ----------- - system no longer gives error when token table does not exist - bug #422, initial patch level of database set to 40 Modified Paths: -------------- trunk/library/classes/Gems/Default/TrackRoundsAction.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php trunk/library/configs/db/tables/gems__patch_levels.10.sql trunk/library/snippets/EditTrackEngineSnippet.php Modified: trunk/library/classes/Gems/Default/TrackRoundsAction.php =================================================================== --- trunk/library/classes/Gems/Default/TrackRoundsAction.php 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/classes/Gems/Default/TrackRoundsAction.php 2011-09-15 10:46:03 UTC (rev 15) @@ -87,7 +87,7 @@ $trackEngine->applyToMenuSource($menuSource); $menuSource->setRequestId($trackId); // Tell the menu we're using track id as request id - $this->addSnippets($trackEngine->getRoundEditSnippetNames(), 'trackEngine', $trackEngine, 'trackId', $trackId); + $this->addSnippets($trackEngine->getRoundEditSnippetNames(), 'trackEngine', $trackEngine, 'trackId', $trackId, 'userId', $this->session->user_id); } /** @@ -149,7 +149,7 @@ $trackEngine->applyToMenuSource($menuSource); $menuSource->setRequestId($trackId); // Tell the menu we're using track id as request id - $this->addSnippets($trackEngine->getRoundEditSnippetNames(), 'roundId', $this->_getParam(Gems_Model::ROUND_ID), 'trackEngine', $trackEngine, 'trackId', $trackId); + $this->addSnippets($trackEngine->getRoundEditSnippetNames(), 'roundId', $this->_getParam(Gems_Model::ROUND_ID), 'trackEngine', $trackEngine, 'trackId', $trackId, 'userId', $this->session->user_id); } public function getTopic($count = 1) Modified: trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php =================================================================== --- trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php 2011-09-15 10:46:03 UTC (rev 15) @@ -191,6 +191,43 @@ } /** + * Update the track, both in the database and in memory. + * + * @param array $values The values that this token should be set to + * @param int $userId The current user + * @return int 1 if data changed, 0 otherwise + */ + private function _update(array $values, $userId) + { + if ($this->tracker->filterChangesOnly($this->_trackData, $values)) { + + if (Gems_Tracker::$verbose) { + $echo = ''; + foreach ($values as $key => $val) { + $echo .= $key . ': ' . $this->_trackData[$key] . ' => ' . $val . "\n"; + } + MUtil_Echo::r($echo, 'Updated values for ' . $this->_trackId); + } + + if (! isset($values['gto_changed'])) { + $values['gtr_changed'] = new Zend_Db_Expr('CURRENT_TIMESTAMP'); + } + if (! isset($values['gtr_changed_by'])) { + $values['gtr_changed_by'] = $userId; + } + + // Update values in this object + $this->_trackData = $values + $this->_trackData; + + // return 1; + return $this->db->update('gems__tracks', $values, array('gtr_id_track = ?' => $this->_trackId)); + + } else { + return 0; + } + } + + /** * Creates all tokens that should exist, but do not exist * * NOTE: When overruling this function you should not create tokens because they @@ -266,6 +303,16 @@ } /** + * Calculate the number of active rounds in this track from the database. + * + * @return int The number of rounds in this track. + */ + public function calculateRoundCount() + { + return $this->db->fetchOne("SELECT COUNT(*) FROM gems__rounds WHERE gro_active = 1 AND gro_id_track = ?", $this->_trackId); + } + + /** * Checks all existing tokens and updates any changes to the original rounds (when necessary) * * @param Gems_Tracker_RespondentTrack $respTrack The respondent track to check @@ -715,4 +762,17 @@ return 0; } + + /** + * Updates the number of rounds in this track. + * + * @param int $userId The current user + * @return int 1 if data changed, 0 otherwise + */ + public function updateRoundCount($userId) + { + $values['gtr_survey_rounds'] = $this->calculateRoundCount(); + + return $this->_update($values, $userId); + } } Modified: trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php =================================================================== --- trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php 2011-09-15 10:46:03 UTC (rev 15) @@ -68,6 +68,13 @@ public function calculateFieldsInfo($respTrackId, array $data); /** + * Calculate the number of active rounds in this track from the database. + * + * @return int The number of rounds in this track. + */ + public function calculateRoundCount(); + + /** * Check for the existence of all tokens and create them otherwise * * @param Gems_Tracker_RespondentTrack $respTrack The respondent track to check @@ -303,4 +310,12 @@ * @return int The number of changed fields */ public function setFieldsData($respTrackId, array $data); + + /** + * Updates the number of rounds in this track. + * + * @param int $userId The current user + * @return int 1 if data changed, 0 otherwise + */ + public function updateRoundCount($userId); } Modified: trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php 2011-09-15 10:46:03 UTC (rev 15) @@ -77,6 +77,12 @@ protected $trackId; /** + * + * @var int $userId The current user + */ + protected $userId = 0; + + /** * @var Gems_Util */ protected $util; @@ -199,6 +205,7 @@ if ($this->createData && (! $this->roundId)) { $this->roundId = $this->formData['gro_id_round']; } + $this->trackEngine->updateRoundCount($this->userId); } /** Modified: trunk/library/configs/db/tables/gems__patch_levels.10.sql =================================================================== --- trunk/library/configs/db/tables/gems__patch_levels.10.sql 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/configs/db/tables/gems__patch_levels.10.sql 2011-09-15 10:46:03 UTC (rev 15) @@ -3,7 +3,7 @@ gpl_level int unsigned not null unique, gpl_created timestamp not null default current_timestamp, - + PRIMARY KEY (gpl_level) ) ENGINE=InnoDB @@ -11,5 +11,5 @@ INSERT INTO gems__patch_levels (gpl_level, gpl_created) VALUES - (26, CURRENT_TIMESTAMP); + (40, CURRENT_TIMESTAMP); Modified: trunk/library/snippets/EditTrackEngineSnippet.php =================================================================== --- trunk/library/snippets/EditTrackEngineSnippet.php 2011-09-15 09:47:09 UTC (rev 14) +++ trunk/library/snippets/EditTrackEngineSnippet.php 2011-09-15 10:46:03 UTC (rev 15) @@ -265,10 +265,10 @@ if (isset($this->formData['gtr_organisations']) && is_array($this->formData['gtr_organisations'])) { $this->formData['gtr_organisations'] = '|' . implode('|', $this->formData['gtr_organisations']) . '|'; } - if ($this->createData) { + if ($this->trackEngine) { + $this->formData['gtr_survey_rounds'] = $this->trackEngine->calculateRoundCount(); + } else { $this->formData['gtr_survey_rounds'] = 0; - } else { - $this->formData['gtr_survey_rounds'] = $this->db->fetchOne("SELECT COUNT(*) FROM gems__rounds WHERE gro_active = 1 AND gro_id_track = ?", $this->trackId); } parent::saveData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-15 14:19:10
|
Revision: 22 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=22&view=rev Author: matijsdejong Date: 2011-09-15 14:19:01 +0000 (Thu, 15 Sep 2011) Log Message: ----------- - added organization code field without using it - fixed #413 overzicht weekview - added extra overview column to patches Modified Paths: -------------- trunk/library/classes/Gems/Default/DatabaseAction.php trunk/library/classes/Gems/Selector/DateSelectorAbstract.php trunk/library/classes/Gems/Selector/TokenDateSelector.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__organizations.20.sql trunk/library/configs/db_multi_layout/tables/gems__organizations.20.sql Modified: trunk/library/classes/Gems/Default/DatabaseAction.php =================================================================== --- trunk/library/classes/Gems/Default/DatabaseAction.php 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/classes/Gems/Default/DatabaseAction.php 2011-09-15 14:19:01 UTC (rev 22) @@ -298,10 +298,11 @@ $patcher = new Gems_Util_DatabasePatcher($this->db, 'patches.sql', $this->escort->getDatabasePaths()); $changed = $patcher->uploadPatches($this->loader->getVersions()->getBuild()); $tableSql = sprintf( - 'SELECT gpa_level AS `%s`, gpa_location AS `%s`, COUNT(*) AS `%s`, SUM(gpa_executed) AS `%s`, SUM(gpa_completed) AS `%s` FROM gems__patches GROUP BY gpa_level, gpa_location ORDER BY gpa_level DESC, gpa_location', + 'SELECT gpa_level AS `%s`, gpa_location AS `%s`, COUNT(*) AS `%s`, COUNT(*) - SUM(gpa_executed) AS `%s`, SUM(gpa_executed) AS `%s`, SUM(gpa_completed) AS `%s` FROM gems__patches GROUP BY gpa_level, gpa_location ORDER BY gpa_level DESC, gpa_location', $this->_('Level'), $this->_('Subtype'), $this->_('Patches'), + $this->_('To be executed'), $this->_('Executed'), $this->_('Finished')); Modified: trunk/library/classes/Gems/Selector/DateSelectorAbstract.php =================================================================== --- trunk/library/classes/Gems/Selector/DateSelectorAbstract.php 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/classes/Gems/Selector/DateSelectorAbstract.php 2011-09-15 14:19:01 UTC (rev 22) @@ -26,24 +26,24 @@ * 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. - */ - -/** - * File description of DateSelectorAbstract * - * @author Matijs de Jong <mj...@ma...> - * @since 1.1 - * @version 1.1 + * + * * @package Gems * @subpackage Selector + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: OverviewPlanAction.php 430 2011-08-18 10:40:21Z 175780 $ */ /** - * Class description of DateSelectorAbstract * - * @author Matijs de Jong <mj...@ma...> * @package Gems * @subpackage Selector + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.2 */ abstract class Gems_Selector_DateSelectorAbstract extends Gems_Registry_TargetAbstract { @@ -190,7 +190,7 @@ switch ($this->dateType) { case 'D': $keyCount = 1; - $groupby['period_1'] = $this->dateFrom; + $groupby['period_1'] = new Zend_Db_Expr("CONVERT($this->dateFrom, DATE)"); $date->setTime(0); $date->addDay($this->dateFactor - $this->dateRange); @@ -630,7 +630,7 @@ case 'W': $header = array($repeater->period_1, MUtil_Html::create()->br(), - sprintf($this->_('week %s'), $repeater->period_2)); + MUtil_Lazy::call('sprintf', $this->_('week %s'), $repeater->period_2)); break; case 'M': Modified: trunk/library/classes/Gems/Selector/TokenDateSelector.php =================================================================== --- trunk/library/classes/Gems/Selector/TokenDateSelector.php 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/classes/Gems/Selector/TokenDateSelector.php 2011-09-15 14:19:01 UTC (rev 22) @@ -4,7 +4,7 @@ /** * 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 @@ -15,7 +15,7 @@ * * 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 @@ -26,24 +26,23 @@ * 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. - */ - -/** - * File description of TokenDateSelector * - * @author Matijs de Jong <mj...@ma...> - * @since 1.1 - * @version 1.1 + * * @package Gems * @subpackage Selector + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: OverviewPlanAction.php 430 2011-08-18 10:40:21Z 175780 $ */ /** - * Class description of TokenDateSelector * - * @author Matijs de Jong <mj...@ma...> * @package Gems * @subpackage Selector + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.2 */ class Gems_Selector_TokenDateSelector extends Gems_Selector_DateSelectorAbstract { Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/configs/db/patches.sql 2011-09-15 14:19:01 UTC (rev 22) @@ -185,3 +185,8 @@ -- PATCH: Mail templates per organization ALTER TABLE `gems__mail_templates` ADD `gmt_organizations` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `gmt_body`; UPDATE gems__mail_templates SET gmt_organizations = (SELECT CONCAT('|', GROUP_CONCAT(gor_id_organization SEPARATOR '|'), '|') FROM gems__organizations); + +-- GEMS VERSION: 40 +-- PATCH: Organization codes +ALTER TABLE `gems__organizations` ADD gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' AFTER gor_name; + Modified: trunk/library/configs/db/tables/gems__organizations.20.sql =================================================================== --- trunk/library/configs/db/tables/gems__organizations.20.sql 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/configs/db/tables/gems__organizations.20.sql 2011-09-15 14:19:01 UTC (rev 22) @@ -3,6 +3,7 @@ gor_id_organization bigint unsigned not null auto_increment, gor_name varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_location varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_url varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_task varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', Modified: trunk/library/configs/db_multi_layout/tables/gems__organizations.20.sql =================================================================== --- trunk/library/configs/db_multi_layout/tables/gems__organizations.20.sql 2011-09-15 14:18:48 UTC (rev 21) +++ trunk/library/configs/db_multi_layout/tables/gems__organizations.20.sql 2011-09-15 14:19:01 UTC (rev 22) @@ -4,6 +4,7 @@ gor_id_organization bigint unsigned not null auto_increment, gor_name varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_location varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_url varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gor_task varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-16 06:24:29
|
Revision: 28 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=28&view=rev Author: mennodekker Date: 2011-09-16 06:24:15 +0000 (Fri, 16 Sep 2011) Log Message: ----------- Setting the keywords again since they seem to be lost in migration Modified Paths: -------------- trunk/library/classes/Gems/AccessLog.php trunk/library/classes/Gems/Auth.php trunk/library/classes/Gems/Communication/Exception.php trunk/library/classes/Gems/Communication/RespondentContainer.php trunk/library/classes/Gems/Communication/RespondentModelWriter.php trunk/library/classes/Gems/Communication/RespondentReader.php trunk/library/classes/Gems/Communication/RespondentWriter.php trunk/library/classes/Gems/Controller/BrowseEditAction.php trunk/library/classes/Gems/Controller/ModelActionAbstract.php trunk/library/classes/Gems/Cookies.php trunk/library/classes/Gems/Default/AskAction.php trunk/library/classes/Gems/Default/DatabaseAction.php trunk/library/classes/Gems/Default/IndexAction.php trunk/library/classes/Gems/Default/MailAction.php trunk/library/classes/Gems/Default/MailServerAction.php trunk/library/classes/Gems/Default/OverviewPlanAction.php trunk/library/classes/Gems/Default/ProjectInformationAction.php trunk/library/classes/Gems/Default/ProjectSurveysAction.php trunk/library/classes/Gems/Default/ProjectTracksAction.php trunk/library/classes/Gems/Default/RespondentAction.php trunk/library/classes/Gems/Default/RespondentPlanAction.php trunk/library/classes/Gems/Default/RoleAction.php trunk/library/classes/Gems/Default/SourceAction.php trunk/library/classes/Gems/Default/StaffAction.php trunk/library/classes/Gems/Default/SurveyAction.php trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php trunk/library/classes/Gems/Default/TokenPlanAction.php trunk/library/classes/Gems/Default/TrackAction.php trunk/library/classes/Gems/Default/TrackActionAbstract.php trunk/library/classes/Gems/Default/TrackFieldsAction.php trunk/library/classes/Gems/Default/TrackMaintenanceAction.php trunk/library/classes/Gems/Default/TrackRoundAction.php trunk/library/classes/Gems/Default/TrackRoundsAction.php trunk/library/classes/Gems/Email/EmailFormAbstract.php trunk/library/classes/Gems/Email/MailTemplateForm.php trunk/library/classes/Gems/Email/MultiMailForm.php trunk/library/classes/Gems/Email/OneMailForm.php trunk/library/classes/Gems/Email/TemplateMailer.php trunk/library/classes/Gems/Event/EventCalculations.php trunk/library/classes/Gems/Event/EventInterface.php trunk/library/classes/Gems/Event/RoundChangedEventInterface.php trunk/library/classes/Gems/Event/SurveyBeforeAnsweringEventInterface.php trunk/library/classes/Gems/Event/SurveyCompletedEventInterface.php trunk/library/classes/Gems/Events.php trunk/library/classes/Gems/Filter/DutchZipcode.php trunk/library/classes/Gems/Form/Decorator/Form.php trunk/library/classes/Gems/Form/Decorator/TabErrors.php trunk/library/classes/Gems/Form/Decorator/Tooltip.php trunk/library/classes/Gems/Form/SubForm.php trunk/library/classes/Gems/Form/TabGroup.php trunk/library/classes/Gems/Form/TabSubForm.php trunk/library/classes/Gems/Form/TableForm.php trunk/library/classes/Gems/Form.php trunk/library/classes/Gems/FormattedData.php trunk/library/classes/Gems/JQuery/Form/Decorator/TabContainer.php trunk/library/classes/Gems/JQuery/Form/Element/ToggleCheckboxes.php trunk/library/classes/Gems/JQuery/JQueryExtenderAbstract.php trunk/library/classes/Gems/JQuery/TableRowKeySelector.php trunk/library/classes/Gems/JQuery/View/Helper/TabContainer.php trunk/library/classes/Gems/JQuery/View/Helper/ToggleCheckboxes.php trunk/library/classes/Gems/Loader/LoaderAbstract.php trunk/library/classes/Gems/Loader.php trunk/library/classes/Gems/Log.php trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/Gems/Menu/MenuList.php trunk/library/classes/Gems/Menu/ParameterSource.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/Model/DbaModel.php trunk/library/classes/Gems/Model/HiddenOrganizationModel.php trunk/library/classes/Gems/Model/JoinModel.php trunk/library/classes/Gems/Model/RespondentModel.php trunk/library/classes/Gems/Model/ThreeColumnTableBridge.php trunk/library/classes/Gems/Model.php trunk/library/classes/Gems/Roles.php trunk/library/classes/Gems/Selector/DateSelectorAbstract.php trunk/library/classes/Gems/Selector/TokenDateSelector.php trunk/library/classes/Gems/Selector.php trunk/library/classes/Gems/Snippets/MenuSnippetAbstract.php trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/Gems/Snippets/RespondentDetailSnippetAbstract.php trunk/library/classes/Gems/Snippets/TokenModelSnippetAbstract.php trunk/library/classes/Gems/TabForm.php trunk/library/classes/Gems/Tracker/Engine/AnyStepEngine.php trunk/library/classes/Gems/Tracker/Engine/NextStepEngine.php trunk/library/classes/Gems/Tracker/Engine/SingleSurveyEngine.php trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php trunk/library/classes/Gems/Tracker/Model/RespondentTrackModel.php trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php trunk/library/classes/Gems/Tracker/Model/TrackModel.php trunk/library/classes/Gems/Tracker/RespondentTrack.php trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditSingleSurveyTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowTrackUsageAbstract.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m91Database.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m9Database.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php trunk/library/classes/Gems/Tracker/Source/SourceAbstract.php trunk/library/classes/Gems/Tracker/Source/SourceInterface.php trunk/library/classes/Gems/Tracker/Survey.php trunk/library/classes/Gems/Tracker/Token/TokenLibrary.php trunk/library/classes/Gems/Tracker/Token/TokenSelect.php trunk/library/classes/Gems/Tracker/Token.php trunk/library/classes/Gems/Tracker/TrackerInterface.php trunk/library/classes/Gems/Tracker.php trunk/library/classes/Gems/Util/DatabasePatcher.php trunk/library/classes/Gems/Util/DbLookup.php trunk/library/classes/Gems/Util/RequestCache.php trunk/library/classes/Gems/Util/TrackData.php trunk/library/classes/Gems/Util/Translated.php trunk/library/classes/Gems/Util.php trunk/library/classes/Gems/Validate/GemsPasswordUsername.php trunk/library/classes/Gems/Versions.php trunk/library/classes/Gems/View/Helper/Excel.php trunk/library/classes/GemsEscort.php trunk/library/classes/MUtil/Acl.php trunk/library/classes/MUtil/Application/Escort.php trunk/library/classes/MUtil/Application/EscortControllerHelper.php trunk/library/classes/MUtil/Application/EscortPlugin.php trunk/library/classes/MUtil/Controller/ModelActionAbstract.php trunk/library/classes/MUtil/Form/Element/Exhibitor.php trunk/library/classes/MUtil/Form/Element/FakeSubmit.php trunk/library/classes/MUtil/Form/Element/Html.php trunk/library/classes/MUtil/Form/Element/NoFocusInterface.php trunk/library/classes/MUtil/Form/Element/SubFocusInterface.php trunk/library/classes/MUtil/Form/Element/Tab.php trunk/library/classes/MUtil/Form/Element/Table.php trunk/library/classes/MUtil/Form.php trunk/library/classes/MUtil/Html/Marker.php trunk/library/classes/MUtil/Html/PageRangeRenderer.php trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php trunk/library/classes/MUtil/Model/FormBridge.php trunk/library/classes/MUtil/Model/ModelAbstract.php trunk/library/classes/MUtil/Model/TableBridge.php trunk/library/classes/MUtil/Model/TableModel.php trunk/library/classes/MUtil/Ra/Filter/Contains.php trunk/library/classes/MUtil/Ra/FilterAbstract.php trunk/library/classes/MUtil/Ra/FilterInterface.php trunk/library/classes/MUtil/Ra/Nested.php trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelVerticalTableSnippetAbstract.php trunk/library/classes/MUtil/Snippets/SnippetAbstract.php trunk/library/classes/MUtil/Snippets/SnippetInterface.php trunk/library/classes/MUtil/Snippets/SnippetLoader.php trunk/library/classes/MUtil/Snippets/Standard/ModelFormSnippet.php trunk/library/classes/MUtil/Snippets/Standard/ModelTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/ModelVerticalTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/SelectiveTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/TableSnippet.php trunk/library/classes/MUtil/Snippets/TabSnippetAbstract.php trunk/library/classes/MUtil/Snippets/TableSnippetAbstract.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Auth.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Cache.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Database.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Exception.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/File.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Html.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Interface.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Memory.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Registry.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Text.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Time.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Variables.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug.php trunk/library/controllers/MailServerController.php trunk/library/controllers/TrackRoundController.php trunk/library/docs/Sample.php trunk/library/snippets/AddTracksSnippet.php trunk/library/snippets/AnswerModelSnippet.php trunk/library/snippets/BrowseSingleSurveyTokenSnippet.php trunk/library/snippets/DeleteInSourceTrackSnippet.php trunk/library/snippets/DeleteSingleSurveyInSourceTokenSnippet.php trunk/library/snippets/DeleteSingleSurveyNotUsedTokenSnippet.php trunk/library/snippets/DeleteTrackTokenSnippet.php trunk/library/snippets/EditRoundSnippet.php trunk/library/snippets/EditRoundStepSnippet.php trunk/library/snippets/EditSingleSurveyTokenSnippet.php trunk/library/snippets/EditTrackEngineSnippet.php trunk/library/snippets/EditTrackSnippet.php trunk/library/snippets/EditTrackTokenSnippet.php trunk/library/snippets/RespondentDetailsSnippet.php trunk/library/snippets/RespondentDetailsWithAssignmentsSnippet.php trunk/library/snippets/RespondentTokenSnippet.php trunk/library/snippets/RespondentTokenTabsSnippet.php trunk/library/snippets/SelectedTokensTitleSnippet.php trunk/library/snippets/ShowRoundSnippet.php trunk/library/snippets/ShowRoundStepSnippet.php trunk/library/snippets/ShowSingleSurveyTokenSnippet.php trunk/library/snippets/ShowTrackTokenSnippet.php trunk/library/snippets/SurveyQuestionsSnippet.php trunk/library/snippets/TokenDateSelectorSnippet.php trunk/library/snippets/TokenNotFoundSnippet.php trunk/library/snippets/Track/AvailableTracksSnippets.php trunk/library/snippets/TrackAnswersModelSnippet.php trunk/library/snippets/TrackSurveyOverviewSnippet.php trunk/library/snippets/TrackTokenOverviewSnippet.php trunk/library/snippets/TrackUsageTextDetailsSnippet.php Property Changed: ---------------- trunk/library/classes/Gems/AccessLog.php trunk/library/classes/Gems/Auth.php trunk/library/classes/Gems/Communication/Exception.php trunk/library/classes/Gems/Communication/RespondentContainer.php trunk/library/classes/Gems/Communication/RespondentModelWriter.php trunk/library/classes/Gems/Communication/RespondentReader.php trunk/library/classes/Gems/Communication/RespondentWriter.php trunk/library/classes/Gems/Controller/Action.php trunk/library/classes/Gems/Controller/BrowseEditAction.php trunk/library/classes/Gems/Controller/ModelActionAbstract.php trunk/library/classes/Gems/Cookies.php trunk/library/classes/Gems/Default/AskAction.php trunk/library/classes/Gems/Default/ConsentAction.php trunk/library/classes/Gems/Default/ContactAction.php trunk/library/classes/Gems/Default/CountryAction.php trunk/library/classes/Gems/Default/DatabaseAction.php trunk/library/classes/Gems/Default/EmailAction.php trunk/library/classes/Gems/Default/ErrorAction.php trunk/library/classes/Gems/Default/GroupAction.php trunk/library/classes/Gems/Default/IndexAction.php trunk/library/classes/Gems/Default/InvitationAction.php trunk/library/classes/Gems/Default/LanguageAction.php trunk/library/classes/Gems/Default/LogAction.php trunk/library/classes/Gems/Default/LogMaintenanceAction.php trunk/library/classes/Gems/Default/MailAction.php trunk/library/classes/Gems/Default/MailServerAction.php trunk/library/classes/Gems/Default/OptionAction.php trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/Default/OverviewPlanAction.php trunk/library/classes/Gems/Default/ProjectInformationAction.php trunk/library/classes/Gems/Default/ProjectSurveysAction.php trunk/library/classes/Gems/Default/ProjectTracksAction.php trunk/library/classes/Gems/Default/ReceptionAction.php trunk/library/classes/Gems/Default/RespondentAction.php trunk/library/classes/Gems/Default/RespondentPlanAction.php trunk/library/classes/Gems/Default/RoleAction.php trunk/library/classes/Gems/Default/SourceAction.php trunk/library/classes/Gems/Default/StaffAction.php trunk/library/classes/Gems/Default/SurveyAction.php trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php trunk/library/classes/Gems/Default/TokenPlanAction.php trunk/library/classes/Gems/Default/TrackAction.php trunk/library/classes/Gems/Default/TrackActionAbstract.php trunk/library/classes/Gems/Default/TrackFieldsAction.php trunk/library/classes/Gems/Default/TrackMaintenanceAction.php trunk/library/classes/Gems/Default/TrackRoundAction.php trunk/library/classes/Gems/Default/TrackRoundsAction.php trunk/library/classes/Gems/Email/EmailFormAbstract.php trunk/library/classes/Gems/Email/MailTemplateForm.php trunk/library/classes/Gems/Email/MultiMailForm.php trunk/library/classes/Gems/Email/OneMailForm.php trunk/library/classes/Gems/Email/TemplateMailer.php trunk/library/classes/Gems/Event/EventCalculations.php trunk/library/classes/Gems/Event/EventInterface.php trunk/library/classes/Gems/Event/RoundChangedEventInterface.php trunk/library/classes/Gems/Event/SurveyBeforeAnsweringEventInterface.php trunk/library/classes/Gems/Event/SurveyCompletedEventInterface.php trunk/library/classes/Gems/Events.php trunk/library/classes/Gems/Exception/Coding.php trunk/library/classes/Gems/Exception.php trunk/library/classes/Gems/Filter/DutchZipcode.php trunk/library/classes/Gems/Form/Decorator/Form.php trunk/library/classes/Gems/Form/Decorator/TabErrors.php trunk/library/classes/Gems/Form/Decorator/Tooltip.php trunk/library/classes/Gems/Form/SubForm.php trunk/library/classes/Gems/Form/TabGroup.php trunk/library/classes/Gems/Form/TabSubForm.php trunk/library/classes/Gems/Form/TableForm.php trunk/library/classes/Gems/Form.php trunk/library/classes/Gems/FormattedData.php trunk/library/classes/Gems/Html.php trunk/library/classes/Gems/JQuery/AutoSubmitForm.php trunk/library/classes/Gems/JQuery/Form/Decorator/TabContainer.php trunk/library/classes/Gems/JQuery/Form/Element/ToggleCheckboxes.php trunk/library/classes/Gems/JQuery/JQueryExtenderAbstract.php trunk/library/classes/Gems/JQuery/TableRowKeySelector.php trunk/library/classes/Gems/JQuery/View/Helper/TabContainer.php trunk/library/classes/Gems/JQuery/View/Helper/ToggleCheckboxes.php trunk/library/classes/Gems/Loader/LoaderAbstract.php trunk/library/classes/Gems/Loader/TargetLoaderAbstract.php trunk/library/classes/Gems/Loader.php trunk/library/classes/Gems/Log.php trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/Gems/Menu/MenuList.php trunk/library/classes/Gems/Menu/ParameterSource.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/Model/DbaModel.php trunk/library/classes/Gems/Model/HiddenOrganizationModel.php trunk/library/classes/Gems/Model/JoinModel.php trunk/library/classes/Gems/Model/RespondentModel.php trunk/library/classes/Gems/Model/ThreeColumnTableBridge.php trunk/library/classes/Gems/Model.php trunk/library/classes/Gems/Pdf.php trunk/library/classes/Gems/Project/Layout/MultiLayoutInterface.php trunk/library/classes/Gems/Project/Layout/SingleLayoutInterface.php trunk/library/classes/Gems/Project/Log/LogRespondentAccessInterface.php trunk/library/classes/Gems/Project/Organization/MultiOrganizationInterface.php trunk/library/classes/Gems/Project/Organization/SingleOrganizationInterface.php trunk/library/classes/Gems/Project/Tracks/FixedTracksInterface.php trunk/library/classes/Gems/Project/Tracks/MultiTracksInterface.php trunk/library/classes/Gems/Project/Tracks/SingleTrackInterface.php trunk/library/classes/Gems/Project/Tracks/StandAloneSurveysInterface.php trunk/library/classes/Gems/Project/Tracks/TracksOnlyInterface.php trunk/library/classes/Gems/Registry/TargetAbstract.php trunk/library/classes/Gems/Roles.php trunk/library/classes/Gems/Selector/DateSelectorAbstract.php trunk/library/classes/Gems/Selector/SelectorField.php trunk/library/classes/Gems/Selector/TokenByGroupDateSelector.php trunk/library/classes/Gems/Selector/TokenDateSelector.php trunk/library/classes/Gems/Selector.php trunk/library/classes/Gems/Snippets/MenuSnippetAbstract.php trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/Gems/Snippets/RespondentDetailSnippetAbstract.php trunk/library/classes/Gems/Snippets/TokenModelSnippetAbstract.php trunk/library/classes/Gems/TabForm.php trunk/library/classes/Gems/Tracker/ChangeTracker.php trunk/library/classes/Gems/Tracker/Engine/AnyStepEngine.php trunk/library/classes/Gems/Tracker/Engine/NextStepEngine.php trunk/library/classes/Gems/Tracker/Engine/SingleSurveyEngine.php trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineInterface.php trunk/library/classes/Gems/Tracker/Model/RespondentTrackModel.php trunk/library/classes/Gems/Tracker/Model/SingleSurveyTokenModel.php trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php trunk/library/classes/Gems/Tracker/Model/TrackModel.php trunk/library/classes/Gems/Tracker/RespondentTrack.php trunk/library/classes/Gems/Tracker/Snippets/EditRoundSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditSingleSurveyTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/EditTrackSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowRoundSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowTokenSnippetAbstract.php trunk/library/classes/Gems/Tracker/Snippets/ShowTrackUsageAbstract.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m91Database.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m9Database.php trunk/library/classes/Gems/Tracker/Source/LimeSurvey1m9FieldMap.php trunk/library/classes/Gems/Tracker/Source/SourceAbstract.php trunk/library/classes/Gems/Tracker/Source/SourceInterface.php trunk/library/classes/Gems/Tracker/Source/SurveyNotFoundException.php trunk/library/classes/Gems/Tracker/Survey.php trunk/library/classes/Gems/Tracker/SurveyModel.php trunk/library/classes/Gems/Tracker/Token/TokenFilter.php trunk/library/classes/Gems/Tracker/Token/TokenLibrary.php trunk/library/classes/Gems/Tracker/Token/TokenSelect.php trunk/library/classes/Gems/Tracker/Token/TokenValidator.php trunk/library/classes/Gems/Tracker/Token.php trunk/library/classes/Gems/Tracker/TrackerInterface.php trunk/library/classes/Gems/Tracker.php trunk/library/classes/Gems/Util/BasePath.php trunk/library/classes/Gems/Util/DatabasePatcher.php trunk/library/classes/Gems/Util/DbLookup.php trunk/library/classes/Gems/Util/Localized.php trunk/library/classes/Gems/Util/RequestCache.php trunk/library/classes/Gems/Util/TrackData.php trunk/library/classes/Gems/Util/Translated.php trunk/library/classes/Gems/Util.php trunk/library/classes/Gems/Validate/GemsPasswordUsername.php trunk/library/classes/Gems/Validate/LimeSurveySoapClient.php trunk/library/classes/Gems/Versions.php trunk/library/classes/Gems/View/Helper/Excel.php trunk/library/classes/GemsEscort.php trunk/library/classes/MUtil/Acl.php trunk/library/classes/MUtil/Application/Escort.php trunk/library/classes/MUtil/Application/EscortControllerHelper.php trunk/library/classes/MUtil/Application/EscortPlugin.php trunk/library/classes/MUtil/ArrayString.php trunk/library/classes/MUtil/Config/Php.php trunk/library/classes/MUtil/Controller/Action.php trunk/library/classes/MUtil/Controller/ModelActionAbstract.php trunk/library/classes/MUtil/Controller/html-view.phtml trunk/library/classes/MUtil/Date.php trunk/library/classes/MUtil/Dojo.php trunk/library/classes/MUtil/Echo.php trunk/library/classes/MUtil/Form/Decorator/AutoFocus.php trunk/library/classes/MUtil/Form/Decorator/Table.php trunk/library/classes/MUtil/Form/Element/Exhibitor.php trunk/library/classes/MUtil/Form/Element/FakeSubmit.php trunk/library/classes/MUtil/Form/Element/Html.php trunk/library/classes/MUtil/Form/Element/NoFocusInterface.php trunk/library/classes/MUtil/Form/Element/SubFocusInterface.php trunk/library/classes/MUtil/Form/Element/Tab.php trunk/library/classes/MUtil/Form/Element/Table.php trunk/library/classes/MUtil/Form.php trunk/library/classes/MUtil/Html/AElement.php trunk/library/classes/MUtil/Html/ArrayAttribute.php trunk/library/classes/MUtil/Html/Attribute.php trunk/library/classes/MUtil/Html/AttributeAbstract.php trunk/library/classes/MUtil/Html/AttributeInterface.php trunk/library/classes/MUtil/Html/ClassArrayAttribute.php trunk/library/classes/MUtil/Html/ColElement.php trunk/library/classes/MUtil/Html/ColGroupElement.php trunk/library/classes/MUtil/Html/ColumnInterface.php trunk/library/classes/MUtil/Html/Creator.php trunk/library/classes/MUtil/Html/DdElement.php trunk/library/classes/MUtil/Html/DlElement.php trunk/library/classes/MUtil/Html/Dojo/ContentPane.php trunk/library/classes/MUtil/Html/Dojo/DojoData.php trunk/library/classes/MUtil/Html/Dojo/DojoElementAbstract.php trunk/library/classes/MUtil/Html/Dojo/TabContainer.php trunk/library/classes/MUtil/Html/DtElement.php trunk/library/classes/MUtil/Html/ElementDecorator.php trunk/library/classes/MUtil/Html/ElementInterface.php trunk/library/classes/MUtil/Html/FormLayout.php trunk/library/classes/MUtil/Html/HrefArrayAttribute.php trunk/library/classes/MUtil/Html/HtmlElement.php trunk/library/classes/MUtil/Html/HtmlException.php trunk/library/classes/MUtil/Html/HtmlInterface.php trunk/library/classes/MUtil/Html/ImgElement.php trunk/library/classes/MUtil/Html/InputRenderer.php trunk/library/classes/MUtil/Html/LabelElement.php trunk/library/classes/MUtil/Html/ListElement.php trunk/library/classes/MUtil/Html/Marker.php trunk/library/classes/MUtil/Html/MultiWrapper.php trunk/library/classes/MUtil/Html/OnClickArrayAttribute.php trunk/library/classes/MUtil/Html/PagePanel.php trunk/library/classes/MUtil/Html/PageRangeRenderer.php trunk/library/classes/MUtil/Html/Raw.php trunk/library/classes/MUtil/Html/Renderer.php trunk/library/classes/MUtil/Html/RepeatRenderer.php trunk/library/classes/MUtil/Html/Sequence.php trunk/library/classes/MUtil/Html/StyleArrayAttribute.php trunk/library/classes/MUtil/Html/TBodyElement.php trunk/library/classes/MUtil/Html/TableElement.php trunk/library/classes/MUtil/Html/TrElement.php trunk/library/classes/MUtil/Html/UrlArrayAttribute.php trunk/library/classes/MUtil/Html.php trunk/library/classes/MUtil/Https.php trunk/library/classes/MUtil/JQuery/Form/Element/DatePicker.php trunk/library/classes/MUtil/JQuery.php trunk/library/classes/MUtil/Lazy/Alternate.php trunk/library/classes/MUtil/Lazy/ArrayAccessor.php trunk/library/classes/MUtil/Lazy/ArrayWrap.php trunk/library/classes/MUtil/Lazy/Call.php trunk/library/classes/MUtil/Lazy/LazyAbstract.php trunk/library/classes/MUtil/Lazy/LazyException.php trunk/library/classes/MUtil/Lazy/LazyGet.php trunk/library/classes/MUtil/Lazy/LazyInterface.php trunk/library/classes/MUtil/Lazy/ObjectWrap.php trunk/library/classes/MUtil/Lazy/ParallelRepeater.php trunk/library/classes/MUtil/Lazy/Procrastinator.php trunk/library/classes/MUtil/Lazy/Property.php trunk/library/classes/MUtil/Lazy/Repeatable.php trunk/library/classes/MUtil/Lazy/RepeatableByKeyValue.php trunk/library/classes/MUtil/Lazy/RepeatableFormElements.php trunk/library/classes/MUtil/Lazy/RepeatableInterface.php trunk/library/classes/MUtil/Lazy/RepeatableObjectProperties.php trunk/library/classes/MUtil/Lazy/Stack/EmptyStack.php trunk/library/classes/MUtil/Lazy/StackInterface.php trunk/library/classes/MUtil/Lazy/StaticCall.php trunk/library/classes/MUtil/Lazy.php trunk/library/classes/MUtil/Mail.php trunk/library/classes/MUtil/Markup/Renderer/Text/Url.php trunk/library/classes/MUtil/Markup/Renderer/Text.php trunk/library/classes/MUtil/Markup.php trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php trunk/library/classes/MUtil/Model/FormBridge.php trunk/library/classes/MUtil/Model/JoinModel.php trunk/library/classes/MUtil/Model/ModelAbstract.php trunk/library/classes/MUtil/Model/ModelException.php trunk/library/classes/MUtil/Model/ModelTransformerAbstract.php trunk/library/classes/MUtil/Model/SelectModel.php trunk/library/classes/MUtil/Model/TableBridge.php trunk/library/classes/MUtil/Model/TableBridgeAbstract.php trunk/library/classes/MUtil/Model/TableModel.php trunk/library/classes/MUtil/Model/Transform/RequiredRowsTransformer.php trunk/library/classes/MUtil/Model/VerticalTableBridge.php trunk/library/classes/MUtil/Model.php trunk/library/classes/MUtil/MultiWrapper.php trunk/library/classes/MUtil/Parser/Sql/WordsParser.php trunk/library/classes/MUtil/Parser/Sql/WordsParserException.php trunk/library/classes/MUtil/Ra/Filter/Contains.php trunk/library/classes/MUtil/Ra/FilterAbstract.php trunk/library/classes/MUtil/Ra/FilterInterface.php trunk/library/classes/MUtil/Ra/Nested.php trunk/library/classes/MUtil/Ra.php trunk/library/classes/MUtil/Registry/Source.php trunk/library/classes/MUtil/Registry/SourceInterface.php trunk/library/classes/MUtil/Registry/TargetAbstract.php trunk/library/classes/MUtil/Registry/TargetInterface.php trunk/library/classes/MUtil/Snippets/EmptySnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/MUtil/Snippets/ModelVerticalTableSnippetAbstract.php trunk/library/classes/MUtil/Snippets/SnippetAbstract.php trunk/library/classes/MUtil/Snippets/SnippetInterface.php trunk/library/classes/MUtil/Snippets/SnippetLoader.php trunk/library/classes/MUtil/Snippets/Standard/ModelFormSnippet.php trunk/library/classes/MUtil/Snippets/Standard/ModelTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/ModelVerticalTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/SelectiveTableSnippet.php trunk/library/classes/MUtil/Snippets/Standard/TableSnippet.php trunk/library/classes/MUtil/Snippets/TabSnippetAbstract.php trunk/library/classes/MUtil/Snippets/TableSnippetAbstract.php trunk/library/classes/MUtil/Translate/Adapter/Potemkin.php trunk/library/classes/MUtil/Util/ClassList.php trunk/library/classes/MUtil/Util/FunctionList.php trunk/library/classes/MUtil/Util/LookupList.php trunk/library/classes/MUtil/Validate/Date/DateAbstract.php trunk/library/classes/MUtil/Validate/Date/DateAfter.php trunk/library/classes/MUtil/Validate/Date/DateBefore.php trunk/library/classes/MUtil/Validate/Date/FormatInterface.php trunk/library/classes/MUtil/Validate/Date/IsDate.php trunk/library/classes/MUtil/Validate/Db/UniqueValue.php trunk/library/classes/MUtil/Validate/Dutch/BankAccount.php trunk/library/classes/MUtil/Validate/Dutch/Burgerservicenummer.php trunk/library/classes/MUtil/Validate/ElevenTest.php trunk/library/classes/MUtil/Validate/IsConfirmed.php trunk/library/classes/MUtil/Validate/Phone.php trunk/library/classes/MUtil/Validate/Require.php trunk/library/classes/MUtil/Validate/SimpleEmail.php trunk/library/classes/MUtil/Validate/SimpleEmails.php trunk/library/classes/MUtil/Validate/Url.php trunk/library/classes/MUtil/Version.php trunk/library/classes/MUtil/View/Helper/DatePicker.php trunk/library/classes/MUtil/View/Helper/Exhibitor.php trunk/library/classes/MUtil/View/Helper/FakeSubmit.php trunk/library/classes/MUtil/View/Helper/Html.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Auth.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Cache.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Database.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Exception.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/File.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Html.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Interface.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Memory.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Registry.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Text.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Time.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin/Variables.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug/Plugin.php trunk/library/classes/ZFDebug/Controller/Plugin/Debug.php trunk/library/controllers/AskController.php trunk/library/controllers/ConsentController.php trunk/library/controllers/ContactController.php trunk/library/controllers/CountryController.php trunk/library/controllers/DatabaseController.php trunk/library/controllers/EmailController.php trunk/library/controllers/ErrorController.php trunk/library/controllers/GroupController.php trunk/library/controllers/IndexController.php trunk/library/controllers/InvitationController.php trunk/library/controllers/LanguageController.php trunk/library/controllers/LogController.php trunk/library/controllers/LogMaintenanceController.php trunk/library/controllers/MailController.php trunk/library/controllers/MailServerController.php trunk/library/controllers/OptionController.php trunk/library/controllers/OrganizationController.php trunk/library/controllers/OverviewPlanController.php trunk/library/controllers/ProjectInformationController.php trunk/library/controllers/ProjectSurveysController.php trunk/library/controllers/ProjectTracksController.php trunk/library/controllers/ReceptionController.php trunk/library/controllers/RespondentController.php trunk/library/controllers/RespondentPlanController.php trunk/library/controllers/RoleController.php trunk/library/controllers/SourceController.php trunk/library/controllers/StaffController.php trunk/library/controllers/SurveyController.php trunk/library/controllers/SurveyMaintenanceController.php trunk/library/controllers/TokenPlanController.php trunk/library/controllers/TrackController.php trunk/library/controllers/TrackFieldsController.php trunk/library/controllers/TrackMaintenanceController.php trunk/library/controllers/TrackRoundController.php trunk/library/controllers/TrackRoundsController.php trunk/library/docs/Sample.php trunk/library/languages/FakeTranslations.php trunk/library/pre_bootstrap.php trunk/library/snippets/AddTracksSnippet.php trunk/library/snippets/AnswerModelSnippet.php trunk/library/snippets/BrowseSingleSurveyTokenSnippet.php trunk/library/snippets/DeleteInSourceTrackSnippet.php trunk/library/snippets/DeleteSingleSurveyInSourceTokenSnippet.php trunk/library/snippets/DeleteSingleSurveyNotUsedTokenSnippet.php trunk/library/snippets/DeleteTrackTokenSnippet.php trunk/library/snippets/EditRoundSnippet.php trunk/library/snippets/EditRoundStepSnippet.php trunk/library/snippets/EditSingleSurveyTokenSnippet.php trunk/library/snippets/EditTrackEngineSnippet.php trunk/library/snippets/EditTrackSnippet.php trunk/library/snippets/EditTrackTokenSnippet.php trunk/library/snippets/RespondentDetailsSnippet.php trunk/library/snippets/RespondentDetailsWithAssignmentsSnippet.php trunk/library/snippets/RespondentTokenSnippet.php trunk/library/snippets/RespondentTokenTabsSnippet.php trunk/library/snippets/SelectedTokensTitleSnippet.php trunk/library/snippets/ShowRoundSnippet.php trunk/library/snippets/ShowRoundStepSnippet.php trunk/library/snippets/ShowSingleSurveyTokenSnippet.php trunk/library/snippets/ShowTrackTokenSnippet.php trunk/library/snippets/ShowTrackUsageSnippet.php trunk/library/snippets/SurveyQuestionsSnippet.php trunk/library/snippets/TokenDateSelectorSnippet.php trunk/library/snippets/TokenNotFoundSnippet.php trunk/library/snippets/Track/AvailableTracksSnippets.php trunk/library/snippets/TrackAnswersModelSnippet.php trunk/library/snippets/TrackSurveyOverviewSnippet.php trunk/library/snippets/TrackTokenOverviewSnippet.php trunk/library/snippets/TrackUsageTextDetailsSnippet.php Modified: trunk/library/classes/Gems/AccessLog.php =================================================================== --- trunk/library/classes/Gems/AccessLog.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/AccessLog.php 2011-09-16 06:24:15 UTC (rev 28) @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @version $Id: AccessLog.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ * @package Gems * @subpackage AccessLog * @copyright Copyright (c) 2011 Erasmus MC Property changes on: trunk/library/classes/Gems/AccessLog.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Auth.php =================================================================== --- trunk/library/classes/Gems/Auth.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Auth.php 2011-09-16 06:24:15 UTC (rev 28) @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @version $Id: Auth.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Auth * @copyright Copyright (c) 2011 Erasmus MC Property changes on: trunk/library/classes/Gems/Auth.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Communication/Exception.php =================================================================== --- trunk/library/classes/Gems/Communication/Exception.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Communication/Exception.php 2011-09-16 06:24:15 UTC (rev 28) @@ -35,7 +35,7 @@ * @see Gems_Exception * * @author Michiel Rook <mi...@to...> - * @version $Id: Exception.php 448 2011-08-24 07:19:21Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Communication */ Property changes on: trunk/library/classes/Gems/Communication/Exception.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Communication/RespondentContainer.php =================================================================== --- trunk/library/classes/Gems/Communication/RespondentContainer.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Communication/RespondentContainer.php 2011-09-16 06:24:15 UTC (rev 28) @@ -34,7 +34,7 @@ * A simple value-object containing respondent information * * @author Michiel Rook <mi...@to...> - * @version $Id: RespondentContainer.php 448 2011-08-24 07:19:21Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Communication */ Property changes on: trunk/library/classes/Gems/Communication/RespondentContainer.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Communication/RespondentModelWriter.php =================================================================== --- trunk/library/classes/Gems/Communication/RespondentModelWriter.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Communication/RespondentModelWriter.php 2011-09-16 06:24:15 UTC (rev 28) @@ -34,7 +34,7 @@ * Writer implementation to save respondents to the database * * @author Michiel Rook <mi...@to...> - * @version $Id: RespondentModelWriter.php 448 2011-08-24 07:19:21Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Communication */ Property changes on: trunk/library/classes/Gems/Communication/RespondentModelWriter.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Communication/RespondentReader.php =================================================================== --- trunk/library/classes/Gems/Communication/RespondentReader.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Communication/RespondentReader.php 2011-09-16 06:24:15 UTC (rev 28) @@ -34,7 +34,7 @@ * Reads respondents from a data source * * @author Michiel Rook <mi...@to...> - * @version $Id: RespondentReader.php 448 2011-08-24 07:19:21Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Communication */ Property changes on: trunk/library/classes/Gems/Communication/RespondentReader.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Communication/RespondentWriter.php =================================================================== --- trunk/library/classes/Gems/Communication/RespondentWriter.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Communication/RespondentWriter.php 2011-09-16 06:24:15 UTC (rev 28) @@ -34,7 +34,7 @@ * Writes respondents to a data source * * @author Michiel Rook <mi...@to...> - * @version $Id: RespondentWriter.php 448 2011-08-24 07:19:21Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Communication */ Property changes on: trunk/library/classes/Gems/Communication/RespondentWriter.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Controller/Action.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Controller/BrowseEditAction.php =================================================================== --- trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: BrowseEditAction.php 456 2011-08-31 12:03:57Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Controller/BrowseEditAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Controller/ModelActionAbstract.php =================================================================== --- trunk/library/classes/Gems/Controller/ModelActionAbstract.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Controller/ModelActionAbstract.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: ModelActionAbstract.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Controller/ModelActionAbstract.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Cookies.php =================================================================== --- trunk/library/classes/Gems/Cookies.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Cookies.php 2011-09-16 06:24:15 UTC (rev 28) @@ -28,7 +28,7 @@ * * @author Matijs de Jong * @since 1.0 - * @version $Id: Cookies.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ * @package Gems * @subpackage Cookies * @copyright Copyright (c) 2011 Erasmus MC Property changes on: trunk/library/classes/Gems/Cookies.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/AskAction.php =================================================================== --- trunk/library/classes/Gems/Default/AskAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/AskAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: AskAction.php 456 2011-08-31 12:03:57Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/AskAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/ConsentAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/ContactAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/CountryAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/DatabaseAction.php =================================================================== --- trunk/library/classes/Gems/Default/DatabaseAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/DatabaseAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: DatabaseAction.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/DatabaseAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/EmailAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/ErrorAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/GroupAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/IndexAction.php =================================================================== --- trunk/library/classes/Gems/Default/IndexAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/IndexAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: IndexAction.php 476 2011-09-06 16:26:13Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/IndexAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/InvitationAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/LanguageAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/LogAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/LogMaintenanceAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/MailAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/MailAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -31,7 +31,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: MailAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/MailAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/MailServerAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailServerAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/MailServerAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -31,7 +31,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: MailServerAction.php 478 2011-09-07 11:20:36Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/MailServerAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/OptionAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/OrganizationAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/OverviewPlanAction.php =================================================================== --- trunk/library/classes/Gems/Default/OverviewPlanAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/OverviewPlanAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: OverviewPlanAction.php 430 2011-08-18 10:40:21Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/OverviewPlanAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/ProjectInformationAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectInformationAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/ProjectInformationAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: StaffAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/ProjectInformationAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/ProjectSurveysAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectSurveysAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/ProjectSurveysAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -31,7 +31,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: ProjectSurveysAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/ProjectSurveysAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/ProjectTracksAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -31,7 +31,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: ProjectTracksAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/ProjectTracksAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Property changes on: trunk/library/classes/Gems/Default/ReceptionAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/RespondentAction.php =================================================================== --- trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: RespondentAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/RespondentAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/RespondentPlanAction.php =================================================================== --- trunk/library/classes/Gems/Default/RespondentPlanAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/RespondentPlanAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: RespondentPlanAction.php 430 2011-08-18 10:40:21Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/RespondentPlanAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/RoleAction.php =================================================================== --- trunk/library/classes/Gems/Default/RoleAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/RoleAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Michiel Rook * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: StaffAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/RoleAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/SourceAction.php =================================================================== --- trunk/library/classes/Gems/Default/SourceAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/SourceAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: SourceAction.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/SourceAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/StaffAction.php =================================================================== --- trunk/library/classes/Gems/Default/StaffAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/StaffAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -31,7 +31,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: StaffAction.php 460 2011-08-31 16:17:26Z mjong $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/StaffAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/SurveyAction.php =================================================================== --- trunk/library/classes/Gems/Default/SurveyAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/SurveyAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: SurveyAction.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/SurveyAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php =================================================================== --- trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: SurveyMaintenanceAction.php 345 2011-07-28 08:39:24Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/TokenPlanAction.php =================================================================== --- trunk/library/classes/Gems/Default/TokenPlanAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/TokenPlanAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de Jong <mj...@ma...> * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @version $Id: TokenPlanAction.php 430 2011-08-18 10:40:21Z 175780 $ + * @version $Id$ */ /** Property changes on: trunk/library/classes/Gems/Default/TokenPlanAction.php ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Date Author Modified: trunk/library/classes/Gems/Default/TrackAction.php =================================================================== --- trunk/library/classes/Gems/Default/TrackAction.php 2011-09-15 16:15:28 UTC (rev 27) +++ trunk/library/classes/Gems/Default/TrackAction.php 2011-09-16 06:24:15 UTC (rev 28) @@ -32,7 +32,7 @@ * @author Matijs de... [truncated message content] |
From: <gem...@li...> - 2011-09-16 08:03:27
|
Revision: 29 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=29&view=rev Author: mennodekker Date: 2011-09-16 08:03:15 +0000 (Fri, 16 Sep 2011) Log Message: ----------- Fixed #6: Add export options for collected data Modified Paths: -------------- trunk/library/classes/Gems/Menu.php Added Paths: ----------- trunk/library/classes/Gems/Default/ExportAction.php trunk/library/classes/Gems/Export/ trunk/library/classes/Gems/Export/Excel.php trunk/library/classes/Gems/Export/ExportAbstract.php trunk/library/classes/Gems/Export/ExportInterface.php trunk/library/classes/Gems/Export/ExportModel.php trunk/library/classes/Gems/Export/Spss.php trunk/library/classes/Gems/Export.php trunk/library/controllers/ExportController.php Added: trunk/library/classes/Gems/Default/ExportAction.php =================================================================== --- trunk/library/classes/Gems/Default/ExportAction.php (rev 0) +++ trunk/library/classes/Gems/Default/ExportAction.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,270 @@ +<?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 Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: DatabaseAction.php 28 2011-09-16 06:24:15Z mennodekker $ + */ + +/** + * Standard controller for database creation and maintenance. + * + * @package Gems + * @subpackage Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 + */ +class Gems_Default_ExportAction extends Gems_Controller_Action +{ + /** + * @var Gems_Export + */ + public $export; + + /** + * + * @var Zend_Locale + */ + public $locale; + + public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array()) + { + parent::__construct($request, $response, $invokeArgs); + $this->export = $this->loader->getExport(); + + //Add this controller to the export so it can render view when needed + $this->export->controller = $this; + } + + public function getTopic($count = 1) + { + return $this->_('Data'); + } + + public function getTopicTitle() + { + return $this->_('Export data'); + } + + public function indexAction() + { + $this->initHtml(); + //Hacked around to get a self-refreshing form, quite hardcoded but fine for now + if ($form = $this->processForm()) { + if (!$this->getRequest()->isPost() || $form->getElement('export')->isChecked()) { + if ($form->getElement('export')->isChecked()) { + $data = $form->getValues(); + $this->handleExport($data); + } + $this->html->h3($this->getTopicTitle()); + $div = $this->html->div(array('id' => 'mainform')); + $div[] = $form; + } else { + Zend_Layout::resetMvcInstance(); + $this->view->addHelperPath('Gems/JQuery/View/Helper', 'Gems_JQuery_View_Helper'); + $this->view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper'); + $this->html->raw($form->render($this->view)); + + //Now add all onload actions to make the form still work + $actions = $this->view->jQuery()->getOnLoadActions(); + $this->html->raw('<script type="text/javascript">'); + foreach($actions as $action) { + $this->html->raw($action); + } + $this->html->raw('</script>'); + } + } + } + + /** + * Handle the form + * + * @param type $saveLabel + * @param type $data + * @return type + */ + public function processForm($saveLabel = null, $data = null) + { + $request = $this->getRequest(); + + if ($request->isPost()) { + $data = $request->getPost() + (array) $data; + } else { + //Set the defaults for the form here + $data = $this->export->getDefaults(); + } + + $form = $this->getForm($data); + + $form->setAttrib('id', 'autosubmit'); + $form->setAutoSubmit(MUtil_Html::attrib('href', array('action' => 'index', MUtil_Model::TEXT_FILTER => null, 'RouteReset' => true)), 'mainform'); + //$this->html[] = new Gems_JQuery_AutoSubmitForm(MUtil_Html::attrib('href', array('action' => 'index', MUtil_Model::TEXT_FILTER => null, 'RouteReset' => true)), 'mainform', $form); + + if ($request->isPost()) { + $form->populate($data); + } + + if ($data) { + $form->populate($data); + } + return $form; + } + + /** + * Retrieve the form + * + * @param array $data + * @return Gems_Form + */ + public function getForm(&$data) + { + //Read some data from tables, initialize defaults... + $surveys = $this->db->fetchPairs('SELECT gsu_id_survey, gsu_survey_name FROM gems__surveys WHERE gsu_active = 1 ORDER BY gsu_survey_name'); + $organizations = $this->escort->getAllowedOrganizations(); + $types = $this->export->getExportClasses(); + + //Create the basic form + $form = new Gems_Form_TableForm(); + $form->loadDefaultDecorators(); + $form->removeDecorator('TabPane'); + + //Start adding elements + $element = new Zend_Form_Element_Select('sid'); + $element->setLabel($this->_('Survey')) + ->setMultiOptions($surveys); + $elements[] = $element; + + //Add a field to the form showing the record count. If this is too slow for large recordsets + //then remove it or make it more efficient + unset($data['records']); + if (isset($data['sid'])) { + $gsu_id = intval($data['sid']); + $survey = $this->loader->getTracker()->getSurvey($gsu_id); + + $filter = $this->_getFilter($data); + $answers = $survey->getRawTokenAnswerRows($filter); + } else { + $answers = array(); + } + $element = new MUtil_Form_Element_Exhibitor('records'); + $element->setValue(sprintf($this->_('%s records found.'), count($answers))); + $elements[] = $element; + + $element = new Zend_Form_Element_MultiCheckbox('oid'); + $element->setLabel($this->_('Organization')) + ->setMultiOptions($organizations); + $elements[] = $element; + $element = new Gems_JQuery_Form_Element_ToggleCheckboxes('toggleOrg', array('selector'=>'input[name^=oid]')); + $element->setLabel('Toggle'); + $elements[] = $element; + + $element = new Zend_Form_Element_Select('type'); + $element->setLabel($this->_('Export to')) + ->setMultiOptions($types); + $elements[] = $element; + + //Add all elements to the form + $form->addElements($elements); + unset($elements); + + //Now make a change for the selected export type + if (isset($data['type'])) { + $exportClass = $this->export->getExport($data['type']); + $formFields = $exportClass->getFormElements($form, $data); + $exportName = $exportClass->getName(); + //Now add a hidden field so we know that when this is present in the $data + //we don't need to set the defaults + $formFields[] = new Zend_Form_Element_Hidden($exportName); + foreach ($formFields as $formField) { + $formField->setBelongsTo($exportName); + $form->addElement($formField); + } + + if (!isset($data[$exportName])) { + $data[$exportName] = $exportClass->getDefaults(); + } + } + + //Finally create a submit button and add to the form + $element = new Zend_Form_Element_Submit('export'); + $element->setLabel('Export') + ->setAttrib('class', 'button'); + $form->addElement($element); + + return $form; + } + + /** + * Take care of exporting the data + * + * @param array $data + */ + public function handleExport($data) + { + $language = $this->locale->getLanguage(); + $emptyMsg = sprintf($this->_('No %s found.'), $this->getTopic(0)); + $gsu_id = intval($data['sid']); + $survey = $this->loader->getTracker()->getSurvey($gsu_id); + + $filter = $this->_getFilter($data); + $answers = $survey->getRawTokenAnswerRows($filter); + $answerModel = $survey->getAnswerModel($language); + //Now add the organization id => name mapping + $answerModel->set('organizationid', 'multiOptions', $this->escort->getAllowedOrganizations()); + + if (count($answers) === 0) { + $answers[0] = array('' => $emptyMsg); + } + + if (isset($data['type'])) { + //Do the logging + $message = join(', ', $data); + Gems_AccessLog::getLog()->log('export', $this->getRequest(), $message, null, true); + + //And delegate the export to the right class + $exportClass = $this->export->getExport($data['type']); + $exportClass->handleExport($data, $survey, $answers, $answerModel, $language); + } + } + + public function _getFilter($data) { + $filter = array(); + if (isset($data['oid'])) { + $filter['organizationid'] = $data['oid']; + } else { + //Invalid id so when nothing selected... we get nothing + //$filter['organizationid'] = '-1'; + } + $filter['consentcode'] = array_diff((array) $this->util->getConsentTypes(), (array) $this->util->getConsentRejected()); + + return $filter; + } +} \ No newline at end of file Added: trunk/library/classes/Gems/Export/Excel.php =================================================================== --- trunk/library/classes/Gems/Export/Excel.php (rev 0) +++ trunk/library/classes/Gems/Export/Excel.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,138 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Excel.php 140 2011-09-15 14:18:14Z 175780 $ + */ + +/** + * Short description for Excel + * + * Long description for class Excel (if any)... + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_Export_Excel extends Gems_Export_ExportAbstract +{ + /** + * Return an array of Form Elements for this specific export + * + * @param type $form + * @param type $data + * @return array of Zend_Form_Element + */ + public function getFormElements(&$form, &$data) + { + $element = new Zend_Form_Element_MultiCheckbox('format'); + $element->setLabel($this->_('Excel options')) + ->setMultiOptions(array( + 'formatVariable' => $this->_('Export questions instead of variable names'), + 'formatAnswer' => $this->_('Format answers') + )); + $elements[] = $element; + + return $elements; + } + + /** + * Sets the default form values when this export type is first chosen + * + * @return array + */ + public function getDefaults() + { + return array('format'=>array('formatVariable', 'formatAnswer')); + } + + /** + * Returns the unique name for this class + * + * It will be used for handling this export's specific options + * + * @return string + */ + public function getName() + { + return 'excel'; + } + + /** + * This method handles the export with the given options + * + * The method takes care of rendering the right script by using $this->export->controller to + * access the controller object. + * + * @param array $data The formdata + * @param Gems_Tracker_Survey $survey The survey object we are exporting + * @param array $answers The array of answers + */ + public function handleExport($data, $survey, $answers, $answerModel, $language) + { + $questions = $survey->getQuestionList($language); + if (isset($data[$this->getName()])) { + $options = $data[$this->getName()]; + if (isset($options['format'])) { + $options = $options['format']; + } + } else { + $options = array(); + } + + if (in_array('formatVariable', $options)) { + //@@TODO This breaks date formatting, think of a way to fix this, check out the spss exports for + //a more direct export, also check UTF-8 differences between view / direct output + foreach ($answers[0] as $key => $value) { + if (isset($questions[$key])) { + $headers[0][$key] = $questions[$key]; + } else { + $headers[0][$key] = $key; + } + } + } else { + $headers[0] = array_keys($answers[0]); + } + $answers = array_merge($headers, $answers); + + if (in_array('formatAnswer', $options)) { + $answers = new Gems_FormattedData($answers, $answerModel); + } + + $this->view->result = $answers; + $this->view->filename = $survey->getName() . '.xls'; + $this->view->setScriptPath(GEMS_LIBRARY_DIR . '/views/scripts'); + $this->export->controller->render('excel',null,true); + } +} \ No newline at end of file Added: trunk/library/classes/Gems/Export/ExportAbstract.php =================================================================== --- trunk/library/classes/Gems/Export/ExportAbstract.php (rev 0) +++ trunk/library/classes/Gems/Export/ExportAbstract.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,84 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: ExportAbstract.php 128 2011-08-12 12:33:14Z 175780 $ + */ + +/** + * Short description for ExportAbstract + * + * Long description for class ExportAbstract (if any)... + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +abstract class Gems_Export_ExportAbstract extends Gems_Loader_TargetLoaderAbstract implements Gems_Export_ExportInterface +{ + /** + * Variable needed to access the controller functions + * + * $this->export->controller + * + * @var Gems_Export + */ + public $export; + + /** + * @var Zend_Translate + */ + public $translate; + + /** + * @var Zend_View + */ + public $view; + + /** + * Copy from Zend_Translate_Adapter + * + * Translates the given string + * returns the translation + * + * @param string $text Translation string + * @param string|Zend_Locale $locale (optional) Locale/Language to use, identical with locale + * identifier, @see Zend_Locale for more information + * @return string + */ + public function _($text, $locale = null) + { + return $this->translate->_($text, $locale); + } +} \ No newline at end of file Added: trunk/library/classes/Gems/Export/ExportInterface.php =================================================================== --- trunk/library/classes/Gems/Export/ExportInterface.php (rev 0) +++ trunk/library/classes/Gems/Export/ExportInterface.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,87 @@ +<?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 Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: ExportInterface.php 128 2011-08-12 12:33:14Z 175780 $ + */ + +/** + * The export interface + * + * Exporting survey-data can be done for various sorts of output formats, this interface + * describes the methods needed to implement an output format + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +interface Gems_Export_ExportInterface +{ + /** + * Return an array of Form Elements for this specific export + * + * @param type $form + * @param type $data + * @return array of Zend_Form_Element + */ + public function getFormElements(&$form, &$data); + + /** + * Sets the default form values when this export type is first chosen + * + * @return array + */ + public function getDefaults(); + + /** + * Returns the unique name for this class + * + * It will be used for handling this export's specific options + * + * @return string + */ + public function getName(); + + /** + * This method handles the export with the given options + * + * The method takes care of rendering the right script by using $this->export->controller to + * access the controller object. + * + * @param array $data The formdata + * @param Gems_Tracker_Survey $survey The survey object we are exporting + * @param array $answers The array of answers + * @param MUtil_Model_ModelAbstract $answerModel The modified answermodel that includes info about extra attributes + * @param string $language The language used / to use for the export + */ + public function handleExport($data, $survey, $answers, $answerModel, $language); +} \ No newline at end of file Added: trunk/library/classes/Gems/Export/ExportModel.php =================================================================== --- trunk/library/classes/Gems/Export/ExportModel.php (rev 0) +++ trunk/library/classes/Gems/Export/ExportModel.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,80 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: ExportModel.php 138 2011-09-15 10:44:24Z 175780 $ + */ + +/** + * Short description for ExportModel + * + * Long description for class ExportModel (if any)... + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_Export_ExportModel extends MUtil_Model_ModelAbstract +{ + + public function __construct() + { + parent::__construct('export'); + } + + public function delete($filter = true) + { + return false; + } + + public function hasNew() + { + return false; + } + + public function load($filter = true, $sort = true) + { + $result = array(); + foreach ($this->getItemsOrdered() as $item) { + $result[0][$item] = $item; + } + return $result; + } + + public function save(array $newValues, array $filter = null) + { + return $newValues; + } +} \ No newline at end of file Added: trunk/library/classes/Gems/Export/Spss.php =================================================================== --- trunk/library/classes/Gems/Export/Spss.php (rev 0) +++ trunk/library/classes/Gems/Export/Spss.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,270 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Spss.php 140 2011-09-15 14:18:14Z 175780 $ + */ + +/** + * Short description for Spss + * + * Long description for class Spss (if any)... + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_Export_Spss extends Gems_Export_ExportAbstract +{ + + public function getDefaults() + { + return array('file'=>'data'); + } + + public function getFormElements(&$form, &$data) + { + $element = new Zend_Form_Element_Radio('file'); + $element->setLabel($this->_('Which file')); + $element->setMultiOptions(array('syntax' => $this->_('syntax'), + 'data' => $this->_('data'))); + + $elements[] = $element; + + $element = new MUtil_Form_Element_Exhibitor('help'); + $element->setValue($this->_('Some help for this export')); + $elements[] = $element; + + return $elements; + } + + public function getName() + { + return 'spss'; + } + + /** + * This method handles the export with the given options + * + * The method takes care of rendering the right script by using $this->export->controller to + * access the controller object. + * + * @param array $data The formdata + * @param Gems_Tracker_Survey $survey The survey object we are exporting + * @param array $answers The array of answers + * @param MUtil_Model_ModelAbstract $answerModel The modified answermodel that includes info about extra attributes + * @param string $language The language used / to use for the export + */ + public function handleExport($data, $survey, $answers, $answerModel, $language) + { + if (isset($data[$this->getName()])) { + $options = $data[$this->getName()]; + } else { + $options = array(); + } + + if (isset($options['file'])) { + if ($options['file'] == 'syntax') { + $controller = $this->export->controller; + $controller->getHelper('layout')->disableLayout(); + $controller->getHelper('viewRenderer')->setNoRender(true); + $response = $controller->getResponse(); + $filename = $survey->getName() . '.sps'; + $filenameDat = $survey->getName() . '.dat'; + $response->clearHeaders(); + $response->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') + ->setHeader('Content-type', 'text/comma-separated-values; charset=UTF-8') + ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') + ->setHeader('Pragma', 'public'); + + //first output our script + $response->appendBody( + "SET UNICODE=ON. +GET DATA + /TYPE=TXT + /FILE=\"" . $filenameDat . "\" + /DELCASE=LINE + /DELIMITERS=\",\" + /QUALIFIER=\"'\" + /ARRANGEMENT=DELIMITED + /FIRSTCASE=1 + /IMPORTCASE=ALL + /VARIABLES="); + $answerRow = reset($answers); + $labels = array(); + $types = array(); + $questions = $survey->getQuestionList($language); + foreach($answerRow as $key => $value) { + $options = array(); + $type = $answerModel->get($key,'type'); + switch ($type) { + case MUtil_Model::TYPE_DATE: + $type = 'SDATE10'; + break; + + case MUtil_Model::TYPE_DATETIME: + case MUtil_Model::TYPE_TIME: + $type = 'DATETIME23'; + break; + + case MUtil_Model::TYPE_NUMERIC: + $defaultSize = 5; + $type = 'F'; + break; + + //When no type set... assume string + case MUtil_Model::TYPE_STRING: + default: + $defaultSize = 64; + $type = 'A'; + break; + } + $types[$key] = $type; + if ($type == 'A' || $type == 'F') { + $size = $answerModel->get($key,'size'); + if (is_null($size)) { + $size = $defaultSize; + } + if ($type == 'A') { + $type = $type . $size; + } else { + $type = $type . $size . '.' . ($size-1); //decimal + } + } + if (isset($questions[$key])) { + $labels[$key] = $questions[$key]; + } + $response->appendBody("\n " . $key . ' '. $type); + } + $response->appendBody(".\nCACHE.\nEXECUTE.\n"); + $response->appendBody("\n*Define variable labels.\n"); + foreach($labels as $key => $label) { + $response->appendBody("VARIABLE LABELS " . $key . ' "' . $label . '".' . "\n"); + } + + $response->appendBody("\n*Define value labels.\n"); + foreach($answerRow as $key => $value) { + if($options = $answerModel->get($key, 'multiOptions')) { + $response->appendBody('VALUE LABELS ' . $key); + foreach($options as $option=>$label) { + if($types[$key]=='F') { + //Numeric + $response->appendBody("\n" . $option . ' ' . '"' . $label . '"'); + } else { + //String + $response->appendBody("\n" . '"' .$option . '" ' . '"' . $label . '"'); + } + } + $response->appendBody(".\n\n"); + } + } + } else { + $controller = $this->export->controller; + $controller->getHelper('layout')->disableLayout(); + $controller->getHelper('viewRenderer')->setNoRender(true); + $response = $controller->getResponse(); + $filename = $survey->getName() . '.dat'; + $response->clearHeaders(); + $response->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') + ->setHeader('Content-type', 'text/comma-separated-values; charset=UTF-8') + ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') + ->setHeader('Pragma', 'public'); + + //We should create a model with the transformations we need + //think of date translations, numers and strings + $answerRow = reset($answers); + $spssModel = new Zsd_Export_ExportModel(); + foreach($answerRow as $key => $value) { + $options = array(); + $type = $answerModel->get($key,'type'); + switch ($type) { + case MUtil_Model::TYPE_DATE: + $options['storageFormat'] = 'yyyy-MM-dd'; + $options['dateFormat'] = 'yyyy-MM-dd'; + break; + + case MUtil_Model::TYPE_DATETIME: + $options['storageFormat'] = 'yyyy-MM-dd HH:mm:ss'; + $options['dateFormat'] = 'dd-MM-yyyy HH:mm:ss'; + break; + + case MUtil_Model::TYPE_TIME: + $options['storageFormat'] = 'HH:mm:ss'; + $options['dateFormat'] = 'HH:mm:ss'; + break; + + case MUtil_Model::TYPE_NUMERIC: + break; + + //When no type set... assume string + case MUtil_Model::TYPE_STRING: + default: + $type = MUtil_Model::TYPE_STRING; + $options['formatFunction'] = $this->formatString; + break; + } + $options['type'] = $type; + $spssModel->set($key, $options); + } + //Now apply the model to the answers + $answers = new Gems_FormattedData($answers, $spssModel); + + //And output the data + foreach($answers as $answerRow) { + $resultRow = implode(',', $answerRow); + $response->appendBody($resultRow ."\n"); + } + } + } + } + + /** + * Formatting of strings for SPSS export. Enclose in single quotes and escape single quotes + * with a single quote + * + * Example: + * This isn't hard to understand + * ==> + * 'This isn''t hard to understand' + * + * @param type $input + * @return string + */ + public function formatString($input) { + $output = str_replace("'", "''", $input); + $output = "'" . $output . "'"; + return $output; + } +} \ No newline at end of file Added: trunk/library/classes/Gems/Export.php =================================================================== --- trunk/library/classes/Gems/Export.php (rev 0) +++ trunk/library/classes/Gems/Export.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,140 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id: Export.php 124 2011-08-09 11:56:35Z 175780 $ + */ + +/** + * Short description for Export + * + * Long description for class Export (if any)... + * + * @package Gems + * @subpackage Export + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class Gems_Export extends Gems_Loader_TargetLoaderAbstract +{ + /** + * Allows sub classes of Gems_Loader_LoaderAbstract to specify the subdirectory where to look for. + * + * @var string $cascade An optional subdirectory where this subclass always loads from. + */ + protected $cascade = 'Export'; + + /** + * Is set to the calling controller to allow rendering the view + * + * @var Gems_Controller_Action + */ + public $controller = null; + + /** + * This variable holds all registered export classes, may be changed in derived classes + * + * @var array Of classname => description + */ + protected $_exportClasses = array( + 'Excel' => 'Excel (xls)', + 'Spss' => 'SPSS', + ); + + /** + * The default values for the form. Defaults for a specific export-type should come + * from that class + * + * @var array + */ + protected $_defaults = array( + 'type' => 'excel' + ); + + /** + * + * @param type $container A container acting as source fro MUtil_Registry_Source + * @param array $dirs The directories where to look for requested classes + */ + public function __construct($container, array $dirs) + { + parent::__construct($container, $dirs); + + // Make sure the export is known + $this->addRegistryContainer(array('export' => $this)); + } + + /** + * Add one or more export classes + * + * @param array $stack classname / description array of sourceclasses + */ + public function addExportClasses($stack) + { + $this->_exportClasses = array_merge($this->_exportClasses, $stack); + } + + public function getDefaults() + { + return $this->_defaults; + } + + /** + * + * @return Gems_Export_ExportInterface + */ + public function getExport($type) + { + return $this->_getClass($type); + } + + /** + * Returns all registered export classes + * + * @return array Of classname => description + */ + public function getExportClasses() + { + return $this->_exportClasses; + } + + /** + * Set the default options for the form + * + * @param array $defaults + */ + public function setDefaults($defaults) + { + $this->_defaults = $defaults; + } +} \ No newline at end of file Modified: trunk/library/classes/Gems/Menu.php =================================================================== --- trunk/library/classes/Gems/Menu.php 2011-09-16 06:24:15 UTC (rev 28) +++ trunk/library/classes/Gems/Menu.php 2011-09-16 08:03:15 UTC (rev 29) @@ -588,6 +588,9 @@ // MAIL CONTAINER $this->addMailSetupPage($this->escort->_('Mail')); + + // EXPORT DATA + $this->addContainer('Export data', 'pr.export', array('controller'=>'export', 'action'=>'index')); // OTHER ITEMS $this->addLogonOffToken(); Added: trunk/library/controllers/ExportController.php =================================================================== --- trunk/library/controllers/ExportController.php (rev 0) +++ trunk/library/controllers/ExportController.php 2011-09-16 08:03:15 UTC (rev 29) @@ -0,0 +1,32 @@ +<?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 controllers + */ +class ExportController extends Gems_Default_ExportAction +{ +} \ 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-09-16 15:15:03
|
Revision: 32 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=32&view=rev Author: matijsdejong Date: 2011-09-16 15:14:56 +0000 (Fri, 16 Sep 2011) Log Message: ----------- - sorted function names TemplateMailer.php - extended existing logging with template id & from address Modified Paths: -------------- trunk/library/classes/Gems/Email/EmailFormAbstract.php trunk/library/classes/Gems/Email/TemplateMailer.php trunk/library/classes/GemsEscort.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__respondent_communications.60.sql Modified: trunk/library/classes/Gems/Email/EmailFormAbstract.php =================================================================== --- trunk/library/classes/Gems/Email/EmailFormAbstract.php 2011-09-16 08:28:47 UTC (rev 31) +++ trunk/library/classes/Gems/Email/EmailFormAbstract.php 2011-09-16 15:14:56 UTC (rev 32) @@ -486,6 +486,7 @@ $this->mailer->setMethod($this->getValue('multi_method')); $this->mailer->setSubject($this->getValue('gmt_subject')); $this->mailer->setBody($this->getValue('gmt_body')); + $this->mailer->setTemplateId($this->getValue('select_subject')); $result = $this->mailer->process($this->getTokensData()); Modified: trunk/library/classes/Gems/Email/TemplateMailer.php =================================================================== --- trunk/library/classes/Gems/Email/TemplateMailer.php 2011-09-16 08:28:47 UTC (rev 31) +++ trunk/library/classes/Gems/Email/TemplateMailer.php 2011-09-16 15:14:56 UTC (rev 32) @@ -66,6 +66,7 @@ private $_subject = null; private $_body = null; private $_method = 'M'; + private $_templateId = null; // Not used for lookup private $_tokenData = array(); private $_verbose = false; @@ -86,11 +87,45 @@ return $this; } + /** + * Replaces fields with their values + * @param string $value + * @return string + */ + public function applyFields($value) + { + if (! $this->_mailFields) { + $this->getTokenMailFields(); + } + if (! $this->_mailKeys) { + $this->_mailKeys = array_keys($this->_mailFields); + } + + return str_replace($this->_mailKeys, $this->_mailFields, $value); + } + + /** + * Returns true if the "email.bounce" setting exists in the project + * configuration and is true + * @return boolean + */ + public function bounceCheck() + { + return isset($this->escort->project->email['bounce']) && $this->escort->project->email['bounce']; + } + + /** + * Returns Zend_Mail_Transport_Abstract when something else than the default mail protocol should be used. + * + * @staticvar array $mailServers + * @param email address $from + * @return Zend_Mail_Transport_Abstract or null + */ public function checkTransport($from) { static $mailServers = array(); - if (!array_key_exists($from, $mailServers)) { + if (! array_key_exists($from, $mailServers)) { $sql = 'SELECT * FROM gems__mail_servers WHERE ? LIKE gms_from ORDER BY LENGTH(gms_from) DESC LIMIT 1'; // Always set cache, se we know when not to check for this row. @@ -138,31 +173,13 @@ return $this->messages; } - /** - * Returns true if the "email.bounce" setting exists in the project - * configuration and is true - * @return boolean - */ - public function bounceCheck() + public function getTokenMailFields() { - return isset($this->escort->project->email['bounce']) && $this->escort->project->email['bounce']; - } - - /** - * Replaces fields with their values - * @param string $value - * @return string - */ - public function applyFields($value) - { if (! $this->_mailFields) { - $this->getTokenMailFields(); + $this->_mailFields = $this->escort->tokenMailFields($this->_tokenData); } - if (! $this->_mailKeys) { - $this->_mailKeys = array_keys($this->_mailFields); - } - return str_replace($this->_mailKeys, $this->_mailFields, $value); + return $this->_mailFields; } /** @@ -184,68 +201,6 @@ } /** - * Sets verbose (noisy) operation - * @param boolean $verbose - */ - public function setVerbose($verbose) - { - $this->_verbose = $verbose; - } - - /** - * Sets sender (regular e-mail address) or one of: - * 'O' - Uses the contact information of the selected organization - * 'S' - Uses the site-wide contact information - * 'U' - Uses the contact information of the currently logged in user - * - * @param string $from - */ - public function setFrom($from) - { - $this->_from = $from; - } - - /** - * Sets a list of tokens - * @param string[] $tokens - */ - public function setTokens(array $tokens) - { - $this->_tokens = $tokens; - } - - /** - * Sets the sending method to use - * 'M' - Send multiple mails per respondent, one for each checked token. - * 'O' - Send one mail per respondent, mark all checked tokens as send. - * 'A' - Send one mail per respondent, mark only mailed tokens as send. - * - * @param string $method - */ - public function setMethod($method) - { - $this->_method = $method; - } - - /** - * Sets the subject of the mail - * @param string $subject - */ - public function setSubject($subject) - { - $this->_subject = $subject; - } - - /** - * Sets the body of the mail - * @param string $body - */ - public function setBody($body) - { - $this->_body = $body; - } - - /** * Processes an array of token data and sends e-mails * @param array $tokensData * @return boolean @@ -279,7 +234,10 @@ $ucount = 0; foreach ($tokensData as $tokenData) { + // Should this token be mailed? if (in_array($tokenData['gto_id_token'], $this->_tokens)) { + + // Should all tokens be mailed or is this the first? if ($mailAll || (! isset($send[$tokenData['grs_email']]))) { if ($message = $this->processMail($tokenData)) { @@ -347,7 +305,7 @@ if ($message = $this->sendMail($to, $to_name, $from, $from_name, $tokenData)) { return $message; } else { - $this->updateToken($tokenData); + $this->updateToken($tokenData, $to, $from); return false; } } @@ -395,59 +353,67 @@ try { $mail->send($this->checkTransport($from)); - return false; + $result = false; } catch (Exception $e) { - return $e->getMessage(); + $result = $e->getMessage(); + + // Log to error file + $this->escort->logger->logError($e, $this->escort->request); } + + return $result; } /** - * Updates a token - * @param array $tokenData - * @param string $subject + * Sets the body of the mail + * @param string $body */ - protected function updateToken(array $tokenData, $subject = null) + public function setBody($body) { - if (null === $subject) { - $subject = $this->_mailSubject; - } else { - $this->_mailSubject = $subject; - } + $this->_body = $body; + } - if (null === $this->_changeDate) { - $this->_changeDate = new Zend_Db_Expr('CURRENT_TIMESTAMP'); - } + /** + * Sets sender (regular e-mail address) or one of: + * 'O' - Uses the contact information of the selected organization + * 'S' - Uses the site-wide contact information + * 'U' - Uses the contact information of the currently logged in user + * + * @param string $from + */ + public function setFrom($from) + { + $this->_from = $from; + } - $db = $this->escort->db; - $uid = $this->escort->session->user_id; + /** + * Sets the sending method to use + * 'M' - Send multiple mails per respondent, one for each checked token. + * 'O' - Send one mail per respondent, mark all checked tokens as send. + * 'A' - Send one mail per respondent, mark only mailed tokens as send. + * + * @param string $method + */ + public function setMethod($method) + { + $this->_method = $method; + } - $tdata['gto_mail_sent_date'] = $this->_mailDate; - - $db->update('gems__tokens', $tdata, $db->quoteInto('gto_id_token = ?', $tokenData['gto_id_token'])); - - $cdata['grco_id_to'] = $tokenData['grs_id_user']; - $cdata['grco_id_by'] = $uid; - $cdata['grco_organization'] = $tokenData['gor_id_organization']; - $cdata['grco_id_token'] = $tokenData['gto_id_token']; - $cdata['grco_method'] = 'email'; - $cdata['grco_topic'] = substr($subject, 0, 120); - $cdata['grco_address'] = substr($tokenData['grs_email'], 0, 120); - $cdata['grco_changed'] = $this->_changeDate; - $cdata['grco_changed_by'] = $uid; - $cdata['grco_created'] = $this->_changeDate; - $cdata['grco_created_by'] = $uid; - - $db->insert('gems__respondent_communications', $cdata); + /** + * Sets the subject of the mail + * @param string $subject + */ + public function setSubject($subject) + { + $this->_subject = $subject; } - public function getTokenMailFields() + public function setTemplateId($templatedId) { - if (! $this->_mailFields) { - $this->_mailFields = $this->escort->tokenMailFields($this->_tokenData); - } + $this->_templateId = $templatedId; - return $this->_mailFields; + return $this; } public function setTokenData(array $tokenData) @@ -470,4 +436,65 @@ return $this->_mailFields; } + + /** + * Sets a list of tokens + * @param string[] $tokens + */ + public function setTokens(array $tokens) + { + $this->_tokens = $tokens; + } + + /** + * Sets verbose (noisy) operation + * + * @param boolean $verbose + */ + public function setVerbose($verbose) + { + $this->_verbose = $verbose; + } + + /** + * Updates a token and log's the communication + * + * @param array $tokenData + * @param string $to Optional, if available the communication is logged. + * @param string $from Optional + */ + protected function updateToken(array $tokenData, $to = null, $from = null) + { + if (null === $this->_changeDate) { + $this->_changeDate = new Zend_Db_Expr('CURRENT_TIMESTAMP'); + } + + $db = $this->escort->db; + $uid = $this->escort->getCurrentUserId(); + + $tdata['gto_mail_sent_date'] = $this->_mailDate; + + $db->update('gems__tokens', $tdata, $db->quoteInto('gto_id_token = ?', $tokenData['gto_id_token'])); + + if ($to) { + $cdata['grco_id_to'] = $tokenData['grs_id_user']; + $cdata['grco_id_by'] = $uid; + $cdata['grco_organization'] = $tokenData['gor_id_organization']; + $cdata['grco_id_token'] = $tokenData['gto_id_token']; + + $cdata['grco_method'] = 'email'; + $cdata['grco_topic'] = substr($this->_mailSubject, 0, 120); + $cdata['grco_address'] = substr($to, 0, 120); + $cdata['grco_sender'] = substr($from, 0, 120); + + $cdata['grco_id_message'] = $this->_templateId; + + $cdata['grco_changed'] = $this->_changeDate; + $cdata['grco_changed_by'] = $uid; + $cdata['grco_created'] = $this->_changeDate; + $cdata['grco_created_by'] = $uid; + + $db->insert('gems__respondent_communications', $cdata); + } + } } Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-09-16 08:28:47 UTC (rev 31) +++ trunk/library/classes/GemsEscort.php 2011-09-16 15:14:56 UTC (rev 32) @@ -1090,6 +1090,10 @@ return $allowedOrganizations; } + /** + * + * @return int The current active organization id or 0 when not known + */ public function getCurrentOrganization() { if ($this instanceof Gems_Project_Organization_MultiOrganizationInterface) { @@ -1100,9 +1104,26 @@ return $this->getRespondentOrganization(); } - return $this->session->user_organization_id; + if (isset($this->session->user_organization_id)) { + return $this->session->user_organization_id; + } else { + return 0; + } } + /** + * + * @return int The current user id or 0 when not known. + */ + public function getCurrentUserId() + { + if (isset($this->session->user_id)) { + return $this->session->user_id; + } else { + return 0; + } + } + public function getDatabasePaths() { $path = APPLICATION_PATH . '/configs/db'; Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-09-16 08:28:47 UTC (rev 31) +++ trunk/library/configs/db/patches.sql 2011-09-16 15:14:56 UTC (rev 32) @@ -190,3 +190,6 @@ -- PATCH: Organization codes ALTER TABLE `gems__organizations` ADD gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' AFTER gor_name; +-- PATCH: Extra log +ALTER TABLE gems__respondent_communications ADD grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER grco_address; +ALTER TABLE gems__respondent_communications ADD grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message) AFTER grco_comments; Modified: trunk/library/configs/db/tables/gems__respondent_communications.60.sql =================================================================== --- trunk/library/configs/db/tables/gems__respondent_communications.60.sql 2011-09-16 08:28:47 UTC (rev 31) +++ trunk/library/configs/db/tables/gems__respondent_communications.60.sql 2011-09-16 15:14:56 UTC (rev 32) @@ -11,8 +11,11 @@ grco_method varchar(12) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, grco_topic varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, grco_address varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, grco_comments varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message), + grco_changed timestamp not null default current_timestamp, grco_changed_by bigint unsigned not null, grco_created timestamp not null, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-20 15:42:19
|
Revision: 51 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=51&view=rev Author: matijsdejong Date: 2011-09-20 15:42:08 +0000 (Tue, 20 Sep 2011) Log Message: ----------- - put the log into respondent_communications table name - added template save to OneMailForm.php - made temporary old style controller for mail log Modified Paths: -------------- trunk/library/classes/Gems/Default/MailLogAction.php trunk/library/classes/Gems/Default/RespondentAction.php trunk/library/classes/Gems/Email/OneMailForm.php trunk/library/classes/Gems/Email/TemplateMailer.php trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php trunk/library/configs/db/patches.sql trunk/library/controllers/MailLogController.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/Default/MailLogActionOldStyle.php trunk/library/configs/db/tables/gems__log_respondent_communications.500.sql trunk/library/configs/db/tables/gems__mail_jobs.300.sql Removed Paths: ------------- trunk/library/configs/db/tables/gems__respondent_communications.60.sql Modified: trunk/library/classes/Gems/Default/MailLogAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailLogAction.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/classes/Gems/Default/MailLogAction.php 2011-09-20 15:42:08 UTC (rev 51) @@ -62,16 +62,44 @@ */ public function createModel($detailed, $action) { - $model = new MUtil_Model_TableModel('gems__respondent_communications'); + $model = new Gems_Model_JoinModel('maillog', 'gems__log_respondent_communications'); - // $model->set('grco_id_to', 'label', $this->_('')); - // $model->set('grco_id_by', 'label', $this->_('')); - $model->set('grco_address', 'label', $this->_('To')); - $model->set('grco_sender', 'label', $this->_('From')); - $model->set('grco_topic', 'label', $this->_('Subject')); - $model->set('grco_created', 'label', $this->_('Date sent')); - // $model->set('', 'label', $this->_('')); + $model->addLeftTable('gems__respondents', array('grco_id_to' => 'grs_id_user')); + $model->addLeftTable('gems__staff', array('grco_id_by' => 'gsf_id_user')); + $model->addLeftTable('gems__mail_templates', array('grco_id_message' => 'gmt_id_message')); + $model->addColumn( + "TRIM(CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, '')))", + 'respondent_name'); + $model->addColumn( + "CASE WHEN gems__staff.gsf_id_user IS NULL + THEN '-' + ELSE + CONCAT( + COALESCE(gems__staff.gsf_last_name, ''), + ', ', + COALESCE(gems__staff.gsf_first_name, ''), + COALESCE(CONCAT(' ', gems__staff.gsf_surname_prefix), '') + ) + END", + 'assigned_by'); + + $model->resetOrder(); + + $model->set('grco_created', 'label', $this->_('Date sent')); + $model->set('respondent_name', 'label', $this->_('Receiver')); + $model->set('grco_address', 'label', $this->_('To address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); + $model->set('assigned_by', 'label', $this->_('Sender')); + $model->set('grco_sender', 'label', $this->_('From address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); + $model->set('grco_id_token', 'label', $this->_('Token')); + $model->set('grco_topic', 'label', $this->_('Subject')); + + if ($detailed) { + $model->set('gmt_subject', 'label', $this->_('Template')); + } else { + $model->set('grco_created', 'formatFunction', $this->util->getTranslated()->formatDate); + } + return $model; } Added: trunk/library/classes/Gems/Default/MailLogActionOldStyle.php =================================================================== --- trunk/library/classes/Gems/Default/MailLogActionOldStyle.php (rev 0) +++ trunk/library/classes/Gems/Default/MailLogActionOldStyle.php 2011-09-20 15:42:08 UTC (rev 51) @@ -0,0 +1,150 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Default + * @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 $ + */ + +/** + * Temprary class until Gems_Controller_ModelSnippetActionAbstract works + * + * @package Gems + * @subpackage Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.2 + */ +class Gems_Default_MailLogActionOldStyle extends Gems_Controller_BrowseEditAction +{ + public $sortKey = array('grco_created' => SORT_DESC); + + /** + * Adds columns from the model to the bridge that creates the browse table. + * + * Adds a button column to the model, if such a button exists in the model. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @rturn void + */ + protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) + { + if ($menuItem = $this->findAllowedMenuItem('show')) { + $bridge->addItemLink($menuItem->toActionLinkLower($this->getRequest(), $bridge)); + } + + // Newline placeholder + $br = MUtil_Html::create('br'); + + $bridge->addMultiSort('grco_created', $br, 'respondent_name', $br, 'grco_address'); + $bridge->addMultiSort('grco_id_token', $br, 'assigned_by', $br, 'grco_sender'); + $bridge->addMultiSort('grco_topic'); + } + + /** + * Creates a model for getModel(). Called only for each new $action. + * + * The parameters allow you to easily adapt the model to the current action. The $detailed + * parameter was added, because the most common use of action is a split between detailed + * and summarized actions. + * + * @param boolean $detailed True when the current action is not in $summarizedActions. + * @param string $action The current action. + * @return MUtil_Model_ModelAbstract + */ + public function createModel($detailed, $action) + { + $model = new Gems_Model_JoinModel('maillog', 'gems__log_respondent_communications'); + + $model->addLeftTable('gems__respondents', array('grco_id_to' => 'grs_id_user')); + $model->addLeftTable('gems__staff', array('grco_id_by' => 'gsf_id_user')); + $model->addLeftTable('gems__mail_templates', array('grco_id_message' => 'gmt_id_message')); + + $model->addColumn( + "TRIM(CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, '')))", + 'respondent_name'); + $model->addColumn( + "CASE WHEN gems__staff.gsf_id_user IS NULL + THEN '-' + ELSE + CONCAT( + COALESCE(gems__staff.gsf_last_name, ''), + ', ', + COALESCE(gems__staff.gsf_first_name, ''), + COALESCE(CONCAT(' ', gems__staff.gsf_surname_prefix), '') + ) + END", + 'assigned_by'); + + $model->resetOrder(); + + $model->set('grco_created', 'label', $this->_('Date sent')); + $model->set('respondent_name', 'label', $this->_('Receiver')); + $model->set('grco_address', 'label', $this->_('To address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); + $model->set('assigned_by', 'label', $this->_('Sender')); + $model->set('grco_sender', 'label', $this->_('From address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); + $model->set('grco_id_token', 'label', $this->_('Token')); + $model->set('grco_topic', 'label', $this->_('Subject')); + + if ($detailed) { + $model->set('gmt_subject', 'label', $this->_('Template')); + } else { + $model->set('grco_created', 'formatFunction', $this->util->getTranslated()->formatDate); + } + + return $model; + } + + /** + * Helper function to allow generalized statements about the items in the model. + * + * @param int $count + * @return $string + */ + public function getTopic($count = 1) + { + return $this->plural('Activity Log', 'Activity Logs', $count); + } + + + /** + * Helper function to allow generalized treatment of the header. + * + * return $string + */ + public function getTopicTitle() + { + return $this->_('Mail Activity Log'); + } +} Modified: trunk/library/classes/Gems/Default/RespondentAction.php =================================================================== --- trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/classes/Gems/Default/RespondentAction.php 2011-09-20 15:42:08 UTC (rev 51) @@ -59,6 +59,15 @@ public $useTabbedForms = true; + /** + * Adds columns from the model to the bridge that creates the browse table. + * + * Adds a button column to the model, if such a button exists in the model. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @rturn void + */ protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) { $model->setIfExists('gr2o_opened', 'tableDisplay', 'small'); Modified: trunk/library/classes/Gems/Email/OneMailForm.php =================================================================== --- trunk/library/classes/Gems/Email/OneMailForm.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/classes/Gems/Email/OneMailForm.php 2011-09-20 15:42:08 UTC (rev 51) @@ -134,6 +134,7 @@ $this->mailer->setSubject($this->getValue('gmt_subject')); $this->mailer->setBody($this->getValue('gmt_body')); + $this->mailer->setTemplateId($this->getValue('select_subject')); if ($message = $this->mailer->processMail($tokenData)) { $this->addMessage($this->escort->_('Mail failed to send.')); Modified: trunk/library/classes/Gems/Email/TemplateMailer.php =================================================================== --- trunk/library/classes/Gems/Email/TemplateMailer.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/classes/Gems/Email/TemplateMailer.php 2011-09-20 15:42:08 UTC (rev 51) @@ -481,7 +481,7 @@ $cdata['grco_id_by'] = $uid; $cdata['grco_organization'] = $tokenData['gor_id_organization']; $cdata['grco_id_token'] = $tokenData['gto_id_token']; - + $cdata['grco_method'] = 'email'; $cdata['grco_topic'] = substr($this->_mailSubject, 0, 120); $cdata['grco_address'] = substr($to, 0, 120); @@ -494,7 +494,7 @@ $cdata['grco_created'] = $this->_changeDate; $cdata['grco_created_by'] = $uid; - $db->insert('gems__respondent_communications', $cdata); + $db->insert('gems__log_respondent_communications', $cdata); } } } Modified: trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php =================================================================== --- trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/classes/Gems/Tracker/Model/StandardTokenModel.php 2011-09-20 15:42:08 UTC (rev 51) @@ -206,7 +206,7 @@ // Token items $this->set('gto_id_token', 'label', $this->translate->_('Token')); $this->set('gto_round_description', 'label', $this->translate->_('Round')); - $this->set('gto_valid_from', 'label', $this->translate->_('Measure(d) on'), 'formatFunction', $translated->formatDateNever, 'tdClass', 'date'); + $this->set('gto_valid_from', 'label', $this->translate->_('Measure(d) on'), 'formatFunction', $translated->formatDateNever, 'tdClass', 'date'); $this->set('gto_valid_until', 'label', $this->translate->_('Valid until'), 'formatFunction', $translated->formatDateForever, 'tdClass', 'date'); $this->set('gto_mail_sent_date', 'label', $this->translate->_('Last contact'), 'formatFunction', $translated->formatDateNever, 'tdClass', 'date'); $this->set('gto_completion_time', 'label', $this->translate->_('Completed'), 'formatFunction', $translated->formatDateNa, 'tdClass', 'date'); Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/configs/db/patches.sql 2011-09-20 15:42:08 UTC (rev 51) @@ -190,6 +190,9 @@ -- PATCH: Organization codes ALTER TABLE `gems__organizations` ADD gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' AFTER gor_name; --- PATCH: Extra log -ALTER TABLE gems__respondent_communications ADD grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER grco_address; -ALTER TABLE gems__respondent_communications ADD grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message) AFTER grco_comments; +-- PATCH: Extra mail logging +RENAME TABLE gems__respondent_communications TO gems__log_respondent_communications; + +ALTER TABLE gems__log_respondent_communications ADD grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER grco_address; +ALTER TABLE gems__log_respondent_communications ADD grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message) AFTER grco_comments; + Copied: trunk/library/configs/db/tables/gems__log_respondent_communications.500.sql (from rev 46, trunk/library/configs/db/tables/gems__respondent_communications.60.sql) =================================================================== --- trunk/library/configs/db/tables/gems__log_respondent_communications.500.sql (rev 0) +++ trunk/library/configs/db/tables/gems__log_respondent_communications.500.sql 2011-09-20 15:42:08 UTC (rev 51) @@ -0,0 +1,29 @@ + +CREATE TABLE if not exists gems__log_respondent_communications ( + grco_id_action bigint unsigned not null auto_increment, + + grco_id_to bigint unsigned not null references gems__respondents (grs_id_user), + grco_id_by bigint unsigned null default 0 references gems__staff (gsf_id_user), + grco_organization bigint unsigned not null references gems__organizations (gor_id_organization), + + grco_id_token varchar(9) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null references gems__tokens (gto_id_token), + + grco_method varchar(12) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + grco_topic varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + grco_address varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + grco_comments varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + + grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message), + + grco_changed timestamp not null default current_timestamp, + grco_changed_by bigint unsigned not null, + grco_created timestamp not null, + grco_created_by bigint unsigned not null, + + PRIMARY KEY (grco_id_action) + ) + ENGINE=InnoDB + auto_increment = 200000 + CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; + Copied: trunk/library/configs/db/tables/gems__mail_jobs.300.sql (from rev 39, trunk/library/configs/db/tables/gems__mail_templates.200.sql) =================================================================== --- trunk/library/configs/db/tables/gems__mail_jobs.300.sql (rev 0) +++ trunk/library/configs/db/tables/gems__mail_jobs.300.sql 2011-09-20 15:42:08 UTC (rev 51) @@ -0,0 +1,36 @@ + +CREATE TABLE if not exists gems__mail_jobs ( + gmj_id_message bigint unsigned not null auto_increment, + + gmj_id_organization bigint unsigned not null + references gems__organizations (gor_id_organization), + gmj_id_message bigint unsigned not null + references gems__mail_templates (gmt_id_message), + + gmj_id_user_as bigint unsigned not null + references gems__staff (gsf_id_user), + + -- O Use organization from address + -- S Use site from address + -- U Use gmj_id_user_as from address + gmj_from_method varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + + -- M => multiple per respondent, one for each token + -- O => One per respondent, mark all tokens as send + -- U / A? => Send only one token, do not mark + gmj_process_method varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + + -- N => notmailed + -- R => reminder + gmj_filter_mode varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + + gmj_changed timestamp not null default current_timestamp on update current_timestamp, + gmj_changed_by bigint unsigned not null, + gmj_created timestamp not null default '0000-00-00 00:00:00', + gmj_created_by bigint unsigned not null, + + PRIMARY KEY (gmj_id_message) + ) + ENGINE=InnoDB + AUTO_INCREMENT = 800 + CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; Deleted: trunk/library/configs/db/tables/gems__respondent_communications.60.sql =================================================================== --- trunk/library/configs/db/tables/gems__respondent_communications.60.sql 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/configs/db/tables/gems__respondent_communications.60.sql 2011-09-20 15:42:08 UTC (rev 51) @@ -1,29 +0,0 @@ - -CREATE TABLE if not exists gems__respondent_communications ( - grco_id_action bigint unsigned not null auto_increment, - - grco_id_to bigint unsigned not null references gems__respondents (grs_id_user), - grco_id_by bigint unsigned null default 0 references gems_staff (gsf_id_user), - grco_organization bigint unsigned not null references gems__organizations (gor_id_organization), - - grco_id_token varchar(9) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null references gems__tokens (gto_id_token), - - grco_method varchar(12) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, - grco_topic varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, - grco_address varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, - grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, - grco_comments varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, - - grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message), - - grco_changed timestamp not null default current_timestamp, - grco_changed_by bigint unsigned not null, - grco_created timestamp not null, - grco_created_by bigint unsigned not null, - - PRIMARY KEY (grco_id_action) - ) - ENGINE=InnoDB - auto_increment = 200000 - CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; - Modified: trunk/library/controllers/MailLogController.php =================================================================== --- trunk/library/controllers/MailLogController.php 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/controllers/MailLogController.php 2011-09-20 15:42:08 UTC (rev 51) @@ -42,6 +42,6 @@ * @license New BSD License * @since Class available since version 1.4.2 */ -class MailLogController extends Gems_Default_MailLogAction +class MailLogController extends Gems_Default_MailLogActionOldStyle { } Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/languages/default-en.po 2011-09-20 15:42:08 UTC (rev 51) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-19 18:18+0100\n" +"POT-Creation-Date: 2011-09-20 17:39+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -1069,7 +1069,6 @@ msgstr "Username" #: classes/Gems/Default/IndexAction.php:105 -#: classes/Gems/Default/MailServerAction.php:88 msgid "Password" msgstr "Password" @@ -1225,7 +1224,8 @@ msgstr "Log maintenance" #: classes/Gems/Default/MailAction.php:61 -#: classes/Gems/Default/MailLogAction.php:71 +#: classes/Gems/Default/MailLogAction.php:95 +#: classes/Gems/Default/MailLogActionOldStyle.php:118 msgid "Subject" msgstr "Subject" @@ -1243,22 +1243,47 @@ msgid "Email templates" msgstr "Email templates" -#: classes/Gems/Default/MailLogAction.php:69 -msgid "To" -msgstr "To" - -#: classes/Gems/Default/MailLogAction.php:70 -msgid "From" -msgstr "From" - -#: classes/Gems/Default/MailLogAction.php:72 +#: classes/Gems/Default/MailLogAction.php:89 +#: classes/Gems/Default/MailLogActionOldStyle.php:112 msgid "Date sent" msgstr "Date sent" -#: classes/Gems/Default/MailLogAction.php:80 +#: classes/Gems/Default/MailLogAction.php:90 +#: classes/Gems/Default/MailLogActionOldStyle.php:113 +msgid "Receiver" +msgstr "Receiver" + +#: classes/Gems/Default/MailLogAction.php:91 +#: classes/Gems/Default/MailLogActionOldStyle.php:114 +msgid "To address" +msgstr "To address" + +#: classes/Gems/Default/MailLogAction.php:92 +#: classes/Gems/Default/MailLogActionOldStyle.php:115 +msgid "Sender" +msgstr "Sender" + +#: classes/Gems/Default/MailLogAction.php:93 +#: classes/Gems/Default/MailLogActionOldStyle.php:116 +msgid "From address" +msgstr "From address" + +#: classes/Gems/Default/MailLogAction.php:98 +#: classes/Gems/Default/MailLogActionOldStyle.php:121 +msgid "Template" +msgstr "Template" + +#: classes/Gems/Default/MailLogAction.php:108 +#: classes/Gems/Default/MailLogActionOldStyle.php:148 msgid "Mail Activity Log" msgstr "Mail Activity Log" +#: classes/Gems/Default/MailLogActionOldStyle.php:137 +msgid "Activity Log" +msgid_plural "Activity Logs" +msgstr[0] "Activity Log" +msgstr[1] "Activity Logs" + #: classes/Gems/Default/MailServerAction.php:68 msgid "From address [part]" msgstr "From address [part]" @@ -1300,10 +1325,16 @@ msgstr "User ID" #: classes/Gems/Default/MailServerAction.php:90 +#: classes/Gems/Default/OptionAction.php:107 +#: classes/Gems/Default/OptionAction.php:112 +#: classes/Gems/Default/SourceAction.php:95 +#: classes/Gems/Default/StaffAction.php:114 msgid "Repeat password" msgstr "Repeat password" #: classes/Gems/Default/MailServerAction.php:91 +#: classes/Gems/Default/SourceAction.php:74 +#: classes/Gems/Default/StaffAction.php:99 msgid "Enter only when changing" msgstr "Enter only when changing the password" @@ -1319,7 +1350,7 @@ #: classes/Gems/Default/OptionAction.php:73 #: classes/Gems/Default/OrganizationAction.php:128 -#: classes/Gems/Default/RespondentAction.php:164 +#: classes/Gems/Default/RespondentAction.php:173 #: classes/Gems/Default/StaffAction.php:192 msgid "Language" msgstr "Language" @@ -1436,7 +1467,7 @@ #: classes/Gems/Default/OverviewPlanAction.php:115 #: classes/Gems/Default/ProjectSurveysAction.php:88 #: classes/Gems/Default/SurveyAction.php:203 -#: classes/Gems/Default/SurveyMaintenanceAction.php:424 +#: classes/Gems/Default/SurveyMaintenanceAction.php:425 msgid "survey" msgid_plural "surveys" msgstr[0] "survey" @@ -1553,10 +1584,15 @@ msgid "By" msgstr "By" +#: classes/Gems/Default/ProjectSurveysAction.php:69 +#: classes/Gems/Default/ProjectTracksAction.php:67 +#: classes/Gems/Default/SurveyAction.php:193 +msgid "From" +msgstr "From" + #: classes/Gems/Default/ProjectSurveysAction.php:70 #: classes/Gems/Default/ProjectTracksAction.php:68 #: classes/Gems/Default/SurveyAction.php:195 -#: classes/Gems/Default/TrackAction.php:331 msgid "Until" msgstr "Until" @@ -1565,12 +1601,10 @@ msgstr "Active surveys" #: classes/Gems/Default/ProjectTracksAction.php:65 -#: classes/Gems/Default/TrackAction.php:328 msgid "Survey #" msgstr "Survey #" #: classes/Gems/Default/ProjectTracksAction.php:85 -#: classes/Gems/Default/TrackAction.php:451 msgid "track" msgid_plural "tracks" msgstr[0] "track" @@ -1666,114 +1700,106 @@ msgstr[0] "reception code" msgstr[1] "reception codes" -#: classes/Gems/Default/RespondentAction.php:113 +#: classes/Gems/Default/RespondentAction.php:122 msgid "Enter a 9-digit BSN number." msgstr "Enter a 9-digit BSN number." -#: classes/Gems/Default/RespondentAction.php:122 +#: classes/Gems/Default/RespondentAction.php:131 msgid "Identification" msgstr "Identification" -#: classes/Gems/Default/RespondentAction.php:123 +#: classes/Gems/Default/RespondentAction.php:132 msgid "BSN" msgstr "BSN" -#: classes/Gems/Default/RespondentAction.php:127 +#: classes/Gems/Default/RespondentAction.php:136 msgid "Patient number" msgstr "Patient number" -#: classes/Gems/Default/RespondentAction.php:136 +#: classes/Gems/Default/RespondentAction.php:145 msgid "Medical data" msgstr "Medical data" -#: classes/Gems/Default/RespondentAction.php:143 +#: classes/Gems/Default/RespondentAction.php:152 msgid "DBC's, etc..." msgstr "DBC's, etc..." -#: classes/Gems/Default/RespondentAction.php:146 +#: classes/Gems/Default/RespondentAction.php:155 msgid "Contact information" msgstr "Contact information" -#: classes/Gems/Default/RespondentAction.php:151 +#: classes/Gems/Default/RespondentAction.php:160 msgid "Respondent has no e-mail" msgstr "Patient has no e-mail" -#: classes/Gems/Default/RespondentAction.php:152 +#: classes/Gems/Default/RespondentAction.php:161 msgid "With housenumber" msgstr "With housenumber" -#: classes/Gems/Default/RespondentAction.php:159 +#: classes/Gems/Default/RespondentAction.php:168 msgid "Country" msgstr "Country" -#: classes/Gems/Default/RespondentAction.php:163 +#: classes/Gems/Default/RespondentAction.php:172 msgid "Settings" msgstr "Settings" -#: classes/Gems/Default/RespondentAction.php:165 +#: classes/Gems/Default/RespondentAction.php:174 msgid "Has the respondent signed the informed consent letter?" msgstr "Has the patient signed the informed consent letter?" -#: classes/Gems/Default/RespondentAction.php:190 +#: classes/Gems/Default/RespondentAction.php:199 msgid "Comments" msgstr "Comments" -#: classes/Gems/Default/RespondentAction.php:191 +#: classes/Gems/Default/RespondentAction.php:200 msgid "Physician" msgstr "Physician" -#: classes/Gems/Default/RespondentAction.php:192 +#: classes/Gems/Default/RespondentAction.php:201 msgid "Treatment" msgstr "Treatment" -#: classes/Gems/Default/RespondentAction.php:221 -#: classes/Gems/Default/TrackAction.php:131 -#: classes/Gems/Default/TrackAction.php:475 +#: classes/Gems/Default/RespondentAction.php:230 msgid "Rejection code" msgstr "Rejection code" -#: classes/Gems/Default/RespondentAction.php:228 +#: classes/Gems/Default/RespondentAction.php:237 msgid "Delete respondent" msgstr "Delete patient" -#: classes/Gems/Default/RespondentAction.php:279 +#: classes/Gems/Default/RespondentAction.php:288 msgid "Respondent deleted." msgstr "Patient deleted" -#: classes/Gems/Default/RespondentAction.php:282 -#: classes/Gems/Default/TrackAction.php:404 +#: classes/Gems/Default/RespondentAction.php:291 msgid "Choose a reception code to delete." msgstr "Choose a reception code to delete." -#: classes/Gems/Default/RespondentAction.php:346 +#: classes/Gems/Default/RespondentAction.php:355 msgid "respondent" msgid_plural "respondents" msgstr[0] "patient" msgstr[1] "patients" -#: classes/Gems/Default/RespondentAction.php:386 +#: classes/Gems/Default/RespondentAction.php:395 msgid "Please settle the informed consent form for this respondent." msgstr "Please settle the informed consent form for this patient." #: classes/Gems/Default/RespondentPlanAction.php:67 #: classes/Gems/Default/SurveyAction.php:171 -#: classes/Gems/Default/TrackAction.php:296 msgid "Show respondent" msgstr "Show patient" #: classes/Gems/Default/RespondentPlanAction.php:73 -#: classes/Gems/Default/TrackAction.php:265 -#: classes/Gems/Default/TrackAction.php:284 msgid "Show track" msgstr "Show track" #: classes/Gems/Default/RespondentPlanAction.php:136 -#: classes/Gems/Default/TrackAction.php:316 msgid " of " msgstr " of " #: classes/Gems/Default/RespondentPlanAction.php:137 -#: classes/Gems/Default/TrackAction.php:317 msgid "Progress" msgstr "Progress" @@ -1965,95 +1991,95 @@ msgid "Assigned surveys" msgstr "Assigned surveys" -#: classes/Gems/Default/SurveyMaintenanceAction.php:129 +#: classes/Gems/Default/SurveyMaintenanceAction.php:130 msgid "If empty, survey will never show up!" msgstr "If empty, survey will never show up!" -#: classes/Gems/Default/SurveyMaintenanceAction.php:130 +#: classes/Gems/Default/SurveyMaintenanceAction.php:131 msgid "Result field" msgstr "Result field" -#: classes/Gems/Default/SurveyMaintenanceAction.php:131 +#: classes/Gems/Default/SurveyMaintenanceAction.php:132 msgid "Before answering" msgstr "Before answering" -#: classes/Gems/Default/SurveyMaintenanceAction.php:132 +#: classes/Gems/Default/SurveyMaintenanceAction.php:133 msgid "After completion" msgstr "After completion" -#: classes/Gems/Default/SurveyMaintenanceAction.php:135 +#: classes/Gems/Default/SurveyMaintenanceAction.php:136 msgid "Upload new PDF" msgstr "Upload new PDF" -#: classes/Gems/Default/SurveyMaintenanceAction.php:142 +#: classes/Gems/Default/SurveyMaintenanceAction.php:143 msgid "Usage" msgstr "Usage" -#: classes/Gems/Default/SurveyMaintenanceAction.php:157 +#: classes/Gems/Default/SurveyMaintenanceAction.php:158 msgid "Single Survey Assignment" msgstr "Single Survey Assignment" -#: classes/Gems/Default/SurveyMaintenanceAction.php:202 +#: classes/Gems/Default/SurveyMaintenanceAction.php:203 msgid "Assignable since" msgstr "Assignable since" -#: classes/Gems/Default/SurveyMaintenanceAction.php:203 +#: classes/Gems/Default/SurveyMaintenanceAction.php:204 msgid "Assignable until" msgstr "Assignable until" -#: classes/Gems/Default/SurveyMaintenanceAction.php:209 +#: classes/Gems/Default/SurveyMaintenanceAction.php:210 msgid "Create Single Survey" msgstr "Create Single Survey" -#: classes/Gems/Default/SurveyMaintenanceAction.php:213 +#: classes/Gems/Default/SurveyMaintenanceAction.php:214 msgid "At the moment this survey can only be assigned to respondents as part of an existing track." msgstr "At the moment this survey can only be assigned to paitents as part of an existing track." -#: classes/Gems/Default/SurveyMaintenanceAction.php:266 +#: classes/Gems/Default/SurveyMaintenanceAction.php:267 msgid "Survey should be assigned to a group before making it active." msgstr "Survey should be assigned to a group before making it active." -#: classes/Gems/Default/SurveyMaintenanceAction.php:279 +#: classes/Gems/Default/SurveyMaintenanceAction.php:280 #, php-format msgid "Checking survey results for the %s survey." msgstr "Checking survey results for the %s survey." -#: classes/Gems/Default/SurveyMaintenanceAction.php:354 +#: classes/Gems/Default/SurveyMaintenanceAction.php:355 msgid "Source" msgstr "Source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:355 +#: classes/Gems/Default/SurveyMaintenanceAction.php:356 msgid "Status in source" msgstr "Status in source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:359 +#: classes/Gems/Default/SurveyMaintenanceAction.php:360 msgid "Active in source" msgstr "Active in source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:360 +#: classes/Gems/Default/SurveyMaintenanceAction.php:361 #, php-format msgid "Active in %s" msgstr "Active in %s" -#: classes/Gems/Default/SurveyMaintenanceAction.php:367 +#: classes/Gems/Default/SurveyMaintenanceAction.php:368 msgid "Single" msgstr "Single" -#: classes/Gems/Default/SurveyMaintenanceAction.php:409 +#: classes/Gems/Default/SurveyMaintenanceAction.php:410 #, php-format msgid "%d times in track." msgstr "%d times in track." -#: classes/Gems/Default/SurveyMaintenanceAction.php:411 +#: classes/Gems/Default/SurveyMaintenanceAction.php:412 #, php-format msgid "%d times in %d track(s)." msgstr "%d times in %d track(s)." -#: classes/Gems/Default/SurveyMaintenanceAction.php:415 +#: classes/Gems/Default/SurveyMaintenanceAction.php:416 msgid "Not used in track." msgstr "Not used in track." -#: classes/Gems/Default/SurveyMaintenanceAction.php:417 +#: classes/Gems/Default/SurveyMaintenanceAction.php:418 msgid "Not used in tracks." msgstr "Not used in tracks." @@ -2153,7 +2179,6 @@ msgstr "+" #: classes/Gems/Default/TokenPlanAction.php:478 -#: classes/Gems/Default/TrackAction.php:449 msgid "token" msgid_plural "tokens" msgstr[0] "token" @@ -2380,10 +2405,6 @@ msgid "Preview text" msgstr "Preview text" -#: classes/Gems/Email/EmailFormAbstract.php:306 -msgid "Template" -msgstr "Template" - #: classes/Gems/Email/EmailFormAbstract.php:330 msgid "Send" msgstr "Send" @@ -2445,6 +2466,11 @@ msgid "Method" msgstr "Method" +#: classes/Gems/Email/MultiMailForm.php:105 +#: classes/Gems/Email/OneMailForm.php:87 +msgid "To" +msgstr "To" + #: classes/Gems/Email/MultiMailForm.php:126 msgid "Survey has been taken." msgstr "Survey has been taken." @@ -2470,12 +2496,12 @@ msgid "The sending of emails was blocked for this installation." msgstr "The sending of emails was blocked for this installation." -#: classes/Gems/Email/OneMailForm.php:139 +#: classes/Gems/Email/OneMailForm.php:140 #: classes/Gems/Email/TemplateMailer.php:244 msgid "Mail failed to send." msgstr "Mail failed to send." -#: classes/Gems/Email/OneMailForm.php:143 +#: classes/Gems/Email/OneMailForm.php:144 #, php-format msgid "Sent email to %s." msgstr "Sent email to %s." @@ -3416,12 +3442,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:" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-09-20 14:55:25 UTC (rev 50) +++ trunk/library/languages/default-nl.po 2011-09-20 15:42:08 UTC (rev 51) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-19 18:16+0100\n" +"POT-Creation-Date: 2011-09-20 17:37+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -1069,7 +1069,6 @@ msgstr "Gebruikersnaam" #: classes/Gems/Default/IndexAction.php:105 -#: classes/Gems/Default/MailServerAction.php:88 msgid "Password" msgstr "Wachtwoord" @@ -1225,7 +1224,8 @@ msgstr "Logboek onderhoud" #: classes/Gems/Default/MailAction.php:61 -#: classes/Gems/Default/MailLogAction.php:71 +#: classes/Gems/Default/MailLogAction.php:95 +#: classes/Gems/Default/MailLogActionOldStyle.php:118 msgid "Subject" msgstr "Onderwerp" @@ -1243,22 +1243,47 @@ msgid "Email templates" msgstr "Email sjabloon" -#: classes/Gems/Default/MailLogAction.php:69 -msgid "To" -msgstr "Aan" +#: classes/Gems/Default/MailLogAction.php:89 +#: classes/Gems/Default/MailLogActionOldStyle.php:112 +msgid "Date sent" +msgstr "Verzend datum" -#: classes/Gems/Default/MailLogAction.php:70 -msgid "From" -msgstr "Van" +#: classes/Gems/Default/MailLogAction.php:90 +#: classes/Gems/Default/MailLogActionOldStyle.php:113 +msgid "Receiver" +msgstr "Ontvanger" -#: classes/Gems/Default/MailLogAction.php:72 -msgid "Date sent" -msgstr "Datum verstuurd" +#: classes/Gems/Default/MailLogAction.php:91 +#: classes/Gems/Default/MailLogActionOldStyle.php:114 +msgid "To address" +msgstr "Adres aan" -#: classes/Gems/Default/MailLogAction.php:80 +#: classes/Gems/Default/MailLogAction.php:92 +#: classes/Gems/Default/MailLogActionOldStyle.php:115 +msgid "Sender" +msgstr "Verzender" + +#: classes/Gems/Default/MailLogAction.php:93 +#: classes/Gems/Default/MailLogActionOldStyle.php:116 +msgid "From address" +msgstr "Adres van" + +#: classes/Gems/Default/MailLogAction.php:98 +#: classes/Gems/Default/MailLogActionOldStyle.php:121 +msgid "Template" +msgstr "Sjabloon" + +#: classes/Gems/Default/MailLogAction.php:108 +#: classes/Gems/Default/MailLogActionOldStyle.php:148 msgid "Mail Activity Log" msgstr "Logboek Mail Activiteit" +#: classes/Gems/Default/MailLogActionOldStyle.php:137 +msgid "Activity Log" +msgid_plural "Activity Logs" +msgstr[0] "Mail Activiteit Log" +msgstr[1] "Mail Activiteiten Logs" + #: classes/Gems/Default/MailServerAction.php:68 msgid "From address [part]" msgstr "Vanaf adres [gedeelte]" @@ -1300,10 +1325,16 @@ msgstr "Gebruikers ID" #: classes/Gems/Default/MailServerAction.php:90 +#: classes/Gems/Default/OptionAction.php:107 +#: classes/Gems/Default/OptionAction.php:112 +#: classes/Gems/Default/SourceAction.php:95 +#: classes/Gems/Default/StaffAction.php:114 msgid "Repeat password" msgstr "Herhaal wachtwoord" #: classes/Gems/Default/MailServerAction.php:91 +#: classes/Gems/Default/SourceAction.php:74 +#: classes/Gems/Default/StaffAction.php:99 msgid "Enter only when changing" msgstr "Alleen invoeren om het wachtwoord te wijzigen" @@ -1319,7 +1350,7 @@ #: classes/Gems/Default/OptionAction.php:73 #: classes/Gems/Default/OrganizationAction.php:128 -#: classes/Gems/Default/RespondentAction.php:164 +#: classes/Gems/Default/RespondentAction.php:173 #: classes/Gems/Default/StaffAction.php:192 msgid "Language" msgstr "Taal" @@ -1436,7 +1467,7 @@ #: classes/Gems/Default/OverviewPlanAction.php:115 #: classes/Gems/Default/ProjectSurveysAction.php:88 #: classes/Gems/Default/SurveyAction.php:203 -#: classes/Gems/Default/SurveyMaintenanceAction.php:424 +#: classes/Gems/Default/SurveyMaintenanceAction.php:425 msgid "survey" msgid_plural "surveys" msgstr[0] "vragenlijst" @@ -1553,10 +1584,15 @@ 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 -#: classes/Gems/Default/TrackAction.php:331 msgid "Until" msgstr "Tot" @@ -1565,12 +1601,10 @@ msgstr "Beschikbare vragenlijsten" #: classes/Gems/Default/ProjectTracksAction.php:65 -#: classes/Gems/Default/TrackAction.php:328 msgid "Survey #" msgstr "Vragenlijsten" #: classes/Gems/Default/ProjectTracksAction.php:85 -#: classes/Gems/Default/TrackAction.php:451 msgid "track" msgid_plural "tracks" msgstr[0] "traject" @@ -1666,114 +1700,106 @@ msgstr[0] "Ontvangst code" msgstr[1] "Ontvangst code" -#: classes/Gems/Default/RespondentAction.php:113 +#: classes/Gems/Default/RespondentAction.php:122 msgid "Enter a 9-digit BSN number." msgstr "Voer een BSN nummer van 9 cijfers in." -#: classes/Gems/Default/RespondentAction.php:122 +#: classes/Gems/Default/RespondentAction.php:131 msgid "Identification" msgstr "Identificatie" -#: classes/Gems/Default/RespondentAction.php:123 +#: classes/Gems/Default/RespondentAction.php:132 msgid "BSN" msgstr "BSN" -#: classes/Gems/Default/RespondentAction.php:127 +#: classes/Gems/Default/RespondentAction.php:136 msgid "Patient number" msgstr "Patiënt nummer" -#: classes/Gems/Default/RespondentAction.php:136 +#: classes/Gems/Default/RespondentAction.php:145 msgid "Medical data" msgstr "Medische gegevens" -#: classes/Gems/Default/RespondentAction.php:143 +#: classes/Gems/Default/RespondentAction.php:152 msgid "DBC's, etc..." msgstr "DBC's, etc..." -#: classes/Gems/Default/RespondentAction.php:146 +#: classes/Gems/Default/RespondentAction.php:155 msgid "Contact information" msgstr "Contact informatie" -#: classes/Gems/Default/RespondentAction.php:151 +#: classes/Gems/Default/RespondentAction.php:160 msgid "Respondent has no e-mail" msgstr "Patiënt zonder e-mail" -#: classes/Gems/Default/RespondentAction.php:152 +#: classes/Gems/Default/RespondentAction.php:161 msgid "With housenumber" msgstr "Met huisnummer" -#: classes/Gems/Default/RespondentAction.php:159 +#: classes/Gems/Default/RespondentAction.php:168 msgid "Country" msgstr "Land" -#: classes/Gems/Default/RespondentAction.php:163 +#: classes/Gems/Default/RespondentAction.php:172 msgid "Settings" msgstr "Instellingen" -#: classes/Gems/Default/RespondentAction.php:165 +#: 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:190 +#: classes/Gems/Default/RespondentAction.php:199 msgid "Comments" msgstr "Opmerkingen" -#: classes/Gems/Default/RespondentAction.php:191 +#: classes/Gems/Default/RespondentAction.php:200 msgid "Physician" msgstr "Dokter" -#: classes/Gems/Default/RespondentAction.php:192 +#: classes/Gems/Default/RespondentAction.php:201 msgid "Treatment" msgstr "Behandeling" -#: classes/Gems/Default/RespondentAction.php:221 -#: classes/Gems/Default/TrackAction.php:131 -#: classes/Gems/Default/TrackAction.php:475 +#: classes/Gems/Default/RespondentAction.php:230 msgid "Rejection code" msgstr "Afkeuringscode" -#: classes/Gems/Default/RespondentAction.php:228 +#: classes/Gems/Default/RespondentAction.php:237 msgid "Delete respondent" msgstr "Verwijder patiënt" -#: classes/Gems/Default/RespondentAction.php:279 +#: classes/Gems/Default/RespondentAction.php:288 msgid "Respondent deleted." msgstr "Patiënt verwijderd" -#: classes/Gems/Default/RespondentAction.php:282 -#: classes/Gems/Default/TrackAction.php:404 +#: 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:346 +#: classes/Gems/Default/RespondentAction.php:355 msgid "respondent" msgid_plural "respondents" msgstr[0] "patiënt" msgstr[1] "patiënten" -#: classes/Gems/Default/RespondentAction.php:386 +#: classes/Gems/Default/RespondentAction.php:395 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 -#: classes/Gems/Default/TrackAction.php:296 msgid "Show respondent" msgstr "Toon patiënt" #: classes/Gems/Default/RespondentPlanAction.php:73 -#: classes/Gems/Default/TrackAction.php:265 -#: classes/Gems/Default/TrackAction.php:284 msgid "Show track" msgstr "Toon traject" #: classes/Gems/Default/RespondentPlanAction.php:136 -#: classes/Gems/Default/TrackAction.php:316 msgid " of " msgstr " van " #: classes/Gems/Default/RespondentPlanAction.php:137 -#: classes/Gems/Default/TrackAction.php:317 msgid "Progress" msgstr "Voortgang" @@ -1965,95 +1991,95 @@ msgid "Assigned surveys" msgstr "Toegewezen vragenlijsten" -#: classes/Gems/Default/SurveyMaintenanceAction.php:129 +#: classes/Gems/Default/SurveyMaintenanceAction.php:130 msgid "If empty, survey will never show up!" msgstr "Indien leeg zal de vragenlijst niet tevoorschijn komen!" -#: classes/Gems/Default/SurveyMaintenanceAction.php:130 +#: classes/Gems/Default/SurveyMaintenanceAction.php:131 msgid "Result field" msgstr "Resultaat veld" -#: classes/Gems/Default/SurveyMaintenanceAction.php:131 +#: classes/Gems/Default/SurveyMaintenanceAction.php:132 msgid "Before answering" msgstr "Voor beantwoording" -#: classes/Gems/Default/SurveyMaintenanceAction.php:132 +#: classes/Gems/Default/SurveyMaintenanceAction.php:133 msgid "After completion" msgstr "Na afronding" -#: classes/Gems/Default/SurveyMaintenanceAction.php:135 +#: classes/Gems/Default/SurveyMaintenanceAction.php:136 msgid "Upload new PDF" msgstr "Upload nieuwe PDF" -#: classes/Gems/Default/SurveyMaintenanceAction.php:142 +#: classes/Gems/Default/SurveyMaintenanceAction.php:143 msgid "Usage" msgstr "Gebruik" -#: classes/Gems/Default/SurveyMaintenanceAction.php:157 +#: classes/Gems/Default/SurveyMaintenanceAction.php:158 msgid "Single Survey Assignment" msgstr "Losse vragenlijst toewijzing" -#: classes/Gems/Default/SurveyMaintenanceAction.php:202 +#: classes/Gems/Default/SurveyMaintenanceAction.php:203 msgid "Assignable since" msgstr "Toewijsbaar sinds" -#: classes/Gems/Default/SurveyMaintenanceAction.php:203 +#: classes/Gems/Default/SurveyMaintenanceAction.php:204 msgid "Assignable until" msgstr "Toewijsbaar tot" -#: classes/Gems/Default/SurveyMaintenanceAction.php:209 +#: classes/Gems/Default/SurveyMaintenanceAction.php:210 msgid "Create Single Survey" msgstr "Maak losse vragenlijst" -#: classes/Gems/Default/SurveyMaintenanceAction.php:213 +#: classes/Gems/Default/SurveyMaintenanceAction.php:214 msgid "At the moment this survey can only be assigned to respondents as part of an existing track." msgstr "Op dit moment kan deze vragenlijst alleen aan patiënten toegewezen als onderdeel van een traject." -#: classes/Gems/Default/SurveyMaintenanceAction.php:266 +#: classes/Gems/Default/SurveyMaintenanceAction.php:267 msgid "Survey should be assigned to a group before making it active." msgstr "Vragenlijst moet aan een groep toegewezen worden voordat deze actief kan worden gemaakt." -#: classes/Gems/Default/SurveyMaintenanceAction.php:279 +#: classes/Gems/Default/SurveyMaintenanceAction.php:280 #, php-format msgid "Checking survey results for the %s survey." msgstr "Controle op vragenlijstresultaten voor de vragenlijst '%s'." -#: classes/Gems/Default/SurveyMaintenanceAction.php:354 +#: classes/Gems/Default/SurveyMaintenanceAction.php:355 msgid "Source" msgstr "Bron" -#: classes/Gems/Default/SurveyMaintenanceAction.php:355 +#: classes/Gems/Default/SurveyMaintenanceAction.php:356 msgid "Status in source" msgstr "Status in bron" -#: classes/Gems/Default/SurveyMaintenanceAction.php:359 +#: classes/Gems/Default/SurveyMaintenanceAction.php:360 msgid "Active in source" msgstr "Actief in bron" -#: classes/Gems/Default/SurveyMaintenanceAction.php:360 +#: classes/Gems/Default/SurveyMaintenanceAction.php:361 #, php-format msgid "Active in %s" msgstr "Actief in %s" -#: classes/Gems/Default/SurveyMaintenanceAction.php:367 +#: classes/Gems/Default/SurveyMaintenanceAction.php:368 msgid "Single" msgstr "Los" -#: classes/Gems/Default/SurveyMaintenanceAction.php:409 +#: classes/Gems/Default/SurveyMaintenanceAction.php:410 #, php-format msgid "%d times in track." msgstr "%d keer in traject." -#: classes/Gems/Default/SurveyMaintenanceAction.php:411 +#: classes/Gems/Default/SurveyMaintenanceAction.php:412 #, php-format msgid "%d times in %d track(s)." msgstr "%d keer in %d traject(en)." -#: classes/Gems/Default/SurveyMaintenanceAction.php:415 +#: classes/Gems/Default/SurveyMaintenanceAction.php:416 msgid "Not used in track." msgstr "Niet in traject gebruikt." -#: classes/Gems/Default/SurveyMaintenanceAction.php:417 +#: classes/Gems/Default/SurveyMaintenanceAction.php:418 msgid "Not used in tracks." msgstr "Niet in trajecten gebruikt." @@ -2153,7 +2179,6 @@ msgstr "+" #: classes/Gems/Default/TokenPlanAction.php:478 -#: classes/Gems/Default/TrackAction.php:449 msgid "token" msgid_plural "tokens" msgstr[0] "kenmerk" @@ -2380,10 +2405,6 @@ 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" @@ -2445,6 +2466,11 @@ msgid "Method" msgstr "Methode" +#: classes/Gems/Email/MultiMailForm.php:105 +#: classes/Gems/Email/OneMailForm.php:87 +msgid "To" +msgstr "Aan" + #: classes/Gems/Email/MultiMailForm.php:126 msgid "Survey has been taken." msgstr "Vragenlijsten is al afgenomen" @@ -2470,12 +2496,12 @@ 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:139 +#: classes/Gems/Email/OneMailForm.php:140 #: classes/Gems/Email/TemplateMailer.php:244 msgid "Mail failed to send." msgstr "Mail sturen mislukt." -#: classes/Gems/Email/OneMailForm.php:143 +#: classes/Gems/Email/OneMailForm.php:144 #, php-format msgid "Sent email to %s." msgstr "Email naar %s verzonden." @@ -3416,12 +3442,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:" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-27 13:00:46
|
Revision: 80 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=80&view=rev Author: matijsdejong Date: 2011-09-27 13:00:35 +0000 (Tue, 27 Sep 2011) Log Message: ----------- - fix for #14, misspelled gtr_organisations name Modified Paths: -------------- trunk/library/changelog.txt trunk/library/classes/Gems/Default/ProjectSurveysAction.php trunk/library/classes/Gems/Default/ProjectTracksAction.php trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php trunk/library/classes/Gems/Default/TokenPlanAction.php trunk/library/classes/Gems/Default/TrackActionAbstract.php trunk/library/classes/Gems/Default/TrackMaintenanceAction.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__tracks.30.sql trunk/library/snippets/AddTracksSnippet.php trunk/library/snippets/EditTrackEngineSnippet.php Modified: trunk/library/changelog.txt =================================================================== --- trunk/library/changelog.txt 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/changelog.txt 2011-09-27 13:00:35 UTC (rev 80) @@ -1,3 +1,7 @@ +Important changes from 1.4.2 => 1.4.3 +============================================================ + * gtr_organisations renamed to gtr_organizations + Important changes from 1.4.1 => 1.4.2 ============================================================ * To have an autosubmit form it is enough now to just use $form->setAutoSubmit($href, $targetId) Modified: trunk/library/classes/Gems/Default/ProjectSurveysAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectSurveysAction.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/ProjectSurveysAction.php 2011-09-27 13:00:35 UTC (rev 80) @@ -78,7 +78,7 @@ $filter = parent::getDataFilter($data); $organization_id = $this->escort->getCurrentOrganization(); - $filter[] = "gtr_organisations LIKE '%|$organization_id|%'"; + $filter[] = "gtr_organizations LIKE '%|$organization_id|%'"; return $filter; } Modified: trunk/library/classes/Gems/Default/ProjectTracksAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/ProjectTracksAction.php 2011-09-27 13:00:35 UTC (rev 80) @@ -75,7 +75,7 @@ $filter = parent::getDataFilter($data); $organization_id = $this->escort->getCurrentOrganization(); - $filter[] = "gtr_organisations LIKE '%|$organization_id|%'"; + $filter[] = "gtr_organizations LIKE '%|$organization_id|%'"; return $filter; } Modified: trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php =================================================================== --- trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/SurveyMaintenanceAction.php 2011-09-27 13:00:35 UTC (rev 80) @@ -203,7 +203,7 @@ $bridge->addDate( 'gtr_date_start', 'label', $this->_('Assignable since')); $bridge->addDate( 'gtr_date_until', 'label', $this->_('Assignable until')); // feature request #200 - $bridge->addMultiCheckbox('gtr_organisations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); + $bridge->addMultiCheckbox('gtr_organizations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); } else { $standAloneButton = new MUtil_Form_Element_FakeSubmit('create_stand_alone'); @@ -228,8 +228,8 @@ public function afterFormLoad(array &$data, $isNew) { // feature request #200 - if (isset($data['gtr_organisations']) && (! is_array($data['gtr_organisations']))) { - $data['gtr_organisations'] = explode('|', trim($data['gtr_organisations'], '|')); + if (isset($data['gtr_organizations']) && (! is_array($data['gtr_organizations']))) { + $data['gtr_organizations'] = explode('|', trim($data['gtr_organizations'], '|')); } } @@ -259,8 +259,8 @@ $data['gtr_track_class'] = 'SingleSurveyEngine'; // feature request #200 - if (isset($data['gtr_organisations']) && is_array($data['gtr_organisations'])) { - $data['gtr_organisations'] = '|' . implode('|', $data['gtr_organisations']) . '|'; + if (isset($data['gtr_organizations']) && is_array($data['gtr_organizations'])) { + $data['gtr_organizations'] = '|' . implode('|', $data['gtr_organizations']) . '|'; } if ($data['gsu_active']==1 && empty($data['gsu_id_primary_group'])) { Modified: trunk/library/classes/Gems/Default/TokenPlanAction.php =================================================================== --- trunk/library/classes/Gems/Default/TokenPlanAction.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/TokenPlanAction.php 2011-09-27 13:00:35 UTC (rev 80) @@ -289,7 +289,7 @@ // Add track selection if ($this->escort instanceof Gems_Project_Tracks_MultiTracksInterface) { - $sql = "SELECT gtr_id_track, gtr_track_name FROM gems__tracks WHERE gtr_active=1 AND gtr_track_type='T' AND INSTR(gtr_organisations, '|$orgId|') > 0"; + $sql = "SELECT gtr_id_track, gtr_track_name FROM gems__tracks WHERE gtr_active=1 AND gtr_track_type='T' AND INSTR(gtr_organizations, '|$orgId|') > 0"; $elements[] = $this->_createSelectElement('gto_id_track', $sql, $this->_('(all tracks)')); } @@ -299,7 +299,7 @@ LENGTH(gro_round_description) > 0 AND gtr_active=1 AND gtr_track_type='T' AND - INSTR(gtr_organisations, '|$orgId|') > 0"; + INSTR(gtr_organizations, '|$orgId|') > 0"; $elements[] = $this->_createSelectElement('gto_round_description', $sql, $this->_('(all rounds)')); $sql = "SELECT gsu_id_survey, gsu_survey_name @@ -309,7 +309,7 @@ gro_active=1 AND gtr_active=1 AND gtr_track_type='T' AND - INSTR(gtr_organisations, '|$orgId|') > 0"; + INSTR(gtr_organizations, '|$orgId|') > 0"; /* TODO: use this when we can update this list using ajax if (isset($data['gsu_id_primary_group'])) { $sql .= $this->db->quoteInto(" AND gsu_id_primary_group = ?", $data['gsu_id_primary_group']); @@ -335,7 +335,7 @@ gro_active=1 AND gtr_active=1 AND gtr_track_type='T' AND - INSTR(gtr_organisations, '|$orgId|') > 0"; + INSTR(gtr_organizations, '|$orgId|') > 0"; $elements[] = $this->_createSelectElement('gsu_id_primary_group', $sql, $this->_('(all fillers)')); if (($this->escort instanceof Gems_Project_Organization_MultiOrganizationInterface) && Modified: trunk/library/classes/Gems/Default/TrackActionAbstract.php =================================================================== --- trunk/library/classes/Gems/Default/TrackActionAbstract.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/TrackActionAbstract.php 2011-09-27 13:00:35 UTC (rev 80) @@ -93,7 +93,7 @@ $filter['gtr_track_type'] = $this->trackType; $filter['gtr_active'] = 1; $filter[] = '(gtr_date_until IS NULL OR gtr_date_until >= CURRENT_DATE) AND gtr_date_start <= CURRENT_DATE'; - $filter[] = "gtr_organisations LIKE '%|$organisation_id|%'"; + $filter[] = "gtr_organizations LIKE '%|$organisation_id|%'"; $baseurl = array('action' => 'index', 'gr2o_patient_nr' => $id, MUtil_Model::TEXT_FILTER => $searchText); Modified: trunk/library/classes/Gems/Default/TrackMaintenanceAction.php =================================================================== --- trunk/library/classes/Gems/Default/TrackMaintenanceAction.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/classes/Gems/Default/TrackMaintenanceAction.php 2011-09-27 13:00:35 UTC (rev 80) @@ -98,7 +98,7 @@ $bridge->addDate( 'gtr_date_until'); // $bridge->addList( 'gtr_start_date_field', 'label', $this->_('Date used for track')); $bridge->addCheckbox('gtr_active'); - $bridge->addMultiCheckbox('gtr_organisations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); + $bridge->addMultiCheckbox('gtr_organizations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); } /** @@ -109,8 +109,8 @@ public function afterFormLoad(array &$data, $isNew) { // feature request #200 - if (isset($data['gtr_organisations']) && (! is_array($data['gtr_organisations']))) { - $data['gtr_organisations'] = explode('|', trim($data['gtr_organisations'], '|')); + if (isset($data['gtr_organizations']) && (! is_array($data['gtr_organizations']))) { + $data['gtr_organizations'] = explode('|', trim($data['gtr_organizations'], '|')); } } @@ -124,8 +124,8 @@ public function beforeSave(array &$data, $isNew, Zend_Form $form = null) { // feature request #200 - if (isset($data['gtr_organisations']) && is_array($data['gtr_organisations'])) { - $data['gtr_organisations'] = '|' . implode('|', $data['gtr_organisations']) . '|'; + if (isset($data['gtr_organizations']) && is_array($data['gtr_organizations'])) { + $data['gtr_organizations'] = '|' . implode('|', $data['gtr_organizations']) . '|'; } if (isset($data['gtr_id_track'])) { $data['gtr_survey_rounds'] = $this->db->fetchOne("SELECT COUNT(*) FROM gems__rounds WHERE gro_active = 1 AND gro_id_track = ?", $data['gtr_id_track']); Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/configs/db/patches.sql 2011-09-27 13:00:35 UTC (rev 80) @@ -84,10 +84,10 @@ ALTER TABLE `gems__staff` ADD `gsf_reset_key` varchar(64) NULL AFTER `gsf_phone_1`; ALTER TABLE `gems__staff` ADD `gsf_reset_req`timestamp NULL AFTER `gsf_reset_key`; --- PATCH: Add gtr_organisations to tracks -ALTER TABLE `gems__tracks` ADD `gtr_organisations` VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `gtr_track_type` ; +-- PATCH: Add gtr_organizations to tracks +ALTER TABLE `gems__tracks` ADD `gtr_organizations` VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `gtr_track_type` ; UPDATE gems__tracks - SET `gtr_organisations` = (SELECT CONCAT('|', CONVERT(GROUP_CONCAT(gor_id_organization SEPARATOR '|'), CHAR), '|') as orgs FROM gems__organizations WHERE gor_active=1) + SET `gtr_organizations` = (SELECT CONCAT('|', CONVERT(GROUP_CONCAT(gor_id_organization SEPARATOR '|'), CHAR), '|') as orgs FROM gems__organizations WHERE gor_active=1) WHERE gtr_active = 1; -- PATCH: Gewijzigd track model @@ -196,3 +196,6 @@ ALTER TABLE gems__log_respondent_communications ADD grco_sender varchar(120) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER grco_address; ALTER TABLE gems__log_respondent_communications ADD grco_id_message bigint unsigned null references gems__mail_templates (gmt_id_message) AFTER grco_comments; +-- GEMS VERSION: 41 +-- PATCH: Corrected misspelling of gtr_organisations +ALTER TABLE gems__tracks CHANGE gtr_organisations gtr_organizations varchar(250) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; Modified: trunk/library/configs/db/tables/gems__tracks.30.sql =================================================================== --- trunk/library/configs/db/tables/gems__tracks.30.sql 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/configs/db/tables/gems__tracks.30.sql 2011-09-27 13:00:35 UTC (rev 80) @@ -20,7 +20,7 @@ gtr_track_class varchar(64) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, -- Yes, quick and dirty, will correct later (probably) - gtr_organisations varchar(250) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', + gtr_organizations varchar(250) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', gtr_changed timestamp not null default current_timestamp on update current_timestamp, gtr_changed_by bigint unsigned not null, Modified: trunk/library/snippets/AddTracksSnippet.php =================================================================== --- trunk/library/snippets/AddTracksSnippet.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/snippets/AddTracksSnippet.php 2011-09-27 13:00:35 UTC (rev 80) @@ -117,7 +117,7 @@ (gtr_date_until IS NULL OR gtr_date_until > CURRENT_TIMESTAMP) AND gtr_active = 1 AND gtr_track_type = 'T' AND - gtr_organisations LIKE '%|$organization_id|%' + gtr_organizations LIKE '%|$organization_id|%' ORDER BY gtr_track_name"; break; case 'S': @@ -131,7 +131,7 @@ gtr_active = 1 AND gtr_track_type = 'S' AND ggp_respondent_members = 1 AND - gtr_organisations LIKE '%|$organization_id|%' + gtr_organizations LIKE '%|$organization_id|%' ORDER BY gtr_track_name"; break; case 'M': @@ -145,7 +145,7 @@ gtr_active = 1 AND gtr_track_type = 'S' AND ggp_respondent_members = 0 AND - gtr_organisations LIKE '%|$organization_id|%' + gtr_organizations LIKE '%|$organization_id|%' ORDER BY gtr_track_name"; break; // default: Modified: trunk/library/snippets/EditTrackEngineSnippet.php =================================================================== --- trunk/library/snippets/EditTrackEngineSnippet.php 2011-09-27 12:43:37 UTC (rev 79) +++ trunk/library/snippets/EditTrackEngineSnippet.php 2011-09-27 13:00:35 UTC (rev 80) @@ -134,7 +134,7 @@ if (! $this->createData) { $bridge->addCheckbox('gtr_active'); } - $bridge->addMultiCheckbox('gtr_organisations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); + $bridge->addMultiCheckbox('gtr_organizations', 'label', $this->_('Organizations'), 'multiOptions', $this->util->getDbLookup()->getOrganizations(), 'required', true); } /** @@ -247,8 +247,8 @@ parent::loadFormData(); // feature request #200 - if (isset($this->formData['gtr_organisations']) && (! is_array($this->formData['gtr_organisations']))) { - $this->formData['gtr_organisations'] = explode('|', trim($this->formData['gtr_organisations'], '|')); + if (isset($this->formData['gtr_organizations']) && (! is_array($this->formData['gtr_organizations']))) { + $this->formData['gtr_organizations'] = explode('|', trim($this->formData['gtr_organizations'], '|')); } } @@ -262,8 +262,8 @@ protected function saveData() { // feature request #200 - if (isset($this->formData['gtr_organisations']) && is_array($this->formData['gtr_organisations'])) { - $this->formData['gtr_organisations'] = '|' . implode('|', $this->formData['gtr_organisations']) . '|'; + if (isset($this->formData['gtr_organizations']) && is_array($this->formData['gtr_organizations'])) { + $this->formData['gtr_organizations'] = '|' . implode('|', $this->formData['gtr_organizations']) . '|'; } if ($this->trackEngine) { $this->formData['gtr_survey_rounds'] = $this->trackEngine->calculateRoundCount(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-09-27 17:28:54
|
Revision: 82 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=82&view=rev Author: matijsdejong Date: 2011-09-27 17:28:46 +0000 (Tue, 27 Sep 2011) Log Message: ----------- - added constructor with arguments to RequestCache.php - extra documentation for BrowseEditAction.php, TargetAbstract.php, TargetInterface.php - continued on #10 new BrowseEditAction.php todo: make possible to add filters to excel, look Excel export, maybe export using snippet Modified Paths: -------------- trunk/library/classes/Gems/Controller/BrowseEditAction.php trunk/library/classes/Gems/Controller/ModelSnippetActionAbstract.php trunk/library/classes/Gems/Default/MailLogAction.php trunk/library/classes/Gems/Registry/TargetAbstract.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/Gems/Util/RequestCache.php trunk/library/classes/Gems/Util.php trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php trunk/library/classes/MUtil/Registry/TargetAbstract.php trunk/library/classes/MUtil/Registry/TargetInterface.php trunk/library/snippets/Generic/AutosearchForm.php trunk/library/snippets/Generic/ModelItemTableSnippet.php trunk/library/snippets/Generic/ModelTableSnippet.php Added Paths: ----------- trunk/library/snippets/Generic/CurrentButtonRow.php Modified: trunk/library/classes/Gems/Controller/BrowseEditAction.php =================================================================== --- trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Controller/BrowseEditAction.php 2011-09-27 17:28:46 UTC (rev 82) @@ -583,16 +583,13 @@ * * @param boolean $includeDefaults Include the default values (yes for filtering, no for urls * @param string $sourceAction The action to get the cache from if not the current one. + * @param boolean $readonly Optional, tell the cache not to store any new values * @return array */ public function getCachedRequestData($includeDefaults = true, $sourceAction = null, $readonly = false) { if (! $this->requestCache) { - $this->requestCache = $this->util->getRequestCache(); - if ($sourceAction) { - $this->requestCache->setSourceAction($sourceAction); - } - $this->requestCache->setReadonly($readonly); + $this->requestCache = $this->util->getRequestCache($sourceAction, $readonly); $this->requestCache->setMenu($this->menu); $this->requestCache->setRequest($this->request); Modified: trunk/library/classes/Gems/Controller/ModelSnippetActionAbstract.php =================================================================== --- trunk/library/classes/Gems/Controller/ModelSnippetActionAbstract.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Controller/ModelSnippetActionAbstract.php 2011-09-27 17:28:46 UTC (rev 82) @@ -74,13 +74,20 @@ protected $autofilterSnippets = 'Generic_ModelTableSnippet'; /** - * The snippets used for the index action, minus those in autofilter + * The snippets used for the index action, before those in autofilter * * @var mixed String or array of snippets name */ - protected $indexSnippets = 'Generic_AutosearchForm'; + protected $indexStartSnippets = 'Generic_AutosearchForm'; /** + * The snippets used for the index action, after those in autofilter + * + * @var mixed String or array of snippets name + */ + protected $indexStopSnippets = 'Generic_CurrentButtonRow'; + + /** * The snippets used for the show action * * @var mixed String or array of snippets name @@ -88,6 +95,42 @@ protected $showSnippets = 'Generic_ModelItemTableSnippet'; /** + * + * @var Gems_Util + */ + public $util; + + /** + * Outputs the model to excel, applying all filters and searches needed + * + * When you want to change the output, there are two places to check: + * + * 1. $this->addExcelColumns($model), where the model can be changed to have labels for columns you + * need exported + * + * 2. $this->getExcelData($data, $model) where the supplied data and model are merged to get output + * (by default all fields from the model that have a label) + */ + public function excelAction() + { + // Set the request cache to use the search params from the index action + $requestCache = $this->util->getRequestCache('index', true); + $filter = $requestCache->getProgramParams(); + + $model = $this->getModel(); + + $model->applyParameters($filter); + + // $this->addExcelColumns($model); // Hook to modify the model + + $this->view->result = $this->getExcelData($model->load(), $model); + $this->view->filename = $this->getRequest()->getControllerName() . '.xls'; + $this->view->setScriptPath(GEMS_LIBRARY_DIR . '/views/scripts' ); + + $this->render('excel', null, true); + } + + /** * Finds the first item with one of the actions specified as parameter and using the current controller * * @param string $action @@ -109,6 +152,45 @@ } /** + * Returns an array with all columns from the model that have a label + * + * @param array $data + * @param MUtil_Model_ModelAbstract $model + * @return array + */ + protected function getExcelData($data, MUtil_Model_ModelAbstract $model) + { + $headings = array(); + $emptyMsg = $this->_('No data found.'); + foreach ($model->getItemsOrdered() as $name) { + if ($label = $model->get($name, 'label')) { + $headings[$name] = (string) $label; + } + } + $results = array(); + $results[] = $headings; + if ($headings) { + if ($data) { + foreach ($data as $row) { + foreach ($headings as $key => $value) { + $result[$key] = isset($row[$key]) ? $row[$key] : null; + } + $results[] = $result; + } + return $results; + } else { + foreach ($headings as $key => $value) { + $result[$key] = $emptyMsg; + } + $results[] = $result; + return $results; + } + } else { + return array($emptyMsg); + } + } + + /** * Intializes the html component. * * @param boolean $reset Throws away any existing html output when true Modified: trunk/library/classes/Gems/Default/MailLogAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailLogAction.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Default/MailLogAction.php 2011-09-27 17:28:46 UTC (rev 82) @@ -140,6 +140,9 @@ return $model; } + /** + * Action for showing a browse page + */ public function indexAction() { $this->html->h3($this->_('Mail Activity Log')); @@ -147,4 +150,16 @@ // MUtil_Echo::track($this->indexParameters); parent::indexAction(); } + + + /** + * Action for showing an item page + */ + public function showAction() + { + $this->html->h3($this->_('Show Mail Activity Log item')); + + // MUtil_Echo::track($this->indexParameters); + parent::showAction(); + } } Modified: trunk/library/classes/Gems/Registry/TargetAbstract.php =================================================================== --- trunk/library/classes/Gems/Registry/TargetAbstract.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Registry/TargetAbstract.php 2011-09-27 17:28:46 UTC (rev 82) @@ -4,7 +4,7 @@ /** * 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 @@ -15,7 +15,7 @@ * * 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 @@ -26,23 +26,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. - */ - -/** - * @author Matijs de Jong - * @since 1.0 - * @version 1.1 - * @package Gems + * + * + * @package Gems * @subpackage Registry + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** - * Extends MUtil_Registry_TargetAbstract with the ability to create + * Extends MUtil_Registry_TargetAbstract with the ability to create PHP * callables by request an existing method using $this->methodName. - * - * @author Matijs de Jong - * @package Gems + * + * @package Gems * @subpackage Registry + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.1 */ class Gems_Registry_TargetAbstract extends MUtil_Registry_TargetAbstract { Modified: trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-09-27 17:28:46 UTC (rev 82) @@ -82,6 +82,7 @@ public $menu; /** + * Optional, used for base url * * @var Gems_Util_RequestCache */ @@ -122,11 +123,16 @@ */ public function checkRegistryRequestsAnswers() { - if ($this->requestCache && (! $this->baseUrl)) { - $this->baseUrl = $this->requestCache->getProgramParams(); + if ($this->requestCache) { + // Items that should not be stored. + $this->requestCache->removeParams('page', 'items', 'action'); - if (MUtil_Registry_Source::$verbose) { - MUtil_Echo::track($this->baseUrl); + if ((! $this->baseUrl)) { + $this->baseUrl = $this->requestCache->getProgramParams(); + + if (MUtil_Registry_Source::$verbose) { + MUtil_Echo::track($this->baseUrl); + } } } @@ -186,4 +192,21 @@ return $table; } } + + /** + * Overrule to implement snippet specific filtering and sorting. + * + * @param MUtil_Model_ModelAbstract $model + */ + protected function processFilterAndSort(MUtil_Model_ModelAbstract $model) + { + if ($this->requestCache) { + $data = $this->requestCache->getProgramParams(); + + $model->applyParameters($data); + + } else { + parent::processFilterAndSort($model); + } + } } Modified: trunk/library/classes/Gems/Util/RequestCache.php =================================================================== --- trunk/library/classes/Gems/Util/RequestCache.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Util/RequestCache.php 2011-09-27 17:28:46 UTC (rev 82) @@ -109,6 +109,19 @@ protected $sourceAction; /** + * + * @param string $sourceAction The action to get the cache from if not the current one. + * @param boolean $readonly Optional, tell the cache not to store any new values + */ + public function __construct($sourceAction = null, $readonly = false) + { + if ($sourceAction) { + $this->setSourceAction($sourceAction); + } + $this->setReadonly($readonly); + } + + /** * 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/Gems/Util.php =================================================================== --- trunk/library/classes/Gems/Util.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/Gems/Util.php 2011-09-27 17:28:46 UTC (rev 82) @@ -170,11 +170,13 @@ /** * + * @param string $sourceAction The action to get the cache from if not the current one. + * @param boolean $readonly Optional, tell the cache not to store any new values * @return Gems_Util_RequestCache */ - public function getRequestCache() + public function getRequestCache($sourceAction = null, $readonly = false) { - return $this->_getClass('requestCache'); + return $this->_getClass('requestCache', null, array($sourceAction, $readonly)); } /** Modified: trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php =================================================================== --- trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-09-27 17:28:46 UTC (rev 82) @@ -70,13 +70,20 @@ protected $indexParameters = array(); /** - * The snippets used for the index action, minus those in autofilter + * The snippets used for the index action, before those in autofilter * * @var mixed String or array of snippets name */ - protected $indexSnippets = null; + protected $indexStartSnippets = null; /** + * The snippets used for the index action, after those in autofilter + * + * @var mixed String or array of snippets name + */ + protected $indexStopSnippets = null; + + /** * The parameters used for the show action * * @var array Mixed key => value array for snippet initialization @@ -139,16 +146,22 @@ */ public function indexAction() { - if ($this->indexSnippets) { + if ($this->indexStartSnippets || $this->indexStopSnippets) { $this->indexParameters = $this->indexParameters + $this->autofilterParameters; $this->indexParameters['model'] = $this->getModel(); $this->indexParameters['request'] = $this->getRequest(); - $this->addSnippets($this->indexSnippets, $this->indexParameters); + if ($this->indexStartSnippets) { + $this->addSnippets($this->indexStartSnippets, $this->indexParameters); + } } $this->autofilterAction(false); + + if ($this->indexStopSnippets) { + $this->addSnippets($this->indexStopSnippets, $this->indexParameters); + } } @@ -158,8 +171,6 @@ public function showAction() { if ($this->showSnippets) { - $this->showParameters = $this->indexParameters + $this->autofilterParameters; - $this->showParameters['model'] = $this->getModel(); $this->showParameters['request'] = $this->getRequest(); Modified: trunk/library/classes/MUtil/Registry/TargetAbstract.php =================================================================== --- trunk/library/classes/MUtil/Registry/TargetAbstract.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/MUtil/Registry/TargetAbstract.php 2011-09-27 17:28:46 UTC (rev 82) @@ -1,48 +1,54 @@ <?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.1 - * @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 Registry + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** - * MUtil_Registry_TargetAbstract is a default target object. - * - * Also usable to copy the code to implement your own version of this class. + * MUtil_Registry_TargetAbstract is a default target object, that requests values + * for all defined instance variables with names not starting with '_'. * - * @author Matijs de Jong - * @package MUtil + * I.e. variables in a class inheriting from MUtil_Registry_TargetAbstract can be + * initialized by a source even when they are protected or private. + * + * Also usafull to copy the code to implement your own version of this class. + * + * @package MUtil * @subpackage Registry + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.1 */ abstract class MUtil_Registry_TargetAbstract implements MUtil_Registry_TargetInterface { @@ -90,12 +96,12 @@ } /** - * Allows the loader to know the resources to set. - * - * Returns those object variables defined by the subclass but not at the level of this definition. - * - * Can be overruled. - * + * Allows the loader to know the resources to set. + * + * Returns those object variables defined by the subclass but not at the level of this definition. + * + * Can be overruled. + * * @return array of string names */ public function getRegistryRequests() Modified: trunk/library/classes/MUtil/Registry/TargetInterface.php =================================================================== --- trunk/library/classes/MUtil/Registry/TargetInterface.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/classes/MUtil/Registry/TargetInterface.php 2011-09-27 17:28:46 UTC (rev 82) @@ -4,7 +4,7 @@ /** * 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 @@ -15,7 +15,7 @@ * * 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 @@ -26,14 +26,14 @@ * 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.1 - * @version 1.1 - * @package MUtil + * + * + * @package MUtil * @subpackage Registry + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** @@ -44,11 +44,13 @@ * * @see MUtil_Registry_Source * - * @author Matijs de Jong - * @package MUtil + * @package MUtil * @subpackage Registry + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.1 */ -interface MUtil_Registry_TargetInterface +interface MUtil_Registry_TargetInterface { /** * Allows the source to set request. @@ -69,7 +71,7 @@ /** * Allows the loader to know the resources to set. - * + * * @return array of string names */ public function getRegistryRequests(); Modified: trunk/library/snippets/Generic/AutosearchForm.php =================================================================== --- trunk/library/snippets/Generic/AutosearchForm.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/snippets/Generic/AutosearchForm.php 2011-09-27 17:28:46 UTC (rev 82) @@ -68,13 +68,45 @@ protected $request; /** + * Optional, otherwise created from $util * + * @var Gems_Util_RequestCache + */ + public $requestCache; + + /** + * + * @var Gems_Util + */ + protected $util; + + /** + * * @var string Id for auto search button */ protected $searchButtonId = 'AUTO_SEARCH_TEXT_BUTTON'; /** + * Should be called after answering the request to allow the Target + * to check if all required registry values have been set correctly. + * + * @return boolean False if required are missing. + */ + public function checkRegistryRequestsAnswers() + { + if ($this->util && (! $this->requestCache)) { + $this->requestCache = $this->util->getRequestCache(); + } + if ($this->requestCache) { + // Do not store searchButtonId + $this->requestCache->removeParams($this->searchButtonId); + } + + return parent::checkRegistryRequestsAnswers(); + } + + /** * Creates the form itself * * @param array $options @@ -196,6 +228,10 @@ */ protected function getSearchData() { - return $this->request->getParams(); + if ($this->requestCache) { + return $this->requestCache->getProgramParams(); + } else { + return $this->request->getParams(); + } } } Added: trunk/library/snippets/Generic/CurrentButtonRow.php =================================================================== --- trunk/library/snippets/Generic/CurrentButtonRow.php (rev 0) +++ trunk/library/snippets/Generic/CurrentButtonRow.php 2011-09-27 17:28:46 UTC (rev 82) @@ -0,0 +1,85 @@ +<?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. + * + * Short description of file + * + * @package Gems + * @subpackage Snippets + * @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 $ + */ + +/** + * Short description for class + * + * Long description for class (if any)... + * + * @package Gems + * @subpackage Snippets + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.2 + */ +class Generic_CurrentButtonRow extends MUtil_Snippets_SnippetAbstract +{ + /** + * Required + * + * @var Gems_Menu + */ + protected $menu; + + /** + * Required + * + * @var Zend_Controller_Request_Abstract + */ + protected $request; + + /** + * Create the snippets content + * + * This is a stub function either override getHtmlOutput() or override render() + * + * @param Zend_View_Abstract $view Just in case it is needed here + * @return MUtil_Html_HtmlInterface Something that can be rendered + */ + public function getHtmlOutput(Zend_View_Abstract $view) + { + $menuList = $this->menu->getMenuList(); + + $menuList->addParameterSources($this->request) + ->addCurrentParent($this->_('Cancel')) + ->addCurrentChildren(); + + return $menuList; + } + +} Modified: trunk/library/snippets/Generic/ModelItemTableSnippet.php =================================================================== --- trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-09-27 17:28:46 UTC (rev 82) @@ -1,6 +1,5 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -92,6 +91,31 @@ protected $request; /** + * Adds rows from the model to the bridge that creates the browse table. + * + * Overrule this function to add different columns to the browse table, without + * having to recode the core table building code. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @return void + */ + protected function addShowTableRows(MUtil_Model_VerticalTableBridge $bridge, MUtil_Model_ModelAbstract $model) + { + parent::addShowTableRows($bridge, $model); + + $controller = $this->request->getControllerName(); + + $menuList = $this->menu->getMenuList(); + $menuList->addParameterSources($bridge) + ->addByController($controller) + ->addByController($controller, 'edit') + ->addByController($controller, 'delete'); + + $bridge->tfrow($menuList, array('class' => 'centerAlign')); + } + + /** * Creates the model * * @return MUtil_Model_ModelAbstract Modified: trunk/library/snippets/Generic/ModelTableSnippet.php =================================================================== --- trunk/library/snippets/Generic/ModelTableSnippet.php 2011-09-27 14:43:57 UTC (rev 81) +++ trunk/library/snippets/Generic/ModelTableSnippet.php 2011-09-27 17:28:46 UTC (rev 82) @@ -54,6 +54,29 @@ protected $model; /** + * + * @var Gems_Util + */ + protected $util; + + /** + * Automatically add request cacge + * + * Should be called after answering the request to allow the Target + * to check if all required registry values have been set correctly. + * + * @return boolean False if required are missing. + */ + public function checkRegistryRequestsAnswers() + { + if ($this->util && (! $this->requestCache)) { + $this->requestCache = $this->util->getRequestCache(); + } + + return parent::checkRegistryRequestsAnswers(); + } + + /** * Creates the model * * @return MUtil_Model_ModelAbstract This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-11 12:59:48
|
Revision: 88 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=88&view=rev Author: matijsdejong Date: 2011-10-11 12:59:41 +0000 (Tue, 11 Oct 2011) Log Message: ----------- Whoops, forget the current use of the LanguageController Added Paths: ----------- trunk/library/classes/Gems/Default/LanguageAction.php trunk/library/controllers/LanguageController.php Copied: trunk/library/classes/Gems/Default/LanguageAction.php (from rev 85, trunk/library/classes/Gems/Default/LanguageAction.php) =================================================================== --- trunk/library/classes/Gems/Default/LanguageAction.php (rev 0) +++ trunk/library/classes/Gems/Default/LanguageAction.php 2011-10-11 12:59:41 UTC (rev 88) @@ -0,0 +1,68 @@ +<?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 Default + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * Allows the user to switch interface language. + * + * @package Gems + * @subpackage Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 + */ +class Gems_Default_LanguageAction extends Gems_Controller_Action +{ + public function changeUiAction() + { + $request = $this->getRequest(); + + $lang = strtolower($request->getParam('language')); + $url = base64_decode($request->getParam('current_uri')); + + if (in_array($lang, $this->view->project->locales)) { + + $this->session->user_locale = $lang; + if (Gems_Cookies::setLocale($lang, $this->basepath->getBasePath())) { + $this->getResponse()->setRedirect($url); + return; + } + + throw new Exception($this->_('Cookies must be enabled for setting the language.')); + } + + throw new Exception($this->_('Invalid language setting.')); + } +} Copied: trunk/library/controllers/LanguageController.php (from rev 85, trunk/library/controllers/LanguageController.php) =================================================================== --- trunk/library/controllers/LanguageController.php (rev 0) +++ trunk/library/controllers/LanguageController.php 2011-10-11 12:59:41 UTC (rev 88) @@ -0,0 +1,33 @@ +<?php + + +/** + * Copyright (c) 2011, Erasmus MC + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Erasmus MC nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +class LanguageController extends Gems_Default_LanguageAction +{ +} \ 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-10-17 13:51:12
|
Revision: 112 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=112&view=rev Author: mennodekker Date: 2011-10-17 13:51:03 +0000 (Mon, 17 Oct 2011) Log Message: ----------- Version -> 1.5, patchlevel -> 42 Modified Paths: -------------- trunk/library/classes/Gems/Versions.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__patch_levels.10.sql Modified: trunk/library/classes/Gems/Versions.php =================================================================== --- trunk/library/classes/Gems/Versions.php 2011-10-17 13:41:18 UTC (rev 111) +++ trunk/library/classes/Gems/Versions.php 2011-10-17 13:51:03 UTC (rev 112) @@ -43,12 +43,12 @@ { public final function getBuild() { - return 41; + return 42; } public final function getGemsVersion() { - return '1.4.3'; + return '1.5'; } public function getProjectVersion() Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-10-17 13:41:18 UTC (rev 111) +++ trunk/library/configs/db/patches.sql 2011-10-17 13:51:03 UTC (rev 112) @@ -201,4 +201,6 @@ ALTER TABLE gems__tracks CHANGE gtr_organisations gtr_organizations varchar(250) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; -- PATCH: Assign maintenance mode toggle to super role -UPDATE gems__roles SET grl_privileges = CONCAT(grl_privileges,',pr.maintenance') WHERE grl_name = 'super' AND grl_privileges NOT LIKE '%pr.maintenance%'; \ No newline at end of file +UPDATE gems__roles SET grl_privileges = CONCAT(grl_privileges,',pr.maintenance') WHERE grl_name = 'super' AND grl_privileges NOT LIKE '%pr.maintenance%'; + +-- GEMS VERSION: 42 \ No newline at end of file Modified: trunk/library/configs/db/tables/gems__patch_levels.10.sql =================================================================== --- trunk/library/configs/db/tables/gems__patch_levels.10.sql 2011-10-17 13:41:18 UTC (rev 111) +++ trunk/library/configs/db/tables/gems__patch_levels.10.sql 2011-10-17 13:51:03 UTC (rev 112) @@ -11,5 +11,5 @@ INSERT INTO gems__patch_levels (gpl_level, gpl_created) VALUES - (41, CURRENT_TIMESTAMP); + (42, CURRENT_TIMESTAMP); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-20 11:10:41
|
Revision: 115 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=115&view=rev Author: matijsdejong Date: 2011-10-20 11:10:35 +0000 (Thu, 20 Oct 2011) Log Message: ----------- Surveys give information based on the group they are assigned on as per #24. Also found database field no longer in use in code. Modified Paths: -------------- trunk/library/classes/Gems/Tracker/Survey.php trunk/library/configs/db/tables/gems__surveys.30.sql Modified: trunk/library/classes/Gems/Tracker/Survey.php =================================================================== --- trunk/library/classes/Gems/Tracker/Survey.php 2011-10-19 18:01:56 UTC (rev 114) +++ trunk/library/classes/Gems/Tracker/Survey.php 2011-10-20 11:10:35 UTC (rev 115) @@ -104,6 +104,26 @@ } /** + * Makes sure the receptioncode data is part of the $this->_gemsData + * + * @param boolean $reload Optional parameter to force reload. + */ + private function _ensureGroupData($reload = false) + { + if ($reload || (! isset($this->_gemsSurvey['ggp_id_group']))) { + $sql = "SELECT * FROM gems__groups WHERE ggp_id_group = ?"; + $code = $this->_gemsSurvey['gsu_id_primary_group']; + + if ($row = $this->db->fetchRow($sql, $code)) { + $this->_gemsSurvey = $row + $this->_gemsSurvey; + } else { + $name = $this->getName(); + throw new Gems_Exception("Group code $code is missing for survey '$name'."); + } + } + } + + /** * Update the survey, both in the database and in memory. * * @param array $values The values that this token should be set to @@ -466,6 +486,20 @@ } /** + * Should this survey be filled in by staff members. + * + * @return boolean + */ + public function isTakenByStaff() + { + if (! isset($this->_gemsSurvey['ggp_staff_members'])) { + $this->_ensureGroupData(); + } + + return (boolean) $this->_gemsSurvey['ggp_staff_members']; + } + + /** * Update the survey, both in the database and in memory. * * @param array $values The values that this token should be set to Modified: trunk/library/configs/db/tables/gems__surveys.30.sql =================================================================== --- trunk/library/configs/db/tables/gems__surveys.30.sql 2011-10-19 18:01:56 UTC (rev 114) +++ trunk/library/configs/db/tables/gems__surveys.30.sql 2011-10-20 11:10:35 UTC (rev 115) @@ -20,7 +20,10 @@ references gems__sources (gso_id_source), gsu_active boolean not null default 0, gsu_status varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', + + -- depreciated gsu_staff boolean not null default 0, + -- end depreciated gsu_id_primary_group bigint unsigned null references gems__groups (ggp_id_group), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-20 12:56:52
|
Revision: 118 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=118&view=rev Author: matijsdejong Date: 2011-10-20 12:56:42 +0000 (Thu, 20 Oct 2011) Log Message: ----------- Translation fixes for #21 and #22. Modified Paths: -------------- trunk/library/classes/Gems/Default/SourceAction.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 Modified: trunk/library/classes/Gems/Default/SourceAction.php =================================================================== --- trunk/library/classes/Gems/Default/SourceAction.php 2011-10-20 12:44:50 UTC (rev 117) +++ trunk/library/classes/Gems/Default/SourceAction.php 2011-10-20 12:56:42 UTC (rev 118) @@ -83,7 +83,7 @@ $bridge->addValidator('gso_ls_url', new MUtil_Validate_Url()); $bridge->addSelect('gso_ls_class'); - $bridge->addSelect('gso_ls_adapter', 'description', $this->_('Choose the database used by this source.')); + $bridge->addSelect('gso_ls_adapter', 'description', $this->_('The database server used by the source.')); $bridge->addText('gso_ls_table_prefix', array('size' => 15, 'description' => $this->_('Do not forget the underscores.'))); $bridge->addText('gso_ls_dbhost', array('size' => 15, 'description' => $in_gems)); Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-10-20 12:44:50 UTC (rev 117) +++ trunk/library/languages/default-en.po 2011-10-20 12:56:42 UTC (rev 118) @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-17 15:19+0100\n" +"POT-Creation-Date: 2011-10-20 14:51+0100\n" "PO-Revision-Date: \n" -"Last-Translator: Menno Dekker <men...@er...>\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" @@ -381,7 +381,7 @@ msgid "Birthday" msgstr "Birthday" -#: classes/Gems/Tracker.php:726 +#: classes/Gems/Tracker.php:732 msgid "Checks performed" msgstr "Checks performed" @@ -1346,7 +1346,6 @@ msgstr "Invalid organization." #: classes/Gems/Default/OrganizationAction.php:117 -#: classes/Gems/Default/SourceAction.php:143 msgid "Url" msgstr "Url" @@ -1791,6 +1790,18 @@ msgid "Leave empty for the Gems database." msgstr "Leave empty for the Gems database." +#: classes/Gems/Default/SourceAction.php:79 +msgid "E.g. the name of the project - for single source projects." +msgstr "E.g. the name of the project - for single source projects." + +#: classes/Gems/Default/SourceAction.php:81 +msgid "For creating token-survey url." +msgstr "For creating token-survey url." + +#: classes/Gems/Default/SourceAction.php:86 +msgid "The database server used by the source." +msgstr "The database server used by the source." + #: classes/Gems/Default/SourceAction.php:88 msgid "Do not forget the underscores." msgstr "Do not forget the underscores." @@ -1808,63 +1819,67 @@ msgid "Checking survey results for %s source." msgstr "Checking survey results for %s source." +#: classes/Gems/Default/SourceAction.php:143 +msgid "Source Url" +msgstr "Source Url" + #: classes/Gems/Default/SourceAction.php:145 msgid "Adaptor class" msgstr "Adaptor class" #: classes/Gems/Default/SourceAction.php:147 -msgid "DB Adaptor" -msgstr "DB Adaptor" +msgid "Database Server" +msgstr "Database Server" #: classes/Gems/Default/SourceAction.php:149 msgid "Database host" msgstr "Database host" -#: classes/Gems/Default/SourceAction.php:152 +#: classes/Gems/Default/SourceAction.php:153 msgid "Table prefix" msgstr "Table prefix" -#: classes/Gems/Default/SourceAction.php:156 +#: classes/Gems/Default/SourceAction.php:157 msgid "Last check" msgstr "Last check" -#: classes/Gems/Default/SourceAction.php:189 +#: classes/Gems/Default/SourceAction.php:190 msgid "source" msgid_plural "sources" msgstr[0] "source" msgstr[1] "sources" -#: classes/Gems/Default/SourceAction.php:194 +#: classes/Gems/Default/SourceAction.php:195 msgid "Survey Sources" msgstr "Survey Sources" -#: classes/Gems/Default/SourceAction.php:202 +#: classes/Gems/Default/SourceAction.php:203 msgid "This installation is active." msgstr "This installation is active." -#: classes/Gems/Default/SourceAction.php:204 +#: classes/Gems/Default/SourceAction.php:205 msgid "Inactive installation." msgstr "Inactive installation." -#: classes/Gems/Default/SourceAction.php:217 -#: classes/Gems/Default/SourceAction.php:236 +#: classes/Gems/Default/SourceAction.php:218 +#: classes/Gems/Default/SourceAction.php:237 msgid "No changes." msgstr "No changes." -#: classes/Gems/Default/SourceAction.php:232 +#: classes/Gems/Default/SourceAction.php:233 #, php-format msgid "Synchronization of source %s:" msgstr "Synchronization of source %s:" -#: classes/Gems/Default/SourceAction.php:243 +#: classes/Gems/Default/SourceAction.php:244 msgid "Synchronize all sources of surveys" msgstr "Synchronize all sources of surveys" -#: classes/Gems/Default/SourceAction.php:244 +#: classes/Gems/Default/SourceAction.php:245 msgid "Synchronization will update the status of all surveys imported into this project to the status at the sources." msgstr "Synchronization will update the status of all surveys imported into this project to the status at the sources." -#: classes/Gems/Default/SourceAction.php:251 +#: classes/Gems/Default/SourceAction.php:252 msgid "Are you sure you want to synchronize all survey sources?" msgstr "Are you sure you want to synchronize all survey sources?" @@ -3541,10 +3556,12 @@ msgid "This track can be assigned since %s." msgstr "This track can be assigned since %s." -#: views/scripts/index/login.phtml:12 -msgid "The Pulse software was made possible thanks to support from " -msgstr "The Pulse software was made possible thanks to support from " +#~ msgid "DB Adaptor" +#~ msgstr "DB Adaptor" +#~ msgid "The Pulse software was made possible thanks to support from " +#~ msgstr "The Pulse software was made possible thanks to support from " + #~ msgid "ACL" #~ msgstr "ACL" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-10-20 12:44:50 UTC (rev 117) +++ trunk/library/languages/default-nl.po 2011-10-20 12:56:42 UTC (rev 118) @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-17 15:19+0100\n" +"POT-Creation-Date: 2011-10-20 14:51+0100\n" "PO-Revision-Date: \n" -"Last-Translator: Menno Dekker <men...@er...>\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" @@ -381,7 +381,7 @@ msgid "Birthday" msgstr "Geboren op" -#: classes/Gems/Tracker.php:726 +#: classes/Gems/Tracker.php:732 msgid "Checks performed" msgstr "Controle uitgevoerd" @@ -1346,7 +1346,6 @@ msgstr "Ongeldige organisatie." #: classes/Gems/Default/OrganizationAction.php:117 -#: classes/Gems/Default/SourceAction.php:143 msgid "Url" msgstr "Url" @@ -1791,6 +1790,18 @@ msgid "Leave empty for the Gems database." msgstr "Leeglaten bij gebruik van de Gems database." +#: classes/Gems/Default/SourceAction.php:79 +msgid "E.g. the name of the project - for single source projects." +msgstr "Bijvoorbeeld de project naam - bij projecten met maar één bron." + +#: classes/Gems/Default/SourceAction.php:81 +msgid "For creating token-survey url." +msgstr "Voor kenmerk-vragenlijst url." + +#: classes/Gems/Default/SourceAction.php:86 +msgid "The database server used by the source." +msgstr "Het merk database server gebruikt door deze bron." + #: classes/Gems/Default/SourceAction.php:88 msgid "Do not forget the underscores." msgstr "Vergeet de underscores niet." @@ -1808,63 +1819,67 @@ msgid "Checking survey results for %s source." msgstr "Controle vragenlijstresultaten voor %s bron." +#: classes/Gems/Default/SourceAction.php:143 +msgid "Source Url" +msgstr "Bron Url" + #: classes/Gems/Default/SourceAction.php:145 msgid "Adaptor class" msgstr "Adaptor klasse" #: classes/Gems/Default/SourceAction.php:147 -msgid "DB Adaptor" -msgstr "DB Adaptor" +msgid "Database Server" +msgstr "Database Server" #: classes/Gems/Default/SourceAction.php:149 msgid "Database host" msgstr "Database machine" -#: classes/Gems/Default/SourceAction.php:152 +#: classes/Gems/Default/SourceAction.php:153 msgid "Table prefix" msgstr "Voorvoegsel tabel" -#: classes/Gems/Default/SourceAction.php:156 +#: classes/Gems/Default/SourceAction.php:157 msgid "Last check" msgstr "Laatste controle" -#: classes/Gems/Default/SourceAction.php:189 +#: classes/Gems/Default/SourceAction.php:190 msgid "source" msgid_plural "sources" msgstr[0] "bron" msgstr[1] "bronnen" -#: classes/Gems/Default/SourceAction.php:194 +#: classes/Gems/Default/SourceAction.php:195 msgid "Survey Sources" msgstr "Bronnen" -#: classes/Gems/Default/SourceAction.php:202 +#: classes/Gems/Default/SourceAction.php:203 msgid "This installation is active." msgstr "Deze installatie is actief" -#: classes/Gems/Default/SourceAction.php:204 +#: classes/Gems/Default/SourceAction.php:205 msgid "Inactive installation." msgstr "Deze installatie is inactief" -#: classes/Gems/Default/SourceAction.php:217 -#: classes/Gems/Default/SourceAction.php:236 +#: classes/Gems/Default/SourceAction.php:218 +#: classes/Gems/Default/SourceAction.php:237 msgid "No changes." msgstr "Geen veranderingen" -#: classes/Gems/Default/SourceAction.php:232 +#: classes/Gems/Default/SourceAction.php:233 #, php-format msgid "Synchronization of source %s:" msgstr "Synchronisatie van %s bron:" -#: classes/Gems/Default/SourceAction.php:243 +#: classes/Gems/Default/SourceAction.php:244 msgid "Synchronize all sources of surveys" msgstr "Synchronizeer alle vragenlijsten bronnen" -#: classes/Gems/Default/SourceAction.php:244 +#: classes/Gems/Default/SourceAction.php:245 msgid "Synchronization will update the status of all surveys imported into this project to the status at the sources." msgstr "Synchronisatie zal de status van alle vragenlijsten in dit project aanpassen aan de status van de bron." -#: classes/Gems/Default/SourceAction.php:251 +#: classes/Gems/Default/SourceAction.php:252 msgid "Are you sure you want to synchronize all survey sources?" msgstr "Weet je zeker dat je alle bronnen wil synchroniseren?" @@ -3541,10 +3556,12 @@ msgid "This track can be assigned since %s." msgstr "Dit traject kan sinds %s aan een patiënt toegewezen worden." -#: views/scripts/index/login.phtml:12 -msgid "The Pulse software was made possible thanks to support from " -msgstr "De PULSE software is mede mogelijk gemaakt met steun van " +#~ msgid "DB Adaptor" +#~ msgstr "DB Adaptor" +#~ msgid "The Pulse software was made possible thanks to support from " +#~ msgstr "De PULSE software is mede mogelijk gemaakt met steun van " + #~ msgid "ACL" #~ msgstr "ACL" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-20 13:30:25
|
Revision: 119 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=119&view=rev Author: matijsdejong Date: 2011-10-20 13:30:18 +0000 (Thu, 20 Oct 2011) Log Message: ----------- Maintenance mode is now a button and works a little bit nicer as per #20. Modified Paths: -------------- trunk/library/classes/Gems/Default/ProjectInformationAction.php trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/GemsEscort.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 Modified: trunk/library/classes/Gems/Default/ProjectInformationAction.php =================================================================== --- trunk/library/classes/Gems/Default/ProjectInformationAction.php 2011-10-20 12:56:42 UTC (rev 118) +++ trunk/library/classes/Gems/Default/ProjectInformationAction.php 2011-10-20 13:30:18 UTC (rev 119) @@ -45,6 +45,18 @@ */ class Gems_Default_ProjectInformationAction extends Gems_Controller_Action { + /** + * + * @var GemsEscort + */ + public $escort; + + /** + * + * @var Gems_Menu + */ + public $menu; + public $useHtmlView = true; protected function _showTable($caption, $data, $nested = false) @@ -132,18 +144,40 @@ $data[$this->_('Server OS')] = php_uname('s'); $data[$this->_('Time on server')] = date('r'); + if (file_exists($this->escort->getMaintenanceLockFilename())) { + $label = $this->_('Turn Maintenance Mode OFF'); + } else { + $label = $this->_('Turn Maintenance Mode ON'); + } + $request = $this->getRequest(); + $buttonList = $this->menu->getMenuList(); + $buttonList->addParameterSources($request) + ->addByController($request->getControllerName(), 'maintenance', $label); + + // $this->html->buttonDiv($buttonList); + $this->_showTable($this->_('Version information'), $data); + + $this->html->buttonDiv($buttonList); } public function maintenanceAction() { - $lockFile = GEMS_ROOT_DIR . '/var/settings/lock.txt'; - if(file_exists($lockFile)) { + $lockFile = $this->escort->getMaintenanceLockFilename(); + if (file_exists($lockFile)) { unlink($lockFile); } else { touch($lockFile); } - $this->_forward('index'); + + // Dump the existing maintenance mode messages. + $this->escort->getMessenger()->clearCurrentMessages(); + $this->escort->getMessenger()->clearMessages(); + MUtil_Echo::out(); + + // Redirect + $request = $this->getRequest(); + $this->_reroute(array($request->getActionKey() => 'index')); } public function phpAction() Modified: trunk/library/classes/Gems/Menu/MenuAbstract.php =================================================================== --- trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-20 12:56:42 UTC (rev 118) +++ trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-20 13:30:18 UTC (rev 119) @@ -300,7 +300,7 @@ $page->addAction($this->_('PHP'), null, 'php'); $page->addAction($this->_('Project'), null, 'project'); $page->addAction($this->_('Session'), null, 'session'); - $page->addAction($this->_('Maintenance mode'), 'pr.maintenance', 'maintenance'); + $page->addButtonOnly($this->_('Maintenance mode'), 'pr.maintenance', 'project-information', 'maintenance'); return $page; } Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-10-20 12:56:42 UTC (rev 118) +++ trunk/library/classes/GemsEscort.php 2011-10-20 13:30:18 UTC (rev 119) @@ -1133,6 +1133,15 @@ } /** + * + * @return string Name of the file that performs the maintenance lock + */ + public function getMaintenanceLockFilename() + { + return GEMS_ROOT_DIR . '/var/settings/lock.txt'; + } + + /** * Retrieve the GemsEscort object * * @return GemsEscort @@ -1523,7 +1532,7 @@ * 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 */ - if(file_exists(GEMS_ROOT_DIR . '/var/settings/lock.txt')) { + if (file_exists($this->getMaintenanceLockFilename())) { if ($this->session->user_id && $this->session->user_role !== 'super') { //Still allow logoff so we can relogin as super if (!('index' == $request->getControllerName() && 'logoff' == $request->getActionName())) { @@ -1533,7 +1542,7 @@ $this->_('System is in maintenance mode')); } } else { - $this->getMessenger()->addMessage($this->_('System is in maintenance mode')); + $this->addMessage($this->_('System is in maintenance mode')); MUtil_Echo::r($this->_('System is in maintenance mode')); } } Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-10-20 12:56:42 UTC (rev 118) +++ trunk/library/languages/default-en.po 2011-10-20 13:30:18 UTC (rev 119) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-20 14:51+0100\n" +"POT-Creation-Date: 2011-10-20 15:30+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -32,44 +32,44 @@ msgid "version" msgstr "version" -#: classes/GemsEscort.php:1410 +#: classes/GemsEscort.php:1419 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:1531 +#: classes/GemsEscort.php:1540 msgid "Please check back later." msgstr "Please check back later." -#: classes/GemsEscort.php:1533 -#: classes/GemsEscort.php:1536 -#: classes/GemsEscort.php:1537 +#: classes/GemsEscort.php:1542 +#: classes/GemsEscort.php:1545 +#: classes/GemsEscort.php:1546 msgid "System is in maintenance mode" msgstr "System is in maintenance mode" -#: classes/GemsEscort.php:1551 +#: classes/GemsEscort.php:1560 msgid "No access to site." msgstr "No access to site." -#: classes/GemsEscort.php:1553 -#: classes/GemsEscort.php:1589 +#: classes/GemsEscort.php:1562 +#: classes/GemsEscort.php:1598 msgid "You have no access to this site." msgstr "You have no access to this site." -#: classes/GemsEscort.php:1569 +#: classes/GemsEscort.php:1578 msgid "No access to page" msgstr "No access to page" -#: classes/GemsEscort.php:1571 +#: classes/GemsEscort.php:1580 #, 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:1576 -#: classes/GemsEscort.php:1587 +#: classes/GemsEscort.php:1585 +#: classes/GemsEscort.php:1596 msgid "You are no longer logged in." msgstr "You are no longer logged in." -#: classes/GemsEscort.php:1577 +#: classes/GemsEscort.php:1586 msgid "You must login to access this page." msgstr "You must login to access this page." @@ -1401,107 +1401,115 @@ msgid "Planning overview" msgstr "Planning overview" -#: classes/Gems/Default/ProjectInformationAction.php:71 +#: classes/Gems/Default/ProjectInformationAction.php:83 msgid "empty file" msgstr "empty file" -#: classes/Gems/Default/ProjectInformationAction.php:75 +#: classes/Gems/Default/ProjectInformationAction.php:87 msgid "file not found" msgstr "file not found" -#: classes/Gems/Default/ProjectInformationAction.php:108 +#: classes/Gems/Default/ProjectInformationAction.php:120 msgid "Logged errors" msgstr "Logged errors" -#: classes/Gems/Default/ProjectInformationAction.php:108 +#: classes/Gems/Default/ProjectInformationAction.php:120 msgid "Empty logfile" msgstr "Empty logfile" -#: classes/Gems/Default/ProjectInformationAction.php:113 +#: classes/Gems/Default/ProjectInformationAction.php:125 msgid "Project information" msgstr "Project information" -#: classes/Gems/Default/ProjectInformationAction.php:117 +#: classes/Gems/Default/ProjectInformationAction.php:129 msgid "Project name" msgstr "Project name" -#: classes/Gems/Default/ProjectInformationAction.php:118 +#: classes/Gems/Default/ProjectInformationAction.php:130 msgid "Project version" msgstr "Project version" -#: classes/Gems/Default/ProjectInformationAction.php:119 +#: classes/Gems/Default/ProjectInformationAction.php:131 msgid "Gems version" msgstr "Gems version" -#: classes/Gems/Default/ProjectInformationAction.php:121 +#: classes/Gems/Default/ProjectInformationAction.php:133 msgid "Gems project" msgstr "Gems project" -#: classes/Gems/Default/ProjectInformationAction.php:122 +#: classes/Gems/Default/ProjectInformationAction.php:134 msgid "Gems web directory" msgstr "Gems web directory" -#: classes/Gems/Default/ProjectInformationAction.php:123 +#: classes/Gems/Default/ProjectInformationAction.php:135 msgid "Gems code directory" msgstr "Gems code directory" -#: classes/Gems/Default/ProjectInformationAction.php:124 +#: classes/Gems/Default/ProjectInformationAction.php:136 msgid "Gems project path" msgstr "Gems project path" -#: classes/Gems/Default/ProjectInformationAction.php:125 +#: classes/Gems/Default/ProjectInformationAction.php:137 msgid "MUtil version" msgstr "MUtil version" -#: classes/Gems/Default/ProjectInformationAction.php:126 +#: classes/Gems/Default/ProjectInformationAction.php:138 msgid "Zend version" msgstr "Zend version" -#: classes/Gems/Default/ProjectInformationAction.php:127 +#: classes/Gems/Default/ProjectInformationAction.php:139 msgid "Application environment" msgstr "Application environment" -#: classes/Gems/Default/ProjectInformationAction.php:128 +#: classes/Gems/Default/ProjectInformationAction.php:140 msgid "Application baseuri" msgstr "Application baseuri" -#: classes/Gems/Default/ProjectInformationAction.php:129 +#: classes/Gems/Default/ProjectInformationAction.php:141 msgid "Application directory" msgstr "Application directory" -#: classes/Gems/Default/ProjectInformationAction.php:130 +#: classes/Gems/Default/ProjectInformationAction.php:142 msgid "PHP version" msgstr "PHP version" -#: classes/Gems/Default/ProjectInformationAction.php:131 +#: classes/Gems/Default/ProjectInformationAction.php:143 msgid "Server Hostname" msgstr "Server Hostname" -#: classes/Gems/Default/ProjectInformationAction.php:132 +#: classes/Gems/Default/ProjectInformationAction.php:144 msgid "Server OS" msgstr "Server OS" -#: classes/Gems/Default/ProjectInformationAction.php:133 +#: classes/Gems/Default/ProjectInformationAction.php:145 msgid "Time on server" msgstr "Time on server" -#: classes/Gems/Default/ProjectInformationAction.php:135 +#: classes/Gems/Default/ProjectInformationAction.php:148 +msgid "Turn Maintenance Mode OFF" +msgstr "Turn Maintenance Mode OFF" + +#: classes/Gems/Default/ProjectInformationAction.php:150 +msgid "Turn Maintenance Mode ON" +msgstr "Turn Maintenance Mode ON" + +#: classes/Gems/Default/ProjectInformationAction.php:159 msgid "Version information" msgstr "Version information" -#: classes/Gems/Default/ProjectInformationAction.php:151 +#: classes/Gems/Default/ProjectInformationAction.php:185 msgid "Server PHP Info" msgstr "Server PHP Info" -#: classes/Gems/Default/ProjectInformationAction.php:164 +#: classes/Gems/Default/ProjectInformationAction.php:198 msgid "Project settings" msgstr "Project settings" -#: classes/Gems/Default/ProjectInformationAction.php:171 +#: classes/Gems/Default/ProjectInformationAction.php:205 msgid "Session content" msgstr "Session content" -#: classes/Gems/Default/ProjectInformationAction.php:172 +#: classes/Gems/Default/ProjectInformationAction.php:206 msgid "Session" msgstr "Session" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-10-20 12:56:42 UTC (rev 118) +++ trunk/library/languages/default-nl.po 2011-10-20 13:30:18 UTC (rev 119) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-20 14:51+0100\n" +"POT-Creation-Date: 2011-10-20 15:30+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -32,44 +32,44 @@ msgid "version" msgstr "versie" -#: classes/GemsEscort.php:1410 +#: classes/GemsEscort.php:1419 msgid "Take note: your session has expired, your inputs where 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." -#: classes/GemsEscort.php:1531 +#: classes/GemsEscort.php:1540 msgid "Please check back later." msgstr "Probeer het later opnieuw." -#: classes/GemsEscort.php:1533 -#: classes/GemsEscort.php:1536 -#: classes/GemsEscort.php:1537 +#: classes/GemsEscort.php:1542 +#: classes/GemsEscort.php:1545 +#: classes/GemsEscort.php:1546 msgid "System is in maintenance mode" msgstr "Systeem is in onderhoudsmodus" -#: classes/GemsEscort.php:1551 +#: classes/GemsEscort.php:1560 msgid "No access to site." msgstr "Geen toegang tot website." -#: classes/GemsEscort.php:1553 -#: classes/GemsEscort.php:1589 +#: classes/GemsEscort.php:1562 +#: classes/GemsEscort.php:1598 msgid "You have no access to this site." msgstr "U heeft geen toegang tot deze website." -#: classes/GemsEscort.php:1569 +#: classes/GemsEscort.php:1578 msgid "No access to page" msgstr "Geen toegang tot pagina" -#: classes/GemsEscort.php:1571 +#: classes/GemsEscort.php:1580 #, 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:1576 -#: classes/GemsEscort.php:1587 +#: classes/GemsEscort.php:1585 +#: classes/GemsEscort.php:1596 msgid "You are no longer logged in." msgstr "U bent niet meer ingelogd." -#: classes/GemsEscort.php:1577 +#: classes/GemsEscort.php:1586 msgid "You must login to access this page." msgstr "U moet ingelogd zijn voor toegang tot deze pagina." @@ -1401,107 +1401,115 @@ msgid "Planning overview" msgstr "Planning overzicht" -#: classes/Gems/Default/ProjectInformationAction.php:71 +#: classes/Gems/Default/ProjectInformationAction.php:83 msgid "empty file" msgstr "leeg bestand" -#: classes/Gems/Default/ProjectInformationAction.php:75 +#: classes/Gems/Default/ProjectInformationAction.php:87 msgid "file not found" msgstr "bestand niet gevonden" -#: classes/Gems/Default/ProjectInformationAction.php:108 +#: classes/Gems/Default/ProjectInformationAction.php:120 msgid "Logged errors" msgstr "Opgeslagen foutmeldingen" -#: classes/Gems/Default/ProjectInformationAction.php:108 +#: classes/Gems/Default/ProjectInformationAction.php:120 msgid "Empty logfile" msgstr "Verwijder alle foutmeldingen" -#: classes/Gems/Default/ProjectInformationAction.php:113 +#: classes/Gems/Default/ProjectInformationAction.php:125 msgid "Project information" msgstr "Project informatie" -#: classes/Gems/Default/ProjectInformationAction.php:117 +#: classes/Gems/Default/ProjectInformationAction.php:129 msgid "Project name" msgstr "Project naam" -#: classes/Gems/Default/ProjectInformationAction.php:118 +#: classes/Gems/Default/ProjectInformationAction.php:130 msgid "Project version" msgstr "Project versie" -#: classes/Gems/Default/ProjectInformationAction.php:119 +#: classes/Gems/Default/ProjectInformationAction.php:131 msgid "Gems version" msgstr "Gems versie" -#: classes/Gems/Default/ProjectInformationAction.php:121 +#: classes/Gems/Default/ProjectInformationAction.php:133 msgid "Gems project" msgstr "Gems project" -#: classes/Gems/Default/ProjectInformationAction.php:122 +#: classes/Gems/Default/ProjectInformationAction.php:134 msgid "Gems web directory" msgstr "Gems web folder" -#: classes/Gems/Default/ProjectInformationAction.php:123 +#: classes/Gems/Default/ProjectInformationAction.php:135 msgid "Gems code directory" msgstr "Gems code folder" -#: classes/Gems/Default/ProjectInformationAction.php:124 +#: classes/Gems/Default/ProjectInformationAction.php:136 msgid "Gems project path" msgstr "Gems project folder" -#: classes/Gems/Default/ProjectInformationAction.php:125 +#: classes/Gems/Default/ProjectInformationAction.php:137 msgid "MUtil version" msgstr "MUtil versie" -#: classes/Gems/Default/ProjectInformationAction.php:126 +#: classes/Gems/Default/ProjectInformationAction.php:138 msgid "Zend version" msgstr "Zend versie" -#: classes/Gems/Default/ProjectInformationAction.php:127 +#: classes/Gems/Default/ProjectInformationAction.php:139 msgid "Application environment" msgstr "Applicatie omgeving" -#: classes/Gems/Default/ProjectInformationAction.php:128 +#: classes/Gems/Default/ProjectInformationAction.php:140 msgid "Application baseuri" msgstr "Applicatie baseuri" -#: classes/Gems/Default/ProjectInformationAction.php:129 +#: classes/Gems/Default/ProjectInformationAction.php:141 msgid "Application directory" msgstr "Applicatie folder" -#: classes/Gems/Default/ProjectInformationAction.php:130 +#: classes/Gems/Default/ProjectInformationAction.php:142 msgid "PHP version" msgstr "PHP versie" -#: classes/Gems/Default/ProjectInformationAction.php:131 +#: classes/Gems/Default/ProjectInformationAction.php:143 msgid "Server Hostname" msgstr "Webserver naam" -#: classes/Gems/Default/ProjectInformationAction.php:132 +#: classes/Gems/Default/ProjectInformationAction.php:144 msgid "Server OS" msgstr "Server besturingssysteem" -#: classes/Gems/Default/ProjectInformationAction.php:133 +#: classes/Gems/Default/ProjectInformationAction.php:145 msgid "Time on server" msgstr "De tijd op de server" -#: classes/Gems/Default/ProjectInformationAction.php:135 +#: classes/Gems/Default/ProjectInformationAction.php:148 +msgid "Turn Maintenance Mode OFF" +msgstr "Onderhoudsmodus UITzetten" + +#: classes/Gems/Default/ProjectInformationAction.php:150 +msgid "Turn Maintenance Mode ON" +msgstr "Onderhoudsmodus AANzetten" + +#: classes/Gems/Default/ProjectInformationAction.php:159 msgid "Version information" msgstr "Versie informatie" -#: classes/Gems/Default/ProjectInformationAction.php:151 +#: classes/Gems/Default/ProjectInformationAction.php:185 msgid "Server PHP Info" msgstr "Server PHP Info" -#: classes/Gems/Default/ProjectInformationAction.php:164 +#: classes/Gems/Default/ProjectInformationAction.php:198 msgid "Project settings" msgstr "Project instellingen" -#: classes/Gems/Default/ProjectInformationAction.php:171 +#: classes/Gems/Default/ProjectInformationAction.php:205 msgid "Session content" msgstr "Sessie inhoud" -#: classes/Gems/Default/ProjectInformationAction.php:172 +#: classes/Gems/Default/ProjectInformationAction.php:206 msgid "Session" msgstr "Sessie" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-20 16:03:41
|
Revision: 122 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=122&view=rev Author: matijsdejong Date: 2011-10-20 16:03:30 +0000 (Thu, 20 Oct 2011) Log Message: ----------- Continued on ModelSnippetAction (#10): removed functional extension, added the text marker interface and fixed the Echo output. Fixed several roles that I forgot to add for mail activities. Modified Paths: -------------- trunk/library/classes/Gems/Default/MailLogAction.php trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__roles.20.sql trunk/library/controllers/MailLogController.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 trunk/library/snippets/Generic/ModelItemTableSnippet.php trunk/library/snippets/Generic/ModelTableSnippet.php Added Paths: ----------- trunk/library/classes/Gems/Snippets/ModelTableSnippetGeneric.php trunk/library/snippets/Mail/ trunk/library/snippets/Mail/Log/ trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php Removed Paths: ------------- trunk/library/classes/Gems/Default/MailLogActionOldStyle.php Modified: trunk/library/classes/Gems/Default/MailLogAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailLogAction.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/Gems/Default/MailLogAction.php 2011-10-20 16:03:30 UTC (rev 122) @@ -37,10 +37,8 @@ */ /** - * Short description for class + * Controller for looking at mail activity * - * Long description for class (if any)... - * * @package Gems * @subpackage Default * @copyright Copyright (c) 2011 Erasmus MC @@ -50,28 +48,12 @@ class Gems_Default_MailLogAction extends Gems_Controller_ModelSnippetActionAbstract { /** - * Adds columns from the model to the bridge that creates the browse table. + * The snippets used for the autofilter action. * - * Adds a button column to the model, if such a button exists in the model. - * - * @param MUtil_Model_TableBridge $bridge - * @param MUtil_Model_ModelAbstract $model - * @rturn void + * @var mixed String or array of snippets name */ - public function addTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) - { - if ($menuItem = $this->firstAllowedMenuItem('show')) { - $bridge->addItemLink($menuItem->toActionLinkLower($this->getRequest(), $bridge)); - } + protected $autofilterSnippets = 'Mail_Log_MailLogBrowseSnippet'; - // Newline placeholder - $br = MUtil_Html::create('br'); - - $bridge->addMultiSort('grco_created', $br, 'respondent_name', $br, 'grco_address'); - $bridge->addMultiSort('grco_id_token', $br, 'assigned_by', $br, 'grco_sender'); - $bridge->addMultiSort('grco_topic'); - } - /** * The automatically filtered result */ @@ -79,7 +61,6 @@ { $filter = array('grco_organization' => $this->escort->getCurrentOrganization()); - $this->autofilterParameters['addTableColumns'] = array($this, 'addTableColumns'); $this->autofilterParameters['extraFilter'] = $filter; $this->autofilterParameters['extraSort'] = array('grco_created' => SORT_DESC); @@ -147,7 +128,6 @@ { $this->html->h3($this->_('Mail Activity Log')); - // MUtil_Echo::track($this->indexParameters); parent::indexAction(); } Deleted: trunk/library/classes/Gems/Default/MailLogActionOldStyle.php =================================================================== --- trunk/library/classes/Gems/Default/MailLogActionOldStyle.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/Gems/Default/MailLogActionOldStyle.php 2011-10-20 16:03:30 UTC (rev 122) @@ -1,150 +0,0 @@ -<?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. - * - * Short description of file - * - * @package Gems - * @subpackage Default - * @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 $ - */ - -/** - * Temprary class until Gems_Controller_ModelSnippetActionAbstract works - * - * @package Gems - * @subpackage Default - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @since Class available since version 1.4.2 - */ -class Gems_Default_MailLogActionOldStyle extends Gems_Controller_BrowseEditAction -{ - public $sortKey = array('grco_created' => SORT_DESC); - - /** - * Adds columns from the model to the bridge that creates the browse table. - * - * Adds a button column to the model, if such a button exists in the model. - * - * @param MUtil_Model_TableBridge $bridge - * @param MUtil_Model_ModelAbstract $model - * @rturn void - */ - protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) - { - if ($menuItem = $this->findAllowedMenuItem('show')) { - $bridge->addItemLink($menuItem->toActionLinkLower($this->getRequest(), $bridge)); - } - - // Newline placeholder - $br = MUtil_Html::create('br'); - - $bridge->addMultiSort('grco_created', $br, 'respondent_name', $br, 'grco_address'); - $bridge->addMultiSort('grco_id_token', $br, 'assigned_by', $br, 'grco_sender'); - $bridge->addMultiSort('grco_topic'); - } - - /** - * Creates a model for getModel(). Called only for each new $action. - * - * The parameters allow you to easily adapt the model to the current action. The $detailed - * parameter was added, because the most common use of action is a split between detailed - * and summarized actions. - * - * @param boolean $detailed True when the current action is not in $summarizedActions. - * @param string $action The current action. - * @return MUtil_Model_ModelAbstract - */ - public function createModel($detailed, $action) - { - $model = new Gems_Model_JoinModel('maillog', 'gems__log_respondent_communications'); - - $model->addLeftTable('gems__respondents', array('grco_id_to' => 'grs_id_user')); - $model->addLeftTable('gems__staff', array('grco_id_by' => 'gsf_id_user')); - $model->addLeftTable('gems__mail_templates', array('grco_id_message' => 'gmt_id_message')); - - $model->addColumn( - "TRIM(CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, '')))", - 'respondent_name'); - $model->addColumn( - "CASE WHEN gems__staff.gsf_id_user IS NULL - THEN '-' - ELSE - CONCAT( - COALESCE(gems__staff.gsf_last_name, ''), - ', ', - COALESCE(gems__staff.gsf_first_name, ''), - COALESCE(CONCAT(' ', gems__staff.gsf_surname_prefix), '') - ) - END", - 'assigned_by'); - - $model->resetOrder(); - - $model->set('grco_created', 'label', $this->_('Date sent')); - $model->set('respondent_name', 'label', $this->_('Receiver')); - $model->set('grco_address', 'label', $this->_('To address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); - $model->set('assigned_by', 'label', $this->_('Sender')); - $model->set('grco_sender', 'label', $this->_('From address'), 'itemDisplay', 'MUtil_Html_AElement::ifmail'); - $model->set('grco_id_token', 'label', $this->_('Token')); - $model->set('grco_topic', 'label', $this->_('Subject')); - - if ($detailed) { - $model->set('gmt_subject', 'label', $this->_('Template')); - } else { - $model->set('grco_created', 'formatFunction', $this->util->getTranslated()->formatDate); - } - - return $model; - } - - /** - * Helper function to allow generalized statements about the items in the model. - * - * @param int $count - * @return $string - */ - public function getTopic($count = 1) - { - return $this->plural('Activity Log', 'Activity Logs', $count); - } - - - /** - * Helper function to allow generalized treatment of the header. - * - * return $string - */ - public function getTopicTitle() - { - return $this->_('Mail Activity Log'); - } -} Modified: trunk/library/classes/Gems/Menu/MenuAbstract.php =================================================================== --- trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-20 16:03:30 UTC (rev 122) @@ -230,7 +230,7 @@ // MAIL ACTIVITY CONTROLLER //$setup->addBrowsePage(); - $page = $setup->addPage($this->_('Activity'), 'pr.mail.log', 'mail-log'); + $page = $setup->addPage($this->_('Activity log'), 'pr.mail.log', 'mail-log'); $page->addAutofilterAction(); $page->addExcelAction(); $page->addShowAction(); Modified: trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-10-20 16:03:30 UTC (rev 122) @@ -103,6 +103,24 @@ protected $sortParamDesc = 'dsrt'; /** + * Adds columns from the model to the bridge that creates the browse table. + * + * Overrule this function to add different columns to the browse table, without + * having to recode the core table building code. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @return void + */ + protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) + { + // make sure search results are highlighted + $this->applyTextMarker(); + + return parent::addBrowseTableColumns($bridge, $model); + } + + /** * Add the paginator panel to the table. * * Only called when $this->browse is true. Overrule this function @@ -116,6 +134,30 @@ } /** + * Make sure generic search text results are marked + * + * @return void + */ + protected function applyTextMarker() + { + $model = $this->getModel(); + + $textKey = $model->getTextFilter(); + $filter = $model->getFilter(); + + if (isset($filter[$textKey])) { + $searchText = $filter[$textKey]; + // MUtil_Echo::r('[' . $searchText . ']'); + $marker = new MUtil_Html_Marker($model->getTextSearches($searchText), 'strong', 'UTF-8'); + foreach ($model->getItemNames() as $name) { + if ($model->get($name, 'label')) { + $model->set($name, 'markCallback', array($marker, 'mark')); + } + } + } + } + + /** * Should be called after answering the request to allow the Target * to check if all required registry values have been set correctly. * @@ -204,7 +246,7 @@ $data = $this->requestCache->getProgramParams(); $model->applyParameters($data); - + } else { parent::processFilterAndSort($model); } Copied: trunk/library/classes/Gems/Snippets/ModelTableSnippetGeneric.php (from rev 114, trunk/library/snippets/Generic/ModelTableSnippet.php) =================================================================== --- trunk/library/classes/Gems/Snippets/ModelTableSnippetGeneric.php (rev 0) +++ trunk/library/classes/Gems/Snippets/ModelTableSnippetGeneric.php 2011-10-20 16:03:30 UTC (rev 122) @@ -0,0 +1,94 @@ +<?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 MUtil + * @subpackage Snippets + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * Displays multiple items from a model in a tabel by row using + * the model set through the $model snippet parameter. + * + * If you want to use this class "as is" use the 'Generic_ModelTableSnippet' snippet. + * + * This class is not in the standard snippet loading directories and does not follow + * their naming conventions, but exists only to make it simple to extend this class + * for a specific implementation. + * + * @package MUtil + * @subpackage Snippets + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.4 + */ +class Gems_Snippets_ModelTableSnippetGeneric extends Gems_Snippets_ModelTableSnippetAbstract +{ + /** + * + * @var MUtil_Model_ModelAbstract + */ + protected $model; + + /** + * + * @var Gems_Util + */ + protected $util; + + /** + * Automatically add request cacge + * + * Should be called after answering the request to allow the Target + * to check if all required registry values have been set correctly. + * + * @return boolean False if required are missing. + */ + public function checkRegistryRequestsAnswers() + { + if ($this->util && (! $this->requestCache)) { + $this->requestCache = $this->util->getRequestCache(); + } + + return parent::checkRegistryRequestsAnswers(); + } + + /** + * Creates the model + * + * @return MUtil_Model_ModelAbstract + */ + protected function createModel() + { + return $this->model; + } +} Modified: trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php =================================================================== --- trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-10-20 16:03:30 UTC (rev 122) @@ -98,6 +98,19 @@ protected $showSnippets = 'ModelVerticalTableSnippet'; /** + * Array of the actions that use a summarized version of the model. + * + * This determines the value of $detailed in createAction(). As it is usually + * less of a problem to use a $detailed model with an action that should use + * a summarized model and I guess there will usually be more detailed actions + * than summarized ones it seems less work to specify these. + * + * @var array $summarizedActions Array of the actions that use a + * summarized version of the model. + */ + public $summarizedActions = array('index', 'autofilter'); + + /** * Set the action key in request * * Use this when an action is a Ajax action for retrieving @@ -137,7 +150,9 @@ } if ($resetMvc && MUtil_Echo::hasOutput()) { - $this->html->raw(MUtil_Echo::out()); + // Lazy call here, because any echo calls in the snippets have not yet been + // performed. so they will appear only in the next call when not lazy. + $this->html->raw(MUtil_Lazy::call(array('MUtil_Echo', 'out'))); } } Modified: trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php =================================================================== --- trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/classes/MUtil/Snippets/ModelTableSnippetAbstract.php 2011-10-20 16:03:30 UTC (rev 122) @@ -57,13 +57,6 @@ protected $_marker; /** - * Functional extension: optionally use this function to add the browse columns - * - * @var callable With signature: function(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model, MUtil_Snippets_ModelTableSnippetAbstract $snippet) - */ - public $addTableColumns; - - /** * Url parts added to each link in the resulting table * * @var array @@ -171,11 +164,7 @@ $bridge->setBaseUrl($this->baseUrl); } - if (is_callable($this->addTableColumns)) { - call_user_func($this->addTableColumns, $bridge, $model, $this); - } else { - $this->addBrowseTableColumns($bridge, $model); - } + $this->addBrowseTableColumns($bridge, $model); return $bridge->getTable(); } Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/configs/db/patches.sql 2011-10-20 16:03:30 UTC (rev 122) @@ -208,3 +208,6 @@ UPDATE gems__roles SET grl_privileges = CONCAT(grl_privileges,',pr.maintenance') WHERE grl_name = 'super' AND grl_privileges NOT LIKE '%pr.maintenance%'; -- GEMS VERSION: 42 +-- PATCH: Add mail actions to admin role +UPDATE gems__roles SET grl_privileges = CONCAT(grl_privileges, ',pr.mail.log') WHERE grl_name = 'admin' AND grl_privileges NOT LIKE '%pr.mail.log%'; +UPDATE gems__roles SET grl_privileges = CONCAT(grl_privileges, ',pr.mail.server,pr.mail.server.create,pr.mail.server.delete,pr.mail.server.edit') WHERE grl_name = 'super' AND grl_privileges NOT LIKE '%pr.mail.server%'; Modified: trunk/library/configs/db/tables/gems__roles.20.sql =================================================================== --- trunk/library/configs/db/tables/gems__roles.20.sql 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/configs/db/tables/gems__roles.20.sql 2011-10-20 16:03:30 UTC (rev 122) @@ -32,5 +32,5 @@ ('staff','staff','pr.option.edit,pr.option.password,pr.plan,pr.plan.overview,pr.plan.token,pr.project,pr.project.questions,pr.respondent.create,pr.respondent.edit,pr.respondent.who,pr.setup,pr.staff,pr.survey,pr.survey.create,pr.token,pr.token.answers,pr.token.delete,pr.token.edit,pr.token.mail,pr.token.print,pr.track,pr.track.create,pr.track.delete,pr.track.edit,pr.respondent.reportdeath','guest', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1), ('physician','physician','','staff', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1), ('researcher','researcher','pr.invitation,pr.result,pr.islogin','', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1), - ('admin','admin','pr.consent,pr.consent.create,pr.consent.edit,pr.group,pr.role,pr.mail,pr.mail.create,pr.mail.delete,pr.mail.edit,pr.organization,pr.organization-switch,pr.plan.overview.excel,pr.plan.respondent,pr.plan.respondent.excel,pr.plan.token.excel,pr.project-information,pr.reception,pr.reception.create,pr.reception.edit,pr.respondent.choose-org,pr.respondent.delete,pr.respondent.result,pr.source,pr.staff.create,pr.staff.delete,pr.staff.edit,pr.staff.see.all,pr.survey-maintenance,pr.track-maintenance,pr.token.mail.freetext','staff,researcher,security', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1), - ('super','super','pr.consent.delete,pr.country,pr.country.create,pr.country.delete,pr.country.edit,pr.database,pr.database.create,pr.database.delete,pr.database.edit,pr.database.execute,pr.database.patches,pr.group.create,pr.group.edit,pr.role.create,pr.role.edit,pr.language,pr.organization.create,pr.organization.edit,pr.plan.choose-org,pr.plan.mail-as-application,pr.reception.delete,pr.source.create,pr.source.edit,pr.source.synchronize,pr.source.synchronize-all,pr.staff.edit.all,pr.survey-maintenance.edit,pr.track-maintenance.create,pr.track-maintenance.edit,pr.maintenance','admin', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1); + ('admin','admin','pr.consent,pr.consent.create,pr.consent.edit,pr.group,pr.role,pr.mail,pr.mail.create,pr.mail.delete,pr.mail.edit,pr.mail.log,pr.organization,pr.organization-switch,pr.plan.overview.excel,pr.plan.respondent,pr.plan.respondent.excel,pr.plan.token.excel,pr.project-information,pr.reception,pr.reception.create,pr.reception.edit,pr.respondent.choose-org,pr.respondent.delete,pr.respondent.result,pr.source,pr.staff.create,pr.staff.delete,pr.staff.edit,pr.staff.see.all,pr.survey-maintenance,pr.track-maintenance,pr.token.mail.freetext','staff,researcher,security', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1), + ('super','super','pr.consent.delete,pr.country,pr.country.create,pr.country.delete,pr.country.edit,pr.database,pr.database.create,pr.database.delete,pr.database.edit,pr.database.execute,pr.database.patches,pr.group.create,pr.group.edit,pr.language,pr.mail.server,pr.mail.server.create,pr.mail.server.delete,pr.mail.server.edit,pr.organization.create,pr.organization.edit,pr.plan.choose-org,pr.plan.mail-as-application,pr.reception.delete,pr.role.create,pr.role.edit,pr.source.create,pr.source.edit,pr.source.synchronize,pr.source.synchronize-all,pr.staff.edit.all,pr.survey-maintenance.edit,pr.track-maintenance.create,pr.track-maintenance.edit,pr.maintenance','admin', CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 1); Modified: trunk/library/controllers/MailLogController.php =================================================================== --- trunk/library/controllers/MailLogController.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/controllers/MailLogController.php 2011-10-20 16:03:30 UTC (rev 122) @@ -42,6 +42,5 @@ * @license New BSD License * @since Class available since version 1.4.2 */ -class MailLogController extends Gems_Default_MailLogActionOldStyle -{ -} +class MailLogController extends Gems_Default_MailLogAction +{ } Modified: trunk/library/languages/default-en.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-en.po =================================================================== --- trunk/library/languages/default-en.po 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/languages/default-en.po 2011-10-20 16:03:30 UTC (rev 122) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-20 15:30+0100\n" +"POT-Creation-Date: 2011-10-20 17:52+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -1151,8 +1151,7 @@ msgstr "Log maintenance" #: classes/Gems/Default/MailAction.php:61 -#: classes/Gems/Default/MailLogAction.php:132 -#: classes/Gems/Default/MailLogActionOldStyle.php:118 +#: classes/Gems/Default/MailLogAction.php:113 msgid "Subject" msgstr "Subject" @@ -1170,51 +1169,38 @@ msgid "Email templates" msgstr "Email templates" -#: classes/Gems/Default/MailLogAction.php:126 -#: classes/Gems/Default/MailLogActionOldStyle.php:112 +#: classes/Gems/Default/MailLogAction.php:107 msgid "Date sent" msgstr "Date sent" -#: classes/Gems/Default/MailLogAction.php:127 -#: classes/Gems/Default/MailLogActionOldStyle.php:113 +#: classes/Gems/Default/MailLogAction.php:108 msgid "Receiver" msgstr "Receiver" -#: classes/Gems/Default/MailLogAction.php:128 -#: classes/Gems/Default/MailLogActionOldStyle.php:114 +#: classes/Gems/Default/MailLogAction.php:109 msgid "To address" msgstr "To address" -#: classes/Gems/Default/MailLogAction.php:129 -#: classes/Gems/Default/MailLogActionOldStyle.php:115 +#: classes/Gems/Default/MailLogAction.php:110 msgid "Sender" msgstr "Sender" -#: classes/Gems/Default/MailLogAction.php:130 -#: classes/Gems/Default/MailLogActionOldStyle.php:116 +#: classes/Gems/Default/MailLogAction.php:111 msgid "From address" msgstr "From address" -#: classes/Gems/Default/MailLogAction.php:135 -#: classes/Gems/Default/MailLogActionOldStyle.php:121 +#: classes/Gems/Default/MailLogAction.php:116 msgid "Template" msgstr "Template" -#: classes/Gems/Default/MailLogAction.php:148 -#: classes/Gems/Default/MailLogActionOldStyle.php:148 +#: classes/Gems/Default/MailLogAction.php:129 msgid "Mail Activity Log" msgstr "Mail Activity Log" -#: classes/Gems/Default/MailLogAction.php:160 +#: classes/Gems/Default/MailLogAction.php:140 msgid "Show Mail Activity Log item" msgstr "Show Mail Activity Log item" -#: classes/Gems/Default/MailLogActionOldStyle.php:137 -msgid "Activity Log" -msgid_plural "Activity Logs" -msgstr[0] "Activity Log" -msgstr[1] "Activity Logs" - #: classes/Gems/Default/MailServerAction.php:68 msgid "From address [part]" msgstr "From address [part]" @@ -1256,6 +1242,8 @@ msgstr "User ID" #: classes/Gems/Default/MailServerAction.php:90 +#: classes/Gems/Default/OptionAction.php:107 +#: classes/Gems/Default/OptionAction.php:112 msgid "Repeat password" msgstr "Repeat password" @@ -1274,14 +1262,10 @@ msgstr "Email servers" #: classes/Gems/Default/OptionAction.php:73 -#: classes/Gems/Default/OrganizationAction.php:128 -#: classes/Gems/Default/RespondentAction.php:173 -#: classes/Gems/Default/StaffAction.php:188 msgid "Language" msgstr "Language" #: classes/Gems/Default/OptionAction.php:74 -#: classes/Gems/Default/StaffAction.php:189 msgid "Logout on survey" msgstr "Logout on survey" @@ -1568,6 +1552,7 @@ msgstr "Survey not specified." #: classes/Gems/Default/ProjectTracksAction.php:120 +#: classes/Gems/Default/TrackActionAbstract.php:479 #, php-format msgid "Track %s does not exist." msgstr "Track %s does not exist." @@ -2515,8 +2500,8 @@ msgstr "Some help for this export" #: classes/Gems/Menu/MenuAbstract.php:233 -msgid "Activity" -msgstr "Activity" +msgid "Activity log" +msgstr "Activity Log" #: classes/Gems/Menu/MenuAbstract.php:239 msgid "Servers" @@ -3564,6 +3549,9 @@ msgid "This track can be assigned since %s." msgstr "This track can be assigned since %s." +#~ msgid "Activity" +#~ msgstr "Activity" + #~ msgid "DB Adaptor" #~ msgstr "DB Adaptor" Modified: trunk/library/languages/default-nl.mo =================================================================== (Binary files differ) Modified: trunk/library/languages/default-nl.po =================================================================== --- trunk/library/languages/default-nl.po 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/languages/default-nl.po 2011-10-20 16:03:30 UTC (rev 122) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-20 15:30+0100\n" +"POT-Creation-Date: 2011-10-20 17:53+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -1151,8 +1151,7 @@ msgstr "Logboek onderhoud" #: classes/Gems/Default/MailAction.php:61 -#: classes/Gems/Default/MailLogAction.php:132 -#: classes/Gems/Default/MailLogActionOldStyle.php:118 +#: classes/Gems/Default/MailLogAction.php:113 msgid "Subject" msgstr "Onderwerp" @@ -1170,51 +1169,38 @@ msgid "Email templates" msgstr "Email sjabloon" -#: classes/Gems/Default/MailLogAction.php:126 -#: classes/Gems/Default/MailLogActionOldStyle.php:112 +#: classes/Gems/Default/MailLogAction.php:107 msgid "Date sent" msgstr "Verzend datum" -#: classes/Gems/Default/MailLogAction.php:127 -#: classes/Gems/Default/MailLogActionOldStyle.php:113 +#: classes/Gems/Default/MailLogAction.php:108 msgid "Receiver" msgstr "Ontvanger" -#: classes/Gems/Default/MailLogAction.php:128 -#: classes/Gems/Default/MailLogActionOldStyle.php:114 +#: classes/Gems/Default/MailLogAction.php:109 msgid "To address" msgstr "Adres aan" -#: classes/Gems/Default/MailLogAction.php:129 -#: classes/Gems/Default/MailLogActionOldStyle.php:115 +#: classes/Gems/Default/MailLogAction.php:110 msgid "Sender" msgstr "Verzender" -#: classes/Gems/Default/MailLogAction.php:130 -#: classes/Gems/Default/MailLogActionOldStyle.php:116 +#: classes/Gems/Default/MailLogAction.php:111 msgid "From address" msgstr "Adres van" -#: classes/Gems/Default/MailLogAction.php:135 -#: classes/Gems/Default/MailLogActionOldStyle.php:121 +#: classes/Gems/Default/MailLogAction.php:116 msgid "Template" msgstr "Sjabloon" -#: classes/Gems/Default/MailLogAction.php:148 -#: classes/Gems/Default/MailLogActionOldStyle.php:148 +#: classes/Gems/Default/MailLogAction.php:129 msgid "Mail Activity Log" msgstr "Logboek Mail Activiteit" -#: classes/Gems/Default/MailLogAction.php:160 +#: classes/Gems/Default/MailLogAction.php:140 msgid "Show Mail Activity Log item" msgstr "Toon Logboek Mail item" -#: classes/Gems/Default/MailLogActionOldStyle.php:137 -msgid "Activity Log" -msgid_plural "Activity Logs" -msgstr[0] "Mail Activiteit Log" -msgstr[1] "Mail Activiteiten Logs" - #: classes/Gems/Default/MailServerAction.php:68 msgid "From address [part]" msgstr "Vanaf adres [gedeelte]" @@ -1256,6 +1242,8 @@ msgstr "Gebruikers ID" #: classes/Gems/Default/MailServerAction.php:90 +#: classes/Gems/Default/OptionAction.php:107 +#: classes/Gems/Default/OptionAction.php:112 msgid "Repeat password" msgstr "Herhaal wachtwoord" @@ -1274,14 +1262,10 @@ msgstr "Email servers" #: classes/Gems/Default/OptionAction.php:73 -#: classes/Gems/Default/OrganizationAction.php:128 -#: classes/Gems/Default/RespondentAction.php:173 -#: classes/Gems/Default/StaffAction.php:188 msgid "Language" msgstr "Taal" #: classes/Gems/Default/OptionAction.php:74 -#: classes/Gems/Default/StaffAction.php:189 msgid "Logout on survey" msgstr "Logout bij beantwoorden vragenlijst" @@ -1568,6 +1552,7 @@ msgstr "Vragenlijst niet opgegeven." #: classes/Gems/Default/ProjectTracksAction.php:120 +#: classes/Gems/Default/TrackActionAbstract.php:479 #, php-format msgid "Track %s does not exist." msgstr "Trajectnummer %s bestaat niet." @@ -2515,7 +2500,7 @@ msgstr "Uitleg over deze export mogelijkheid" #: classes/Gems/Menu/MenuAbstract.php:233 -msgid "Activity" +msgid "Activity log" msgstr "Activiteit" #: classes/Gems/Menu/MenuAbstract.php:239 @@ -3564,6 +3549,9 @@ msgid "This track can be assigned since %s." msgstr "Dit traject kan sinds %s aan een patiënt toegewezen worden." +#~ msgid "Activity" +#~ msgstr "Activiteit" + #~ msgid "DB Adaptor" #~ msgstr "DB Adaptor" Modified: trunk/library/snippets/Generic/ModelItemTableSnippet.php =================================================================== --- trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-10-20 16:03:30 UTC (rev 122) @@ -108,7 +108,7 @@ $menuList = $this->menu->getMenuList(); $menuList->addParameterSources($bridge) - ->addByController($controller) + ->addByController($controller, 'index', $this->_('Cancel')) ->addByController($controller, 'edit') ->addByController($controller, 'delete'); Modified: trunk/library/snippets/Generic/ModelTableSnippet.php =================================================================== --- trunk/library/snippets/Generic/ModelTableSnippet.php 2011-10-20 14:12:29 UTC (rev 121) +++ trunk/library/snippets/Generic/ModelTableSnippet.php 2011-10-20 16:03:30 UTC (rev 122) @@ -39,50 +39,13 @@ * Displays multiple items from a model in a tabel by row using * the model set through the $model snippet parameter. * + * Usage snippet for Gems_Snippets_ModelTableSnippetGeneric + * * @package MUtil * @subpackage Snippets * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @since Class available since version 1.2 + * @since Class available since version 1.4 */ -class Generic_ModelTableSnippet extends Gems_Snippets_ModelTableSnippetAbstract -{ - /** - * - * @var MUtil_Model_ModelAbstract - */ - protected $model; - - /** - * - * @var Gems_Util - */ - protected $util; - - /** - * Automatically add request cacge - * - * Should be called after answering the request to allow the Target - * to check if all required registry values have been set correctly. - * - * @return boolean False if required are missing. - */ - public function checkRegistryRequestsAnswers() - { - if ($this->util && (! $this->requestCache)) { - $this->requestCache = $this->util->getRequestCache(); - } - - return parent::checkRegistryRequestsAnswers(); - } - - /** - * Creates the model - * - * @return MUtil_Model_ModelAbstract - */ - protected function createModel() - { - return $this->model; - } -} +class Generic_ModelTableSnippet extends Gems_Snippets_ModelTableSnippetGeneric +{ } Property changes on: trunk/library/snippets/Mail ___________________________________________________________________ Added: bugtraq:url + http://survey.erasmusmc.nl/support/mantis/view.php?id=%BUGID% Added: bugtraq:number + true Added: bugtraq:logregex + #(\d+) Property changes on: trunk/library/snippets/Mail/Log ___________________________________________________________________ Added: bugtraq:url + http://survey.erasmusmc.nl/support/mantis/view.php?id=%BUGID% Added: bugtraq:number + true Added: bugtraq:logregex + #(\d+) Added: trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php =================================================================== --- trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php (rev 0) +++ trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php 2011-10-20 16:03:30 UTC (rev 122) @@ -0,0 +1,76 @@ +<?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 <COPYRIGHT HOLDER> 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 Snippets + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * Add complex column layout to display. + * + * + * @package Gems + * @subpackage Snippets + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.4 + */ +class Mail_Log_MailLogBrowseSnippet extends Gems_Snippets_ModelTableSnippetGeneric +{ + /** + * Adds columns from the model to the bridge that creates the browse table. + * + * Overrule this function to add different columns to the browse table, without + * having to recode the core table building code. + * + * @param MUtil_Model_TableBridge $bridge + * @param MUtil_Model_ModelAbstract $model + * @return void + */ + protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) + { + if ($menuItem = $this->findMenuItem($this->request->getControllerName(), 'show')) { + $bridge->addItemLink($menuItem->toActionLinkLower($this->request, $bridge)); + } + + // Newline placeholder + $br = MUtil_Html::create('br'); + + // make sure search results are highlighted + $this->applyTextMarker(); + + $bridge->addMultiSort('grco_created', $br, 'respondent_name', $br, 'grco_address'); + $bridge->addMultiSort('grco_id_token', $br, 'assigned_by', $br, 'grco_sender'); + $bridge->addMultiSort('grco_topic'); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-10-24 10:20:34
|
Revision: 127 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=127&view=rev Author: matijsdejong Date: 2011-10-24 10:20:26 +0000 (Mon, 24 Oct 2011) Log Message: ----------- Renamed MailController to MailTemplateController Snippet based browse edit replacement #10 and mails configurable from interface #29 are done, except for removing items and the mail jobs are not yet used. Bug #18 is corrected. Modified Paths: -------------- trunk/library/changelog.txt trunk/library/classes/Gems/Menu/MenuAbstract.php trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php trunk/library/configs/db/tables/gems__mail_jobs.300.sql trunk/library/snippets/Generic/ModelItemTableSnippet.php trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php Added Paths: ----------- trunk/library/classes/Gems/Default/MailJobAction.php trunk/library/classes/Gems/Default/MailTemplateAction.php trunk/library/controllers/MailJobController.php trunk/library/controllers/MailTemplateController.php Removed Paths: ------------- trunk/library/classes/Gems/Default/MailAction.php trunk/library/controllers/MailController.php Modified: trunk/library/changelog.txt =================================================================== --- trunk/library/changelog.txt 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/changelog.txt 2011-10-24 10:20:26 UTC (rev 127) @@ -1,3 +1,7 @@ +Important changes from 1.4.3 => 1.5 +============================================================ +MailController is now claaed MailTemplateController + Important changes from 1.4.2 => 1.4.3 ============================================================ * gtr_organisations renamed to gtr_organizations Deleted: trunk/library/classes/Gems/Default/MailAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailAction.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/Gems/Default/MailAction.php 2011-10-24 10:20:26 UTC (rev 127) @@ -1,130 +0,0 @@ -<?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 Default - * @author Matijs de Jong <mj...@ma...> - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @version $Id$ - */ - -/** - * - * @package Gems - * @subpackage Default - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @since Class available since version 1.1 - */ -class Gems_Default_MailAction extends Gems_Controller_BrowseEditAction -{ - /** - * Creates a model for getModel(). Called only for each new $action. - * - * The parameters allow you to easily adapt the model to the current action. The $detailed - * parameter was added, because the most common use of action is a split between detailed - * and summarized actions. - * - * @param boolean $detailed True when the current action is not in $summarizedActions. - * @param string $action The current action. - * $return MUtil_Model_ModelAbstract - */ - public function createModel($detailed, $action) - { - $model = new MUtil_Model_TableModel('gems__mail_templates'); - $model->set('gmt_subject', 'label', $this->_('Subject')); - - if ($detailed) { - $model->set('gmt_body', - 'label', $this->_('Message'), - 'itemDisplay', array('Gems_Email_EmailFormAbstract', 'displayMailText')); - } - - return $model; - } - - public function getAutoSearchElements(MUtil_Model_ModelAbstract $model, array $data) - { - $elements = parent::getAutoSearchElements($model, $data); - $options = array('' => $this->_('(all organizations)')) + $this->util->getDbLookup()->getOrganizations(); - - $elements[] = new Zend_Form_Element_Select('org_id', array('multiOptions' => $options)); - - return $elements; - } - - protected function getDataFilter(array $data) - { - if (isset($data['org_id']) && $data['org_id']) { - $organizationId = intval($data['org_id']); - return array("LOCATE('|$organizationId|', gmt_organizations) > 0"); - } - - return parent::getDataFilter($data); - } - - public function getTopic($count = 1) - { - return $this->plural('email template', 'email templates', $count); - } - - public function getTopicTitle() - { - return $this->_('Email templates'); - } - - protected function processForm($saveLabel = null, $data = null) - { - $model = $this->getModel(); - $isNew = ! $model->applyRequest($this->getRequest())->hasFilter(); - $form = new Gems_Email_MailTemplateForm($this->escort); - - $wasSaved = $form->processRequest($this->_request); - - if ($form->hasMessages()) { - $this->addMessage($form->getMessages()); - } - - if ($wasSaved) { - $this->addMessage(sprintf($this->_('%2$u %1$s saved'), $this->getTopic($wasSaved), $wasSaved)); - $this->afterSaveRoute($form->getValues()); - - } else { - $table = new MUtil_Html_TableElement(array('class' => 'formTable')); - $table->setAsFormLayout($form, true, true); - $table['tbody'][0][0]->class = 'label'; // Is only one row with formLayout, so all in output fields get class. - if ($links = $this->createMenuLinks(10)) { - $table->tf(); // Add empty cell, no label - $linksCell = $table->tf($links); - } - - return $form; - } - } -} Added: trunk/library/classes/Gems/Default/MailJobAction.php =================================================================== --- trunk/library/classes/Gems/Default/MailJobAction.php (rev 0) +++ trunk/library/classes/Gems/Default/MailJobAction.php 2011-10-24 10:20:26 UTC (rev 127) @@ -0,0 +1,180 @@ +<?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 Default + * @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 Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.4 + */ +class Gems_Default_MailJobAction extends Gems_Controller_ModelSnippetActionAbstract +{ + /** + * + * @var ArrayObject + */ + public $project; + + + /** + * The automatically filtered result + * + * @param $resetMvc When true only the filtered resulsts + */ + public function autofilterAction($resetMvc = true) + { + $this->autofilterParameters['onEmpty'] = $this->_('No automatic mail jobs found...'); + + parent::autofilterAction($resetMvc); + } + + /** + * Action for showing a create new item page + */ + public function createAction() + { + $this->createEditParameters['formTitle'] = $this->_('New automatic mail job...'); + + parent::createAction(); + } + + /** + * Creates a model for getModel(). Called only for each new $action. + * + * The parameters allow you to easily adapt the model to the current action. The $detailed + * parameter was added, because the most common use of action is a split between detailed + * and summarized actions. + * + * @param boolean $detailed True when the current action is not in $summarizedActions. + * @param string $action The current action. + * @return MUtil_Model_ModelAbstract + */ + protected function createModel($detailed, $action) + { + $dbLookup = $this->util->getDbLookup(); + $dbTracks = $this->util->getTrackData(); + $translated = $this->util->getTranslated(); + $empty = $translated->getEmptyDropdownArray(); + $unselected = array('' => ''); + + $model = new MUtil_Model_TableModel('gems__mail_jobs'); + + Gems_Model::setChangeFieldsByPrefix($model, 'gmj'); + + $model->set('gmj_id_message', 'label', $this->_('Template'), 'multiOptions', $unselected + $dbLookup->getMailTemplates()); + $model->set('gmj_id_user_as', 'label', $this->_('By staff member'), + 'multiOptions', $unselected + $dbLookup->getStaff(), 'default', $this->escort->getCurrentUserId(), + 'description', $this->_('Used for logging and possibly from address.')); + $model->set('gmj_active', 'label', $this->_('Active'), + 'multiOptions', $translated->getYesNo(), 'elementClass', 'Checkbox', 'required', true, + 'description', $this->_('Job is only run when active.')); + + $fromMethods = $unselected + $this->getBulkMailFromOptions(); + $model->set('gmj_from_method', 'label', $this->_('From address used'), 'multiOptions', $fromMethods); + if ($detailed) { + $model->set('gmj_from_fixed', 'label', $this->_('From other'), + 'description', sprintf($this->_("Only when '%s' is '%s'."), $model->get('gmj_from_method', 'label'), end($fromMethods))); + } + $model->set('gmj_process_method', 'label', $this->_('Processing Method'), 'multiOptions', $unselected + $translated->getBulkMailProcessOptions()); + $model->set('gmj_filter_mode', 'label', $this->_('Filter for'), 'multiOptions', $unselected + $this->getBulkMailFilterOptions()); + + if ($detailed) { + $model->set('gmj_id_organization', 'label', $this->_('Organization'), 'multiOptions', $empty + $dbLookup->getOrganizations()); + $model->set('gmj_id_track', 'label', $this->_('Track'), 'multiOptions', $empty + $dbTracks->getAllTracks()); + $model->set('gsu_id_survey', 'label', $this->_('Survey'), 'multiOptions', $empty + $dbTracks->getAllSurveys()); + } + + return $model; + } + + /** + * Action for showing a edit item page + */ + public function editAction() + { + $this->createEditParameters['formTitle'] = $this->_('Edit automatic mail job'); + + parent::editAction(); + } + + /** + * The types of mail filters + * + * @return array + */ + protected function getBulkMailFilterOptions() + { + return array( + 'N' => $this->_('First mail'), + 'R' => $this->_('Reminder'), + ); + } + + /** + * Options for from address use. + * + * @return array + */ + protected function getBulkMailFromOptions() + { + $results['O'] = $this->_('Use organizational from address'); + + if (isset($project->email['site']) && $project->email['site']) { + $results['S'] = sprintf($this->_('Use site %s address'), $project->email['site']); + } + + $results['U'] = $this->_("Use the 'By staff member' address"); + $results['F'] = $this->_('Other'); + + return $results; + } + + /** + * Action for showing a browse page + */ + public function indexAction() + { + $this->html->h3($this->_('Automatic mail jobs')); + + parent::indexAction(); + + $this->html->pInfo($this->_('With automatic mail jobs and a cron job on the server, mails can be sent without manual user action.')); + } +} Copied: trunk/library/classes/Gems/Default/MailTemplateAction.php (from rev 126, trunk/library/classes/Gems/Default/MailAction.php) =================================================================== --- trunk/library/classes/Gems/Default/MailTemplateAction.php (rev 0) +++ trunk/library/classes/Gems/Default/MailTemplateAction.php 2011-10-24 10:20:26 UTC (rev 127) @@ -0,0 +1,130 @@ +<?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 Default + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * + * @package Gems + * @subpackage Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.1 + */ +class Gems_Default_MailTemplateAction extends Gems_Controller_BrowseEditAction +{ + /** + * Creates a model for getModel(). Called only for each new $action. + * + * The parameters allow you to easily adapt the model to the current action. The $detailed + * parameter was added, because the most common use of action is a split between detailed + * and summarized actions. + * + * @param boolean $detailed True when the current action is not in $summarizedActions. + * @param string $action The current action. + * $return MUtil_Model_ModelAbstract + */ + public function createModel($detailed, $action) + { + $model = new MUtil_Model_TableModel('gems__mail_templates'); + $model->set('gmt_subject', 'label', $this->_('Subject')); + + if ($detailed) { + $model->set('gmt_body', + 'label', $this->_('Message'), + 'itemDisplay', array('Gems_Email_EmailFormAbstract', 'displayMailText')); + } + + return $model; + } + + public function getAutoSearchElements(MUtil_Model_ModelAbstract $model, array $data) + { + $elements = parent::getAutoSearchElements($model, $data); + $options = array('' => $this->_('(all organizations)')) + $this->util->getDbLookup()->getOrganizations(); + + $elements[] = new Zend_Form_Element_Select('org_id', array('multiOptions' => $options)); + + return $elements; + } + + protected function getDataFilter(array $data) + { + if (isset($data['org_id']) && $data['org_id']) { + $organizationId = intval($data['org_id']); + return array("LOCATE('|$organizationId|', gmt_organizations) > 0"); + } + + return parent::getDataFilter($data); + } + + public function getTopic($count = 1) + { + return $this->plural('email template', 'email templates', $count); + } + + public function getTopicTitle() + { + return $this->_('Email templates'); + } + + protected function processForm($saveLabel = null, $data = null) + { + $model = $this->getModel(); + $isNew = ! $model->applyRequest($this->getRequest())->hasFilter(); + $form = new Gems_Email_MailTemplateForm($this->escort); + + $wasSaved = $form->processRequest($this->_request); + + if ($form->hasMessages()) { + $this->addMessage($form->getMessages()); + } + + if ($wasSaved) { + $this->addMessage(sprintf($this->_('%2$u %1$s saved'), $this->getTopic($wasSaved), $wasSaved)); + $this->afterSaveRoute($form->getValues()); + + } else { + $table = new MUtil_Html_TableElement(array('class' => 'formTable')); + $table->setAsFormLayout($form, true, true); + $table['tbody'][0][0]->class = 'label'; // Is only one row with formLayout, so all in output fields get class. + if ($links = $this->createMenuLinks(10)) { + $table->tf(); // Add empty cell, no label + $linksCell = $table->tf($links); + } + + return $form; + } + } +} Modified: trunk/library/classes/Gems/Menu/MenuAbstract.php =================================================================== --- trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/Gems/Menu/MenuAbstract.php 2011-10-24 10:20:26 UTC (rev 127) @@ -235,12 +235,15 @@ $page->addExcelAction(); $page->addShowAction(); - // MAIL Server CONTROLLER + // MAIL JOB CONTROLLER + $page = $setup->addBrowsePage($this->_('Automatic mail'), 'pr.mail.job', 'mail-job'); + + // MAIL SERVER CONTROLLER $page = $setup->addBrowsePage($this->_('Servers'), 'pr.mail.server', 'mail-server'); // $page->addAction($this->_('Test'), 'pr.mail.server.test', 'test')->addParameters(MUtil_Model::REQUEST_ID); // MAIL CONTROLLER - $setup->addBrowsePage($this->_('Templates'), 'pr.mail', 'mail'); + $setup->addBrowsePage($this->_('Templates'), 'pr.mail', 'mail-template'); return $setup; } Modified: trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/Gems/Snippets/ModelFormSnippetAbstract.php 2011-10-24 10:20:26 UTC (rev 127) @@ -3,7 +3,7 @@ /** * 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 @@ -14,7 +14,7 @@ * * 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 @@ -25,8 +25,8 @@ * 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 Snippets * @author Matijs de Jong <mj...@ma...> @@ -37,13 +37,13 @@ /** * Adds Gems specific display details and helper functions: - * + * * Items set are: * = Default route: 'show' * - Display class: 'formTable' * - Gems_Form use: createForm() * - Table display: beforeDispay() - * + * * Extra helpers are: * - Form title: getTitle() * - Menu helpers: $this->menu, beforeDispay() & getMenuList() @@ -62,21 +62,28 @@ * @var string */ protected $class = 'formTable'; - + /** + * An optional title for the form. replacing the current generic form title. + * + * @var string Optional + */ + protected $formTitle; + + /** * Required - * + * * @var Gems_Menu */ protected $menu; - + /** * The name of the action to forward to after form completion - * + * * @var string */ protected $routeAction = 'show'; - + /** * Perform some actions on the form, right before it is displayed but already populated * @@ -90,7 +97,7 @@ $table->setAsFormLayout($this->_form, true, true); // There is only one row with formLayout, so all in output fields get class. - $table['tbody'][0][0]->appendAttrib('class', $this->labelClass); + $table['tbody'][0][0]->appendAttrib('class', $this->labelClass); if ($links = $this->getMenuList()) { $table->tf(); // Add empty cell, no label @@ -108,7 +115,7 @@ { return $this->menu && parent::checkRegistryRequestsAnswers(); } - + /** * Creates an empty form. Allows overruling in sub-classes. * @@ -119,10 +126,10 @@ { // $form = new Zend_Form($options); $form = new Gems_Form($options); - + return $form; } - + /** * Create the snippets content * @@ -140,13 +147,13 @@ $form = parent::getHtmlOutput($view); $htmlDiv[] = $form; - + return $htmlDiv; } /** * overrule to add your own buttons. - * + * * @return Gems_Menu_MenuList */ protected function getMenuList() @@ -158,14 +165,16 @@ return $links; } - + /** - * + * * @return string The header title to display */ protected function getTitle() { - if ($this->createData) { + if ($this->formTitle) { + return $this->formTitle; + } elseif ($this->createData) { return sprintf($this->_('New %s...'), $this->getTopic()); } else { return sprintf($this->_('Edit %s'), $this->getTopic()); Modified: trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php =================================================================== --- trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/Gems/Snippets/ModelTableSnippetAbstract.php 2011-10-24 10:20:26 UTC (rev 127) @@ -114,10 +114,19 @@ */ protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) { + if ($showMenuItem = $this->getShowMenuItem()) { + $bridge->addItemLink($showMenuItem->toActionLinkLower($this->request, $bridge)); + } + // make sure search results are highlighted $this->applyTextMarker(); - return parent::addBrowseTableColumns($bridge, $model); + parent::addBrowseTableColumns($bridge, $model); + + if ($editMenuItem = $this->getEditMenuItem()) { + $bridge->addItemLink($editMenuItem->toActionLinkLower($this->request, $bridge)); + } + } /** @@ -197,17 +206,28 @@ } /** + * Finds a specific active menu item * * @param string $controller * @param string $action * @return Gems_Menu_SubMenuItem */ - public function findMenuItem($controller, $action = 'index') + protected function findMenuItem($controller, $action = 'index') { return $this->menu->find(array('controller' => $controller, 'action' => $action, 'allowed' => true)); } /** + * Returns an edit menu item, if access is allowed by privileges + * + * @return Gems_Menu_SubMenuItem + */ + protected function getEditMenuItem() + { + return $this->findMenuItem($this->request->getControllerName(), 'edit'); + } + + /** * Create the snippets content * * This is a stub function either override getHtmlOutput() or override render() @@ -236,6 +256,16 @@ } /** + * Returns a show menu item, if access is allowed by privileges + * + * @return Gems_Menu_SubMenuItem + */ + protected function getShowMenuItem() + { + return $this->findMenuItem($this->request->getControllerName(), 'show'); + } + + /** * Overrule to implement snippet specific filtering and sorting. * * @param MUtil_Model_ModelAbstract $model Modified: trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php =================================================================== --- trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/MUtil/Controller/ModelSnippetActionAbstract.php 2011-10-24 10:20:26 UTC (rev 127) @@ -197,7 +197,7 @@ } /** - * Action for showing a create new page + * Action for showing a create new item page */ public function createAction() { Modified: trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php =================================================================== --- trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/classes/MUtil/Snippets/ModelFormSnippetAbstract.php 2011-10-24 10:20:26 UTC (rev 127) @@ -36,15 +36,15 @@ */ /** - * Abstract class for creating & processing a form based on a model. To use this + * Abstract class for creating & processing a form based on a model. To use this * class either subclass or use the existing default ModelFormSnippet. - * + * * The processForm() method executes e sequence of methods that - * depending on the input display the form or save the form and + * depending on the input display the form or save the form and * redirects the output to another controller/action. * * @see ModelFormSnippet - * + * * @package MUtil * @subpackage Snippets * @copyright Copyright (c) 2011 Erasmus MC @@ -466,6 +466,27 @@ // Default is just go to the index if ($this->routeAction && ($this->request->getActionName() !== $this->routeAction)) { $this->afterSaveRouteUrl = array($this->request->getActionKey() => $this->routeAction); + + // Set the key identifiers for the route. + // + // Mind you the values may have changed, either because of an edit or + // because a new item was created. + $model = $this->getModel(); + $keys = $model->getKeys(); + if (count($keys) == 1) { + $key = reset($keys); + if (isset($this->formData[$key])) { + $this->afterSaveRouteUrl[MUtil_Model::REQUEST_ID] = $this->formData[$key]; + } + } else { + $i = 1; + foreach ($model->getKeys() as $key) { + if (isset($this->formData[$key])) { + $this->afterSaveRouteUrl[MUtil_Model::REQUEST_ID . $i] = $this->formData[$key]; + } + $i++; + } + } } return $this; Modified: trunk/library/configs/db/tables/gems__mail_jobs.300.sql =================================================================== --- trunk/library/configs/db/tables/gems__mail_jobs.300.sql 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/configs/db/tables/gems__mail_jobs.300.sql 2011-10-24 10:20:26 UTC (rev 127) @@ -1,33 +1,42 @@ CREATE TABLE if not exists gems__mail_jobs ( - gmj_id_message bigint unsigned not null auto_increment, + gmj_id_job bigint unsigned not null auto_increment, - gmj_id_organization bigint unsigned not null - references gems__organizations (gor_id_organization), + gmj_id_message bigint unsigned not null + references gems__mail_templates (gmt_id_message), gmj_id_user_as bigint unsigned not null references gems__staff (gsf_id_user), + gmj_active boolean not null default 1, + -- O Use organization from address -- S Use site from address -- U Use gmj_id_user_as from address + -- F Fixed gmj_from_fixed gmj_from_method varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + gmj_from_fixed varchar(254) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, -- M => multiple per respondent, one for each token -- O => One per respondent, mark all tokens as send - -- U / A? => Send only one token, do not mark + -- A => Send only one token, do not mark gmj_process_method varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, -- N => notmailed -- R => reminder gmj_filter_mode varchar(1) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + -- Optional filters + gmj_id_organization bigint unsigned null references gems__organizations (gor_id_organization), + gmj_id_track int unsigned null references gems__tracks (gtr_id_track), + gsu_id_survey int unsigned null references gems__surveys (gsu_id_survey), + gmj_changed timestamp not null default current_timestamp on update current_timestamp, gmj_changed_by bigint unsigned not null, gmj_created timestamp not null default '0000-00-00 00:00:00', gmj_created_by bigint unsigned not null, - PRIMARY KEY (gmj_id_message) + PRIMARY KEY (gmj_id_job) ) ENGINE=InnoDB AUTO_INCREMENT = 800 Deleted: trunk/library/controllers/MailController.php =================================================================== --- trunk/library/controllers/MailController.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/controllers/MailController.php 2011-10-24 10:20:26 UTC (rev 127) @@ -1,48 +0,0 @@ -<?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 Default - * @author Matijs de Jong <mj...@ma...> - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @version $Id$ - */ - -/** - * - * @package Gems - * @subpackage Default - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @since Class available since version 1.4.2 - */ -class MailController extends Gems_Default_MailAction -{ -} Added: trunk/library/controllers/MailJobController.php =================================================================== --- trunk/library/controllers/MailJobController.php (rev 0) +++ trunk/library/controllers/MailJobController.php 2011-10-24 10:20:26 UTC (rev 127) @@ -0,0 +1,50 @@ +<?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 Default + * @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 Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.4 + */ +class MailJobController extends Gems_Default_MailJobAction +{ + +} Copied: trunk/library/controllers/MailTemplateController.php (from rev 126, trunk/library/controllers/MailController.php) =================================================================== --- trunk/library/controllers/MailTemplateController.php (rev 0) +++ trunk/library/controllers/MailTemplateController.php 2011-10-24 10:20:26 UTC (rev 127) @@ -0,0 +1,48 @@ +<?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 Default + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * + * @package Gems + * @subpackage Default + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4.2 + */ +class MailTemplateController extends Gems_Default_MailTemplateAction +{ +} Modified: trunk/library/snippets/Generic/ModelItemTableSnippet.php =================================================================== --- trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/snippets/Generic/ModelItemTableSnippet.php 2011-10-24 10:20:26 UTC (rev 127) @@ -102,6 +102,11 @@ */ protected function addShowTableRows(MUtil_Model_VerticalTableBridge $bridge, MUtil_Model_ModelAbstract $model) { + if ($menuItem = $this->getEditMenuItem()) { + // Add click to edit + $bridge->tbody()->onclick = array('location.href=\'', $menuItem->toHRefAttribute($this->request), '\';'); + } + parent::addShowTableRows($bridge, $model); $controller = $this->request->getControllerName(); @@ -124,4 +129,26 @@ { return $this->model; } + + /** + * Finds a specific active menu item + * + * @param string $controller + * @param string $action + * @return Gems_Menu_SubMenuItem + */ + protected function findMenuItem($controller, $action = 'index') + { + return $this->menu->find(array('controller' => $controller, 'action' => $action, 'allowed' => true)); + } + + /** + * Returns an edit menu item, if access is allowed by privileges + * + * @return Gems_Menu_SubMenuItem + */ + protected function getEditMenuItem() + { + return $this->findMenuItem($this->request->getControllerName(), 'edit'); + } } Modified: trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php =================================================================== --- trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php 2011-10-21 15:43:06 UTC (rev 126) +++ trunk/library/snippets/Mail/Log/MailLogBrowseSnippet.php 2011-10-24 10:20:26 UTC (rev 127) @@ -59,7 +59,7 @@ */ protected function addBrowseTableColumns(MUtil_Model_TableBridge $bridge, MUtil_Model_ModelAbstract $model) { - if ($menuItem = $this->findMenuItem($this->request->getControllerName(), 'show')) { + if ($menuItem = $this->getShowMenuItem()) { $bridge->addItemLink($menuItem->toActionLinkLower($this->request, $bridge)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-01 13:52:27
|
Revision: 159 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=159&view=rev Author: matijsdejong Date: 2011-11-01 13:52:15 +0000 (Tue, 01 Nov 2011) Log Message: ----------- Ticket #33: date types for tracks fields, including use in track rounds. AnswerModelSnippetGeneric now shows a 'Fill in' button when possible and has extra usage options. Undo of change 157, but corrected the bug. Fixed bug in Lazy::first FormBridge::applyFixedOptions is now a static public function for use elsewhere. Modified Paths: -------------- trunk/library/classes/Gems/Default/TrackFieldsAction.php trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php trunk/library/classes/Gems/Tracker/RespondentTrack.php trunk/library/classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php trunk/library/classes/Gems/Tracker/SurveyModel.php trunk/library/classes/MUtil/Lazy.php trunk/library/classes/MUtil/Model/FormBridge.php trunk/library/classes/MUtil/Model/TableModel.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__track_fields.20.sql trunk/library/snippets/EditTrackSnippet.php Modified: trunk/library/classes/Gems/Default/TrackFieldsAction.php =================================================================== --- trunk/library/classes/Gems/Default/TrackFieldsAction.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Default/TrackFieldsAction.php 2011-11-01 13:52:15 UTC (rev 159) @@ -67,9 +67,12 @@ $bridge->addExhibitor('gtf_id_track'); $bridge->addText('gtf_id_order'); $bridge->addText('gtf_field_name', 'size', '30', 'minlength', 4, 'required', true, 'validator', $model->createUniqueValidator(array('gtf_field_name','gtf_id_track'))); + $bridge->addText('gtf_field_code', 'minlength', 4, 'description', $this->_('Optional extra name to link the field to program code.')); + $bridge->addText('gtf_field_description', 'size', 30, 'description', $this->_('Optional extra description to show the user.')); $bridge->addTextarea('gtf_field_values', 'minlength', 4, 'rows', 4, 'description', $this->_('Separate multiple values with a vertical bar (|)'), 'required', false); $bridge->addSelect('gtf_field_type'); $bridge->addCheckBox('gtf_required'); + $bridge->addCheckBox('gtf_readonly', 'description', $this->_('Check this box if this field is always set by code instead of the user.')); } /** @@ -104,16 +107,23 @@ public function createModel($detailed, $action) { $trackId = $this->_getIdParam(); - $types = array('select' => $this->_('Select one'), 'multiselect' => $this->_('Select multiple'), 'text' => $this->_('Free text')); + $types = array('select' => $this->_('Select one'), 'multiselect' => $this->_('Select multiple'), 'date' => $this->_('Date'), 'text' => $this->_('Free text')); $model = new MUtil_Model_TableModel('gems__track_fields'); $model->setKeys(array('fid' => 'gtf_id_field', MUtil_Model::REQUEST_ID => 'gtf_id_track')); $model->set('gtf_id_track', 'label', $this->_('Track'), 'multiOptions', $this->util->getTrackData()->getAllTracks()); $model->set('gtf_id_order', 'label', $this->_('Order')); $model->set('gtf_field_name', 'label', $this->_('Name')); + if ($detailed) { + $model->set('gtf_field_code', 'label', $this->_('Code Name')); + $model->set('gtf_field_description', 'label', $this->_('Description')); + } $model->set('gtf_field_values', 'label', $this->_('Values')); $model->set('gtf_field_type', 'label', $this->_('Type'), 'multiOptions', $types); $model->set('gtf_required', 'label', $this->_('Required'), 'multiOptions', $this->util->getTranslated()->getYesNo()); + if ($detailed) { + $model->set('gtf_readonly', 'label', $this->_('Readonly'), 'multiOptions', $this->util->getTranslated()->getYesNo()); + } Gems_Model::setChangeFieldsByPrefix($model, 'gtf'); Modified: trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php =================================================================== --- trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Tracker/Engine/StepEngineAbstract.php 2011-11-01 13:52:15 UTC (rev 159) @@ -359,12 +359,22 @@ return $survey->getDatesList($language); case self::RESPONDENT_TRACK_TABLE: - return array( + $this->_ensureTrackFields(); + + $results = array( 'gr2t_start_date' => $this->_('Track start'), 'gr2t_end_date' => $this->_('Track end'), // 'gr2t_created' => $this->_('Track created'), ); + foreach ($this->_trackFields as $field) { + if ('date' == $field['gtf_field_type']) { + $results[$field['gtf_id_field']] = $field['gtf_field_name']; + } + } + + return $results; + case self::TOKEN_TABLE: return array( 'gto_valid_from' => $this->_('Valid from'), Modified: trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php =================================================================== --- trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Tracker/Engine/TrackEngineAbstract.php 2011-11-01 13:52:15 UTC (rev 159) @@ -173,7 +173,7 @@ protected function _ensureTrackFields() { if (! is_array($this->_trackFields)) { - $sql = "SELECT gtf_id_field, gtf_field_name, gtf_field_values, gtf_field_type, gtf_required + $sql = "SELECT * FROM gems__track_fields WHERE gtf_id_track = ? ORDER BY gtf_id_order"; @@ -493,24 +493,38 @@ $name = (string) $field['gtf_id_field']; - switch ($field['gtf_field_type']) { - case "multiselect": - $element = new Zend_Form_Element_MultiCheckbox($name); - $element->setMultiOptions($multi); - break; + if ($field['gtf_readonly']) { + $element = new MUtil_Form_Element_Exhibitor($name); - case "select": - $element = new Zend_Form_Element_Select($name); - $element->setMultiOptions($empty + $multi); - break; + } else { + switch ($field['gtf_field_type']) { + case "multiselect": + $element = new Zend_Form_Element_MultiCheckbox($name); + $element->setMultiOptions($multi); + break; - default: - $element = new Zend_Form_Element_Text($name); - $element->setAttrib('size', 40); - break; + case "select": + $element = new Zend_Form_Element_Select($name); + $element->setMultiOptions($empty + $multi); + break; + + case "date": + $options = array(); + MUtil_Model_FormBridge::applyFixedOptions('date', $options); + + $element = new MUtil_JQuery_Form_Element_DatePicker($name, $options); + $element->setStorageFormat('yyyy-MM-dd'); + break; + + default: + $element = new Zend_Form_Element_Text($name); + $element->setAttrib('size', 40); + break; + } } $element->setLabel($field['gtf_field_name']) - ->setRequired($field['gtf_required']); + ->setRequired($field['gtf_required']) + ->setDescription($field['gtf_field_description']); $elements[$name] = $element; } @@ -734,15 +748,33 @@ */ public function setFieldsData($respTrackId, array $data) { + $elements = null; $newValues = array(); // MUtil_Echo::track($data); + $this->_ensureTrackFields(); + foreach ($data as $id => $value) { if (is_array($value)) { $value = implode(self::FIELD_SEP, $value); } + // Do the hard work for storing dates + if (isset($this->_trackFields[$id]['gtf_field_type']) && ('date' == $this->_trackFields[$id]['gtf_field_type'])) { + if (! $elements) { + $elements = $this->getFieldsElements(); + } + if (isset($elements[$id])) { + $elem = $elements[$id]; + if ($elem instanceof MUtil_JQuery_Form_Element_DatePicker) { + // I do not like regenerating elements either, but this + // is the only place where we KNOW this information for sure. + $value = MUtil_Date::format($value, $elem->getStorageFormat(), $elem->getDateFormat()); + } + } + } + $newValues[]= array( 'gr2t2f_id_respondent_track' => $respTrackId, 'gr2t2f_id_field' => $id, @@ -765,7 +797,7 @@ /** * Updates the number of rounds in this track. - * + * * @param int $userId The current user * @return int 1 if data changed, 0 otherwise */ Modified: trunk/library/classes/Gems/Tracker/RespondentTrack.php =================================================================== --- trunk/library/classes/Gems/Tracker/RespondentTrack.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Tracker/RespondentTrack.php 2011-11-01 13:52:15 UTC (rev 159) @@ -58,6 +58,12 @@ /** * + * @var array Field data + */ + protected $_fieldData = null; + + /** + * * @var Gems_Tracker_Token */ protected $_firstToken; @@ -107,6 +113,18 @@ } /** + * Makes sure the fieldData is in $this->_fieldData + * + * @param boolean $reload Optional parameter to force reload. + */ + private function _ensureFieldData($reload = false) + { + if ((null === $this->_fieldData) || $reload) { + $this->_fieldData = $this->getTrackEngine()->getFieldsData($this->_respTrackId); + } + } + + /** * Makes sure the receptioncode data is part of the $this->_respTrackData * * @param boolean $reload Optional parameter to force reload. @@ -344,14 +362,26 @@ public function getDate($fieldName) { if (isset($this->_respTrackData[$fieldName])) { - if (Zend_Date::isDate($this->_respTrackData[$fieldName], Gems_Tracker::DB_DATETIME_FORMAT)) { - return new MUtil_Date($this->_respTrackData[$fieldName], Gems_Tracker::DB_DATETIME_FORMAT); + $date = $this->_respTrackData[$fieldName]; + } else { + $this->_ensureFieldData(); + + if (isset($this->_fieldData[$fieldName])) { + $date = $this->_fieldData[$fieldName]; + } else { + $date = false; } - if (Zend_Date::isDate($this->_respTrackData[$fieldName], Gems_Tracker::DB_DATE_FORMAT)) { - return new MUtil_Date($this->_respTrackData[$fieldName], Gems_Tracker::DB_DATE_FORMAT); + } + + if ($date) { + if (Zend_Date::isDate($date, Gems_Tracker::DB_DATETIME_FORMAT)) { + return new MUtil_Date($date, Gems_Tracker::DB_DATETIME_FORMAT); } + if (Zend_Date::isDate($date, Gems_Tracker::DB_DATE_FORMAT)) { + return new MUtil_Date($date, Gems_Tracker::DB_DATE_FORMAT); + } if (Gems_Tracker::$verbose) { - MUtil_Echo::r($this->_respTrackData[$fieldName], 'Missed track date value:'); + MUtil_Echo::r($date, 'Missed track date value:'); } } } @@ -375,6 +405,18 @@ } /** + * Returns the field data for this respondent track id. + * + * @return array of the existing field values for this respondent track + */ + public function getFieldData() + { + $this->_ensureFieldData(); + + return $this->_fieldData; + } + + /** * Returns the first token in this track * * @return Gems_Tracker_Token Modified: trunk/library/classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php =================================================================== --- trunk/library/classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Tracker/Snippets/AnswerModelSnippetGeneric.php 2011-11-01 13:52:15 UTC (rev 159) @@ -83,6 +83,13 @@ protected $locale; /** + * Switch to put the display of the cancel and pritn buttons. + * + * @var boolean + */ + protected $showButtons = true; + + /** * Switch to put the display of the current token as select to true or false. * * @var boolean @@ -149,7 +156,20 @@ } $bridge->th($this->_('Token')); - $td = $bridge->tdh($bridge->gto_id_token->strtoupper()); + + $tokenUpper = $bridge->gto_id_token->strtoupper(); + if ($menuItem = $this->menu->find(array('controller' => 'ask', 'action' => 'take', 'allowed' => true))) { + $source = new Gems_Menu_ParameterSource(); + $source->setTokenId($bridge->gto_id_token); + $source->offsetSet('can_be_taken', $bridge->can_be_taken); + + $link = $menuItem->toActionLink($source); + $link->title = array($this->_('Token'), $tokenUpper); + + $td = $bridge->tdh($bridge->can_be_taken->if($link, $tokenUpper)); + } else { + $td = $bridge->tdh($tokenUpper); + } $td->appendAttrib('class', $selectedClass); $td->appendAttrib('class', $bridge->row_class); } @@ -207,9 +227,11 @@ $htmlDiv->ul($this->_('No token specified.'), array('class' => 'errors')); } - $buttonDiv = $htmlDiv->buttonDiv(); - $buttonDiv->actionLink(array(), $this->_('Close'), array('onclick' => 'window.close();')); - $buttonDiv->actionLink(array(), $this->_('Print'), array('onclick' => 'window.print();')); + if ($this->showButtons) { + $buttonDiv = $htmlDiv->buttonDiv(); + $buttonDiv->actionLink(array(), $this->_('Close'), array('onclick' => 'window.close();')); + $buttonDiv->actionLink(array(), $this->_('Print'), array('onclick' => 'window.print();')); + } return $htmlDiv; } Modified: trunk/library/classes/Gems/Tracker/SurveyModel.php =================================================================== --- trunk/library/classes/Gems/Tracker/SurveyModel.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/Gems/Tracker/SurveyModel.php 2011-11-01 13:52:15 UTC (rev 159) @@ -1,6 +1,5 @@ <?php - /** * Copyright (c) 2011, Erasmus MC * All rights reserved. @@ -26,22 +25,24 @@ * 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.4 - * @version 1.4 - * @package Gems + * + * + * @package Gems * @subpackage Tracker + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** - * Description of SurveyModel + * More correctly a Survey ANSWERS Model as it adds answers to token information/ * - * @author Matijs de Jong - * @package Gems + * @package Gems * @subpackage Tracker + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.4 */ class Gems_Tracker_SurveyModel extends Gems_Model_JoinModel { @@ -63,6 +64,9 @@ $this->addTable('gems__reception_codes', array('gto_reception_code' => 'grc_id_reception_code')); $this->addColumn( + 'CASE WHEN grc_success = 1 AND gto_valid_from <= CURRENT_TIMESTAMP AND gto_completion_time IS NULL AND (gto_valid_until IS NULL OR gto_valid_until >= CURRENT_TIMESTAMP) THEN 1 ELSE 0 END', + 'can_be_taken'); + $this->addColumn( "CASE WHEN grc_success = 1 THEN '' ELSE 'deleted' END", 'row_class'); Modified: trunk/library/classes/MUtil/Lazy.php =================================================================== --- trunk/library/classes/MUtil/Lazy.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/MUtil/Lazy.php 2011-11-01 13:52:15 UTC (rev 159) @@ -1,39 +1,38 @@ <?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 Lazy + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ /** @@ -48,9 +47,11 @@ * 3 - an object propery * 4 - an array object * - * @author Matijs de Jong - * @package MUtil + * @package MUtil * @subpackage Lazy + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.0 */ class MUtil_Lazy { @@ -77,10 +78,10 @@ $args = func_get_args(); // Last value first - $result = array_pop($args); + $result = array_shift($args); - foreach (array_reverse($args) as $arg) { - $result = new MUtil_Lazy_Call(array($arg, 'if'), array($arg, $result)); + foreach ($args as $arg) { + $result = new MUtil_Lazy_Call(array($result, 'if'), array($result, $arg)); } return $result; } @@ -130,16 +131,16 @@ return new MUtil_Lazy_Property($object, $property); } - /** - * Raises a MUtil_Lazy_LazyInterface one level, but may still + /** + * Raises a MUtil_Lazy_LazyInterface one level, but may still * return a MUtil_Lazy_LazyInterface. - * - * This function is usually used to perform a e.g. filter function on object that may e.g. + * + * This function is usually used to perform a e.g. filter function on object that may e.g. * contain Repeater objects. - * + * * @param mixed $object Usually an object of type MUtil_Lazy_LazyInterface * @param mixed $stack Optional variable stack for evaluation - * @return mixed + * @return mixed */ public static function raise($object, $stack = null) { @@ -153,7 +154,7 @@ /** * * @param mixed $repeatable - * @return MUtil_Lazy_RepeatableInterface + * @return MUtil_Lazy_RepeatableInterface */ public static function repeat($repeatable) { @@ -164,18 +165,18 @@ return new MUtil_Lazy_Repeatable($repeatable); } - /** - * Raises a MUtil_Lazy_LazyInterface until the return object is not a + /** + * Raises a MUtil_Lazy_LazyInterface until the return object is not a * MUtil_Lazy_LazyInterface object. - * - * @param mixed $object Usually an object of type MUtil_Lazy_LazyInterface + * + * @param mixed $object Usually an object of type MUtil_Lazy_LazyInterface * @param mixed $stack Optional variable stack for evaluation * @return mixed Something not lazy */ public static function rise($object, $stack = null) { $stack = self::toStack($stack, __FUNCTION__); - + // Resolving when MUtil_Lazy_LazyInterface. while ($object instanceof MUtil_Lazy_LazyInterface) { $object = $object->__toValue($stack); @@ -192,11 +193,11 @@ return $object; } - /** + /** * Turns any input into a MUtil_Lazy_StackInterface object. - * - * @param mixed $stack Value to be turned into stack for evaluation - * @param string A string describing where the stack was created. + * + * @param mixed $stack Value to be turned into stack for evaluation + * @param string A string describing where the stack was created. * @return MUtil_Lazy_StackInterface A usable stack */ private static function toStack($stack, $source) Modified: trunk/library/classes/MUtil/Model/FormBridge.php =================================================================== --- trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-01 13:52:15 UTC (rev 159) @@ -112,7 +112,7 @@ return $element; } - protected function _applyFixedOptions($type, array &$options) + public static function applyFixedOptions($type, array &$options) { static $typeOptions; @@ -268,7 +268,7 @@ $options = $this->_mergeOptions($name, $options, self::DISPLAY_OPTIONS, self::CHECK_OPTIONS); - $this->_applyFixedOptions(__FUNCTION__, $options); + self::applyFixedOptions(__FUNCTION__, $options); $element = new Zend_Form_Element_Checkbox($name, $options); @@ -286,7 +286,7 @@ $elementName = $name; // Allow centrally set options - $this->_applyFixedOptions(__FUNCTION__, $options); + self::applyFixedOptions(__FUNCTION__, $options); if (isset($options['dateFormat'])) { // Make sure the model knows the dateFormat (can be important for storage). Modified: trunk/library/classes/MUtil/Model/TableModel.php =================================================================== --- trunk/library/classes/MUtil/Model/TableModel.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/classes/MUtil/Model/TableModel.php 2011-11-01 13:52:15 UTC (rev 159) @@ -77,7 +77,8 @@ { return $this->_deleteTableData( $this->_table, - $this->_checkFilterUsed($filter)); + $this->_checkFilterUsed($filter), + $this->_deleteValues); } /** Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/configs/db/patches.sql 2011-11-01 13:52:15 UTC (rev 159) @@ -233,3 +233,8 @@ ALTER TABLE `gems__staff` CHANGE `gsf_login` `gsf_login` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `gsf_password` `gsf_password` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `gsf_id_organization` `gsf_id_organization` BIGINT( 20 ) NULL DEFAULT NULL; + +-- PATCH: Extra information for track fields +ALTER TABLE gems__track_fields ADD gtf_field_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER gtf_field_name, + ADD gtf_field_description varchar(200) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null AFTER gtf_field_code, + ADD gtf_readonly boolean not null default false AFTER gtf_required; \ No newline at end of file Modified: trunk/library/configs/db/tables/gems__track_fields.20.sql =================================================================== --- trunk/library/configs/db/tables/gems__track_fields.20.sql 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/configs/db/tables/gems__track_fields.20.sql 2011-11-01 13:52:15 UTC (rev 159) @@ -6,12 +6,15 @@ gtf_id_order int not null default 10, gtf_field_name varchar(200) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, + gtf_field_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gtf_field_description varchar(200) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, gtf_field_values text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, gtf_field_type varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, gtf_required boolean not null default false, + gtf_readonly boolean not null default false, gtf_changed timestamp not null default current_timestamp on update current_timestamp, gtf_changed_by bigint unsigned not null, Modified: trunk/library/snippets/EditTrackSnippet.php =================================================================== --- trunk/library/snippets/EditTrackSnippet.php 2011-11-01 13:30:39 UTC (rev 158) +++ trunk/library/snippets/EditTrackSnippet.php 2011-11-01 13:52:15 UTC (rev 159) @@ -130,6 +130,7 @@ $model = $this->getModel(); $this->formData = $model->save($this->formData); $changed = $model->getChanged(); + $refresh = false; // Retrieve the key if just created if ($this->createData) { @@ -140,18 +141,25 @@ $this->trackEngine->checkRoundsFor($this->respondentTrack, $this->userId); } elseif (! (isset($this->formData['gr2t_completed']) && $this->formData['gr2t_completed'])) { - // Check if sartdate has changed + // Check if startdate has changed if (! $this->respondentTrack->getStartDate()->equals(new MUtil_Date($this->formData['gr2t_start_date']))) { - // Perform a refresh from the database, to avoid date trouble - $this->respondentTrack->refresh(); - $this->respondentTrack->checkTrackTokens($this->userId); + $refresh = true; } } if ($this->trackEngine && isset($this->formData[self::TRACKFIELDS_ID])) { $changed = $this->trackEngine->setFieldsData($this->respondentTrackId, $this->formData[self::TRACKFIELDS_ID]) ? 1 : $changed; + $refresh = $refresh || $changed; } + if ($refresh) { + Gems_Tracker::$verbose; + // Perform a refresh from the database, to avoid date trouble + $this->respondentTrack->refresh(); + $this->respondentTrack->checkTrackTokens($this->userId); + } + + // Communicate with the user $this->afterSave($changed); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-16 18:18:19
|
Revision: 224 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=224&view=rev Author: matijsdejong Date: 2011-11-16 18:18:12 +0000 (Wed, 16 Nov 2011) Log Message: ----------- Obfuscated difference between non-existing user and existing user logon attempts. Modified Paths: -------------- trunk/library/classes/Gems/Auth/Adapter/Callback.php trunk/library/classes/Gems/Auth.php trunk/library/classes/Gems/Default/IndexAction.php trunk/library/classes/Gems/User/NoLoginDefinition.php trunk/library/classes/Gems/User/ProjectUserDefinition.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 Modified: trunk/library/classes/Gems/Auth/Adapter/Callback.php =================================================================== --- trunk/library/classes/Gems/Auth/Adapter/Callback.php 2011-11-16 17:52:38 UTC (rev 223) +++ trunk/library/classes/Gems/Auth/Adapter/Callback.php 2011-11-16 18:18:12 UTC (rev 224) @@ -2,7 +2,7 @@ /** * 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 @@ -13,7 +13,7 @@ * * 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 @@ -24,7 +24,7 @@ * 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. - * + * * Short description of file * * @package Gems @@ -82,7 +82,7 @@ if ($result === true) { $result = new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $this->_identity); } else { - $result = new Zend_Auth_Result(Zend_Auth_Result::FAILURE, $this->_identity); + $result = new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $this->_identity); } } return $result; Modified: trunk/library/classes/Gems/Auth.php =================================================================== --- trunk/library/classes/Gems/Auth.php 2011-11-16 17:52:38 UTC (rev 223) +++ trunk/library/classes/Gems/Auth.php 2011-11-16 18:18:12 UTC (rev 224) @@ -48,9 +48,12 @@ { /** * Error constants + * + * These must be numeric constants smaller than zero for + * Zend_Auth_Result to work. */ - const ERROR_DATABASE_NOT_INSTALLED = 'notInstalled'; - const ERROR_PASSWORD_DELAY = 'blockedDelay'; + const ERROR_DATABASE_NOT_INSTALLED = -11; + const ERROR_PASSWORD_DELAY = -12; /** * @var array Message templates @@ -71,7 +74,8 @@ */ public $db; - public function __construct($db = null) { + public function __construct($db = null) + { /** * Check for an adapter being defined. if not, fetch the default adapter. */ @@ -86,13 +90,22 @@ } } - private function _error($code, $value1 = null, $value2 = null) { + private function _error($code, $value1 = null, $value2 = null) + { $messages = func_get_args(); array_splice($messages, 0, 1, $this->_messageTemplates[$code]); return new Zend_Auth_Result($code, null, (array) $messages); } - public function authenticate(Zend_Auth_Adapter_Interface $adapter, $formValues) { + /** + * Authenticates against the supplied adapter + * + * @param Zend_Auth_Adapter_Interface $adapter + * @param array $formValues We need information not in the adapter. + * @return Zend_Auth_Result + */ + public function authenticate(Zend_Auth_Adapter_Interface $adapter, array $formValues = null) + { try { $login_name = $formValues['userlogin']; $organization = $formValues['organization']; @@ -105,22 +118,23 @@ $values['gula_id_organization'] = $organization; $values['gula_failed_logins'] = 0; $values['gula_last_failed'] = null; + } elseif ($values['gula_failed_logins'] > 0) { - // Get the datetime - $last = new MUtil_Date($values['gula_last_failed'], Zend_Date::ISO_8601); + // Get the datetime + $last = new MUtil_Date($values['gula_last_failed'], Zend_Date::ISO_8601); - // How long to wait until we can ignore the previous failed attempt - $delay = pow($values['gula_failed_logins'], GemsEscort::getInstance()->project->getAccountDelayFactor()); + // How long to wait until we can ignore the previous failed attempt + $delay = pow($values['gula_failed_logins'], GemsEscort::getInstance()->project->getAccountDelayFactor()); - if (abs($last->diffSeconds()) <= $delay) { - // Response gets slowly slower - $sleepTime = min($values['gula_failed_logins'], 10); - sleep($sleepTime); - $remaining = $delay - abs($last->diffSeconds()) - $sleepTime; - if ($remaining>0) { - $result = $this->_error(self::ERROR_PASSWORD_DELAY, $remaining); - } + if (abs($last->diffSeconds()) <= $delay) { + // Response gets slowly slower + $sleepTime = min($values['gula_failed_logins'], 10); + sleep($sleepTime); + $remaining = $delay - abs($last->diffSeconds()) - $sleepTime; + if ($remaining>0) { + $result = $this->_error(self::ERROR_PASSWORD_DELAY, $remaining); } + } } } catch (Zend_Db_Exception $e) { // Fall through as this does not work if the database upgrade did not run @@ -137,11 +151,12 @@ $values['gula_last_failed'] = null; } else { if ($values['gula_failed_logins']) { + // MUtil_Echo::track($result->getCode(), self::ERROR_PASSWORD_DELAY); // Only increment when we have no password delay - if ($result->getCode() <> self::ERROR_PASSWORD_DELAY) { + // if ($result->getCode() <> self::ERROR_PASSWORD_DELAY) { $values['gula_failed_logins'] += 1; $values['gula_last_failed'] = new Zend_Db_Expr('CURRENT_TIMESTAMP'); - } + // } } else { $values['gula_failed_logins'] = 1; $values['gula_last_failed'] = new Zend_Db_Expr('CURRENT_TIMESTAMP'); @@ -195,7 +210,8 @@ * @param Zend_Auth_Result $result * @return Zend_Auth_Result */ - public function localize($result) { + public function localize($result) + { $translate = GemsEscort::getInstance()->translate; $code = $result->getCode(); $identity = $result->getIdentity(); @@ -210,18 +226,23 @@ */ switch ($code) { case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID: - $message = $translate->_('Wrong password.'); - break; + // $message = $translate->_('Wrong password.'); + // break; case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND: - $message = $translate->_('Combination of username password not found.'); + $message = $translate->_('Combination of organization, username and password not found.'); break; } - //Now recombine with the others, they will be treated as params - $messages = array_merge((array) $message, (array) $messages); - //Now do a sprintf if we have 1 or more params - if (count($messages)>1) $messages = call_user_func_array('sprintf', $messages); + // Recombine with the others if any, they will be treated as params + if (count($messages)) { + $messages = array_merge((array) $message, (array) $messages); + //Now do a sprintf if we have 1 or more params + $messages = call_user_func_array('sprintf', $messages); + } else { + $messages = array($message); + } + return new Zend_Auth_Result($code, $identity, (array) $messages); } } \ No newline at end of file Modified: trunk/library/classes/Gems/Default/IndexAction.php =================================================================== --- trunk/library/classes/Gems/Default/IndexAction.php 2011-11-16 17:52:38 UTC (rev 223) +++ trunk/library/classes/Gems/Default/IndexAction.php 2011-11-16 18:18:12 UTC (rev 224) @@ -282,46 +282,44 @@ $user = $this->loader->getUser($request->getParam('userlogin'), $request->getParam('organization')); - if ($user->isActive()) { - $formValues = $form->getValues(); - $authResult = $user->authenticate($formValues); + // NO!!! DO not test! Otherwise it is easy to test which users exist. + // if ($user->isActive()) { + $formValues = $form->getValues(); + $authResult = $user->authenticate($formValues); - if ($authResult->isValid()) { + if ($authResult->isValid()) { - $user->setAsCurrentUser(); + $user->setAsCurrentUser(); - $user->afterLogin($form->getValues()); + $user->afterLogin($form->getValues()); - /** - * Fix current locale / organization in cookies - */ - Gems_Cookies::setLocale($user->getLocale(), $this->basepath->getBasePath()); - Gems_Cookies::setOrganization($user->getOrganizationId(), $this->basepath->getBasePath()); + /** + * Fix current locale / organization in cookies + */ + Gems_Cookies::setLocale($user->getLocale(), $this->basepath->getBasePath()); + Gems_Cookies::setOrganization($user->getOrganizationId(), $this->basepath->getBasePath()); - /** - * Ready - */ - $this->addMessage(sprintf($this->_('Login successful, welcome %s.'), $user->getFullName())); + /** + * Ready + */ + $this->addMessage(sprintf($this->_('Login successful, welcome %s.'), $user->getFullName())); - /** - * Log the login - */ - Gems_AccessLog::getLog($this->db)->log("index.login", $this->getRequest(), null, $user->getUserId(), true); + /** + * Log the login + */ + Gems_AccessLog::getLog($this->db)->log("index.login", $this->getRequest(), null, $user->getUserId(), true); - 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->_reroute(array('controller' => null, 'action' => null), true); - } - return; + if ($previousRequestParameters = $this->session->previousRequestParameters) { + $this->_reroute(array('controller' => $previousRequestParameters['controller'], 'action' => $previousRequestParameters['action']), false); } else { - $errors = $authResult->getMessages(); - $this->addMessage($errors); + // This reroutes to the first available menu page after login + $this->_reroute(array('controller' => null, 'action' => null), true); } + return; + } else { + $errors = $authResult->getMessages(); + $this->addMessage($errors); } - } else { - $errors = $form->getErrors(); } } $this->view->form = $form; Modified: trunk/library/classes/Gems/User/NoLoginDefinition.php =================================================================== --- trunk/library/classes/Gems/User/NoLoginDefinition.php 2011-11-16 17:52:38 UTC (rev 223) +++ trunk/library/classes/Gems/User/NoLoginDefinition.php 2011-11-16 18:18:12 UTC (rev 224) @@ -46,14 +46,14 @@ */ class Gems_User_NoLoginDefinition extends Gems_User_UserDefinitionAbstract { - private function alwaysFalse($params) { - $result = new Zend_Auth_Result(Zend_Auth_Result::FAILURE, $params['userlogin']); + public function alwaysFalse($params) + { return false; } - + public function getAuthAdapter($formValues) { - $adapter = new Gems_Auth_Adapter_Callback(array(get_class(),'alwaysFalse'), $formValues['userlogin'], $formValues); + $adapter = new Gems_Auth_Adapter_Callback(array($this,'alwaysFalse'), $formValues['userlogin'], $formValues); return $adapter; } Modified: trunk/library/classes/Gems/User/ProjectUserDefinition.php =================================================================== --- trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-16 17:52:38 UTC (rev 223) +++ trunk/library/classes/Gems/User/ProjectUserDefinition.php 2011-11-16 18:18:12 UTC (rev 224) @@ -54,7 +54,7 @@ public function getAuthAdapter($formValues) { - $adapter = new Gems_Auth_Adapter_Callback(array($this->project,'checkSuperAdminPassword'), $formValues['userlogin'], $formValues['password']); + $adapter = new Gems_Auth_Adapter_Callback(array($this->project,'checkSuperAdminPassword'), $formValues['userlogin'], array($formValues['password'])); return $adapter; } 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-16 17:52:38 UTC (rev 223) +++ trunk/library/languages/default-en.po 2011-11-16 18:18:12 UTC (rev 224) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-16 18:30+0100\n" +"POT-Creation-Date: 2011-11-16 19:09+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -77,13 +77,9 @@ msgid "Database needs to be updated!" msgstr "Database needs to be updated!" -#: classes/Gems/Auth.php:225 -msgid "Wrong password." -msgstr "Wrong password." - #: classes/Gems/Auth.php:228 -msgid "Combination of username password not found." -msgstr "Combination of username password not found." +msgid "Combination of organization, username and password not found." +msgstr "Combination of organization, username and password not found." #: classes/Gems/Html.php:154 msgid "<< First" @@ -3784,6 +3780,9 @@ msgid "This track can be assigned since %s." msgstr "This track can be assigned since %s." +#~ msgid "Wrong password." +#~ msgstr "Wrong password." + #~ 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-16 17:52:38 UTC (rev 223) +++ trunk/library/languages/default-nl.po 2011-11-16 18:18:12 UTC (rev 224) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse NL\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-16 18:33+0100\n" +"POT-Creation-Date: 2011-11-16 19:10+0100\n" "PO-Revision-Date: \n" "Last-Translator: Matijs de Jong <mj...@ma...>\n" "Language-Team: Erasmus MGZ <mat...@ma...>\n" @@ -77,13 +77,9 @@ msgid "Database needs to be updated!" msgstr "Database dient ververst te worden!" -#: classes/Gems/Auth.php:225 -msgid "Wrong password." -msgstr "Verkeerd wachtwoord." - #: classes/Gems/Auth.php:228 -msgid "Combination of username password not found." -msgstr "Combinatie gebruikersnaam en wachtwoord niet gevonden." +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" @@ -3784,6 +3780,9 @@ msgid "This track can be assigned since %s." msgstr "Dit traject kan sinds %s aan een patiënt toegewezen worden." +#~ msgid "Wrong password." +#~ msgstr "Verkeerd wachtwoord." + #~ msgid "Please update the database" #~ msgstr "Database moet bijgewerkt worden" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-16 17:52:48
|
Revision: 223 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=223&view=rev Author: matijsdejong Date: 2011-11-16 17:52:38 +0000 (Wed, 16 Nov 2011) Log Message: ----------- Start on #40: organizations can defer to each other. Input possible. Array values can be saved in a model and read by multi elements. Modified Paths: -------------- trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/MUtil/Model/FormBridge.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 Added Paths: ----------- trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php trunk/library/classes/MUtil/Form/Element/MultiSelect.php trunk/library/classes/MUtil/Model/Save/ trunk/library/classes/MUtil/Model/Save/ArraySaver.php Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-16 13:19:44 UTC (rev 222) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-16 17:52:38 UTC (rev 223) @@ -140,15 +140,20 @@ 'gor_iso_lang', 'label', $this->_('Language'), 'multiOptions', $this->util->getLocalized()->getLanguages(), 'default', 'nl' ); - $model->set( - 'gor_active', 'label', $this->_('Active'), 'elementClass', 'Checkbox', - 'multiOptions', $this->util->getTranslated()->getYesNo() - ); + $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); + 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); $model->set('gor_signature', 'label', $this->_('Signature'), 'description', $this->_('For emails and token forward screen.'), 'elementClass', 'Textarea', 'rows', 5); + + $model->set('gor_accessible_by', 'label', $this->_('Accessible by'), 'description', $this->_('Checked organizations see this organizations respondents.'), 'elementClass', 'MultiCheckbox', + 'multiOptions', $this->util->getDbLookup()->getOrganizations()); + MUtil_Model_Save_ArraySaver::create($model, 'gor_accessible_by', ':'); + } if ($this->project->multiLocale) { Added: trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php =================================================================== --- trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php (rev 0) +++ trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php 2011-11-16 17:52:38 UTC (rev 223) @@ -0,0 +1,143 @@ +<?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 MUtil + * @subpackage Form + * @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 $ + */ + +/** + * This object allows you to supply a string value when the object expects an + * array value, splitting the string along the valueSeperatorChar. + * + * Return this value as a string is not practical as that breaks the workings + * of all Filters, Validators and Decorators. + * + * @package MUtil + * @subpackage Form + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class MUtil_Form_Element_MultiCheckbox extends Zend_Form_Element_MultiCheckbox +{ + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @var boolean + */ + protected $_valuePad = true; + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @var string + */ + protected $_valueSeperatorChar = null; + + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @return boolean + */ + public function getValuePad() + { + return $this->_valuePad; + } + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @return string + */ + public function getValueSeperatorChar() + { + return $this->_valueSeperatorChar; + } + + /** + * Set element value + * + * @param mixed $value + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValue($value) + { + if ((null !== $this->_valueSeperatorChar) && (! is_array($value))) { + if ($this->_valuePad) { + $value = trim($value, $this->_valueSeperatorChar); + } + $value = explode($this->_valueSeperatorChar, $value); + } + + return parent::setValue($value); + } + + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @param boolean $value + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValuePad($value = true) + { + $this->_valuePad = $value; + return $this; + } + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @param string $seperator + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValueSeperatorChar($seperator = ' ') + { + $this->_valueSeperatorChar = substr($seperator . ' ', 0, 1); + return $this; + } +} Added: trunk/library/classes/MUtil/Form/Element/MultiSelect.php =================================================================== --- trunk/library/classes/MUtil/Form/Element/MultiSelect.php (rev 0) +++ trunk/library/classes/MUtil/Form/Element/MultiSelect.php 2011-11-16 17:52:38 UTC (rev 223) @@ -0,0 +1,143 @@ +<?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 MUtil + * @subpackage Form + * @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 $ + */ + +/** + * This object allows you to supply a string value when the object expects an + * array value, splitting the string along the valueSeperatorChar. + * + * Return this value as a string is not practical as that breaks the workings + * of all Filters, Validators and Decorators. + * + * @package MUtil + * @subpackage Form + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class MUtil_Form_Element_MultiSelect extends Zend_Form_Element_MultiSelect +{ + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @var boolean + */ + protected $_valuePad = true; + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @var string + */ + protected $_valueSeperatorChar = null; + + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @return boolean + */ + public function getValuePad() + { + return $this->_valuePad; + } + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @return string + */ + public function getValueSeperatorChar() + { + return $this->_valueSeperatorChar; + } + + /** + * Set element value + * + * @param mixed $value + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValue($value) + { + if ((null !== $this->_valueSeperatorChar) && (! is_array($value))) { + if ($this->_valuePad) { + $value = trim($value, $this->_valueSeperatorChar); + } + $value = explode($this->_valueSeperatorChar, $value); + } + + return parent::setValue($value); + } + + /** + * En/disables padding the value in separators. The default is true as this + * simplifies search commands (and usually costs only 2 characters). + * + * @param boolean $value + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValuePad($value = true) + { + $this->_valuePad = $value; + return $this; + } + + /** + * The value seperator enables this control to accept a single string as value + * and split it into an array. + * + * A null seperator means this class behaves as it's parent class and returns an + * array value. + * + * @param string $seperator + * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) + */ + public function setValueSeperatorChar($seperator = ' ') + { + $this->_valueSeperatorChar = substr($seperator . ' ', 0, 1); + return $this; + } +} Modified: trunk/library/classes/MUtil/Model/FormBridge.php =================================================================== --- trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-16 13:19:44 UTC (rev 222) +++ trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-16 17:52:38 UTC (rev 223) @@ -85,7 +85,7 @@ self::FILE_OPTIONS => array('accept', 'count', 'destination', 'valueDisabled'), self::GROUP_OPTIONS => array('elements', 'legend', 'separator'), self::JQUERY_OPTIONS => array('jQueryParams'), - self::MULTI_OPTIONS => array('disable', 'multiOptions', 'onchange', 'separator', 'size'), + self::MULTI_OPTIONS => array('disable', 'multiOptions', 'onchange', 'separator', 'size', 'valuePad', 'valueSeperatorChar'), self::PASSWORD_OPTIONS => array('repeatLabel'), self::TAB_OPTIONS => array('value'), self::TEXT_OPTIONS => array('maxlength', 'minlength', 'onchange', 'onfocus', 'onselect', 'size'), @@ -538,7 +538,7 @@ $options = $this->_mergeOptions($name, $options, self::DISPLAY_OPTIONS, self::MULTI_OPTIONS); - $element = new Zend_Form_Element_MultiCheckbox($name, $options); + $element = new MUtil_Form_Element_MultiCheckbox($name, $options); return $this->_addToForm($name, $element); } @@ -562,7 +562,7 @@ $options = $this->_mergeOptions($name, $options, self::DISPLAY_OPTIONS, self::MULTI_OPTIONS); - $element = new Zend_Form_Element_Multiselect($name, $options); + $element = new MUtil_Form_Element_Multiselect($name, $options); return $this->_addToForm($name, $element); } Property changes on: trunk/library/classes/MUtil/Model/Save ___________________________________________________________________ Added: bugtraq:url + http://survey.erasmusmc.nl/support/mantis/view.php?id=%BUGID% Added: bugtraq:logregex + #(\d+) Added: trunk/library/classes/MUtil/Model/Save/ArraySaver.php =================================================================== --- trunk/library/classes/MUtil/Model/Save/ArraySaver.php (rev 0) +++ trunk/library/classes/MUtil/Model/Save/ArraySaver.php 2011-11-16 17:52:38 UTC (rev 223) @@ -0,0 +1,89 @@ +<?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 MUtil + * @subpackage Model + * @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 MUtil + * @subpackage Model + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class MUtil_Model_Save_ArraySaver +{ + protected $seperatorChar = ' '; + + protected $valuePad = true; + + public function __construct($seperatorChar = ' ', $valuePad = true) + { + $this->seperatorChar = substr($seperatorChar . ' ', 0, 1); + $this->valuePad = $valuePad; + } + + /** + * If this field is saved as an array value, use + * + * @param MUtil_Model_ModelAbstract $model + * @param string $name The field to set the seperator character + * @param string $char + * @param boolean $pad + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ + public static function create(MUtil_Model_ModelAbstract $model, $name, $char = ' ', $pad = true) + { + $class = new self($char, $pad); + + $model->set($name, 'valueSeperatorChar', substr($char . ' ', 0, 1), 'valuePad', $pad); + $model->setOnSave($name, array($class, 'saveValue')); + + return $class; + } + + public function saveValue($name, $value, $isNew) + { + if (is_array($value)) { + $value = implode($this->seperatorChar, $value); + + if ($this->valuePad) { + $value = $this->seperatorChar . $value . $this->seperatorChar; + } + } + return $value; + } +} Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-16 13:19:44 UTC (rev 222) +++ trunk/library/configs/db/patches.sql 2011-11-16 17:52:38 UTC (rev 223) @@ -311,3 +311,11 @@ -- PATCH: Change Burger Service Nummer to Social Security Number ALTER TABLE `gems__respondents` CHANGE `grs_bsn` `grs_ssn` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; + +-- PATCH: Extending organizations + +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; Modified: trunk/library/configs/db/tables/gems__organizations.20.sql =================================================================== --- trunk/library/configs/db/tables/gems__organizations.20.sql 2011-11-16 13:19:44 UTC (rev 222) +++ trunk/library/configs/db/tables/gems__organizations.20.sql 2011-11-16 17:52:38 UTC (rev 223) @@ -3,20 +3,25 @@ gor_id_organization bigint unsigned not null auto_increment, gor_name varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, - gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_location varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_url varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_task varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', + gor_code varchar(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_location varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_url varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_task varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, - gor_contact_name varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_contact_email varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_welcome text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', - gor_signature text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci', + -- A commy separated list of organization numbers that can look at respondents in this organization + gor_accessible_by text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_contact_name varchar(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_contact_email varchar(127) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_welcome text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_signature text CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null, + gor_style varchar(15) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null default 'gems', 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_active boolean not null default 1, gor_changed timestamp not null default current_timestamp on update current_timestamp, @@ -24,15 +29,9 @@ gor_created timestamp not null, gor_created_by bigint unsigned not null, - PRIMARY KEY(gor_id_organization) + PRIMARY KEY(gor_id_organization), + UNIQUE (gor_code) ) ENGINE=InnoDB AUTO_INCREMENT = 70 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; - --- Default group -INSERT ignore INTO gems__organizations - (gor_id_organization, gor_name, gor_location, gor_active, gor_iso_lang, gor_changed, gor_changed_by, gor_created, gor_created_by) - VALUES - (70, 'Erasmus MGZ', 'Rotterdam', 1, 'nl', current_timestamp, 0, current_timestamp, 0); - 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-16 13:19:44 UTC (rev 222) +++ trunk/library/languages/default-en.po 2011-11-16 17:52:38 UTC (rev 223) @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Pulse EN\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 12:50+0100\n" +"POT-Creation-Date: 2011-11-16 18:30+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:186 +#: classes/GemsEscort.php:201 #, php-format msgid "Path %s not writable" msgstr "Path %s not writable" -#: classes/GemsEscort.php:860 +#: classes/GemsEscort.php:876 #, php-format msgid "User: %s" msgstr "User: %s" -#: classes/GemsEscort.php:884 +#: classes/GemsEscort.php:900 msgid "version" msgstr "version" -#: classes/GemsEscort.php:1405 +#: 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:1526 +#: classes/GemsEscort.php:1454 msgid "Please check back later." msgstr "Please check back later." -#: classes/GemsEscort.php:1528 -#: classes/GemsEscort.php:1531 -#: classes/GemsEscort.php:1532 +#: classes/GemsEscort.php:1456 +#: classes/GemsEscort.php:1460 +#: classes/GemsEscort.php:1461 msgid "System is in maintenance mode" msgstr "System is in maintenance mode" -#: classes/GemsEscort.php:1546 +#: classes/GemsEscort.php:1470 msgid "No access to site." msgstr "No access to site." -#: classes/GemsEscort.php:1548 -#: classes/GemsEscort.php:1584 +#: classes/GemsEscort.php:1472 +#: classes/GemsEscort.php:1508 msgid "You have no access to this site." msgstr "You have no access to this site." -#: classes/GemsEscort.php:1564 +#: classes/GemsEscort.php:1488 msgid "No access to page" msgstr "No access to page" -#: classes/GemsEscort.php:1566 +#: classes/GemsEscort.php:1490 #, 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:1571 -#: classes/GemsEscort.php:1582 +#: classes/GemsEscort.php:1495 +#: classes/GemsEscort.php:1506 msgid "You are no longer logged in." msgstr "You are no longer logged in." -#: classes/GemsEscort.php:1572 +#: classes/GemsEscort.php:1496 msgid "You must login to access this page." msgstr "You must login to access this page." @@ -77,15 +77,11 @@ msgid "Database needs to be updated!" msgstr "Database needs to be updated!" -#: classes/Gems/Auth.php:107 -msgid "Please update the database" -msgstr "Please update the database" - -#: classes/Gems/Auth.php:174 +#: classes/Gems/Auth.php:225 msgid "Wrong password." msgstr "Wrong password." -#: classes/Gems/Auth.php:177 +#: classes/Gems/Auth.php:228 msgid "Combination of username password not found." msgstr "Combination of username password not found." @@ -175,7 +171,7 @@ msgstr "Roles" #: classes/Gems/Menu.php:196 -#: classes/Gems/Menu.php:337 +#: classes/Gems/Menu.php:345 msgid "Assigned" msgstr "Assigned" @@ -203,181 +199,202 @@ msgid "Maintenance" msgstr "Maintenance" -#: classes/Gems/Menu.php:227 +#: classes/Gems/Menu.php:218 +msgid "Upgrade" +msgstr "Upgrade" + +#: classes/Gems/Menu.php:219 +#: classes/Gems/Menu.php:318 +msgid "Show" +msgstr "Show" + +#: classes/Gems/Menu.php:220 +msgid "Execute all" +msgstr "Execute all" + +#: classes/Gems/Menu.php:221 +msgid "Execute this" +msgstr "Execute this" + +#: classes/Gems/Menu.php:222 +msgid "Execute from here" +msgstr "Execute from here" + +#: classes/Gems/Menu.php:223 +msgid "Execute to here" +msgstr "Execute to here" + +#: classes/Gems/Menu.php:235 #, php-format msgid "Stand-alone privilige: %s" msgstr "Stand-alone privilige: %s" -#: classes/Gems/Menu.php:234 +#: classes/Gems/Menu.php:242 msgid "Logon" msgstr "Logon" -#: classes/Gems/Menu.php:235 +#: classes/Gems/Menu.php:243 msgid "Lost password" msgstr "Lost password" -#: classes/Gems/Menu.php:236 +#: classes/Gems/Menu.php:244 msgid "Your account" msgstr "Your account" -#: classes/Gems/Menu.php:237 +#: classes/Gems/Menu.php:245 msgid "Activity overview" msgstr "Activity overview" -#: classes/Gems/Menu.php:238 +#: classes/Gems/Menu.php:246 msgid "Change password" msgstr "Change password" -#: classes/Gems/Menu.php:239 -#: classes/Gems/Menu.php:279 -#: classes/Gems/Menu.php:314 +#: classes/Gems/Menu.php:247 +#: classes/Gems/Menu.php:287 +#: classes/Gems/Menu.php:322 msgid "Token" msgstr "Token" -#: classes/Gems/Menu.php:240 +#: classes/Gems/Menu.php:248 msgid "Logoff" msgstr "Logoff" -#: classes/Gems/Menu.php:275 +#: classes/Gems/Menu.php:283 msgid "Track" msgstr "Track" -#: classes/Gems/Menu.php:282 -#: classes/Gems/Menu.php:302 -#: classes/Gems/Menu.php:333 +#: classes/Gems/Menu.php:290 +#: classes/Gems/Menu.php:310 +#: classes/Gems/Menu.php:341 msgid "Add" msgstr "Add" -#: classes/Gems/Menu.php:286 -#: classes/Gems/Menu.php:369 +#: classes/Gems/Menu.php:294 +#: classes/Gems/Menu.php:377 msgid "Preview" msgstr "Preview" -#: classes/Gems/Menu.php:293 +#: classes/Gems/Menu.php:301 msgid "Tracks" msgstr "Tracks" -#: classes/Gems/Menu.php:306 +#: classes/Gems/Menu.php:314 msgid "Assignments" msgstr "Assignments" -#: classes/Gems/Menu.php:310 -msgid "Show" -msgstr "Show" - -#: classes/Gems/Menu.php:318 +#: classes/Gems/Menu.php:326 msgid "Edit" msgstr "Edit" -#: classes/Gems/Menu.php:322 +#: classes/Gems/Menu.php:330 msgid "Delete" msgstr "Delete" -#: classes/Gems/Menu.php:327 +#: classes/Gems/Menu.php:335 msgid "Surveys" msgstr "Surveys" -#: classes/Gems/Menu.php:359 +#: classes/Gems/Menu.php:367 msgid "Fill in" msgstr "Fill in" -#: classes/Gems/Menu.php:363 +#: classes/Gems/Menu.php:371 msgid "Print PDF" msgstr "Print PDF" -#: classes/Gems/Menu.php:366 +#: classes/Gems/Menu.php:374 msgid "E-Mail now!" msgstr "E-Mail now!" -#: classes/Gems/Menu.php:372 +#: classes/Gems/Menu.php:380 msgid "Answers" msgstr "Answers" -#: classes/Gems/Menu.php:510 +#: classes/Gems/Menu.php:518 msgid "Respondents" msgstr "Patients" -#: classes/Gems/Menu.php:513 +#: classes/Gems/Menu.php:521 msgid "Overview" msgstr "Overview" -#: classes/Gems/Menu.php:520 +#: classes/Gems/Menu.php:528 msgid "Project" msgstr "Project" -#: classes/Gems/Menu.php:523 +#: classes/Gems/Menu.php:531 msgid "Setup" msgstr "Setup" -#: classes/Gems/Menu.php:526 +#: classes/Gems/Menu.php:534 msgid "Mail" msgstr "Mail" -#: classes/Gems/Menu.php:529 +#: classes/Gems/Menu.php:537 msgid "Track Builder" msgstr "Track Builder" -#: classes/Gems/Menu.php:538 +#: classes/Gems/Menu.php:546 msgid "Contact" msgstr "Contact" -#: classes/Gems/Menu.php:551 +#: classes/Gems/Menu.php:559 msgid "Changelog" msgstr "Changelog" -#: classes/Gems/Model.php:106 +#: classes/Gems/Model.php:190 msgid "Respondent nr" msgstr "Patient nr" -#: classes/Gems/Model.php:107 +#: classes/Gems/Model.php:191 msgid "Opened" msgstr "Opened" -#: classes/Gems/Model.php:108 +#: classes/Gems/Model.php:192 msgid "Consent" msgstr "Consent" -#: classes/Gems/Model.php:110 +#: classes/Gems/Model.php:194 msgid "E-Mail" msgstr "E-Mail" -#: classes/Gems/Model.php:115 +#: classes/Gems/Model.php:199 msgid "Gender" msgstr "Gender" -#: classes/Gems/Model.php:116 +#: classes/Gems/Model.php:200 msgid "First name" msgstr "First name" -#: classes/Gems/Model.php:117 +#: classes/Gems/Model.php:201 msgid "Surname prefix" msgstr "Surname prefix" -#: classes/Gems/Model.php:118 +#: classes/Gems/Model.php:202 msgid "Last name" msgstr "Last name" -#: classes/Gems/Model.php:120 +#: classes/Gems/Model.php:204 msgid "Name" msgstr "Name" -#: classes/Gems/Model.php:123 +#: classes/Gems/Model.php:207 msgid "Street" msgstr "Street" -#: classes/Gems/Model.php:124 +#: classes/Gems/Model.php:208 msgid "Zipcode" msgstr "Zipcode" -#: classes/Gems/Model.php:125 +#: classes/Gems/Model.php:209 msgid "City" msgstr "City" -#: classes/Gems/Model.php:127 +#: classes/Gems/Model.php:211 msgid "Phone" msgstr "Phone" -#: classes/Gems/Model.php:129 +#: classes/Gems/Model.php:213 msgid "Birthday" msgstr "Birthday" @@ -385,6 +402,20 @@ msgid "Checks performed" msgstr "Checks performed" +#: classes/Gems/UpgradesAbstract.php:164 +msgid "Already at max. level." +msgstr "Already at max. level." + +#: classes/Gems/UpgradesAbstract.php:171 +#, php-format +msgid "Trying upgrade for %s from level %s to level %s" +msgstr "Trying upgrade for %s from level %s to level %s" + +#: classes/Gems/UpgradesAbstract.php:179 +#, php-format +msgid "Trying upgrade for %s to level %s: %s" +msgstr "Trying upgrade for %s to level %s: %s" + #: classes/Gems/Controller/BrowseEditAction.php:344 #, php-format msgid "New %s..." @@ -473,7 +504,8 @@ msgstr "Unknown %s." #: classes/Gems/Controller/ModelActionAbstract.php:97 -#: classes/Gems/Default/AskAction.php:149 +#: classes/Gems/Default/AskAction.php:150 +#: classes/Gems/Default/DatabaseAction.php:524 msgid "Cancel" msgstr "Cancel" @@ -481,99 +513,99 @@ msgid "No data found." msgstr "No data found." -#: classes/Gems/Default/AskAction.php:127 +#: classes/Gems/Default/AskAction.php:128 #, php-format msgid "Welcome %s," msgstr "Welcome %s," -#: classes/Gems/Default/AskAction.php:130 +#: classes/Gems/Default/AskAction.php:131 #, php-format msgid "Thank you for answering the survey for token %s." msgstr "Thank you for answering the survey for token %s." -#: classes/Gems/Default/AskAction.php:131 +#: classes/Gems/Default/AskAction.php:132 msgid "Please click the button below to answer the next survey." msgstr "Please click the button below to answer the next survey." -#: classes/Gems/Default/AskAction.php:136 +#: classes/Gems/Default/AskAction.php:137 #, php-format msgid "Please click the button below to answer the survey for token %s." msgstr "Please click the button below to answer the survey for token %s." -#: classes/Gems/Default/AskAction.php:140 +#: 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] "Wait one second to open the survey automatically or click on Cancel to stop." msgstr[1] "Wait %d seconds to open the survey automatically or click on Cancel to stop." -#: classes/Gems/Default/AskAction.php:155 +#: 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] "After this survey there is one other survey we would like you to answer." msgstr[1] "After this survey there are another %d surveys we would like you to answer." -#: classes/Gems/Default/AskAction.php:165 +#: classes/Gems/Default/AskAction.php:166 #, php-format msgid "The survey for token %s is no longer active." msgstr "The survey for token %s is no longer active." -#: classes/Gems/Default/AskAction.php:169 +#: classes/Gems/Default/AskAction.php:170 #, php-format msgid "The token %s does not exist." msgstr "The token %s does not exist." -#: classes/Gems/Default/AskAction.php:171 +#: 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 "Thank you for answering. At the moment we have no further surveys for you to take." -#: classes/Gems/Default/AskAction.php:173 +#: classes/Gems/Default/AskAction.php:174 #, php-format msgid "The survey for token %s has been answered and no further surveys are open." msgstr "The survey for token %s has been answered and no further surveys are open." -#: classes/Gems/Default/AskAction.php:180 +#: classes/Gems/Default/AskAction.php:181 #, php-format msgid "The token %s does not exist (any more)." msgstr "The token %s does not exist (any more)." -#: classes/Gems/Default/AskAction.php:194 +#: classes/Gems/Default/AskAction.php:198 #, php-format msgid "Enter your %s token" msgstr "Enter your %s token" -#: classes/Gems/Default/AskAction.php:199 +#: classes/Gems/Default/AskAction.php:203 #, php-format msgid "Enter tokens as %s." msgstr "Enter tokens as %s." -#: classes/Gems/Default/AskAction.php:209 +#: classes/Gems/Default/AskAction.php:213 msgid "OK" msgstr "OK" -#: classes/Gems/Default/AskAction.php:225 +#: classes/Gems/Default/AskAction.php:229 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:225 +#: classes/Gems/Default/AskAction.php:229 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:229 +#: classes/Gems/Default/AskAction.php:233 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:231 +#: classes/Gems/Default/AskAction.php:235 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:238 +#: classes/Gems/Default/AskAction.php:242 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:239 +#: classes/Gems/Default/AskAction.php:243 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." @@ -637,14 +669,18 @@ msgid "Links concerning this web application:" msgstr "Links concerning this web application:" -#: classes/Gems/Default/CronAction.php:136 +#: classes/Gems/Default/CronAction.php:148 msgid "Cron jobs turned off." msgstr "Cron jobs turned off." -#: classes/Gems/Default/CronAction.php:200 -msgid "No mails sent" -msgstr "No mails sent" +#: classes/Gems/Default/CronAction.php:218 +msgid "No mails sent." +msgstr "No mails sent." +#: classes/Gems/Default/CronAction.php:221 +msgid "On this test system all mail will be delivered to the from address." +msgstr "On this test system all mail will be delivered to the from address." + #: classes/Gems/Default/DatabaseAction.php:64 #, php-format msgid "Executed %2$s creation script %1$s:" @@ -781,12 +817,12 @@ msgstr "Database object overview" #: classes/Gems/Default/DatabaseAction.php:316 -#: classes/Gems/Default/DatabaseAction.php:362 +#: classes/Gems/Default/DatabaseAction.php:360 msgid "Level" msgstr "Level" #: classes/Gems/Default/DatabaseAction.php:317 -#: classes/Gems/Default/DatabaseAction.php:363 +#: classes/Gems/Default/DatabaseAction.php:361 msgid "Subtype" msgstr "Subtype" @@ -795,12 +831,12 @@ msgstr "To be executed" #: classes/Gems/Default/DatabaseAction.php:320 -#: classes/Gems/Default/DatabaseAction.php:366 +#: classes/Gems/Default/DatabaseAction.php:364 msgid "Executed" msgstr "Executed" #: classes/Gems/Default/DatabaseAction.php:321 -#: classes/Gems/Default/DatabaseAction.php:367 +#: classes/Gems/Default/DatabaseAction.php:365 msgid "Finished" msgstr "Finished" @@ -837,114 +873,114 @@ msgid "Show patches" msgstr "Show patches" -#: classes/Gems/Default/DatabaseAction.php:356 +#: classes/Gems/Default/DatabaseAction.php:354 #, php-format msgid "%d patch(es) executed." msgstr "%d patch(es) executed." -#: classes/Gems/Default/DatabaseAction.php:361 +#: classes/Gems/Default/DatabaseAction.php:359 msgid "Patch" msgstr "Patch" -#: classes/Gems/Default/DatabaseAction.php:365 +#: classes/Gems/Default/DatabaseAction.php:363 msgid "Query" msgstr "Query" -#: classes/Gems/Default/DatabaseAction.php:368 +#: classes/Gems/Default/DatabaseAction.php:366 msgid "Result" msgstr "Result" -#: classes/Gems/Default/DatabaseAction.php:392 +#: classes/Gems/Default/DatabaseAction.php:390 msgid "Patch maintenance" msgstr "Patch maintenance" -#: classes/Gems/Default/DatabaseAction.php:396 +#: classes/Gems/Default/DatabaseAction.php:394 msgid "Patch overview" msgstr "Patch overview" -#: classes/Gems/Default/DatabaseAction.php:458 +#: classes/Gems/Default/DatabaseAction.php:456 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:464 +#: classes/Gems/Default/DatabaseAction.php:462 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:475 +#: classes/Gems/Default/DatabaseAction.php:473 #, php-format msgid "Run %s" msgstr "Run %s" -#: classes/Gems/Default/DatabaseAction.php:494 +#: classes/Gems/Default/DatabaseAction.php:492 #, php-format msgid "Starting %d object creation scripts." msgstr "Starting %d object creation scripts." -#: classes/Gems/Default/DatabaseAction.php:499 +#: classes/Gems/Default/DatabaseAction.php:497 #, 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:503 +#: classes/Gems/Default/DatabaseAction.php:501 msgid "All objects exist. Nothing was executed." msgstr "All objects exist. Nothing was executed." -#: classes/Gems/Default/DatabaseAction.php:509 +#: classes/Gems/Default/DatabaseAction.php:507 msgid "Create not-existing database objects" msgstr "Create not-existing database objects" -#: classes/Gems/Default/DatabaseAction.php:511 +#: classes/Gems/Default/DatabaseAction.php:509 #, 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:512 +#: classes/Gems/Default/DatabaseAction.php:510 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:525 +#: classes/Gems/Default/DatabaseAction.php:523 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:538 +#: classes/Gems/Default/DatabaseAction.php:536 msgid "Separate multiple commands with semicolons (;)." msgstr "Separate multiple commands with semicolons (;)." -#: classes/Gems/Default/DatabaseAction.php:545 +#: classes/Gems/Default/DatabaseAction.php:543 msgid "Run" msgstr "Run" -#: classes/Gems/Default/DatabaseAction.php:554 +#: classes/Gems/Default/DatabaseAction.php:552 msgid "raw" msgstr "raw" -#: classes/Gems/Default/DatabaseAction.php:563 +#: classes/Gems/Default/DatabaseAction.php:561 #, php-format msgid "Result set %s." msgstr "Result set %s." -#: classes/Gems/Default/DatabaseAction.php:586 +#: classes/Gems/Default/DatabaseAction.php:584 msgid "Execute raw SQL" msgstr "Execute raw SQL" -#: classes/Gems/Default/DatabaseAction.php:589 +#: classes/Gems/Default/DatabaseAction.php:587 msgid "Result sets" msgstr "Result sets" -#: classes/Gems/Default/DatabaseAction.php:614 +#: classes/Gems/Default/DatabaseAction.php:612 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:619 +#: classes/Gems/Default/DatabaseAction.php:617 #, php-format msgid "The data in table %s" msgstr "The data in table %s" -#: classes/Gems/Default/DatabaseAction.php:620 +#: classes/Gems/Default/DatabaseAction.php:618 #, php-format msgid "Contents of %s %s" msgstr "Contents of %s %s" @@ -968,7 +1004,7 @@ msgstr "%s records found." #: classes/Gems/Default/ExportAction.php:174 -#: classes/Gems/Default/IndexAction.php:105 +#: classes/Gems/Default/IndexAction.php:162 #: classes/Gems/Default/MailJobAction.php:119 msgid "Organization" msgstr "Organization" @@ -996,73 +1032,87 @@ msgid "Administrative groups" msgstr "Administrative groups" -#: classes/Gems/Default/IndexAction.php:98 +#: classes/Gems/Default/IndexAction.php:83 +msgid "Enter your token..." +msgstr "Enter your token..." + +#: classes/Gems/Default/IndexAction.php:124 #, php-format msgid "Login to %s application" msgstr "Login to %s application" -#: classes/Gems/Default/IndexAction.php:117 -#: classes/Gems/Default/IndexAction.php:304 -msgid "Username" -msgstr "Username" +#: classes/Gems/Default/IndexAction.php:128 +msgid "Login" +msgstr "Login" -#: classes/Gems/Default/IndexAction.php:125 -#: classes/Gems/Default/MailServerAction.php:88 +#: classes/Gems/Default/IndexAction.php:145 +msgid "Back to login" +msgstr "Back to login" + +#: classes/Gems/Default/IndexAction.php:183 msgid "Password" msgstr "Password" -#: classes/Gems/Default/IndexAction.php:134 -msgid "Login" -msgstr "Login" +#: classes/Gems/Default/IndexAction.php:198 +#, php-format +msgid "Reset password for %s application" +msgstr "Reset password for %s application" -#: classes/Gems/Default/IndexAction.php:141 -msgid "Enter your token..." -msgstr "Enter your token..." +#: classes/Gems/Default/IndexAction.php:202 +msgid "Reset password" +msgstr "Reset password" -#: classes/Gems/Default/IndexAction.php:196 -#: classes/Gems/Default/IndexAction.php:244 +#: classes/Gems/Default/IndexAction.php:248 +msgid "Username" +msgstr "Username" + +#: classes/Gems/Default/IndexAction.php:305 #, php-format msgid "Login successful, welcome %s." msgstr "Login successful, welcome %s." -#: classes/Gems/Default/IndexAction.php:270 -msgid "Good bye: " -msgstr "Good bye: " - -#: classes/Gems/Default/IndexAction.php:300 +#: classes/Gems/Default/IndexAction.php:335 #, php-format -msgid "Reset password for %s application" -msgstr "Reset password for %s application" +msgid "Good bye: %s." +msgstr "Good bye: %s." -#: classes/Gems/Default/IndexAction.php:312 -msgid "Reset password" -msgstr "Reset password" +#: classes/Gems/Default/IndexAction.php:360 +msgid "Reset accepted, enter your new password." +msgstr "Reset accepted, enter your new password." -#: classes/Gems/Default/IndexAction.php:336 -msgid "No such user found or no e-mail address known" -msgstr "No such user found or no e-mail address known" +#: classes/Gems/Default/IndexAction.php:364 +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:338 -msgid "Reset e-mail already sent, please try again after 24 hours" -msgstr "Reset e-mail already sent, please try again after 24 hours" +#: classes/Gems/Default/IndexAction.php:381 +msgid "Password reset requested" +msgstr "Password reset requested" -#: classes/Gems/Default/IndexAction.php:353 -msgid "Follow the instructions in the e-mail" -msgstr "Follow the instructions in the e-mail" +#: classes/Gems/Default/IndexAction.php:382 +#, 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:355 -#: classes/Gems/Default/IndexAction.php:379 -msgid "Unable to send e-mail" -msgstr "Unable to send e-mail" +#: classes/Gems/Default/IndexAction.php:387 +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:375 -msgid "An e-mail was sent containing your new password" -msgstr "An e-mail was sent containing your new password" +#: classes/Gems/Default/IndexAction.php:389 +msgid "Unable to send e-mail." +msgstr "Unable to send e-mail." -#: classes/Gems/Default/IndexAction.php:383 -msgid "Unknown request" -msgstr "Unknown request" +#: classes/Gems/Default/IndexAction.php:394 +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 +msgid "We received your password reset key." +msgstr "We received your password reset key." + +#: classes/Gems/Default/IndexAction.php:399 +msgid "Please enter the organization and username belonging to this key." +msgstr "Please enter the organization and username belonging to this key." + #: classes/Gems/Default/InvitationAction.php:52 msgid "Invite" msgstr "Invite" @@ -1133,7 +1183,6 @@ msgstr "Action" #: classes/Gems/Default/LogAction.php:165 -#: classes/Gems/Default/MailTemplateAction.php:65 msgid "Message" msgstr "Message" @@ -1171,7 +1220,6 @@ msgstr "New automatic mail job..." #: classes/Gems/Default/MailJobAction.php:100 -#: classes/Gems/Default/MailLogAction.php:116 msgid "Template" msgstr "Template" @@ -1340,10 +1388,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/SourceAction.php:95 +#: classes/Gems/Default/StaffAction.php:144 msgid "Repeat password" msgstr "Repeat password" #: classes/Gems/Default/MailServerAction.php:91 +#: classes/Gems/Default/SourceAction.php:74 +#: classes/Gems/Default/StaffAction.php:118 msgid "Enter only when changing" msgstr "Enter only when changing the password" @@ -1358,6 +1412,7 @@ msgstr "Email servers" #: classes/Gems/Default/MailTemplateAction.php:75 +#: classes/Gems/Default/StaffAction.php:228 msgid "(all organizations)" msgstr "(all organizations)" @@ -1371,34 +1426,38 @@ msgid "Email templates" msgstr "Email templates" -#: classes/Gems/Default/OptionAction.php:75 -#: classes/Gems/Default/OrganizationAction.php:128 -#: classes/Gems/Default/RespondentAction.php:173 -#: classes/Gems/Default/StaffAction.php:196 -msgid "Language" -msgstr "Language" +#: classes/Gems/Default/OptionAction.php:84 +msgid "You are not allowed to change your password." +msgstr "You are not allowed to change your password." -#: classes/Gems/Default/OptionAction.php:94 +#: classes/Gems/Default/OptionAction.php:96 msgid "Current password" msgstr "Current password" -#: classes/Gems/Default/OptionAction.php:105 -#: classes/Gems/Default/OptionAction.php:121 +#: classes/Gems/Default/OptionAction.php:106 +#: classes/Gems/Default/OptionAction.php:122 msgid "New password" msgstr "New password" -#: classes/Gems/Default/OptionAction.php:146 +#: classes/Gems/Default/OptionAction.php:141 msgid "New password is active." msgstr "New password is active." -#: classes/Gems/Default/OptionAction.php:152 +#: classes/Gems/Default/OptionAction.php:146 msgid "Caps Lock seems to be on!" msgstr "Caps Lock seems to be on!" -#: classes/Gems/Default/OptionAction.php:191 +#: classes/Gems/Default/OptionAction.php:190 msgid "Login Name" msgstr "Login Name" +#: classes/Gems/Default/OptionAction.php:197 +#: classes/Gems/Default/OrganizationAction.php:140 +#: classes/Gems/Default/RespondentAction.php:173 +#: classes/Gems/Default/StaffAction.php:213 +msgid "Language" +msgstr "Language" + #: classes/Gems/Default/OptionAction.php:207 #, php-format msgid "Options" @@ -1426,61 +1485,72 @@ msgid "Item" msgstr "Item" -#: classes/Gems/Default/OrganizationAction.php:93 +#: classes/Gems/Default/OrganizationAction.php:105 msgid "Cookies must be enabled." msgstr "Cookies must be enabled." -#: classes/Gems/Default/OrganizationAction.php:96 +#: classes/Gems/Default/OrganizationAction.php:108 msgid "Invalid organization." msgstr "Invalid organization." -#: classes/Gems/Default/OrganizationAction.php:117 +#: classes/Gems/Default/OrganizationAction.php:129 msgid "Url" msgstr "Url" -#: classes/Gems/Default/OrganizationAction.php:118 +#: classes/Gems/Default/OrganizationAction.php:130 msgid "Task" msgstr "Task" -#: classes/Gems/Default/OrganizationAction.php:119 +#: classes/Gems/Default/OrganizationAction.php:131 msgid "Contact name" msgstr "Contact name" -#: classes/Gems/Default/OrganizationAction.php:120 +#: classes/Gems/Default/OrganizationAction.php:132 msgid "Contact email" msgstr "Contact email" -#: classes/Gems/Default/OrganizationAction.php:123 +#: classes/Gems/Default/OrganizationAction.php:135 msgid "Style" msgstr "Style" -#: classes/Gems/Default/OrganizationAction.php:138 +#: classes/Gems/Default/OrganizationAction.php:145 +msgid "Allow new respondents" +msgstr "Allow new patients" + +#: classes/Gems/Default/OrganizationAction.php:150 msgid "Greeting" msgstr "Greeting" -#: classes/Gems/Default/OrganizationAction.php:138 -#: classes/Gems/Default/OrganizationAction.php:139 +#: classes/Gems/Default/OrganizationAction.php:150 +#: classes/Gems/Default/OrganizationAction.php:151 msgid "For emails and token forward screen." msgstr "For emails and token forward screen." -#: classes/Gems/Default/OrganizationAction.php:139 +#: classes/Gems/Default/OrganizationAction.php:151 msgid "Signature" msgstr "Signature" -#: classes/Gems/Default/OrganizationAction.php:155 +#: classes/Gems/Default/OrganizationAction.php:153 +msgid "Accessible by" +msgstr "Accessible by" + +#: classes/Gems/Default/OrganizationAction.php:153 +msgid "Checked organizations see this organizations respondents." +msgstr "Checked organizations see this organizations patients." + +#: classes/Gems/Default/OrganizationAction.php:172 msgid "organization" msgid_plural "organizations" msgstr[0] "organization" msgstr[1] "organizations" -#: classes/Gems/Default/OrganizationAction.php:160 +#: classes/Gems/Default/OrganizationAction.php:177 msgid "Participating organizations" msgstr "Participating organizations" #: classes/Gems/Default/OverviewPlanAction.php:115 #: classes/Gems/Default/ProjectSurveysAction.php:88 #: classes/Gems/Default/SurveyAction.php:203 -#: classes/Gems/Default/SurveyMaintenanceAction.php:409 msgid "survey" msgid_plural "surveys" msgstr[0] "survey" @@ -1614,14 +1684,12 @@ #: classes/Gems/Default/ProjectSurveysAction.php:69 #: classes/Gems/Default/ProjectTracksAction.php:67 #: classes/Gems/Default/SurveyAction.php:193 -#: classes/Gems/Default/TrackAction.php:329 msgid "From" msgstr "From" #: classes/Gems/Default/ProjectSurveysAction.php:70 #: classes/Gems/Default/ProjectTracksAction.php:68 #: classes/Gems/Default/SurveyAction.php:195 -#: classes/Gems/Default/TrackAction.php:331 msgid "Until" msgstr "Until" @@ -1630,12 +1698,10 @@ msgstr "Active surveys" #: classes/Gems/Default/ProjectTracksAction.php:65 -#: classes/Gems/Default/TrackAction.php:328 msgid "Survey #" msgstr "Survey #" #: classes/Gems/Default/ProjectTracksAction.php:85 -#: classes/Gems/Default/TrackAction.php:451 msgid "track" msgid_plural "tracks" msgstr[0] "track" @@ -1695,7 +1761,7 @@ #: classes/Gems/Default/ReceptionAction.php:94 msgid "This reception code can be assigned to a respondent." -msgstr "This reception code can be assigned to a respondent." +msgstr "This reception code can be assigned to a patient." #: classes/Gems/Default/ReceptionAction.php:95 msgid "For tracks" @@ -1801,8 +1867,6 @@ msgstr "Treatment" #: classes/Gems/Default/RespondentAction.php:230 -#: classes/Gems/Default/TrackAction.php:131 -#: classes/Gems/Default/TrackAction.php:475 msgid "Rejection code" msgstr "Rejection code" @@ -1815,45 +1879,39 @@ msgstr "Patient deleted" #: classes/Gems/Default/RespondentAction.php:291 -#: classes/Gems/Default/TrackAction.php:404 msgid "Choose a reception code to delete." msgstr "Choose a reception code to delete." -#: classes/Gems/Default/RespondentAction.php:355 +#: classes/Gems/Default/RespondentAction.php:335 msgid "respondent" msgid_plural "respondents" msgstr[0] "patient" msgstr[1] "patients" -#: classes/Gems/Default/RespondentAction.php:398 +#: classes/Gems/Default/RespondentAction.php:392 msgid "Please settle the informed consent form for this respondent." msgstr "Please settle the informed consent form for this patient." #: classes/Gems/Default/RespondentPlanAction.php:67 #: classes/Gems/Default/SurveyAction.php:171 -#: classes/Gems/Default/TrackAction.php:296 msgid "Show respondent" msgstr "Show patient" #: classes/Gems/Default/RespondentPlanAction.php:73 -#: classes/Gems/Default/TrackAction.php:265 -#: classes/Gems/Default/TrackAction.php:284 msgid "Show track" msgstr "Show track" #: classes/Gems/Default/RespondentPlanAction.php:136 -#: classes/Gems/Default/TrackAction.php:316 msgid " of " msgstr " of " #: classes/Gems/Default/RespondentPlanAction.php:137 -#: classes/Gems/Default/TrackAction.php:317 msgid "Progress" msgstr "Progress" #: classes/Gems/Default/RespondentPlanAction.php:144 msgid "Respondent planning" -msgstr "Respondent planning" +msgstr "Patient planning" #: classes/Gems/Default/RoleAction.php:175 msgid "Illegal name" @@ -1997,23 +2055,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:137 +#: classes/Gems/Default/StaffAction.php:158 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:153 +#: classes/Gems/Default/StaffAction.php:174 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:191 +#: classes/Gems/Default/StaffAction.php:208 msgid "Primary function" msgstr "Primary function" -#: classes/Gems/Default/StaffAction.php:197 +#: classes/Gems/Default/StaffAction.php:214 msgid "Logout on survey" msgstr "Logout on survey" -#: classes/Gems/Default/StaffAction.php:275 +#: classes/Gems/Default/StaffAction.php:283 msgid "staff member" msgid_plural "staff members" msgstr[0] "staff member" @@ -2116,42 +2174,42 @@ msgid "Checking survey results for the %s survey." msgstr "Checking survey results for the %s survey." -#: classes/Gems/Default/SurveyMaintenanceAction.php:348 +#: classes/Gems/Default/SurveyMaintenanceAction.php:347 msgid "Source" msgstr "Source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:349 +#: classes/Gems/Default/SurveyMaintenanceAction.php:348 msgid "Status in source" msgstr "Status in source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:353 +#: classes/Gems/Default/SurveyMaintenanceAction.php:352 msgid "Active in source" msgstr "Active in source" -#: classes/Gems/Default/SurveyMaintenanceAction.php:354 +#: classes/Gems/Default/SurveyMaintenanceAction.php:353 #, php-format msgid "Active in %s" msgstr "Active in %s" -#: classes/Gems/Default/SurveyMaintenanceAction.php:361 +#: classes/Gems/Default/SurveyMaintenanceAction.php:360 msgid "Single" msgstr "Single" -#: classes/Gems/Default/SurveyMaintenanceAction.php:394 +#: classes/Gems/Default/SurveyMaintenanceAction.php:393 #, php-format msgid "%d times in track." msgstr "%d times in track." -#: classes/Gems/Default/SurveyMaintenanceAction.php:396 +#: classes/Gems/Default/SurveyMaintenanceAction.php:395 #, php-format msgid "%d times in %d track(s)." msgstr "%d times in %d track(s)." -#: classes/Gems/Default/SurveyMaintenanceAction.php:400 +#: classes/Gems/Default/SurveyMaintenanceAction.php:399 msgid "Not used in track." msgstr "Not used in track." -#: classes/Gems/Default/SurveyMaintenanceAction.php:402 +#: classes/Gems/Default/SurveyMaintenanceAction.php:401 msgid "Not used in tracks." msgstr "Not used in tracks." @@ -2242,22 +2300,22 @@ msgid "(all fillers)" msgstr "(all fillers)" -#: classes/Gems/Default/TokenPlanAction.php:358 +#: classes/Gems/Defaul... [truncated message content] |
From: <gem...@li...> - 2011-11-17 10:59:37
|
Revision: 227 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=227&view=rev Author: matijsdejong Date: 2011-11-17 10:59:27 +0000 (Thu, 17 Nov 2011) Log Message: ----------- Preparation for #41 onLoad & getFormatted functionality: - onSave() function enters the value first, isNew next, then name and context, - SelectModelPaginator allows (future) interception of onLoad calls. Modified Paths: -------------- trunk/library/classes/Gems/Default/StaffAction.php trunk/library/classes/Gems/Model/RespondentModel.php trunk/library/classes/Gems/Model.php trunk/library/classes/Gems/Project/ProjectSettings.php trunk/library/classes/GemsEscort.php trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php trunk/library/classes/MUtil/Model/ModelAbstract.php trunk/library/classes/MUtil/Model/Save/ArraySaver.php trunk/library/snippets/EditTrackTokenSnippet.php Added Paths: ----------- trunk/library/classes/MUtil/Model/SelectModelPaginator.php Modified: trunk/library/classes/Gems/Default/StaffAction.php =================================================================== --- trunk/library/classes/Gems/Default/StaffAction.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/Gems/Default/StaffAction.php 2011-11-17 10:59:27 UTC (rev 227) @@ -98,7 +98,7 @@ case Gems_User_UserLoader::USER_STAFF: Gems_Model::addUserPassword($model); $passwordField = 'gup_password'; - $model->setOnSave($passwordField, array($this->project, 'getValueHashForModel')); + $model->setOnSave($passwordField, array($this->project, 'getValueHash')); break; case Gems_User_UserLoader::USER_OLD_STAFF: @@ -268,12 +268,13 @@ /** * Return an old style (< 1.5) hashed version of the input value. * - * @param string $name Optional name, is here for ModelAbstract setOnSave compatibility * @param string $value The value to hash. * @param boolean $new Optional is new, is here for ModelAbstract setOnSave compatibility + * @param string $name Optional name, is here for ModelAbstract setOnSave compatibility + * @param array $context Optional, the other values being saved * @return string The salted hash as a 32-character hexadecimal number. */ - public function getOldPasswordHash($name, $value, $new) + public function getOldPasswordHash($value, $isNew = false, $name = null, array $context = array()) { return md5($value); } Modified: trunk/library/classes/Gems/Model/RespondentModel.php =================================================================== --- trunk/library/classes/Gems/Model/RespondentModel.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/Gems/Model/RespondentModel.php 2011-11-17 10:59:27 UTC (rev 227) @@ -133,12 +133,13 @@ /** * Return a hashed version of the input value. * - * @param string $name Optional name, is here for ModelAbstract setOnSave compatibility - * @param string $value The value to hash. - * @param boolean $new Optional is new, is here for ModelAbstract setOnSave compatibility + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved * @return string The salted hash as a 32-character hexadecimal number. */ - public function formatSSN($name, $value, $new = false) + public function formatSSN($value, $isNew = false, $name = null, array $context = array()) { if ($value) { return $this->project->getValueHash($value); Modified: trunk/library/classes/Gems/Model.php =================================================================== --- trunk/library/classes/Gems/Model.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/Gems/Model.php 2011-11-17 10:59:27 UTC (rev 227) @@ -120,12 +120,15 @@ /** * Create a Gems project wide unique user id * - * @param string $name - * @param mixed $value - * @param boolean $isNew + * @see Gems_Model_ModelAbstract + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved * @return int */ - public function createGemsUserId($name, $value, $isNew) + public function createGemsUserId($value, $isNew = false, $name = null, array $context = array()) { if ($isNew || (null === $value)) { $creationTime = new Zend_Db_Expr('CURRENT_TIMESTAMP'); Modified: trunk/library/classes/Gems/Project/ProjectSettings.php =================================================================== --- trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/Gems/Project/ProjectSettings.php 2011-11-17 10:59:27 UTC (rev 227) @@ -224,17 +224,4 @@ return md5($salted, false); } - - /** - * Returns a salted hash on the - * - * @param string $name Fieldname - * @param string $value The value to hash - * @param string $isNew True when new - * @return string The salted hash as a 32-character hexadecimal number. - */ - public function getValueHashForModel($name, $value, $isNew = false) - { - return $this->getValueHash($value); - } } Modified: trunk/library/classes/GemsEscort.php =================================================================== --- trunk/library/classes/GemsEscort.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/GemsEscort.php 2011-11-17 10:59:27 UTC (rev 227) @@ -1207,12 +1207,13 @@ * * @deprecated Since 1.5 * - * @param string $name Optional name, is here for ModelAbstract setOnSave compatibility * @param string $value The value to hash. * @param boolean $new Optional is new, is here for ModelAbstract setOnSave compatibility + * @param string $name Optional name, is here for ModelAbstract setOnSave compatibility + * @param array $context Optional, the other values being saved * @return string The salted hash as a 32-character hexadecimal number. */ - public function passwordHash($name, $value, $new) + public function passwordHash($value, $isNew = false, $name = null, array $context = array()) { return $this->project->getValueHash($value); } Modified: trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2011-11-17 10:59:27 UTC (rev 227) @@ -596,14 +596,26 @@ throw new MUtil_Model_ModelException("Cannot create UniqueValue validator as no table was defined for field $name."); } - public function formatSaveDate($name, $value, $new = false) + /** + * A ModelAbstract->setOnSave() function that returns the input + * date as a valid date. + * + * @see Gems_Model_ModelAbstract + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return Zend_Date + */ + public function formatSaveDate($value, $isNew = false, $name = null) { if ($name && (! ((null === $value) || ($value instanceof Zend_Db_Expr)))) { if ($saveFormat = $this->get($name, 'storageFormat')) { if ($value instanceof Zend_Date) { return $value->toString($saveFormat); - + } else { $displayFormat = $this->get($name, 'dateFormat'); @@ -737,9 +749,10 @@ */ public function loadPaginator($filter = true, $sort = true) { - $select = $this->_createSelect($filter, $sort); + $select = $this->_createSelect($filter, $sort); + $adapter = new MUtil_Model_SelectModelPaginator($select, $this); - return Zend_Paginator::factory($select); + return new Zend_Paginator($adapter); } // abstract public function save(array $newValues); Modified: trunk/library/classes/MUtil/Model/ModelAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-11-17 10:59:27 UTC (rev 227) @@ -143,7 +143,7 @@ } if ($this->isSaveable($name, $value, $new)) { - $filteredData[$name] = $this->getOnSave($name, $value, $new); + $filteredData[$name] = $this->getOnSave($value, $new, $name, $data); } } @@ -579,12 +579,22 @@ return $this->_model_name; } - public function getOnSave($name, $value, $new = false) + /** + * Checks for and executes any actions to perform on a value before + * saving the value + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return mixed The value to save + */ + public function getOnSave($value, $new, $name, array $context = array()) { if ($call = $this->get($name, self::SAVE_TRANSFORMER)) { if (is_callable($call)) { - $value = call_user_func($call, $name, $value, $new); + $value = call_user_func($call, $value, $new, $name, $context); } else { $value = $call; } @@ -1107,6 +1117,13 @@ return $this; } + /** + * Sets a name to automatically determined/changed of value during save. + * + * @param string $name + * @param mixed $callableOrConstant A constant or a function of this type: callable($value, $isNew = false, $name = null, array $context = array()) + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setOnSave($name, $callableOrConstant) { $this->set($name, self::SAVE_TRANSFORMER, $callableOrConstant); Modified: trunk/library/classes/MUtil/Model/Save/ArraySaver.php =================================================================== --- trunk/library/classes/MUtil/Model/Save/ArraySaver.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/classes/MUtil/Model/Save/ArraySaver.php 2011-11-17 10:59:27 UTC (rev 227) @@ -75,7 +75,19 @@ return $class; } - public function saveValue($name, $value, $isNew) + /** + * A ModelAbstract->setOnSave() function that concatenates the + * value if it is an array. + * + * @see Gems_Model_ModelAbstract + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return Zend_Date + */ + public function saveValue($value, $isNew = false, $name = null, array $context = array()) { if (is_array($value)) { $value = implode($this->seperatorChar, $value); Added: trunk/library/classes/MUtil/Model/SelectModelPaginator.php =================================================================== --- trunk/library/classes/MUtil/Model/SelectModelPaginator.php (rev 0) +++ trunk/library/classes/MUtil/Model/SelectModelPaginator.php 2011-11-17 10:59:27 UTC (rev 227) @@ -0,0 +1,98 @@ +<?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 <COPYRIGHT HOLDER> 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 Model + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * This class wraps around a select as a paginator, while allowing model->onload + * functions to apply. + * + * @see MUtil_Model_DatabaseModelAbstract + * + * @package MUtil + * @subpackage Model + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class MUtil_Model_SelectModelPaginator implements Zend_Paginator_Adapter_Interface +{ + /** + * + * @var MUtil_Model_DatabaseModelAbstract + */ + protected $_model; + + /** + * + * @var Zend_Paginator_Adapter_DbSelect + */ + protected $_selectAdapter; + + /** + * + * @param Zend_Db_Select $select + * @param MUtil_Model_ModelAbstract $model + */ + public function __construct(Zend_Db_Select $select, MUtil_Model_DatabaseModelAbstract $model) + { + $this->_selectAdapter = new Zend_Paginator_Adapter_DbSelect($select); + $this->_model = $model; + } + + /** + * Returns the total number of rows in the result set. + * + * @return integer + */ + public function count() + { + return $this->_selectAdapter->count(); + } + + /** + * Returns an array of items for a page. + * + * @param integer $offset Page offset + * @param integer $itemCountPerPage Number of items per page + * @return array + */ + public function getItems($offset, $itemCountPerPage) + { + $items = $this->_selectAdapter->getItems($offset, $itemCountPerPage); + + return $items; + } +} Modified: trunk/library/snippets/EditTrackTokenSnippet.php =================================================================== --- trunk/library/snippets/EditTrackTokenSnippet.php 2011-11-17 08:45:52 UTC (rev 226) +++ trunk/library/snippets/EditTrackTokenSnippet.php 2011-11-17 10:59:27 UTC (rev 227) @@ -160,8 +160,8 @@ if ($this->formData[self::RECALCULATE_FIELD]) { $model = $this->getModel(); // Refresh token with current form data - $updateData['gto_valid_from'] = $model->getOnSave('gto_valid_from', $this->formData['gto_valid_from'], true); - $updateData['gto_valid_until'] = $model->getOnSave('gto_valid_until', $this->formData['gto_valid_until'], true); + $updateData['gto_valid_from'] = $model->getOnSave($this->formData['gto_valid_from'], true, 'gto_valid_from'); + $updateData['gto_valid_until'] = $model->getOnSave($this->formData['gto_valid_until'], true, 'gto_valid_until'); $updateData['gto_comment'] = $this->formData['gto_comment']; $this->token->refresh($updateData); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-17 16:19:34
|
Revision: 230 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=230&view=rev Author: matijsdejong Date: 2011-11-17 16:19:26 +0000 (Thu, 17 Nov 2011) Log Message: ----------- Continued with #41 onLoad & getFormatted functionality: - onLoad() functions work - started on Model_Types, made first that works, but not yet generalized Modified Paths: -------------- trunk/library/changelog.txt trunk/library/classes/Gems/Default/OrganizationAction.php trunk/library/classes/Gems/Export/ExportModel.php trunk/library/classes/Gems/Model/DbaModel.php trunk/library/classes/Gems/Tracker/SurveyModel.php trunk/library/classes/MUtil/Lazy/ArrayAccessor.php trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php trunk/library/classes/MUtil/Model/FormBridge.php trunk/library/classes/MUtil/Model/ModelAbstract.php trunk/library/classes/MUtil/Model/ModelTransformerAbstract.php trunk/library/classes/MUtil/Model/SelectModelPaginator.php trunk/library/classes/MUtil/Model/TableBridgeAbstract.php Added Paths: ----------- trunk/library/classes/MUtil/Model/Type/ trunk/library/classes/MUtil/Model/Type/ConcatenatedRow.php Removed Paths: ------------- trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php trunk/library/classes/MUtil/Form/Element/MultiSelect.php trunk/library/classes/MUtil/Model/Save/ Modified: trunk/library/changelog.txt =================================================================== --- trunk/library/changelog.txt 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/changelog.txt 2011-11-17 16:19:26 UTC (rev 230) @@ -7,6 +7,7 @@ The gems__respondent.grs_bsn has been renamed to grs_ssn, to make the code more international. MailController is now called MailTemplateController. EmailController is now called CronController (with stub for compatibility). +ModelAbstract now declares an protected _load instead of a public load abstract, for implementation of setOnLoad() functions, check your own Models for overloading load() or loadXX() functions. Important changes from 1.4.2 => 1.4.3 ============================================================ Modified: trunk/library/classes/Gems/Default/OrganizationAction.php =================================================================== --- trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/Gems/Default/OrganizationAction.php 2011-11-17 16:19:26 UTC (rev 230) @@ -149,12 +149,11 @@ $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); $model->set('gor_signature', 'label', $this->_('Signature'), 'description', $this->_('For emails and token forward screen.'), 'elementClass', 'Textarea', 'rows', 5); - - $model->set('gor_accessible_by', 'label', $this->_('Accessible by'), 'description', $this->_('Checked organizations see this organizations respondents.'), 'elementClass', 'MultiCheckbox', - 'multiOptions', $this->util->getDbLookup()->getOrganizations()); - MUtil_Model_Save_ArraySaver::create($model, 'gor_accessible_by', ':'); - } + $model->set('gor_accessible_by', 'label', $this->_('Accessible by'), 'description', $this->_('Checked organizations see this organizations respondents.'), + 'elementClass', 'MultiCheckbox', 'multiOptions', $this->util->getDbLookup()->getOrganizations()); + $tp = new MUtil_Model_Type_ConcatenatedRow(':', ', '); + $tp->apply($model, 'gor_accessible_by'); if ($this->project->multiLocale) { $model->set('gor_name', 'description', 'ENGLISH please! Use translation file to translate.'); Modified: trunk/library/classes/Gems/Export/ExportModel.php =================================================================== --- trunk/library/classes/Gems/Export/ExportModel.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/Gems/Export/ExportModel.php 2011-11-17 16:19:26 UTC (rev 230) @@ -54,6 +54,22 @@ parent::__construct('export'); } + /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + protected function _load($filter = true, $sort = true) + { + $result = array(); + foreach ($this->getItemsOrdered() as $item) { + $result[0][$item] = $item; + } + return $result; + } + public function delete($filter = true) { return false; @@ -64,15 +80,6 @@ return false; } - public function load($filter = true, $sort = true) - { - $result = array(); - foreach ($this->getItemsOrdered() as $item) { - $result[0][$item] = $item; - } - return $result; - } - public function save(array $newValues, array $filter = null) { return $newValues; Modified: trunk/library/classes/Gems/Model/DbaModel.php =================================================================== --- trunk/library/classes/Gems/Model/DbaModel.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/Gems/Model/DbaModel.php 2011-11-17 16:19:26 UTC (rev 230) @@ -120,6 +120,28 @@ } } + /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + protected function _load($filter = true, $sort = true) + { + $data = $this->_loadAllData(); + + if ($filter) { + $data = $this->_filterData($data, $this->_checkFilterUsed($filter)); + } + + if ($sort) { + $data = $this->_sortData($data, $this->_checkSortUsed($sort)); + } + + return $data; + } + private function _loadAllData() { $tables = $this->db->listTables(); @@ -347,21 +369,6 @@ return true; } - public function load($filter = true, $sort = true) - { - $data = $this->_loadAllData(); - - if ($filter) { - $data = $this->_filterData($data, $this->_checkFilterUsed($filter)); - } - - if ($sort) { - $data = $this->_sortData($data, $this->_checkSortUsed($sort)); - } - - return $data; - } - public function loadTable($tableName) { return $this->loadFirst(array('name' => $tableName), false); Modified: trunk/library/classes/Gems/Tracker/SurveyModel.php =================================================================== --- trunk/library/classes/Gems/Tracker/SurveyModel.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/Gems/Tracker/SurveyModel.php 2011-11-17 16:19:26 UTC (rev 230) @@ -26,7 +26,7 @@ * (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 Tracker * @author Matijs de Jong <mj...@ma...> @@ -75,6 +75,18 @@ } /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + protected function _load($filter = true, $sort = true) + { + return $this->addAnswers(parent::_load($filter, $sort)); + } + + /** * Returns a nested array containing the items requested, including answers. * * @param array $inputRows Nested rows with Gems token information @@ -113,18 +125,6 @@ } /** - * Returns a nested array containing the items requested. - * - * @param mixed $filter True to use the stored filter, array to specify a different filter - * @param mixed $sort True to use the stored sort, array to specify a different sort - * @return array Nested array or false - */ - public function load($filter = true, $sort = true) - { - return $this->addAnswers(parent::load($filter, $sort)); - } - - /** * Returns an array containing the first requested item. * * @param mixed $filter True to use the stored filter, array to specify a different filter @@ -145,18 +145,7 @@ */ public function loadPaginator($filter = true, $sort = true) { + // Do not use a select paginator for the moment, till we can add addAnswers() return Zend_Paginator::factory($this->load($filter, $sort)); } - - /** - * Returns a MUtil_Lazy_RepeatableInterface for the items in the model - * - * @param mixed $filter True to use the stored filter, array to specify a different filter - * @param mixed $sort True to use the stored sort, array to specify a different sort - * @return MUtil_Lazy_RepeatableInterface - */ - public function loadRepeatable($filter = true, $sort = true) - { - return MUtil_Lazy::repeat($this->load($filter, $sort)); - } } Deleted: trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php =================================================================== --- trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Form/Element/MultiCheckbox.php 2011-11-17 16:19:26 UTC (rev 230) @@ -1,143 +0,0 @@ -<?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 MUtil - * @subpackage Form - * @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 $ - */ - -/** - * This object allows you to supply a string value when the object expects an - * array value, splitting the string along the valueSeperatorChar. - * - * Return this value as a string is not practical as that breaks the workings - * of all Filters, Validators and Decorators. - * - * @package MUtil - * @subpackage Form - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @since Class available since version 1.5 - */ -class MUtil_Form_Element_MultiCheckbox extends Zend_Form_Element_MultiCheckbox -{ - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @var boolean - */ - protected $_valuePad = true; - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @var string - */ - protected $_valueSeperatorChar = null; - - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @return boolean - */ - public function getValuePad() - { - return $this->_valuePad; - } - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @return string - */ - public function getValueSeperatorChar() - { - return $this->_valueSeperatorChar; - } - - /** - * Set element value - * - * @param mixed $value - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValue($value) - { - if ((null !== $this->_valueSeperatorChar) && (! is_array($value))) { - if ($this->_valuePad) { - $value = trim($value, $this->_valueSeperatorChar); - } - $value = explode($this->_valueSeperatorChar, $value); - } - - return parent::setValue($value); - } - - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @param boolean $value - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValuePad($value = true) - { - $this->_valuePad = $value; - return $this; - } - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @param string $seperator - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValueSeperatorChar($seperator = ' ') - { - $this->_valueSeperatorChar = substr($seperator . ' ', 0, 1); - return $this; - } -} Deleted: trunk/library/classes/MUtil/Form/Element/MultiSelect.php =================================================================== --- trunk/library/classes/MUtil/Form/Element/MultiSelect.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Form/Element/MultiSelect.php 2011-11-17 16:19:26 UTC (rev 230) @@ -1,143 +0,0 @@ -<?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 MUtil - * @subpackage Form - * @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 $ - */ - -/** - * This object allows you to supply a string value when the object expects an - * array value, splitting the string along the valueSeperatorChar. - * - * Return this value as a string is not practical as that breaks the workings - * of all Filters, Validators and Decorators. - * - * @package MUtil - * @subpackage Form - * @copyright Copyright (c) 2011 Erasmus MC - * @license New BSD License - * @since Class available since version 1.5 - */ -class MUtil_Form_Element_MultiSelect extends Zend_Form_Element_MultiSelect -{ - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @var boolean - */ - protected $_valuePad = true; - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @var string - */ - protected $_valueSeperatorChar = null; - - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @return boolean - */ - public function getValuePad() - { - return $this->_valuePad; - } - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @return string - */ - public function getValueSeperatorChar() - { - return $this->_valueSeperatorChar; - } - - /** - * Set element value - * - * @param mixed $value - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValue($value) - { - if ((null !== $this->_valueSeperatorChar) && (! is_array($value))) { - if ($this->_valuePad) { - $value = trim($value, $this->_valueSeperatorChar); - } - $value = explode($this->_valueSeperatorChar, $value); - } - - return parent::setValue($value); - } - - /** - * En/disables padding the value in separators. The default is true as this - * simplifies search commands (and usually costs only 2 characters). - * - * @param boolean $value - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValuePad($value = true) - { - $this->_valuePad = $value; - return $this; - } - - /** - * The value seperator enables this control to accept a single string as value - * and split it into an array. - * - * A null seperator means this class behaves as it's parent class and returns an - * array value. - * - * @param string $seperator - * @return MUtil_Form_Element_MultiCheckbox (continuation pattern) - */ - public function setValueSeperatorChar($seperator = ' ') - { - $this->_valueSeperatorChar = substr($seperator . ' ', 0, 1); - return $this; - } -} Modified: trunk/library/classes/MUtil/Lazy/ArrayAccessor.php =================================================================== --- trunk/library/classes/MUtil/Lazy/ArrayAccessor.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Lazy/ArrayAccessor.php 2011-11-17 16:19:26 UTC (rev 230) @@ -1,41 +1,49 @@ <?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 Lazy + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ */ +/** + * + * @package MUtil + * @subpackage Lazy + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.1 + */ + class MUtil_Lazy_ArrayAccessor extends MUtil_Lazy_LazyAbstract { private $_array; @@ -67,12 +75,22 @@ $offset = $offset->__toValue($stack); } - // MUtil_Echo::r($array, '[' . $offset . ']'); + // MUtil_Echo::track($array, 'offset', $offset); if (null === $offset) { if (isset($array[''])) { return $array['']; } + } elseif (is_array($offset)) { + // When the offset is itself an array, return an + // array of values applied to this offset. + $results = array(); + foreach ($offset as $key => $value) { + if (isset($array[$value])) { + $results[$key] = $array[$value]; + } + } + return $results; } elseif (isset($array[$offset])) { return $array[$offset]; } Modified: trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2011-11-17 16:19:26 UTC (rev 230) @@ -241,7 +241,7 @@ } } - return $this->_filterDataArray($tableData, $isNew); + return $this->_filterDataForSave($tableData, $isNew); } protected function _getKeysFor($table_name) @@ -261,6 +261,18 @@ return $table->info(Zend_Db_Table_Abstract::NAME); } + /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + protected function _load($filter = true, $sort = true) + { + return $this->_createSelect($filter, $sort)->query(Zend_Db::FETCH_ASSOC)->fetchAll(); + } + protected function _loadTableMetaData(Zend_Db_Table_Abstract $table) { $table_name = $this->_getTableName($table); @@ -608,7 +620,7 @@ * @param array $context Optional, the other values being saved * @return Zend_Date */ - public function formatSaveDate($value, $isNew = false, $name = null) + public function formatSaveDate($value, $isNew = false, $name = null, array $context = array()) { if ($name && (! ((null === $value) || ($value instanceof Zend_Db_Expr)))) { if ($saveFormat = $this->get($name, 'storageFormat')) { @@ -714,18 +726,6 @@ } /** - * Returns a nested array containing the items requested. - * - * @param mixed $filter True to use the stored filter, array to specify a different filter - * @param mixed $sort True to use the stored sort, array to specify a different sort - * @return array Nested array or false - */ - public function load($filter = true, $sort = true) - { - return $this->_createSelect($filter, $sort)->query(Zend_Db::FETCH_ASSOC)->fetchAll(); - } - - /** * Returns an array containing the first requested item. * * @param mixed $filter True to use the stored filter, array to specify a different filter @@ -737,7 +737,12 @@ $select = $this->_createSelect($filter, $sort); $select->limit(1, 0); - return $select->query(Zend_Db::FETCH_ASSOC)->fetch(); + $data = $select->query(Zend_Db::FETCH_ASSOC)->fetch(); + if (is_array($data)) { + $data = $this->_filterDataAfterLoad($data, false); + } + + return $data; } /** @@ -755,6 +760,26 @@ return new Zend_Paginator($adapter); } + /** + * Helper function for SelectModelPaginator to process + * setOnLoads. + * + * @see MUtil_Model_SelectModelPaginator + * + * @param array $data Nested array + * @return array Nested + */ + public function processAfterLoad(array $data) + { + if ($this->getMeta(parent::LOAD_TRANSFORMER)) { + foreach ($data as $key => $row) { + $data[$key] = $this->_filterDataAfterLoad($row, false); + } + } + + return $data; + } + // abstract public function save(array $newValues); public function setCreate($value = true) Modified: trunk/library/classes/MUtil/Model/FormBridge.php =================================================================== --- trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/FormBridge.php 2011-11-17 16:19:26 UTC (rev 230) @@ -85,7 +85,7 @@ self::FILE_OPTIONS => array('accept', 'count', 'destination', 'valueDisabled'), self::GROUP_OPTIONS => array('elements', 'legend', 'separator'), self::JQUERY_OPTIONS => array('jQueryParams'), - self::MULTI_OPTIONS => array('disable', 'multiOptions', 'onchange', 'separator', 'size', 'valuePad', 'valueSeperatorChar'), + self::MULTI_OPTIONS => array('disable', 'multiOptions', 'onchange', 'separator', 'size'), self::PASSWORD_OPTIONS => array('repeatLabel'), self::TAB_OPTIONS => array('value'), self::TEXT_OPTIONS => array('maxlength', 'minlength', 'onchange', 'onfocus', 'onselect', 'size'), @@ -538,7 +538,7 @@ $options = $this->_mergeOptions($name, $options, self::DISPLAY_OPTIONS, self::MULTI_OPTIONS); - $element = new MUtil_Form_Element_MultiCheckbox($name, $options); + $element = new Zend_Form_Element_MultiCheckbox($name, $options); return $this->_addToForm($name, $element); } @@ -562,7 +562,7 @@ $options = $this->_mergeOptions($name, $options, self::DISPLAY_OPTIONS, self::MULTI_OPTIONS); - $element = new MUtil_Form_Element_Multiselect($name, $options); + $element = new Zend_Form_Element_Multiselect($name, $options); return $this->_addToForm($name, $element); } Modified: trunk/library/classes/MUtil/Model/ModelAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/ModelAbstract.php 2011-11-17 16:19:26 UTC (rev 230) @@ -61,6 +61,7 @@ { const ALIAS_OF = 'alias_of'; const AUTO_SAVE = 'auto_save'; + const LOAD_TRANSFORMER = 'load_transformer'; const SAVE_TRANSFORMER = 'save_transformer'; const SAVE_WHEN_TEST = 'save_when_test'; @@ -132,8 +133,41 @@ } } - protected function _filterDataArray(array $data, $new = false) + /** + * Processes empty strings, filters items that should not be saved + * according to setSaveWhen() and changes values that have a setOnSave() + * function. + * + * @see setOnSave + * @set setSaveWhen + * + * @param array $data The values to save + * @param boolean $new True when it is a new item + * @return array The possibly adapted array of values + */ + protected function _filterDataAfterLoad(array $data, $new = false) { + foreach ($data as $name => $value) { + $data[$name] = $this->getOnLoad($value, $new, $name, $data); + } + + return $data; + } + + /** + * Processes empty strings, filters items that should not be saved + * according to setSaveWhen() and changes values that have a setOnSave() + * function. + * + * @see setOnSave + * @set setSaveWhen + * + * @param array $data The values to save + * @param boolean $new True when it is a new item + * @return array The possibly adapted array of values + */ + protected function _filterDataForSave(array $data, $new = false) + { // MUtil_Echo::r($data, 'preFilter'); foreach ($data as $name => $value) { @@ -142,7 +176,7 @@ $value = null; } - if ($this->isSaveable($name, $value, $new)) { + if ($this->isSaveable($value, $new, $name, $data)) { $filteredData[$name] = $this->getOnSave($value, $new, $name, $data); } } @@ -181,6 +215,15 @@ } } + /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + abstract protected function _load($filter = true, $sort = true); + protected function addChanged($add = 1) { $this->_changedCount += $add; @@ -580,6 +623,30 @@ } /** + * Checks for and executes any actions to perform on a value after + * loading the value + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return mixed The value to save + */ + public function getOnLoad($value, $new, $name, array $context = array()) + { + if ($call = $this->get($name, self::LOAD_TRANSFORMER)) { + + if (is_callable($call)) { + $value = call_user_func($call, $value, $new, $name, $context); + } else { + $value = $call; + } + } + + return $value; + } + + /** * Checks for and executes any actions to perform on a value before * saving the value * @@ -734,12 +801,13 @@ /** * Must the model save field $name with this $value and / or this $new values. * - * @param string $name The name of a field - * @param mixed $value The value being changed - * @param boolean $new True if the item is a new item saved for the first time + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved * @return boolean True if the data can be saved */ - public function isSaveable($name, $value, $new = false) + public function isSaveable($value, $new, $name, array $context = array()) { if ($test = $this->get($name, self::SAVE_WHEN_TEST)) { @@ -769,20 +837,35 @@ * @param mixed $sort True to use the stored sort, array to specify a different sort * @return array Nested array or false */ - abstract public function load($filter = true, $sort = true); + public function load($filter = true, $sort = true) + { + $data = $this->_load($filter, $sort); + if (is_array($data) && $this->getMeta(self::LOAD_TRANSFORMER)) { + foreach ($data as $key => $row) { + $data[$key] = $this->_filterDataAfterLoad($row, false); + } + } + + return $data; + } + /** * Returns an array containing the first requested item. * - * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $filter True to use the stored filter, array to specify a different filteloa * @param mixed $sort True to use the stored sort, array to specify a different sort * @return array An array or false */ public function loadFirst($filter = true, $sort = true) { - $data = $this->load($filter, $sort); + $data = $this->_load($filter, $sort); // Return the first row or null. - return reset($data); + $data = reset($data); + if (is_array($data) && $this->getMeta(self::LOAD_TRANSFORMER)) { + $data = $this->_filterDataAfterLoad($data, false); + } + return $data; } /** @@ -801,6 +884,7 @@ $empty[$name] = null; } } + $empty = $this->_filterDataAfterLoad($empty, true); // Return only a single row when no count is specified if (null === $count) { @@ -1118,36 +1202,76 @@ } /** - * Sets a name to automatically determined/changed of value during save. + * Sets a name to automatically change a value after a load. * - * @param string $name + * @param string $name The fieldname * @param mixed $callableOrConstant A constant or a function of this type: callable($value, $isNew = false, $name = null, array $context = array()) * @return MUtil_Model_ModelAbstract (continuation pattern) */ + public function setOnLoad($name, $callableOrConstant) + { + // Make sure we store that there is some OnLoad function. + $this->setMeta(self::LOAD_TRANSFORMER, true); + $this->set($name, self::LOAD_TRANSFORMER, $callableOrConstant); + return $this; + } + + /** + * Sets a name to an automatically determined or changed of value before a save. + * + * @param string $name The fieldname + * @param mixed $callableOrConstant A constant or a function of this type: callable($value, $isNew = false, $name = null, array $context = array()) + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setOnSave($name, $callableOrConstant) { $this->set($name, self::SAVE_TRANSFORMER, $callableOrConstant); return $this; } + /** + * Set this field to be saved whenever there is anything to save at all. + * + * @param string $name The fieldname + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setSaveOnChange($name) { $this->setAutoSave($name); return $this->setSaveWhen($name, true); } + /** + * Set this field to be saved whenever a constant is true or a callable returns true. + * + * @param string $name The fieldname + * @param mixed $callableOrConstant A constant or a function of this type: callable($value, $isNew = false, $name = null, array $context = array()) boolean + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setSaveWhen($name, $callableOrConstant) { $this->set($name, self::SAVE_WHEN_TEST, $callableOrConstant); return $this; } + /** + * Set this field to be saved only when it is a new item. + * + * @param string $name The fieldname + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setSaveWhenNew($name) { $this->setAutoSave($name); return $this->setSaveWhen($name, array(__CLASS__, 'whenNotNew')); } + /** + * Set this field to be saved only when it is not empty. + * + * @param string $name The fieldname + * @return MUtil_Model_ModelAbstract (continuation pattern) + */ public function setSaveWhenNotNull($name) { return $this->setSaveWhen($name, array(__CLASS__, 'whenNotNull')); @@ -1183,12 +1307,35 @@ } } - public static function whenNotNew($name, $value, $new) + /** + * A ModelAbstract->setSaveWhen() function that true when a new item is saved.. + * + * @see setSaveWhen() + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return boolean + */ + public static function whenNotNew($value, $isNew = false, $name = null, array $context = array()) { return $new; } - public static function whenNotNull($name, $value, $new) + /** + * A ModelAbstract->setSaveWhen() function that true when the value + * is not null. + * + * @see setSaveWhen() + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return boolean + */ + public static function whenNotNull($value, $isNew = false, $name = null, array $context = array()) { return null !== $value; } Modified: trunk/library/classes/MUtil/Model/ModelTransformerAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/ModelTransformerAbstract.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/ModelTransformerAbstract.php 2011-11-17 16:19:26 UTC (rev 230) @@ -1,33 +1,33 @@ <?php - -/** - * Copyright (c) 2011, Erasmus MC - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Erasmus MC nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - + /** + * Copyright (c) 2011, Erasmus MC + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Erasmus MC nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** * @author Matijs de Jong * @since 1.0 * @version 1.1 @@ -43,7 +43,7 @@ $paramTypes['sourceModel'] = 'MUtil_Model_ModelAbstract'; $paramTypes['name'] = 'is_string'; - $args = MUtil_Ra::args($args, $paramTypes); + $args = MUtil_Ra::args($args, $paramTypes); if (isset($args['name'])) { $name = $args['name']; @@ -77,6 +77,20 @@ } } + /** + * Returns a nested array containing the items requested. + * + * @param mixed $filter True to use the stored filter, array to specify a different filter + * @param mixed $sort True to use the stored sort, array to specify a different sort + * @return array Nested array or false + */ + protected function _load($filter = true, $sort = true) + { + $data = $this->sourceModel->_load($filter, $sort); + + return $this->transform($data, $filter, $sort); + } + public function delete($filter = true) { throw new Exception('Cannot delete ' . get_class($this) . ' data.'); @@ -134,7 +148,7 @@ } } - public function getSourceModel() + public function getSourceModel() { return $this->sourceModel; } @@ -160,13 +174,6 @@ return false; } - public function load($filter = true, $sort = true) - { - $data = $this->sourceModel->load($filter, $sort); - - return $this->transform($data, $filter, $sort); - } - public function resetOrder() { if ($this->sourceModel) { @@ -206,7 +213,7 @@ return $this; } - public function setSourceModel(MUtil_Model_ModelAbstract $model) + public function setSourceModel(MUtil_Model_ModelAbstract $model) { $this->sourceModel = $model; return $this; Modified: trunk/library/classes/MUtil/Model/SelectModelPaginator.php =================================================================== --- trunk/library/classes/MUtil/Model/SelectModelPaginator.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/SelectModelPaginator.php 2011-11-17 16:19:26 UTC (rev 230) @@ -93,6 +93,12 @@ { $items = $this->_selectAdapter->getItems($offset, $itemCountPerPage); + // MUtil_Echo::track($items); + if ($items && is_array($items)) { + $items = $this->_model->processAfterLoad($items); + } + // MUtil_Echo::track($items); + return $items; } } Modified: trunk/library/classes/MUtil/Model/TableBridgeAbstract.php =================================================================== --- trunk/library/classes/MUtil/Model/TableBridgeAbstract.php 2011-11-17 14:20:41 UTC (rev 229) +++ trunk/library/classes/MUtil/Model/TableBridgeAbstract.php 2011-11-17 16:19:26 UTC (rev 230) @@ -104,6 +104,7 @@ private static function _applyDisplayFunction($item, $function) { + // MUtil_Echo::track($function); if (is_callable($function)) { return call_user_func($function, $item); } @@ -127,7 +128,9 @@ } elseif (is_array($function)) { foreach ($function as $display) { - $item = self::_applyDisplayFunction($item, $display); + if ($display !== null) { + $item = self::_applyDisplayFunction($item, $display); + } } } Property changes on: trunk/library/classes/MUtil/Model/Type ___________________________________________________________________ Added: bugtraq:url + http://survey.erasmusmc.nl/support/mantis/view.php?id=%BUGID% Added: bugtraq:logregex + #(\d+) Added: trunk/library/classes/MUtil/Model/Type/ConcatenatedRow.php =================================================================== --- trunk/library/classes/MUtil/Model/Type/ConcatenatedRow.php (rev 0) +++ trunk/library/classes/MUtil/Model/Type/ConcatenatedRow.php 2011-11-17 16:19:26 UTC (rev 230) @@ -0,0 +1,137 @@ +<?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 <COPYRIGHT HOLDER> 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 Model + * @author Matijs de Jong <mj...@ma...> + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @version $Id$ + */ + +/** + * + * + * @package MUtil + * @subpackage Model + * @copyright Copyright (c) 2011 Erasmus MC + * @license New BSD License + * @since Class available since version 1.5 + */ +class MUtil_Model_Type_ConcatenatedRow +{ + protected $displaySeperator = ' '; + + protected $seperatorChar = ' '; + + protected $valuePad = true; + + public function __construct($seperatorChar = ' ', $displaySeperator = ' ', $valuePad = true) + { + $this->seperatorChar = substr($seperatorChar . ' ', 0, 1); + $this->displaySeperator = $displaySeperator; + $this->valuePad = $valuePad; + } + + /** + * If this field is saved as an array value, use + * + * @param MUtil_Model_ModelAbstract $model + * @param string $name The field to set the seperator character + * @return MUtil_Model_Type_ConcatenatedRow (continuation pattern) + */ + public function apply(MUtil_Model_ModelAbstract $model, $name) + { + $model->set($name, 'formatFunction', array($this, 'format')); + $model->setOnLoad($name, array($this, 'loadValue')); + $model->setOnSave($name, array($this, 'saveValue')); + + return $this; + } + + public function format($value) + { + // MUtil_Echo::track($value); + if (is_array($value)) { + return implode($this->displaySeperator, $value); + } else { + return $value; + } + } + + /** + * A ModelAbstract->setOnSave() function that concatenates the + * value if it is an array. + * + * @see Gems_Model_ModelAbstract + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return array Of the values + */ + public function loadValue($value, $isNew = false, $name = null, array $context = array()) + { + // MUtil_Echo::track($value); + if (! is_array($value)) { + if ($this->valuePad) { + $value = trim($value, $this->seperatorChar); + } + $value = explode($this->seperatorChar, $value); + } + // MUtil_Echo::track($value); + + return $value; + } + + /** + * A ModelAbstract->setOnSave() function that concatenates the + * value if it is an array. + * + * @see Gems_Model_ModelAbstract + * + * @param mixed $value The value being saved + * @param boolean $isNew True when a new item is being saved + * @param string $name The name of the current field + * @param array $context Optional, the other values being saved + * @return string Of the values concatenated + */ + public function saveValue($value, $isNew = false, $name = null, array $context = array()) + { + if (is_array($value)) { + $value = implode($this->seperatorChar, $value); + + if ($this->valuePad) { + $value = $this->seperatorChar . $value . $this->seperatorChar; + } + } + return $value; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gem...@li...> - 2011-11-19 18:01:13
|
Revision: 240 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=240&view=rev Author: michieltcs Date: 2011-11-19 18:01:07 +0000 (Sat, 19 Nov 2011) Log Message: ----------- Fix typo Modified Paths: -------------- trunk/library/classes/Gems/Auth.php trunk/library/configs/db/patches.sql trunk/library/configs/db/tables/gems__user_login_attempts.10.sql Modified: trunk/library/classes/Gems/Auth.php =================================================================== --- trunk/library/classes/Gems/Auth.php 2011-11-19 17:59:24 UTC (rev 239) +++ trunk/library/classes/Gems/Auth.php 2011-11-19 18:01:07 UTC (rev 240) @@ -110,7 +110,7 @@ try { $login_name = $formValues['userlogin']; $organization = $formValues['organization']; - $sql = "SELECT gula_failed_logins, gula_last_failed FROM gems__user_login_attemps WHERE gula_login = ? AND gula_id_organization = ?"; + $sql = "SELECT gula_failed_logins, gula_last_failed FROM gems__user_login_attempts WHERE gula_login = ? AND gula_id_organization = ?"; $values = $this->db->fetchRow($sql, array($login_name, $organization)); if (! $values) { @@ -168,11 +168,11 @@ try { if (isset($values['gula_login'])) { - $this->db->insert('gems__user_login_attemps', $values); + $this->db->insert('gems__user_login_attempts', $values); } else { $where = $this->db->quoteInto('gula_login = ? AND ', $login_name); $where .= $this->db->quoteInto('gula_id_organization = ?', $organization); - $this->db->update('gems__user_login_attemps', $values, $where); + $this->db->update('gems__user_login_attempts', $values, $where); } } catch (Zend_Db_Exception $e) { // Fall through as this does not work if the database upgrade did not run Modified: trunk/library/configs/db/patches.sql =================================================================== --- trunk/library/configs/db/patches.sql 2011-11-19 17:59:24 UTC (rev 239) +++ trunk/library/configs/db/patches.sql 2011-11-19 18:01:07 UTC (rev 240) @@ -249,7 +249,7 @@ AUTO_INCREMENT = 10001 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; -CREATE TABLE if not exists gems__user_login_attemps ( +CREATE TABLE if not exists gems__user_login_attempts ( gula_login varchar(30) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, gula_id_organization bigint not null references gems__organizations (gor_id_organization), Modified: trunk/library/configs/db/tables/gems__user_login_attempts.10.sql =================================================================== --- trunk/library/configs/db/tables/gems__user_login_attempts.10.sql 2011-11-19 17:59:24 UTC (rev 239) +++ trunk/library/configs/db/tables/gems__user_login_attempts.10.sql 2011-11-19 18:01:07 UTC (rev 240) @@ -1,7 +1,7 @@ -- Table for keeping track of fail;ed login attempts -- -CREATE TABLE if not exists gems__user_login_attemps ( +CREATE TABLE if not exists gems__user_login_attempts ( gula_login varchar(30) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' not null, gula_id_organization bigint not null references gems__organizations (gor_id_organization), 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. |