Esempio n. 1
0
 public static function reorder($criterion_id, $fromId = null, $fromOldPosition = null, $oldPositionId = null)
 {
     if (!is_numeric($criterion_id)) {
         return false;
     }
     $modelQuestion = new Model_Question();
     $orderBy = 0;
     $where = array('CriterionId = ?' => $criterion_id);
     $order = array('Designation ASC');
     $questions = $modelQuestion->getAll($where, $order);
     $newPositionRowId = null;
     if ($fromId) {
         $newPositionRow = $modelQuestion->getQuestionById($fromId);
         $newPositionRowId = $newPositionRow->getId() ? $newPositionRow->getId() : null;
     }
     if ($fromOldPosition) {
         $fromOldPosition = $fromOldPosition ? $fromOldPosition : null;
     }
     $toPositionRowId = null;
     if ($oldPositionId) {
         $toPositionRow = $modelQuestion->getQuestionById($oldPositionId);
         $toPositionRowId = $toPositionRow->getId() ? $toPositionRow->getId() : null;
         $toNewPosition = $toPositionRow->getDesignation() ? $toPositionRow->getDesignation() : null;
     }
     if (!is_object($questions) && !(count($questions) > 0)) {
         return false;
     }
     foreach ($questions as $questionRow) {
         $orderBy++;
         if ($questionRow->getId() == $newPositionRowId) {
             // não editar $newPositionRowId
             continue;
         }
         $data['parent_id'] = $criterion_id;
         $data['question_type_id'] = $questionRow->getQuestionTypeId();
         $data['parent_question_id'] = $questionRow->getParentQuestionId();
         $data['value'] = $questionRow->getValue();
         $data['supporting_text'] = $questionRow->getSupportingText();
         $data['version'] = $questionRow->getVersion();
         $data['status'] = $questionRow->getStatus();
         $data['designation'] = $orderBy;
         if ($questionRow->getId() == $toPositionRowId) {
             $questionRow->setId($toPositionRowId);
             $data['designation'] = $toNewPosition + ($fromOldPosition <= $toNewPosition ? -1 : +1);
         }
         $modelQuestion->updateQuestion($questionRow, $data);
     }
     return true;
 }
Esempio n. 2
0
 public function viewAction()
 {
     $id = $this->getRequest()->getParam('id');
     $question = new Model_Question($id);
     $author = $question->getAuthor();
     $answers = $question->getAnswers();
     $form = new Form_Answer();
     if ($this->getRequest()->isPost()) {
         if ($form->isValid($this->getRequest()->getPost())) {
             $answer = new Model_Answer();
             $answer->fill($form->getValues());
             $answer->created = date('Y-m-d H:i:s');
             $answer->author_id = Zend_Auth::getInstance()->getIdentity()->id;
             $answer->question_id = $id;
             $answer->save();
             $this->_redirect('/question/view/id/' . $id);
         }
     }
     $this->view->form = $form;
     $this->view->question = $question;
     $this->view->author = $author;
     $this->view->answers = $answers;
 }
Esempio n. 3
0
 public function action_index()
 {
     $view = View::factory('question/list')->bind('table', $table)->bind('total', $total)->bind('links', $links)->bind('success', $success)->bind('filter_url', $filter_url)->bind('filter_type', $filter_type)->bind('types', $types);
     $filter_type = (string) $this->request->param('filter_type', '');
     $course_id = Session::instance()->get('course_id');
     $course = ORM::factory('course', (int) $course_id);
     $criteria = array('filter_type' => $this->request->param('filter_type', ''), 'course_id' => $course_id);
     $questions = Model_Question::get_questions($criteria);
     $total = Model_Question::get_total_question_count($criteria);
     $sortables = new Sort(array('Question' => '', 'Type' => '', 'Actions' => ''));
     $headings = $sortables->render();
     $table = array('headings' => $headings, 'data' => $questions);
     $types = array_combine(Model_Question::$TYPES, array_map('ucfirst', Model_Question::$TYPES));
     $filter_url = URL::site('question/index');
     $links = array('add' => Html::anchor('/question/add/', 'Create a question', array('class' => 'createButton l')), 'delete' => URL::site('/question/delete/'));
     $success = Session::instance()->get_once('success');
     $this->content = $view;
 }
Esempio n. 4
0
 public function action_edit()
 {
     $view = View::factory('exercise/form')->bind('form', $form)->bind('questions', $questions)->bind('selected_questions', $selected_questions)->bind('exercise_questions', $exercise_questions)->bind('error_notif', $error_notif);
     $submitted = false;
     $course = ORM::factory('course', Session::instance()->get('course_id'));
     $error_notif = array();
     $exercise_id = (int) $this->request->param('id');
     $exercise = ORM::factory('exercise', $exercise_id);
     if ($this->request->method() === 'POST' && $this->request->post()) {
         $submitted = true;
         $safepost = Arr::map('Security::xss_clean', $this->request->post());
         $validator = $exercise->validator($safepost);
         if ($validator->check() && $this->validate_form($safepost)) {
             $exercise->values(array_merge($safepost, array('course_id' => $course->id, 'slug' => Text::limit_chars(Inflector::underscore($safepost['title'])), 'modified_at' => date('Y-m-d H:i:s', time()))));
             $exercise->save();
             $zip_ques = Arr::zip($safepost['selected'], $safepost['marks']);
             $exercise->delete_questions()->add_questions($zip_ques);
             if ($safepost['pub_status'] == '1') {
                 $exist = ORM::factory('feed');
                 $exist->where('type', ' = ', 'exercise');
                 $exist->where('action', ' = ', 'add');
                 $exist->where('respective_id', ' = ', $exercise->id);
                 $exist->where('course_id', ' = ', Session::instance()->get('course_id'));
                 $exists = $exist->find_all();
                 if (count($exists) == 0) {
                     $feed = new Feed_Exercise();
                     $feed->set_action('add');
                     $feed->set_course_id(Session::instance()->get('course_id'));
                     $feed->set_respective_id($exercise->id);
                     $feed->set_actor_id(Auth::instance()->get_user()->id);
                     $feed->streams(array('course_id' => (int) Session::instance()->get('course_id')));
                     $feed->save();
                 }
             }
             Session::instance()->set('success', 'Exercise edited successfully.');
             Request::current()->redirect('exercise');
             exit;
         } else {
             $this->_errors = array_merge($this->_errors, $validator->errors('exercise'));
             $error_notif = Arr::get($this->_errors, 'questions', '');
         }
     }
     $exercise_questions = $exercise->questions()->as_array('question_id', 'marks');
     $selected_questions = array_keys($exercise_questions);
     $saved_data = $exercise->as_array();
     $form = $this->form('exercise/edit/id/' . $exercise->id, $submitted, $saved_data);
     Breadcrumbs::add(array('Edit', ''));
     // set content
     $questions = Model_Question::get_questions(array('course_id' => $course->id));
     $this->content = $view;
 }
Esempio n. 5
0
 public function getArrayDevolutiveReturn($questionnaireId, $userId, $programaId, $blockId = null)
 {
     $this->Questionnaire = new Model_Questionnaire();
     $this->Alternative = new Model_Alternative();
     $this->Question = new Model_Question();
     try {
         $arrDevolutiveRAA = array();
         $arrCriteria = array();
         $arrBlocks = array();
         $arrQuestionnaire = array();
         $arrRadarData = array();
         // Definições do Questionário
         //@TODO - por em cache
         $questionnaireDefs = $this->Questionnaire->getQuestionnaireById($questionnaireId);
         $arrQuestionnaire['title'] = $questionnaireDefs->getTitle();
         $arrQuestionnaire['description'] = $questionnaireDefs->getDescription();
         $arrQuestionnaire['long_description'] = $questionnaireDefs->getLongDescription();
         $arrQuestionnaire['operation_beginning'] = Vtx_Util_Date::format_dma($questionnaireDefs->getOperationBeginning());
         $arrQuestionnaire['operation_ending'] = Vtx_Util_Date::format_dma($questionnaireDefs->getOperationEnding());
         // Definições da Questão
         $questionsDefs = $this->Question->getAllByQuestionnaireIdBlockId($questionnaireId, $blockId);
         $cacheQuestion = new Vtx_Cache_MPE_QuestionarioCache();
         /**
          * - metodo criado para refatorar 2 metodos que faziam a mesma coisa e estavam dentro do foreach
          * - metodo que retorna todas alternativas de todas as questoes de um bloco que um Usuario respondeu
          * - a utilizacao deste metodo reduziu media de 25% a qtd de queries chamadas pelo BD.
          * - no meu exemplo reduziu de 320 para 235.
          * - chamada: $isAnswered = $this->Question->setaQuestionResp($QuestionRespDbTable, $questionId);
          * @author esilva
          */
         $QuestionRespDbTable = $this->Question->getAnswerByBlockId($blockId, $userId, $programaId);
         //var_dump ($QuestionRespDbTable); exit;
         /**
          * 
          * Recupera dados de cada questao de um Bloco:
          * - enunciado questao 
          * - alternativas
          * - resposta
          * - resultado anual
          * 
          */
         foreach ($questionsDefs as $question_def) {
             $idBlock = "";
             $idCriterion = "";
             $questionId = $question_def->getId();
             $question_value = $question_def->getQuestao();
             // Grava a questão no array de devolutiva
             $arrDevolutiveRAA[$questionId]['designation'] = $question_def->getDesignacao();
             $arrDevolutiveRAA[$questionId]['value'] = $question_value;
             $arrDevolutiveRAA[$questionId]['text'] = $question_def->getTexto();
             // Verifica se existe Bloco válido e grava nos arrays de blocos e devolutiva
             $idBlock = $question_def->getBloco();
             if ($idBlock != "" && $idBlock != 0) {
                 $arrBlocks[$idBlock] = $question_def->getBlocoTitulo();
                 $arrDevolutiveRAA[$questionId]['block'] = $question_def->getBloco();
             }
             // Verifica se existe Critério válido e grava nos arrays de critérios e devolutiva
             $idCriterion = $question_def->getCriterio();
             if ($idCriterion != "" && $idCriterion != 0) {
                 $arrCriteria[$idCriterion] = $idCriterion . ". " . $question_def->getCriterioTitulo();
                 $arrDevolutiveRAA[$questionId]['criterion'] = $question_def->getCriterio();
             }
             $isAnswered['answerResult'] = null;
             //se empresa respondeu a questao
             //$isAnswered = $this->Question->isAnsweredByEnterprise($questionId,$userId, true);
             $isAnswered = $this->Question->setaQuestionResp($QuestionRespDbTable, $questionId);
             //var_dump('isAnswered',$isAnswered);
             if ($isAnswered['status']) {
                 // Recupera a resposta
                 //$answer = $this->Question->getQuestionAnswer($questionId,$userId);
                 //refatorado para otimizar queries executadas
                 $answer = $isAnswered['answerResult'];
                 $alternative_id = $answer['alternative_id'];
                 $arrDevolutiveRAA[$questionId]['alternative_id'] = $alternative_id;
                 $arrDevolutiveRAA[$questionId]['write_answer'] = isset($answer['answer_value']) ? $answer['answer_value'] : "";
                 if (count($answer['annual_result']) > 0) {
                     $arrDevolutiveRAA[$questionId]['annual_result'] = $answer['annual_result'];
                     $arrDevolutiveRAA[$questionId]['annual_result_unit'] = $answer['annual_result_unit'];
                 } else {
                     $arrDevolutiveRAA[$questionId]['annual_result'] = "";
                     $arrDevolutiveRAA[$questionId]['annual_result_unit'] = "";
                 }
                 // Recupera o feedback da alternativa escolhida
                 #$alternative =  $this->Alternative->getAlternativeById($alternative_id);
                 //recupera do cache
                 $alternative = $cacheQuestion->alternative($alternative_id, $this->Alternative);
                 $arrDevolutiveRAA[$questionId]['alternative_designation'] = $alternative->getDesignation();
                 $arrDevolutiveRAA[$questionId]['alternative_feedback'] = $alternative->getFeedbackDefault();
                 // Recupera os comentarios 1 do avaliador da resolução da questão
                 //REFACTORING
                 //$arrDevolutiveRAA[$questionId]['answer_feedback'] = $this->Question->getAnswerFeedback( $isAnswered['objAnswered']['AnswerIdValue'] );//$isAnswered['objAnswered']->getAnswerId());
                 $arrDevolutiveRAA[$questionId]['answer_feedback'] = $answer['AnswerFeedback'];
                 // Recupera os comentarios 2 do avaliador da resolução da questão
                 //REFACTORING
                 //$arrDevolutiveRAA[$questionId]['answer_feedback_improve'] = $this->Question->getAnswerFeedbackImprove($isAnswered['objAnswered']['AnswerIdValue']);
                 $arrDevolutiveRAA[$questionId]['answer_feedback_improve'] = $answer['AnswerFeedbackImprove'];
                 //AdditionalInfo
                 $arrDevolutiveRAA[$questionId]['additional_info'] = $answer['AdditionalInfo'];
             }
             // Recupera as alternativas da questão
             //$alternativesDefs =  $this->Alternative->getAllByQuestionId($questionId);
             //recupera do cache
             $alternativesDefs = $cacheQuestion->alternativasEQuestoes($questionId, $this->Alternative);
             //var_dump ('alternativesDefs: ', $alternativesDefs);
             //echo "<br><Br>";
             foreach ($alternativesDefs as $alternative_def) {
                 if (is_object($alternative_def)) {
                     $arr_alternative[$alternative_def->getDesignation()] = $alternative_def->getValue();
                 } else {
                     $arr_alternative[$alternative_def['Designation']] = $alternative_def['Value'];
                 }
             }
             $arrDevolutiveRAA[$questionId]['alternatives'] = $arr_alternative;
         }
         return array($arrDevolutiveRAA, $arrBlocks, $arrCriteria, $arrQuestionnaire);
     } catch (Vtx_UserException $e) {
         DbTable_Questionnaire::getInstance()->getAdapter()->rollBack();
         return array('status' => false, 'messageError' => $e->getMessage());
     } catch (Exception $e) {
         DbTable_Questionnaire::getInstance()->getAdapter()->rollBack();
         throw new Exception($e);
     }
 }
Esempio n. 6
0
 public function configureData()
 {
     // Configure top block
     $top = new Block_Top();
     $top->configure();
     $profile = new Model_User($_GET['login']);
     Globals::$tpl->assignVar(array('profile_id' => $profile->getId(), 'profile_login' => $profile->getLogin(), 'profile_sex' => $profile->getGender(false), 'profile_avatar' => $profile->getAvatarURL('large'), 'profile_region' => $profile->getZipName(), 'profile_gender' => $profile->getGender()));
     // Get stats on friends
     $profileFriendsStats = $profile->getGuessFriendsStats();
     // If a user is logged
     if ($user = Model_User::getLoggedUser()) {
         // If I'm on my profile
         if ($user->getId() == $profile->getId()) {
             Globals::$tpl->assignSection('private');
             // Get pending friend requests
             $pendingFriends = $user->getPendingFriends();
             // Assign friends infos
             foreach ($pendingFriends as $friend) {
                 Globals::$tpl->assignLoopVar('request', array('id' => $friend->getId(), 'login' => $friend->getLogin(), 'avatar' => $friend->getAvatarURL('medium')));
             }
         }
     }
     $profileTotalVotes = $profile->getTotalVotes();
     Globals::$tpl->assignVar(array('profile_totalVote' => $profileTotalVotes, 'profile_totalPredictionWon' => 0, 'profile_totalPredictionLost' => 0, 'profile_predictionAccuracy' => 0, 'profile_global_distance' => 0, 'profile_friend_distance' => 0));
     // Get stats on profil's user guesses according to global votes
     $profileGGS = $profile->getGuessGlobalStats();
     if ($profileGGS['guesses'] != 0) {
         Globals::$tpl->assignVar(array('profile_totalPredictionWon' => $profileGGS['goodGuesses'], 'profile_totalPredictionLost' => $profileGGS['badGuesses'], 'profile_predictionAccuracy' => round($profileGGS['goodGuesses'] / $profileGGS['guesses'] * 100)));
     }
     // List all friends
     $friends = $profile->getFriends();
     foreach ($friends as $friend) {
         Globals::$tpl->assignLoopVar('friend', array('id' => $friend->getId(), 'login' => $friend->getLogin(), 'avatar_medium' => $friend->getAvatarURL('medium'), 'avatar_small' => $friend->getAvatarURL('small')));
         foreach ($profileFriendsStats as $stat) {
             // Get stats on profil's user gusses
             if ($friend->getId() == $stat['user']->getId()) {
                 Globals::$tpl->assignLoopVar('friend.stat', array('predictionAccuracy_his' => round($stat['his_guesses'] == 0 ? 0 : $stat['his_goodGuesses'] / $stat['his_guesses'] * 100), 'predictionAccuracy_my' => round($stat['my_guesses'] == 0 ? 0 : $stat['my_goodGuesses'] / $stat['my_guesses'] * 100)));
             }
         }
     }
     // If profile's user already voted
     if ($profileTotalVotes != 0) {
         $totalQuestions = Model_Question::getTotalQuestions();
         // Get stats on profil's user votes according to global votes
         $profileAGS = $profile->getAnswerGlobalStats();
         if ($profileAGS['votes'] != 0) {
             Globals::$tpl->assignVar(array('profile_global_distance' => round(($profileAGS['votes'] - $profileAGS['goodVotes']) / $profileAGS['votes'] * $totalQuestions)));
         }
         // Get stats on profil's user votes according to his friends votes
         $profileAFS = $profile->getAnswerFriendStats();
         if ($profileAFS['votes'] != 0) {
             Globals::$tpl->assignVar(array('profile_friend_distance' => round(($profileAFS['votes'] - $profileAFS['goodVotes']) / $profileAFS['votes'] * $totalQuestions)));
         }
     }
     // Compute user's feelings
     $profileFeelings = $profile->getFeelings();
     $maxFeelingScore = 0;
     foreach ($profileFeelings as $total) {
         $maxFeelingScore = $maxFeelingScore < $total ? $total : $maxFeelingScore;
     }
     $feelings = array('Personalité', 'Environement', 'Savoir', 'Experience', 'Réflexion', 'Sensibilité');
     $colors = Conf::get('GRAPH_COLORS');
     $data = array();
     foreach ($feelings as $id => $label) {
         Globals::$tpl->assignLoopVar('feeling', array('label' => $label, 'percent' => round($maxFeelingScore == 0 ? 0 : $profileFeelings[$id + 1] / $maxFeelingScore * 100)));
         $data[] = array('value' => ($maxFeelingScore ? 1 - $profileFeelings[$id + 1] / $maxFeelingScore : 0) * 0.95 + 0.05, 'label' => $label, 'color' => $colors[$id]);
     }
     Globals::$tpl->assignVar('feeling_data', json_encode($data));
     // No friends ?
     if (count($friends) == 0 && (!isset($pendingFriends) || count($pendingFriends) == 0)) {
         Globals::$tpl->assignSection('noFriends');
     }
 }