/** Shows the page for a single participant */
 public function get($participant_id)
 {
     $participant = $this->participantModel->get_participant_by_id($participant_id);
     $comments = $this->commentModel->get_comments_by_participant($participant_id);
     $impediments = $this->impedimentModel->get_impediments_by_participant($participant_id);
     $participations = $this->participationModel->get_participations_by_participant($participant_id, TRUE);
     $data['participant'] = $participant;
     $data['last_called'] = $this->participantModel->last_called($participant_id);
     $data['last_experiment'] = $this->participantModel->last_experiment($participant_id);
     $data['comment_size'] = count($comments);
     $data['impediment_size'] = count($impediments);
     $data['participation_size'] = count($participations);
     $data['page_title'] = sprintf(lang('data_for_pp'), name($participant));
     $data['verify_languages'] = language_check($participant);
     $data['verify_dyslexia'] = dyslexia_check($participant);
     $this->load->view('templates/header', $data);
     $this->load->view('participant_view', $data);
     $this->load->view('templates/footer');
 }
 /**
  *
  * Shows the page for calling a participant
  * @param integer $participant_id
  * @param integer $experiment_id
  * @param integer $weeks_ahead
  */
 public function call($participant_id, $experiment_id, $weeks_ahead = WEEKS_AHEAD)
 {
     // Retrieve entities
     $participant = $this->participantModel->get_participant_by_id($participant_id);
     $experiment = $this->experimentModel->get_experiment_by_id($experiment_id);
     // Check current user is caller for experiment
     if (!$this->callerModel->is_caller_for_experiment(current_user_id(), $experiment_id)) {
         $data['error'] = sprintf(lang('not_caller'), $experiment->name);
         $this->load->view('templates/error', $data);
         return;
     }
     // Check current participant is callable for experiment
     if (!in_array($participant, $this->participantModel->find_participants($experiment, $weeks_ahead))) {
         $data['error'] = sprintf(lang('not_callable_for'), name($participant), $experiment->name);
         $this->load->view('templates/error', $data);
         return;
     }
     // Check current participant is not being called
     if ($this->participationModel->is_locked_participant($participant_id, $experiment_id)) {
         $data['error'] = sprintf(lang('in_conversation'), name($participant));
         $this->load->view('templates/error', $data);
         return;
     }
     // Retrieve links
     $comments = $this->commentModel->get_comments_by_participant($participant_id);
     $impediments = $this->impedimentModel->get_impediments_by_participant($participant_id);
     $experiments = $this->experimentModel->get_experiments_by_participant($participant_id);
     $participations = $this->participationModel->get_participations_by_experiment($experiment_id);
     $leaders = $this->leaderModel->get_leader_users_by_experiments($experiment_id);
     $first_visit = count($this->participationModel->get_participations_by_participant($participant_id, TRUE)) == 0;
     // Retrieve or create participation record
     $participation = $this->participationModel->get_participation($experiment_id, $participant_id);
     if ($participation) {
         $participation_id = $participation->id;
     } else {
         $participation_id = $this->participationModel->create_participation($experiment, $participant);
         $participation = $this->participationModel->get_participation_by_id($participation_id);
     }
     // Find the previous call (if is exists)
     $previous_call = $this->callModel->last_call($participation_id);
     // Lock the participation record
     $this->participationModel->lock($participation_id);
     // Create call record
     $call_id = $this->callModel->create_call($participation_id);
     // Find possible combined experiment, first check combinations
     $combinations = $this->relationModel->get_relation_ids_by_experiment($experiment->id, RelationType::Combination);
     $comb_exp = $combinations ? $this->experimentModel->get_experiment_by_id($combinations[0]) : FALSE;
     if (!$comb_exp) {
         // Then check prerequisites
         $prereqs = $this->relationModel->get_relation_ids_by_experiment($experiment->id, RelationType::Prerequisite);
         $comb_exp = $prereqs ? $this->experimentModel->get_experiment_by_id($prereqs[0]) : FALSE;
     }
     // Check if participation to combined experiment already exists
     $comb_part = $comb_exp ? $this->participationModel->get_participation($comb_exp->id, $participant_id) : FALSE;
     if ($comb_part) {
         $comb_exp = FALSE;
     }
     $comb_leaders = $comb_exp ? $this->leaderModel->get_leader_users_by_experiments($comb_exp->id) : array();
     // Create page data
     $data = get_min_max_days($participant, $experiment);
     $data['participant'] = $participant;
     $data['experiment'] = $experiment;
     $data['participation'] = $participation;
     $data['participation_id'] = $participation_id;
     $data['leaders'] = leader_options($leaders);
     $data['call_id'] = $call_id;
     $data['previous_call'] = $previous_call;
     $data['comment_size'] = count($comments);
     $data['impediment_table'] = create_impediment_table($impediments);
     $data['impediment_size'] = count($impediments);
     $data['last_experiment'] = $this->participantModel->last_experiment($participant_id);
     $data['last_called'] = $this->participantModel->last_called($participant_id);
     $data['nr_participations'] = count($participations);
     $data['verify_languages'] = language_check($participant);
     $data['verify_dyslexia'] = dyslexia_check($participant);
     $data['first_visit'] = $first_visit;
     $data['combination_exp'] = $comb_exp;
     $data['combination_leaders'] = leader_options($comb_leaders);
     $data['page_title'] = sprintf(lang('call_participant'), name($participant));
     $this->load->view('templates/header', $data);
     $this->load->view('participation_call', $data);
     $this->load->view('templates/footer');
 }
Example #3
0
 function loadConstBook()
 {
     global $database, $mosConfig_absolute_path;
     $is_exception = false;
     $database->setQuery("SELECT * FROM #__booklibrary_languages");
     $langs = $database->loadObjectList();
     $component_path = JPath::clean($mosConfig_absolute_path . '/components/com_booklibrary/language/');
     $component_layouts = array();
     if (is_dir($component_path) && ($component_layouts = JFolder::files($component_path, '^[^_]*\\.php$', false, true))) {
         //check and add constants file in DB
         foreach ($component_layouts as $i => $file) {
             $file_name = pathinfo($file);
             $file_name = $file_name['filename'];
             if ($file_name === 'constant') {
                 $database->setQuery("SELECT id FROM #__booklibrary_const");
                 $idConst = $database->loadResult();
                 if (empty($idConst)) {
                     require $mosConfig_absolute_path . "/components/com_booklibrary/language/{$file_name}.php";
                     foreach ($constMas as $mas) {
                         $database->setQuery("INSERT INTO #__booklibrary_const (const, sys_type) VALUES ('" . $mas["const"] . "','" . $mas["sys_type"] . "')");
                         $database->query();
                     }
                 }
             }
         }
         //check and add new text files in DB
         foreach ($component_layouts as $i => $file) {
             $isLang = 0;
             $file_name = pathinfo($file);
             $file_name = $file_name['filename'];
             $LangLocal = '';
             $isLang = 1;
             if ($file_name != 'constant') {
                 require $mosConfig_absolute_path . "/components/com_booklibrary/language/{$file_name}.php";
                 foreach ($langs as $lang) {
                     if ($lang->lang_code == $LangLocal['lang_code'] || $lang->title == $LangLocal['title']) {
                         $isLang = 0;
                         break;
                     } else {
                         $isLang = 1;
                     }
                 }
                 try {
                     if ($isLang === 1) {
                         $sql = "INSERT INTO #__booklibrary_languages (lang_code,title) VALUES ('" . $LangLocal['lang_code'] . "','" . $LangLocal['title'] . "')";
                         $database->setQuery("INSERT INTO #__booklibrary_languages (lang_code,title) VALUES ('" . $LangLocal['lang_code'] . "','" . $LangLocal['title'] . "')");
                         $database->query();
                         echo $database->getErrorMsg();
                         $idLang = $database->insertid();
                         foreach ($constLang as $item) {
                             $sql = "SELECT id FROM #__booklibrary_const WHERE const = '" . $item['const'] . "'";
                             $database->setQuery($sql);
                             $idConst = $database->loadResult();
                             if (!array_key_exists('value_const', $item)) {
                                 echo "<br />:loadConstBook, This value constant " . $item['const'] . " for this lang file " . $LangLocal['title'] . " not exist";
                             } else {
                                 $database->setQuery("INSERT INTO #__booklibrary_const_languages (fk_constid,fk_languagesid,value_const) VALUES ({$idConst}, {$idLang}, " . $database->quote($item['value_const']) . ")");
                                 $database->query();
                             }
                         }
                     }
                 } catch (Exception $e) {
                     $is_exception = true;
                     echo 'Send exception, please write to admin for language check: ', $e->getMessage(), "\n";
                 }
             }
         }
         if ($is_exception) {
             language_check();
         }
         //if text constant missing recover they in DB
         if (!defined('_BOOKLIBRARY_HEADER_NUMBER')) {
             $query = "SELECT c.const, cl.value_const ";
             $query .= "FROM #__booklibrary_const_languages as cl ";
             $query .= "LEFT JOIN #__booklibrary_languages AS l ON cl.fk_languagesid=l.id ";
             $query .= "LEFT JOIN #__booklibrary_const AS c ON cl.fk_constid=c.id ";
             $query .= "WHERE l.lang_code = 'en-GB'";
             $database->setQuery($query);
             $langConst = $database->loadObjectList();
             foreach ($langConst as $item) {
                 define($item->const, $item->value_const);
             }
         }
     }
     //if some language file missing recover it
     $component_path = JPath::clean($mosConfig_absolute_path . '/components/com_booklibrary/language/');
     $component_layouts = array();
     if (is_dir($component_path) && ($component_layouts = JFolder::files($component_path, '^[^_]*\\.php$', false, true))) {
         foreach ($component_layouts as $i => $file) {
             $isLang = 0;
             $file_name = pathinfo($file);
             $file_name = $file_name['filename'];
             if ($file_name != 'constant') {
                 require $mosConfig_absolute_path . "/components/com_booklibrary/language/{$file_name}.php";
                 //$fileMas[] = $LangLocal;
                 $fileMas[] = $LangLocal['title'];
             }
         }
     }
     $database->setQuery("SELECT title FROM #__booklibrary_languages");
     if (version_compare(JVERSION, '3.0', 'lt')) {
         $langs = $database->loadResultArray();
     } else {
         $langs = $database->loadColumn();
     }
     if (count($langs) > count($fileMas)) {
         $results = array_diff($langs, $fileMas);
         foreach ($results as $result) {
             $database->setQuery("SELECT lang_code FROM #__booklibrary_languages WHERE title = '{$result}'");
             $lang_code = $database->loadResult();
             $langfile = "<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );";
             $langfile .= "\n\n/**\n*\n* @package  BookLibrary\n* @copyright 2012 Andrey Kvasnevskiy-OrdaSoft(akbet@mail.ru); Rob de Cleen(rob@decleen.com);\n* Homepage: http://www.ordasoft.com\n* @version: 3.0 Pro\n*\n* */\n\n";
             $langfile .= "\$LangLocal = array('lang_code'=>'{$lang_code}', 'title'=>'{$result}');\n";
             $langfile .= "\$constLang = array();\n";
             $query = "SELECT c.const, cl.value_const ";
             $query .= "FROM #__booklibrary_const_languages as cl ";
             $query .= "LEFT JOIN #__booklibrary_languages AS l ON cl.fk_languagesid=l.id ";
             $query .= "LEFT JOIN #__booklibrary_const AS c ON cl.fk_constid=c.id ";
             $query .= "WHERE l.title = '{$result}'";
             $database->setQuery($query);
             $constlanguages = $database->loadObjectList();
             foreach ($constlanguages as $constlanguage) {
                 $langfile .= "\$constLang[] = array('const'=>'" . $constlanguage->const . "', 'value_const'=>'" . mysql_real_escape_string($constlanguage->value_const) . "');\n";
             }
             // Write out new initialization file
             $fd = fopen($mosConfig_absolute_path . "/components/com_booklibrary/language/{$result}.php", "w") or die("Cannot create language file.");
             fwrite($fd, $langfile);
             fclose($fd);
         }
     }
     //language_check();
 }