Skip to content

Commit

Permalink
Implement jqGrid for CPDB Attributes. GCI task #7232226.
Browse files Browse the repository at this point in the history
git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_yii@11810 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
GautamGupta committed Dec 30, 2011
1 parent 27d5632 commit 1c04f5b
Show file tree
Hide file tree
Showing 4 changed files with 229 additions and 198 deletions.
169 changes: 104 additions & 65 deletions application/controllers/admin/participantsaction.php
Expand Up @@ -29,6 +29,29 @@ function run($sa = '')
}
}

/**
* Loads jqGrid for the view
* @param string $sScript Subaction
*/
private function _loadjqGrid($sScript = '', $aData = array())
{
$this->getController()->_css_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/css/ui.jqgrid.css');
$this->getController()->_css_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/css/jquery.ui.datepicker.css');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jquery.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jquery-ui.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/i18n/grid.locale-en.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/jquery.jqGrid.min.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/plugins/jquery.searchFilter.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/src/grid.celledit.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/i18n/grid.locale-en.js');

if (!empty($sScript))
{
$this->getController()->_js_admin_includes(Yii::app()->getConfig('adminscripts') . $sScript . '.js');
$this->_renderWrappedTemplate(array('participantsPanel', $sScript), $aData);
}
}

/**
* Renders template(s) wrapped in header and footer
*
Expand Down Expand Up @@ -135,20 +158,6 @@ function blacklistControl()
$this->_renderWrappedTemplate('participantsPanel');
}

/**
* Loads the view 'attributeControl'
*/
function attributeControl()
{
$aData = array(
'result' => ParticipantAttributeNames::getAttributes()
);

$this->getController()->_css_admin_includes(Yii::app()->getConfig('styleurl') . 'admin/default/participants.css');

$this->_renderWrappedTemplate(array('participantsPanel', 'attributeControl'), $aData);
}

/**
* Loads the view 'userControl'
*/
Expand All @@ -166,16 +175,7 @@ function userControl()
*/
function sharePanel()
{
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/i18n/grid.locale-en.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/jquery.jqGrid.min.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/plugins/jquery.searchFilter.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/src/grid.celledit.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('adminscripts') . 'sharePanel.js');
$this->getController()->_js_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/js/i18n/grid.locale-en.js');
$this->getController()->_css_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/css/ui.jqgrid.css');
$this->getController()->_css_admin_includes(Yii::app()->getConfig('generalscripts') . 'jquery/jqGrid/css/jquery.ui.datepicker.css');

$this->_renderWrappedTemplate(array('participantsPanel', 'sharePanel'));
$this->_loadjqGrid('sharePanel');
}

/**
Expand Down Expand Up @@ -250,6 +250,86 @@ function editShareInfo()
}
}

/**
* Loads the view 'attributeControl'
*/
function attributeControl()
{
$this->_loadjqGrid('attributeControl');
}

/**
* Sends the attributes info using JSON encoding
* Called after the attribute control grid is loaded
* @return JSON encoded string containg sharing information
*/
function getAttributeInfo_json()
{
$clang = Yii::app()->lang;
$page = CHttpRequest::getPost('page');
$limit = CHttpRequest::getPost('rows');
$records = ParticipantAttributeNames::getAttributes();

$attribute_types = array(
'DD' => $clang->gT("Drop-down list"),
'DP' => $clang->gT("Date"),
'TB' => $clang->gT("Text Box")
);

$aData->page = $page;
$aData->records = count($records);
$aData->total = ceil(ParticipantAttributeNames::getAttributes(true) / $limit);

$i = 0;
foreach ($records as $row)
{
$aData->rows[$i]['id'] = $row['attribute_id'];
$aData->rows[$i]['cell'] = array('', $row['attribute_name'], $attribute_types[$row['attribute_type']], $row['visible']);
$i++;
}

echo ls_json_encode($aData);
}

/**
* Takes the edit call from the share panel, which either edits or deletes the share information
* Basically takes the call on can_edit
*/
function editAttributeInfo()
{
$operation = CHttpRequest::getPost('oper');
if ($operation == 'del' && CHttpRequest::getPost('id'))
{
$aAttributeIds = (array) explode(',', CHttpRequest::getPost('id'));
$aAttributeIds = array_map('trim', $aAttributeIds);
$aAttributeIds = array_map('intval', $aAttributeIds);

foreach ($aAttributeIds as $iAttributeId)
{
ParticipantAttributeNames::delAttribute($iAttributeId);
}
}
elseif ($operation == 'add' && CHttpRequest::getPost('attribute_name'))
{
$aData = array(
'attribute_name' => CHttpRequest::getPost('attribute_name'),
'attribute_type' => CHttpRequest::getPost('attribute_type'),
'visible' => CHttpRequest::getPost('visible') == 'TRUE' ? 'TRUE' : 'FALSE'
);
echo ParticipantAttributeNames::storeAttribute($aData);
}
elseif ($operation == 'edit' && CHttpRequest::getPost('id'))
{
$aData = array(
'attribute_id' => CHttpRequest::getPost('id'),
'attribute_name' => CHttpRequest::getPost('attribute_name'),
'attribute_type' => CHttpRequest::getPost('attribute_type'),
'visible' => CHttpRequest::getPost('visible') == 'TRUE' ? 'TRUE' : 'FALSE'
);
ParticipantAttributeNames::saveAttribute($aData);
}
}

/**
* Takes the delete call from the display participants and take appropriate action depending on the condition
*/
Expand Down Expand Up @@ -891,7 +971,6 @@ function getParticipants_json()
if (Yii::app()->session['USER_RIGHT_SUPERADMIN'])
{
$records = Participants::getParticipants($page, $limit);
$aData = new Object();
$aData->page = $page;
$aData->records = Participants::model()->count();
$aData->total = ceil($aData->records / $limit);
Expand Down Expand Up @@ -959,7 +1038,6 @@ function subval_sort($a, $subkey, $order)
{
$iUserID = Yii::app()->session['loginID'];
$records = Participants::getParticipantsOwner($iUserID);
$aData = new Object();
$aData->page = $page;
$aData->records = count($records);
$aData->total = ceil($aData->records / $limit);
Expand Down Expand Up @@ -1217,16 +1295,6 @@ function saveAttribute()
CController::redirect(Yii::app()->createUrl('admin/participants/sa/attributeControl'));
}

/*
* Responsible for deleting the additional attribute.
*/
function delAttribute()
{
$iAttributeId = CHttpRequest::getQuery('aid');
ParticipantAttributeNames::delAttribute($iAttributeId);
CController::redirect(Yii::app()->createUrl('/admin/participants/sa/attributeControl'));
}

/*
* Responsible for deleting the additional attribute values in case of drop down.
*/
Expand All @@ -1238,30 +1306,6 @@ function delAttributeValues()
CController::redirect(Yii::app()->createUrl('/admin/participants/sa/viewAttribute/aid/' . $iAttributeId));
}

/*
* Responsible for deleting the storing the additional attributes
*/
function storeAttributes()
{
$i = 1;
do
{
$attname = 'attribute_name_' . $i;
$atttype = 'attribute_type_' . $i;
$visible = 'visible_' . $i;
if (!empty($_POST[$attname]))
{
$aData = array('attribute_name' => CHttpRequest::getPost($attname),
'attribute_type' => CHttpRequest::getPost($atttype),
'visible' => CHttpRequest::getPost($visible));
ParticipantAttributeNames::storeAttribute($aData);
}
$i++;
} while (isset($_POST[$attname]));

CController::redirect('attributeControl');
}

/*
* Responsible for editing the additional attributes values
*/
Expand Down Expand Up @@ -1830,11 +1874,6 @@ function blacklistParticipant()
}
}

function saveVisible()
{
ParticipantAttributeNames::saveAttributeVisible(CHttpRequest::getPost('attid'), CHttpRequest::getPost('visiblevalue'));
}

}

?>
53 changes: 43 additions & 10 deletions application/models/ParticipantAttributeNames.php
Expand Up @@ -135,9 +135,17 @@ function getAttributeValue($participantid,$attributeid)
return $data;
}

function getAttributes()
function getAttributes($count = false, $limit = -1, $offset = -1)
{
return Yii::app()->db->createCommand()->select('{{participant_attribute_names}}.*,{{participant_attribute_names_lang}}.*')->from('{{participant_attribute_names}}')->join('{{participant_attribute_names_lang}}', '{{participant_attribute_names}}.attribute_id = {{participant_attribute_names_lang}}.attribute_id')->where('lang = "'.Yii::app()->session['adminlang'].'"')->queryAll();
$command = Yii::app()->db->createCommand()->from('{{participant_attribute_names}}')->join('{{participant_attribute_names_lang}}', '{{participant_attribute_names}}.attribute_id = {{participant_attribute_names_lang}}.attribute_id')->where('lang = "'.Yii::app()->session['adminlang'].'"')->limit($limit, $offset);
if (empty($count))
{
return $command->select('{{participant_attribute_names}}.*,{{participant_attribute_names_lang}}.*')->queryAll();
}
else
{
return array_shift($command->select('count(*)')->queryColumn());
}
}

function getAttributesValues($attribute_id)
Expand All @@ -162,11 +170,14 @@ function storeAttribute($data)
$insertnames = array('attribute_type' => $data['attribute_type'],
'visible' => $data['visible']);
Yii::app()->db->createCommand()->insert('{{participant_attribute_names}}',$insertnames);
$insertnameslang = array('attribute_id' => Yii::app()->db->getLastInsertID(),
$attribute_id = Yii::app()->db->getLastInsertID();
$insertnameslang = array('attribute_id' => $attribute_id,
'attribute_name'=>$data['attribute_name'],
'lang' => Yii::app()->session['adminlang']);
Yii::app()->db->createCommand()->insert('{{participant_attribute_names_lang}}',$insertnameslang);

return $attribute_id;

}

function editParticipantAttributeValue($data)
Expand Down Expand Up @@ -208,7 +219,29 @@ function getAttribute($attribute_id)

function saveAttribute($data)
{
Yii::app()->db->createCommand()->update('{{participant_attribute_names}}',$data,'attribute_id = '.$data['attribute_id']);
if (empty($data['attribute_id']))
{
return;
}

$insertnames = array();
if (!empty($data['attribute_type']))
{
$insertnames['attribute_type'] = $data['attribute_type'];
}
if (!empty($data['visible']))
{
$insertnames['visible'] = $data['visible'];
}
if (!empty($insertnames))
{
Yii::app()->db->createCommand()->update('{{participant_attribute_names}}', $insertnames, 'attribute_id = '.$data['attribute_id']);
}

if (!empty($data['attribute_name']))
{
Yii::app()->db->createCommand()->update('{{participant_attribute_names_lang}}', array('attribute_name' => $data['attribute_name']), 'attribute_id = '.$data['attribute_id'].' AND lang="'.Yii::app()->session['adminlang'].'"');
}
}

function saveAttributeLanguages($data)
Expand Down Expand Up @@ -239,15 +272,15 @@ function storeAttributeCSV($data)
$insertnames = array('attribute_type' => '\''.$data['attribute_type'],
'visible' => $data['visible']);
Yii::app()->db->createCommand()->insert('{{participant_attribute_names}}', $insertnames);

$insertid = Yii::app()->db->getLastInsertID();
$insertnameslang = array('attribute_id' => $insertid,
'attribute_name'=>$data['attribute_name'],
'lang' => Yii::app()->session['adminlang']);
Yii::app()->db->createCommand()->insert('{{participant_attribute_names_lang}}', $insertnameslang);
return $insertid;
}

//updates the attribute values in participant_attribute_values
function saveAttributeValue($data)
{
Expand All @@ -263,16 +296,16 @@ function saveAttributeVisible($attid,$visiblecondition)
{
$data=array('visible'=>'FALSE');
}
Yii::app()->db->createCommand()->update('{{participant_attribute_names}}',$data,'attribute_id = '.$attribute_id[1]);
Yii::app()->db->createCommand()->update('{{participant_attribute_names}}',$data,'attribute_id = '.$attribute_id[1]);
}

function getAttributeID()
{
$query = Yii::app()->db->createCommand()->select('attribute_id')->from('{{participant_attribute_names}}')->order('attribute_id','desc')->queryAll();
return $query;
}


function saveParticipantAttributeValue($data)
{
Yii::app()->db->createCommand()->insert('{{participant_attribute_names}}', $data);
Expand Down

0 comments on commit 1c04f5b

Please sign in to comment.