diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..20af2f68a65 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +// Place your settings in this file to overwrite default and user settings. +{ +} \ No newline at end of file diff --git a/application/config/packages.php b/application/config/packages.php index 2a7f19a0ee9..9daccf74d32 100644 --- a/application/config/packages.php +++ b/application/config/packages.php @@ -103,5 +103,16 @@ 'bootstrap-slider', ) ), + 'adminpanel' => array( + 'devBaseUrl' => 'assets/packages/adminpanel/build/', + 'basePath' => 'core.adminpanel.build', + 'coreScriptPosition'=>CClientScript::POS_END, + 'defaultScriptFilePosition' =>CClientScript::POS_END, + 'defaultScriptPosition' =>CClientScript::POS_END, + 'position' =>CClientScript::POS_END, + 'js' => array( + 'lsadminpanel.js' + ) + ) ); diff --git a/application/controllers/admin/surveyadmin.php b/application/controllers/admin/surveyadmin.php index 4431934a7e1..d8fff327dc2 100644 --- a/application/controllers/admin/surveyadmin.php +++ b/application/controllers/admin/surveyadmin.php @@ -416,10 +416,71 @@ public function view($iSurveyID, $gid = null, $qid = null) $aData['showLastQuestion'] = false; } $aData['templateapiversion'] = Template::model()->getTemplateConfiguration(null,$iSurveyID)->getApiVersion(); + $cs = Yii::app()->clientScript; + $cs->registerPackage('adminpanel'); $this->_renderWrappedTemplate('survey', array(), $aData); } + /** + * Ajaxified get questiongroup with containing questions + * + * + */ + public function getAjaxQuestionGroupArray($surveyid){ + $iSurveyID = sanitize_int($surveyid); + $survey = Survey::model()->findByPk($iSurveyID); + $baselang = $survey->language; + $setting_entry = 'last_question_'.Yii::app()->user->getId().'_'.$iSurveyID; + $lastquestion = getGlobalSetting($setting_entry); + $setting_entry = 'last_question_'.Yii::app()->user->getId().'_'.$iSurveyID.'_gid'; + $lastquestiongroup = getGlobalSetting($setting_entry); + $aGroups = QuestionGroup::model()->findAllByAttributes(array('sid' => $iSurveyID, "language" => $baselang), array('order'=>'group_order ASC')); + $aGroupViewable = array(); + if(count($aGroups)) + { + foreach($aGroups as $group) + { + $curGroup = $group->attributes; + $group->aQuestions = Question::model()->findAllByAttributes(array("sid"=>$iSurveyID, "gid"=>$group['gid'],"language"=>$baselang), array('order'=>'question_order ASC')); + $curGroup['questions'] = array(); + foreach($group->aQuestions as $question) + { + if(is_object($question)) + { + $curQuestion = $question->attributes; + $curQuestion['name_short'] = viewHelper::flatEllipsizeText($question->question,true,60,'[...]',0.5); + $curGroup['questions'][] = $curQuestion; + } + + } + $aGroupViewable[] = $curGroup; + } + } + return Yii::app()->getController()->renderPartial( + '/admin/super/_renderJson', + array( + 'data' => array( + 'groups' => $aGroupViewable, + 'settings' => array( + 'lastquestion' => $lastquestion, + 'lastquestiongroup' => $lastquestiongroup, + ), + // 'debug' => [ + // $iSurveyID, + // $survey, + // $baselang, + // $setting_entry, + // $lastquestion, + // $setting_entry, + // $lastquestiongroup + // ] + ) + ), + false, + false + ); + } /** * Load list question groups view for a specified by $iSurveyID @@ -1597,6 +1658,8 @@ private function _registerScriptFiles() App()->getClientScript()->registerPackage('jquery-json'); App()->clientScript->registerPackage('bootstrap-switch'); App()->getClientScript()->registerPackage('jquery-datatable'); + App()->clientScript->defaultScriptFilePosition=CClientScript::POS_END; + App()->clientScript->registerPackage('adminpanel'); } diff --git a/application/core/LSYii_ClientScript.php b/application/core/LSYii_ClientScript.php index 3895ee8711e..ccc3698b707 100644 --- a/application/core/LSYii_ClientScript.php +++ b/application/core/LSYii_ClientScript.php @@ -184,4 +184,61 @@ private function analyzeUrl($sUrl) return array('toPublish'=>($sType=='toPublish'), 'sPathToFile' => $sPath ); } + + + /** + * Renders the specified core javascript library. + */ + public function renderCoreScripts() + { + if($this->coreScripts===null) + return; + $cssFiles=array(); + $jsFiles=array(); + $jsFilesPositioned=array(); + foreach($this->coreScripts as $name=>$package) + { + $baseUrl=$this->getPackageBaseUrl($name); + if(!empty($package['js'])) + { + foreach($package['js'] as $js){ + if(isset($package['position'])){ + $jsFilesPositioned[$package['position']][$baseUrl.'/'.$js]=$baseUrl.'/'.$js; + } else { + $jsFiles[$baseUrl.'/'.$js]=$baseUrl.'/'.$js; + } + } + } + if(!empty($package['css'])) + { + foreach($package['css'] as $css) + $cssFiles[$baseUrl.'/'.$css]=''; + } + } + // merge in place + if($cssFiles!==array()) + { + foreach($this->cssFiles as $cssFile=>$media) + $cssFiles[$cssFile]=$media; + $this->cssFiles=$cssFiles; + } + if($jsFiles!==array()) + { + if(isset($this->scriptFiles[$this->coreScriptPosition])) + { + foreach($this->scriptFiles[$this->coreScriptPosition] as $url => $value) + $jsFiles[$url]=$value; + } + $this->scriptFiles[$this->coreScriptPosition]=$jsFiles; + } + if($jsFilesPositioned!==array()) + { + foreach($jsFilesPositioned as $position=>$fileArray){ + if(isset($this->scriptFiles[$position])) + foreach($this->scriptFiles[$position] as $url => $value) + $fileArray[$url]=$value; + $this->scriptFiles[$position]=$fileArray; + } + } + } } diff --git a/application/views/admin/super/_renderJson.php b/application/views/admin/super/_renderJson.php new file mode 100644 index 00000000000..25ae0db9163 --- /dev/null +++ b/application/views/admin/super/_renderJson.php @@ -0,0 +1,8 @@ +layout=false; + +echo CJavaScript::jsonEncode($data); + +?> diff --git a/application/views/admin/super/footer.php b/application/views/admin/super/footer.php index 70ad13e52fc..0e9d29e4df0 100644 --- a/application/views/admin/super/footer.php +++ b/application/views/admin/super/footer.php @@ -4,7 +4,6 @@ * Inserted in all pages */ ?> -