/**
  * Shows admin menu for question groups
  * @param int Survey id
  * @param int Group id
  */
 function _questiongroupbar($iSurveyID, $gid, $qid = null, $action = null)
 {
     $clang = $this->getController()->lang;
     $baselang = Survey::model()->findByPk($iSurveyID)->language;
     Yii::app()->loadHelper('replacements');
     // TODO: check that surveyid and thus baselang are always set here
     $sumresult4 = Questions::model()->findAllByAttributes(array('sid' => $iSurveyID, 'gid' => $gid, 'language' => $baselang));
     $sumcount4 = count($sumresult4);
     $grpresult = Groups::model()->findAllByAttributes(array('gid' => $gid, 'language' => $baselang));
     // Check if other questions/groups are dependent upon this group
     $condarray = getGroupDepsForConditions($iSurveyID, "all", $gid, "by-targgid");
     $groupsummary = "<div class='menubar'>\n" . "<div class='menubar-title ui-widget-header'>\n";
     //$sumquery1 = "SELECT * FROM ".db_table_name('surveys')." inner join ".db_table_name('surveys_languagesettings')." on (surveyls_survey_id=sid and surveyls_language=language) WHERE sid=$iSurveyID"; //Getting data for this survey
     $sumresult1 = Survey::model()->with(array('languagesettings' => array('condition' => 'surveyls_language=language')))->findByPk($iSurveyID);
     //$sumquery1, 1) ; //Checked //  if surveyid is invalid then die to prevent errors at a later time
     $surveyinfo = $sumresult1->attributes;
     $surveyinfo = array_merge($surveyinfo, $sumresult1->languagesettings[0]->attributes);
     $surveyinfo = array_map('flattenText', $surveyinfo);
     //$surveyinfo = array_map('htmlspecialchars', $surveyinfo);
     $aData['activated'] = $activated = $surveyinfo['active'];
     foreach ($grpresult as $grow) {
         $grow = $grow->attributes;
         $grow = array_map('flattenText', $grow);
         $aData = array();
         $aData['activated'] = $activated;
         $aData['qid'] = $qid;
         $aData['QidPrev'] = $QidPrev = getQidPrevious($iSurveyID, $gid, $qid);
         $aData['QidNext'] = $QidNext = getQidNext($iSurveyID, $gid, $qid);
         if ($action == 'editgroup' || $action == 'addquestion' || $action == 'viewquestion' || $action == "editdefaultvalues") {
             $gshowstyle = "style='display: none'";
         } else {
             $gshowstyle = "";
         }
         $aData['gshowstyle'] = $gshowstyle;
         $aData['surveyid'] = $iSurveyID;
         $aData['gid'] = $gid;
         $aData['grow'] = $grow;
         $aData['clang'] = $clang;
         $aData['condarray'] = $condarray;
         $aData['sumcount4'] = $sumcount4;
         $aData['iIconSize'] = Yii::app()->getConfig('adminthemeiconsize');
         $aData['imageurl'] = Yii::app()->getConfig('adminimageurl');
         $groupsummary .= $this->getController()->render('/admin/survey/QuestionGroups/questiongroupbar_view', $aData, true);
     }
     $groupsummary .= "\n</table>\n";
     $finaldata['display'] = $groupsummary;
     $this->getController()->render('/survey_view', $finaldata);
 }
 /**
  * RPC Routine to set group properties.
  *
  * @access public
  * @param string $sSessionKey Auth credentials
  * @param integer $iGroupID  - ID of the survey
  * @param array|struct $aGroupData - An array with the particular fieldnames as keys and their values to set on that particular survey
  * @return array Of succeeded and failed modifications according to internal validation.
  */
 public function set_group_properties($sSessionKey, $iGroupID, $aGroupData)
 {
     if ($this->_checkSessionKey($sSessionKey)) {
         $oGroup = QuestionGroup::model()->findByAttributes(array('gid' => $iGroupID));
         if (is_null($oGroup)) {
             return array('status' => 'Error: Invalid group ID');
         }
         if (Permission::model()->hasSurveyPermission($oGroup->sid, 'survey', 'update')) {
             $aResult = array();
             // Remove fields that may not be modified
             unset($aGroupData['sid']);
             unset($aGroupData['gid']);
             // Remove invalid fields
             $aDestinationFields = array_flip(QuestionGroup::model()->tableSchema->columnNames);
             $aGroupData = array_intersect_key($aGroupData, $aDestinationFields);
             $aGroupAttributes = $oGroup->getAttributes();
             if (empty($aGroupData)) {
                 return array('status' => 'No valid Data');
             }
             foreach ($aGroupData as $sFieldName => $sValue) {
                 //all dependencies this group has
                 $has_dependencies = getGroupDepsForConditions($oGroup->sid, $iGroupID);
                 //all dependencies on this group
                 $depented_on = getGroupDepsForConditions($oGroup->sid, "all", $iGroupID, "by-targgid");
                 //We do not allow groups with dependencies to change order - that would lead to broken dependencies
                 if ((isset($has_dependencies) || isset($depented_on)) && $sFieldName == 'group_order') {
                     $aResult[$sFieldName] = 'Group with dependencies - Order cannot be changed';
                     continue;
                 }
                 $oGroup->setAttribute($sFieldName, $sValue);
                 try {
                     // save the change to database - one by one to allow for validation to work
                     $bSaveResult = $oGroup->save();
                     fixSortOrderGroups($oGroup->sid);
                     $aResult[$sFieldName] = $bSaveResult;
                     //unset failed values
                     if (!$bSaveResult) {
                         $oGroup->{$sFieldName} = $aGroupAttributes[$sFieldName];
                     }
                 } catch (Exception $e) {
                     //unset values that cause exception
                     $oGroup->{$sFieldName} = $aGroupAttributes[$sFieldName];
                 }
             }
             return $aResult;
         } else {
             return array('status' => 'No permission');
         }
     } else {
         return array('status' => 'Invalid Session key');
     }
 }
 function _nquestiongroupbar($aData)
 {
     if (isset($aData['questiongroupbar'])) {
         if (!isset($aData['gid'])) {
             if (isset($_GET['gid'])) {
                 $aData['gid'] = $_GET['gid'];
             }
         }
         $surveyid = $aData['surveyid'];
         $gid = $aData['gid'];
         $oSurvey = $aData['oSurvey'];
         $baselang = $oSurvey->language;
         $sumresult4 = Question::model()->findAllByAttributes(array('sid' => $surveyid, 'gid' => $gid, 'language' => $baselang));
         $sumcount4 = count($sumresult4);
         $aData['sumcount4'] = $sumcount4;
         $sumresult1 = Survey::model()->with(array('languagesettings' => array('condition' => 'surveyls_language=language')))->findByPk($surveyid);
         //$sumquery1, 1) ; //Checked //  if surveyid is invalid then die to prevent errors at a later time
         $surveyinfo = $sumresult1->attributes;
         $surveyinfo = array_merge($surveyinfo, $sumresult1->defaultlanguage->attributes);
         $surveyinfo = array_map('flattenText', $surveyinfo);
         //$surveyinfo = array_map('htmlspecialchars', $surveyinfo);
         $aData['activated'] = $activated = $surveyinfo['active'];
         $condarray = getGroupDepsForConditions($surveyid, "all", $gid, "by-targgid");
         $aData['condarray'] = $condarray;
         $aData['languagelist'] = $oSurvey->getAllLanguages();
         $this->getController()->renderPartial("/admin/survey/QuestionGroups/nquestiongroupbar_view", $aData);
     }
 }
 public function view($surveyid, $gid)
 {
     $aData = array();
     $aData['surveyid'] = $iSurveyID = $surveyid;
     $aData['gid'] = $gid;
     $baselang = Survey::model()->findByPk($surveyid)->language;
     $condarray = getGroupDepsForConditions($surveyid, "all", $gid, "by-targgid");
     $aData['condarray'] = $condarray;
     $grow = QuestionGroup::model()->findByPk(array('gid' => $gid, 'language' => $baselang));
     $grow = $grow->attributes;
     $grow = array_map('flattenText', $grow);
     $aData['surveyid'] = $surveyid;
     $aData['gid'] = $gid;
     $aData['grow'] = $grow;
     $aData['sidemenu']['questiongroups'] = true;
     $aData['sidemenu']['group_name'] = $grow['group_name'];
     $surveyinfo = Survey::model()->findByPk($iSurveyID)->surveyinfo;
     $aData['title_bar']['title'] = $surveyinfo['surveyls_title'] . "(" . gT("ID") . ":" . $iSurveyID . ")";
     $aData['questiongroupbar']['buttons']['view'] = true;
     ///////////
     // sidemenu
     $aData['sidemenu']['state'] = true;
     $aData['sidemenu']['explorer']['state'] = true;
     $aData['sidemenu']['explorer']['gid'] = isset($gid) ? $gid : false;
     $aData['sidemenu']['explorer']['qid'] = false;
     $this->_renderWrappedTemplate('survey/QuestionGroups', 'group_view', $aData);
 }
 public function getbuttons()
 {
     // Find out if the survey is active to disable add-button
     $oSurvey = Survey::model()->findByPk($this->sid);
     $surveyIsActive = $oSurvey->active !== 'N';
     $baselang = $oSurvey->language;
     // Add question to this group
     $url = Yii::app()->createUrl("admin/questions/sa/newquestion/surveyid/{$this->sid}/gid/{$this->gid}");
     $button = '<a class="btn btn-default list-btn ' . ($surveyIsActive ? 'disabled' : '') . ' "  data-toggle="tooltip"  data-placement="left" title="' . gT('Add new question to group') . '" href="' . $url . '" role="button"><span class="glyphicon glyphicon-plus-sign " ></span></a>';
     // Group edition
     // Edit
     $url = Yii::app()->createUrl("admin/questiongroups/sa/edit/surveyid/{$this->sid}/gid/{$this->gid}");
     $button .= '  <a class="btn btn-default  list-btn" href="' . $url . '" role="button" data-toggle="tooltip" title="' . gT('Edit group') . '"><span class="glyphicon glyphicon-pencil " ></span></a>';
     // View summary
     $url = Yii::app()->createUrl("/admin/questiongroups/sa/view/surveyid/");
     $url .= '/' . $this->sid . '/gid/' . $this->gid;
     $button .= '  <a class="btn btn-default  list-btn" href="' . $url . '" role="button" data-toggle="tooltip" title="' . gT('Group summary') . '"><span class="glyphicon glyphicon-list-alt " ></span></a>';
     $iQuestionsInGroup = Question::model()->countByAttributes(array('sid' => $this->sid, 'gid' => $this->gid, 'language' => $baselang));
     // Delete
     if ($oSurvey->active != "Y" && Permission::model()->hasSurveyPermission($this->sid, 'surveycontent', 'delete') && $iQuestionsInGroup > 0) {
         $condarray = getGroupDepsForConditions($this->sid, "all", $this->gid, "by-targgid");
         if (is_null($condarray)) {
             $confirm = 'if (confirm(\'' . gT("Deleting this group will also delete any questions and answers it contains. Are you sure you want to continue?", "js") . '\')) { window.open(\'' . Yii::app()->createUrl("admin/questiongroups/sa/delete/surveyid/{$this->sid}/gid/{$this->gid}") . '\',\'_top\'); };';
             $button .= '<a class="btn btn-default"  data-toggle="tooltip" title="' . gT("Delete") . '" href="#" role="button"
                         onclick="' . $confirm . '">
                             <span class="text-danger glyphicon glyphicon-trash"></span>
                         </a>';
         } else {
             $alert = 'alert(\'' . gT("Impossible to delete this group because there is at least one question having a condition on its content", "js") . '\'); return false;';
             $button .= '<a class="btn btn-default"  data-toggle="tooltip" title="' . gT("Delete") . '" href="#" role="button"
                         onclick="' . $alert . '">
                             <span class="text-danger glyphicon glyphicon-trash"></span>
                         </a>';
         }
     }
     return $button;
 }
 /**
  * Show admin menu for question group view
  *
  * @param array $aData ?
  */
 function _nquestiongroupbar($aData)
 {
     if (isset($aData['questiongroupbar'])) {
         if (!isset($aData['gid'])) {
             if (isset($_GET['gid'])) {
                 $aData['gid'] = $_GET['gid'];
             }
         }
         $aData['surveyIsActive'] = $aData['oSurvey']->active !== 'N';
         $surveyid = $aData['surveyid'];
         $gid = $aData['gid'];
         $oSurvey = $aData['oSurvey'];
         $baselang = $oSurvey->language;
         $aData['sumcount4'] = Question::model()->countByAttributes(array('sid' => $surveyid, 'gid' => $gid, 'language' => $baselang));
         $sumresult1 = Survey::model()->with(array('languagesettings' => array('condition' => 'surveyls_language=language')))->findByPk($surveyid);
         //$sumquery1, 1) ; //Checked //  if surveyid is invalid then die to prevent errors at a later time
         $surveyinfo = $sumresult1->attributes;
         $surveyinfo = array_merge($surveyinfo, $sumresult1->defaultlanguage->attributes);
         $surveyinfo = array_map('flattenText', $surveyinfo);
         //$surveyinfo = array_map('htmlspecialchars', $surveyinfo);
         $aData['activated'] = $activated = $surveyinfo['active'];
         $condarray = getGroupDepsForConditions($surveyid, "all", $gid, "by-targgid");
         $aData['condarray'] = $condarray;
         $aData['languagelist'] = $oSurvey->getAllLanguages();
         if (isset($aData['questiongroupbar']['closebutton']['url'])) {
             $sAlternativeUrl = $aData['questiongroupbar']['closebutton']['url'];
             $aForbiddenWordsInUrl = array('add');
             $aData['questiongroupbar']['closebutton']['url'] = Yii::app()->request->getUrlReferrer(Yii::app()->createUrl($sAlternativeUrl), $aForbiddenWordsInUrl);
         }
         $this->getController()->renderPartial("/admin/survey/QuestionGroups/questiongroupbar_view", $aData);
     }
 }
 public function view($surveyid, $gid)
 {
     $aData = array();
     $aData['surveyid'] = $iSurveyID = $surveyid;
     $aData['gid'] = $gid;
     $baselang = Survey::model()->findByPk($surveyid)->language;
     $condarray = getGroupDepsForConditions($surveyid, "all", $gid, "by-targgid");
     $aData['condarray'] = $condarray;
     $grow = QuestionGroup::model()->findByPk(array('gid' => $gid, 'language' => $baselang));
     $grow = $grow->attributes;
     $grow = array_map('flattenText', $grow);
     $aData['surveyid'] = $surveyid;
     $aData['gid'] = $gid;
     $aData['grow'] = $grow;
     $aData['sidebar']['questiongroups'] = true;
     $aData['sidebar']['group_name'] = $grow['group_name'];
     $surveyinfo = Survey::model()->findByPk($iSurveyID)->surveyinfo;
     $aData['title_bar']['title'] = $surveyinfo['surveyls_title'] . "(" . gT("ID") . ":" . $iSurveyID . ")";
     $aData['questiongroupbar']['buttons']['view'] = TRUE;
     //$aData['questiongroupbar']['returnbutton']['url'] = $this->getController()->createUrl("admin/survey/sa/listquestiongroups/", array('surveyid'=>$surveyid));
     //$aData['questiongroupbar']['returnbutton']['text'] = gT('return to question group list');
     $this->_renderWrappedTemplate('survey/QuestionGroups', 'group_view', $aData);
 }