Skip to content

Commit

Permalink
Dev: Refactor the 'assessments' admin controller in the LimeSurvey Yi…
Browse files Browse the repository at this point in the history
…i port (GCI2011 by Gaurav Narula)

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_yii@11704 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
Pieter Jan Speelmans committed Dec 20, 2011
1 parent 736f42f commit b751346
Show file tree
Hide file tree
Showing 3 changed files with 180 additions and 162 deletions.
302 changes: 151 additions & 151 deletions application/controllers/admin/assessments.php
@@ -1,4 +1,4 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* LimeSurvey
* Copyright (C) 2007 The LimeSurvey Project Team / Carsten Schmitz
Expand All @@ -15,194 +15,194 @@
*/

/**
* Assessments Controller
*
* This controller performs assessments actions
*
* @package LimeSurvey
* @subpackage Backend
*/
class Assessments extends Survey_Common_Action {
* Assessments Controller
*
* This controller performs assessments actions
*
* @package LimeSurvey
* @subpackage Backend
*/
class Assessments extends Survey_Common_Action
{

/**
* Routes to the correct sub-action
*
* @access public
* @param int $surveyid
* @param int $surveyId
* @return void
*/
public function run($surveyid)
{
$surveyid = sanitize_int($surveyid);
$action=!empty($_POST['action']) ? $_POST['action'] : '';

$assessmentlangs = GetAdditionalLanguagesFromSurveyID($surveyid);
$baselang = GetBaseLanguageFromSurveyID($surveyid);

array_unshift($assessmentlangs,$baselang); // makes an array with ALL the languages supported by the survey -> $assessmentlangs
Yii::app()->setConfig("baselang",$baselang);
Yii::app()->setConfig("assessmentlangs", $assessmentlangs);
if($action=="assessmentadd")
self::_add($surveyid);
if($action=="assessmentupdate")
self::_update($surveyid);
if($action=="assessmentdelete")
self::_delete($surveyid, $_POST['id']);

if (bHasSurveyPermission($surveyid, 'assessments','read'))
{
$clang=$this->getController()->lang;


if ($surveyid == "") {
public function run($surveyId)
{
$surveyId = sanitize_int($surveyId);
$action = !empty($_POST['action']) ? $_POST['action'] : '';

$languages = GetAdditionalLanguagesFromSurveyID($surveyId);
$surveyLanguage = GetBaseLanguageFromSurveyID($surveyId);

array_unshift($languages, $surveyLanguage); // makes an array with ALL the languages supported by the survey -> $assessmentlangs

Yii::app()->setConfig("baselang", $surveyLanguage);
Yii::app()->setConfig("assessmentlangs", $languages);

if ($action == "assessmentadd")
$this->_add($surveyId);
if ($action == "assessmentupdate")
$this->_update($surveyId);
if ($action == "assessmentdelete")
$this->_delete($surveyId, $_POST['id']);

if (bHasSurveyPermission($surveyId, 'assessments', 'read')) {
$clang = $this->getController()->lang;

if ($surveyId == '') {
show_error($clang->gT("No SID Provided"));
exit;
die();
}

$assessments=Assessment::model()->findAllByAttributes(array('sid' => $surveyid));
//$assessmentsoutput.= "<pre>";print_r($assessments);echo "</pre>";
$groups=Groups::model()->findAllByAttributes(array('sid' => $surveyid));
$groupselect="<select name='gid' id='gid'>\n";
foreach($groups as $group) {
$group = $group->attributes;
$groupselect.="<option value='".$group['gid']."'>".$group['group_name']."</option>\n";
}
$groupselect .="</select>\n";
$headings=array($clang->gT("Scope"), $clang->gT("Question group"), $clang->gT("Minimum"), $clang->gT("Maximum"));
$actiontitle=$clang->gT("Add");
$actionvalue="assessmentadd";
$thisid="";
$this->_showAssessments($surveyId, $action, $surveyLanguage, $clang);
}

if ($action == "assessmentedit" && bHasSurveyPermission($surveyid, 'assessments','update')) {
$results = Assessment::model()->findAllByAttributes(array('id' => $_POST['id'], 'language' => $baselang));
}

foreach ($results as $row) {
$editdata=$row->attributes;
}
$groupselect=str_replace("'".$editdata['gid']."'", "'".$editdata['gid']."' selected", $groupselect);
$actiontitle=$clang->gT("Edit");
$actionvalue="assessmentupdate";
$thisid=$editdata['id'];
}
//$assessmentsoutput.= "<pre>"; print_r($edits); $assessmentsoutput.= "</pre>";
//PRESENT THE PAGE

$surveyinfo=getSurveyInfo($surveyid);

$this->getController()->_js_admin_includes(Yii::app()->getConfig("adminscripts").'assessments.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig("generalscripts").'jquery/jquery.tablesorter.min.js');

$data['clang']=$clang;
$data['surveyinfo']=$surveyinfo;
$data['imageurl'] = Yii::app()->getConfig('imageurl');
$data['surveyid']=$surveyid;
$data['headings']=$headings;
$data['assessments']=$assessments;
$data['actionvalue']=$actionvalue;
$data['actiontitle']=$actiontitle;
$data['groupselect']=$groupselect;
$data['assessmentlangs']=Yii::app()->getConfig("assessmentlangs");
$data['baselang']=Yii::app()->getConfig("baselang");
$data['action']=$action;
$data['gid']=empty($_POST['gid']) ? '' : $_POST['gid'];
if(isset($editdata)) $data['editdata']=$editdata;
$data['thisid']=$thisid;
$data['groups']=$groups;

Yii::app()->loadHelper('admin/htmleditor');
$this->getController()->_getAdminHeader();
$this->getController()->render("/admin/assessments_view",$data);
$this->getController()->_getAdminFooter("http://docs.limesurvey.org", $clang->gT("LimeSurvey online manual"));
private function _showAssessments($surveyId, $action, $surveyLanguage, Limesurvey_lang $clang)
{
$assessments = Assessment::model()->findAllByAttributes(array('sid' => $surveyId));
$data = $this->_collectGroupData($surveyId);
$headings = array($clang->gT("Scope"), $clang->gT("Question group"), $clang->gT("Minimum"), $clang->gT("Maximum"));
$data['actiontitle'] = $clang->gT("Add");
$data['actionvalue'] = "assessmentadd";
$data['editId'] = '';

if ($action == "assessmentedit" && bHasSurveyPermission($surveyId, 'assessments', 'update')) {
$data = $this->_collectEditData($surveyLanguage, $data, $clang);
}

$surveyinfo = getSurveyInfo($surveyId);
$data['clang'] = $clang;
$data['surveyinfo'] = $surveyinfo;
$data['imageurl'] = Yii::app()->getConfig('imageurl');
$data['surveyid'] = $surveyId;
$data['headings'] = $headings;
$data['assessments'] = $assessments;
$data['assessmentlangs'] = Yii::app()->getConfig("assessmentlangs");
$data['baselang'] = $surveyLanguage;
$data['action'] = $action;
$data['gid'] = empty($_POST['gid']) ? '' : sanitize_int($_POST['gid']);

Yii::app()->loadHelper('admin/htmleditor');
$this->_renderHeaderAndFooter("/admin/assessments_view", $data);
}

private function _collectGroupData($surveyId)
{
$groups = Groups::model()->findAllByAttributes(array('sid' => $surveyId));
foreach ($groups as $group) {
$groupId = $group->attributes['gid'];
$groupName = $group->attributes['group_name'];
$data['groups'][$groupId] = $groupName;
}
return $data;
}

private function _collectEditData($surveyLanguage, array $data, Limesurvey_lang $clang)
{
$assessments = Assessment::model()->findAllByAttributes(array('id' => sanitize_int($_POST['id']), 'language' => $surveyLanguage));

foreach ($assessments as $assessment) {
$editData = $assessment->attributes;
}
$data['actiontitle'] = $clang->gT("Edit");
$data['actionvalue'] = "assessmentupdate";
$data['editId'] = $editData['id'];
$data['editdata'] = $editData;
return $data;
}

/**
* Inserts an assessment to the database. Receives input from POST
*/
function _add($surveyid)
* Inserts an assessment to the database. Receives input from POST
*/
private function _add($surveyId)
{
if (bHasSurveyPermission($surveyid, 'assessments','create')) {
$first=true;
$assessmentlangs=Yii::app()->getConfig("assessmentlangs");
foreach ($assessmentlangs as $assessmentlang)
if (bHasSurveyPermission($surveyId, 'assessments', 'create')) {
$first = true;
$assessmentId = -1;
$languages = Yii::app()->getConfig("assessmentlangs");
foreach ($languages as $language)
{
if (!isset($_POST['gid'])) $_POST['gid']=0;

$dataarray=array(
'sid' => $surveyid,
'scope' => $_POST['scope'],
'gid' => $_POST['gid'],
'minimum' => $_POST['minimum'],
'maximum' => $_POST['maximum'],
'name' => $_POST['name_'.$assessmentlang],
'language' => $assessmentlang,
'message' => $_POST['assessmentmessage_'.$assessmentlang]);

if ($first==false)
{
$dataarray['id']=$aid;
$data = $this->_getAssessmentPostData($surveyId, $language);

if ($first == false) {
$data['id'] = $assessmentId;
}
$assessment = new Assessment;
foreach ($dataarray as $k => $v)
$assessment->$k = $v;
$assessment->save();
//$query = $connect->GetInsertSQL($inserttable, $datarray, get_magic_quotes_gpc());
//$result=$connect->Execute($query) or safe_die("Error inserting<br />$query<br />".$connect->ErrorMsg());
if ($first==true)
{
$first=false;
$aid=$assessment->id;
//$connect->Insert_ID(db_table_name_nq('assessments'),"id");
$assessment = Assessment::insertRecords($data);
if ($first == true) {
$first = false;
$assessmentId = $assessment->id;
}
}
}
}

/**
* Updates an assessment. Receives input from POST
*/
function _update($surveyid)
* Updates an assessment. Receives input from POST
*/
private function _update($surveyid)
{
if (bHasSurveyPermission($surveyid, 'assessments','update')) {
if (bHasSurveyPermission($surveyid, 'assessments', 'update') && isset($_POST['id'])) {

$assessmentlangs=Yii::app()->getConfig("assessmentlangs");
foreach ($assessmentlangs as $assessmentlang)
$aid = sanitize_int($_POST['id']);
$languages = Yii::app()->getConfig("assessmentlangs");
foreach ($languages as $language)
{

if (!isset($_POST['gid'])) $_POST['gid']=0;
if (Yii::app()->getConfig('filterxsshtml'))
{
$_POST['name_'.$assessmentlang]=htmlspecialchars($_POST['name_'.$assessmentlang]);
$_POST['assessmentmessage_'.$assessmentlang]=htmlspecialchars($_POST['assessmentmessage_'.$assessmentlang]);
}

$assessment = Assessment::model()->findByAttributes(array('id' => $_POST['id'], 'language' => $assessmentlang));
if (!is_null($assessment))
{
$assessment->scope = $_POST['scope'];
$assessment->gid = $_POST['gid'];
$assessment->minimum = $_POST['minimum'];
$assessment->maximum = $_POST['maximum'];
$assessment->name = $_POST['name_' . $assessmentlang];
$assessment->message = $_POST['assessmentmessage_' . $assessmentlang];
$assessment->save();
}
$data = $this->_getAssessmentPostData($surveyid, $language);
Assessment::updateAssessment($aid, $language, $data);
}
}
}

/**
* Deletes an assessment.
*/
function _delete($surveyid, $id)
* Deletes an assessment.
*/
private function _delete($surveyid, $assessmentId)
{
if (bHasSurveyPermission($surveyid, 'assessments','delete'))
{
Assessment::model()->deleteAllByAttributes(array('id' => $id));
if (bHasSurveyPermission($surveyid, 'assessments', 'delete')) {
Assessment::model()->deleteAllByAttributes(array('id' => $assessmentId));
}
}

/**
* Renders the views for the index
* @return void
*/
private function _renderHeaderAndFooter($path, array $data)
{
$this->getController()->_js_admin_includes(Yii::app()->getConfig("adminscripts") . 'assessments.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig("generalscripts") . 'jquery/jquery.tablesorter.min.js');
$this->getController()->_getAdminHeader();
$this->getController()->render($path, $data);
$this->getController()->_getAdminFooter("http://docs.limesurvey.org", Yii::app()->lang->gT("LimeSurvey online manual"));
}

private function _getAssessmentPostData($surveyid, $language)
{
if (!isset($_POST['gid']))
$_POST['gid'] = 0;

if (Yii::app()->getConfig('filterxsshtml')) {
$_POST['name_' . $language] = htmlspecialchars($_POST['name_' . $language]);
$_POST['assessmentmessage_' . $language] = htmlspecialchars($_POST['assessmentmessage_' . $language]);
}

return array(
'sid' => $surveyid,
'scope' => sanitize_paranoid_string($_POST['scope']),
'gid' => sanitize_int($_POST['gid']),
'minimum' => sanitize_paranoid_string($_POST['minimum']),
'maximum' => sanitize_paranoid_string($_POST['maximum']),
'name' => $_POST['name_' . $language],
'language' => $language,
'message' => $_POST['assessmentmessage_' . $language]
);
}
}
23 changes: 18 additions & 5 deletions application/models/Assessment.php
Expand Up @@ -50,12 +50,25 @@ public function primaryKey()
return array('id', 'language');
}

function insertRecords($data)
public static function insertRecords($data)
{
$assessments = new self;
$assessment = new self;

foreach ($data as $k => $v)
$assessments->$k = $v;
$assessments->save();
}
$assessment->$k = $v;
$assessment->save();

return $assessment;
}

public static function updateAssessment($id, $language, array $data)
{
$assessment = self::model()->findByAttributes(array('id' => $id, 'language' => $language));
if (!is_null($assessment)) {
foreach ($data as $k => $v)
$assessment->$k = $v;
$assessment->save();
}
}
}
?>

0 comments on commit b751346

Please sign in to comment.