Skip to content

Commit

Permalink
Fixed issue #15994: Batch-Edit shows "lskeep" after modification of e…
Browse files Browse the repository at this point in the history
…mail status (#1584)

Code Review.
Created a checkbox for "emailstatus" edit only
Don't update "email" if email is empty even if checkbox is checked (no way to set [empty string] to email with Batch edit
Removed placeholder for emailstatus. It was confusing.
  • Loading branch information
gabrieljenik committed Sep 22, 2020
1 parent dbd8a8e commit 539e6c9
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 81 deletions.
170 changes: 90 additions & 80 deletions application/controllers/admin/tokens.php
Expand Up @@ -383,103 +383,113 @@ public function editMultiple()
$aTokenIds = json_decode(Yii::app()->request->getPost('sItems'));
$iSurveyId = Yii::app()->request->getPost('sid');
$aResults = array();
$bUpdate = true;

if (Permission::model()->hasSurveyPermission($iSurveyId, 'tokens', 'update')) {
// CHECK TO SEE IF A Survey participants table EXISTS FOR THIS SURVEY
if (tableExists('{{tokens_' . $iSurveyId . '}}')) {

// First we create the array of fields to update
$aData = array();
$aResults['global']['result'] = true;
// Valid from
if (trim(Yii::app()->request->getPost('validfrom', 'lskeep')) != 'lskeep') {
if (trim(Yii::app()->request->getPost('validfrom', 'lskeep')) == '') {
$aData['validfrom'] = null;
} else {
$aData['validfrom'] = date('Y-m-d H:i:s', strtotime(trim($_POST['validfrom'])));
}
}
if (!Permission::model()->hasSurveyPermission($iSurveyId, 'tokens', 'update')) {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT("We are sorry but you don't have permissions to do this.");
$bUpdate = false;
}

// Valid until
if (trim(Yii::app()->request->getPost('validuntil', 'lskeep')) != 'lskeep') {
if (trim(Yii::app()->request->getPost('validuntil')) == '') {
$aData['validuntil'] = null;
} else {
$aData['validuntil'] = date('Y-m-d H:i:s', strtotime(trim($_POST['validuntil'])));
}
}
// CHECK TO SEE IF A Survey participants table EXISTS FOR THIS SURVEY
if ($bUpdate && !tableExists('{{tokens_' . $iSurveyId . '}}')) {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT('No participant table found for this survey!');
$bUpdate = false;
}

// Email
if (trim(Yii::app()->request->getPost('email', 'lskeep')) != 'lskeep') {
$isValid = preg_match('/^([a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+))(,([a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)))*$/', Yii::app()->request->getPost('email'));
if ($isValid) {
$aData['email'] = Yii::app()->request->getPost('email');
} else {
$aData['email'] = 'lskeep';
}
}
// First we create the array of fields to update
$aData = array();

// Core Fields
$aCoreTokenFields = array('firstname', 'lastname', 'emailstatus', 'token', 'language', 'sent', 'remindersent', 'remindercount', 'completed', 'usesleft');
foreach ($aCoreTokenFields as $sCoreTokenField) {
if (trim(Yii::app()->request->getPost($sCoreTokenField, 'lskeep')) != 'lskeep') {
$value = flattenText(Yii::app()->request->getPost($sCoreTokenField));
if ($sCoreTokenField == 'language' && empty($value)) {
continue;
}
if (($sCoreTokenField == 'sent' || $sCoreTokenField == 'remindersent' || $sCoreTokenField == 'completed') && empty($value)) {
$value='N';
}
$aData[$sCoreTokenField] = $value;
// Email
if ($bUpdate && trim(Yii::app()->request->getPost('email', 'lskeep')) != 'lskeep') {
$isValid = preg_match('/^([a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+))(,([a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)))*$/', Yii::app()->request->getPost('email'));
if ($isValid) {
$aData['email'] = Yii::app()->request->getPost('email');
} else {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT('The email address is invalid. It was not updated.');
$bUpdate = false;
}
}

// Valid from
if ($bUpdate && trim(Yii::app()->request->getPost('validfrom', 'lskeep')) != 'lskeep') {
if (trim(Yii::app()->request->getPost('validfrom', 'lskeep')) == '') {
$aData['validfrom'] = null;
} else {
$aData['validfrom'] = date('Y-m-d H:i:s', strtotime(trim($_POST['validfrom'])));
}
}

// Valid until
if ($bUpdate && trim(Yii::app()->request->getPost('validuntil', 'lskeep')) != 'lskeep') {
if (trim(Yii::app()->request->getPost('validuntil')) == '') {
$aData['validuntil'] = null;
} else {
$aData['validuntil'] = date('Y-m-d H:i:s', strtotime(trim($_POST['validuntil'])));
}
}

if ($bUpdate) {
// Core Fields
$aCoreTokenFields = array('firstname', 'lastname', 'emailstatus', 'token', 'language', 'sent', 'remindersent', 'remindercount', 'completed', 'usesleft');
foreach ($aCoreTokenFields as $sCoreTokenField) {
if (trim(Yii::app()->request->getPost($sCoreTokenField, 'lskeep')) != 'lskeep') {
$value = flattenText(Yii::app()->request->getPost($sCoreTokenField));
if ($sCoreTokenField == 'language' && empty($value)) {
continue;
}
if (($sCoreTokenField == 'sent' || $sCoreTokenField == 'remindersent' || $sCoreTokenField == 'completed') && empty($value)) {
$value='N';
}
$aData[$sCoreTokenField] = $value;
}
}

// Attibutes fields
$attrfieldnames = GetParticipantAttributes($iSurveyId);
foreach ($attrfieldnames as $attr_name => $desc) {
if (trim(Yii::app()->request->getPost($attr_name, 'lskeep')) != 'lskeep') {
$value = flattenText(Yii::app()->request->getPost($attr_name));
if ($desc['mandatory'] == 'Y' && trim($value) == '') {
Yii::app()->setFlashMessage(sprintf(gT('%s cannot be left empty'), $desc['description']), 'error');
$this->getController()->refresh();
}
$aData[$attr_name] = $value;
// Attibutes fields
$attrfieldnames = GetParticipantAttributes($iSurveyId);
foreach ($attrfieldnames as $attr_name => $desc) {
if (trim(Yii::app()->request->getPost($attr_name, 'lskeep')) != 'lskeep') {
$value = flattenText(Yii::app()->request->getPost($attr_name));
if ($desc['mandatory'] == 'Y' && trim($value) == '') {
$aResults['global']['result'] = false;
$aResults['global']['message'] = sprintf(gT('%s cannot be left empty'), $desc['description']);
$bUpdate = false;
break;
}
$aData[$attr_name] = $value;
}
}
}

if (count($aData) > 0) {
foreach ($aTokenIds as $iTokenId) {
$iTokenId = (int)$iTokenId;
$token = Token::model($iSurveyId)->find('tid=' . $iTokenId);
if ($bUpdate && count($aData) == 0) {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT('Nothing to update');
$bUpdate = false;
}

foreach ($aData as $k => $v) {
$token->$k = $v;
}
if ($bUpdate) {
$aResults['global']['result'] = true;
foreach ($aTokenIds as $iTokenId) {
$iTokenId = (int)$iTokenId;
$token = Token::model($iSurveyId)->find('tid=' . $iTokenId);

$bUpdateSuccess = $token->update();
if ($bUpdateSuccess) {
$aResults[$iTokenId]['status'] = true;
$aResults[$iTokenId]['message'] = gT('Updated');
} else {
$aResults[$iTokenId]['status'] = false;
$aResults[$iTokenId]['message'] = $token->error;
}
}
} else {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT('Nothing to update');
foreach ($aData as $k => $v) {
$token->$k = $v;
}

} else {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT('No participant table found for this survey!');
$bUpdateSuccess = $token->update();
if ($bUpdateSuccess) {
$aResults[$iTokenId]['status'] = true;
$aResults[$iTokenId]['message'] = gT('Updated');
} else {
$aResults[$iTokenId]['status'] = false;
$aResults[$iTokenId]['message'] = $token->error;
}
}
} else {
$aResults['global']['result'] = false;
$aResults['global']['message'] = gT("We are sorry but you don't have permissions to do this.");
}


Yii::app()->getController()->renderPartial('/admin/token/massive_actions/_update_results', array('aResults' => $aResults));

}
Expand Down
9 changes: 8 additions & 1 deletion application/views/admin/token/massive_actions/_update.php
Expand Up @@ -162,12 +162,19 @@ class="YesNoDatePicker form-control"
<input class='form-control custom-data selector_submitField action_validate_email' data-targetfield="#massedit_emailstatus" type='text' maxlength='320' size='50' id='massedit_email' name='email' value="lskeep" disabled />
</div>
</div>
</div>

<!-- Email status -->
<div class="form-group">
<div class="row">
<div class="col-sm-1">
<label class="" >
<input type="checkbox" class="action_check_to_keep_old_value"></input>
</label>
</div>
<label class="col-sm-3 control-label" for='massedit_emailstatus'><?php eT("Email status:"); ?></label>
<div class="col-sm-8">
<input class='form-control custom-data selector_submitField' type='text' maxlength='320' size='50' id='massedit_emailstatus' name='emailstatus' placeholder='OK' value="lskeep" disabled />
<input class='form-control custom-data selector_submitField' type='text' maxlength='320' size='50' id='massedit_emailstatus' name='emailstatus' placeholder='' value="lskeep" disabled />
</div>
</div>
</div>
Expand Down

0 comments on commit 539e6c9

Please sign in to comment.