/**
  * Cache the template file
  */
 protected static function cache_template_file()
 {
     if (!self::$TPL_DEFS) {
         $path = dirname(__FILE__) . '/templates.php';
         @(include $path);
         self::$TPL_DEFS = $qb_templates;
     }
 }
 /**
  * Load inline HTML
  *
  * @param type    $uuid
  * @param type    $base_rs
  */
 protected function show_html($uuid, $base_rs)
 {
     $inq = AIR2_Record::find('Inquiry', $uuid);
     // redmine #7794 adminstrative queries disallowed for non-system users
     if (!$this->user->is_system()) {
         if ($inq && $inq->inq_type == Inquiry::$TYPE_MANUAL_ENTRY) {
             $this->airoutput->write_error(403, 'Query for internal use only', 'This query is for internal use only');
             return;
         }
     }
     $search_query = array('q' => "inq_uuid={$uuid}");
     $inline = array('UUID' => $base_rs['uuid'], 'URL' => air2_uri_for($base_rs['path']), 'BASE' => $base_rs, 'QUESDATA' => $this->api->query("inquiry/{$uuid}/question", array('limit' => 0, 'sort' => 'ques_dis_seq asc')), 'QUESTPLS' => AIR2_QueryBuilder::get_defs(), 'QUESURL' => air2_uri_for("inquiry/{$uuid}/question"), 'ORGDATA' => $this->api->query("inquiry/{$uuid}/organization", array('sort' => 'org_display_name asc')), 'PROJDATA' => $this->api->query("inquiry/{$uuid}/project", array('sort' => 'prj_display_name asc')), 'OUTDATA' => $this->api->query("inquiry/{$uuid}/outcome", array('limit' => 10)), 'ANNOTDATA' => $this->api->query("inquiry/{$uuid}/annotation", array('limit' => 3, 'sort' => 'inqan_cre_dtim desc')), 'TAGDATA' => $this->api->query("inquiry/{$uuid}/tag", array('limit' => 0)), 'STATSDATA' => $this->_stats_data($inq), 'SUBMDATA' => $this->api->query("inquiry/{$uuid}/submission", array('limit' => 5)), 'SUBMSRCH' => air2_uri_for("reader/query/{$uuid}"), 'ACTIVDATA' => $this->api->query("inquiry/{$uuid}/activity", array('limit' => 5)), 'AUTHORDATA' => $this->api->query("inquiry/{$uuid}/author", array('limit' => 5)), 'WATCHERDATA' => $this->api->query("inquiry/{$uuid}/watcher", array('limit' => 5)));
     // show page
     $title = $base_rs['radix']['inq_ext_title'] . ' - ' . AIR2_SYSTEM_DISP_NAME;
     $data = $this->airhtml->get_inline($title, 'Inquiry', $inline);
     $this->response($data);
 }
 /**
  * Copy all the questions from one query to another
  *
  * @param Inquiry $from_rec the query to copy from
  * @param Inquiry $to_rec the query to copy to
  */
 protected function duplicate_questions(Inquiry $from_rec, Inquiry $to_rec)
 {
     // get source questions
     $q = Doctrine_Query::create()->from('Question q');
     $q->where('q.ques_inq_id = ?', $from_rec->inq_id);
     $permission_types = array(Question::$TYPE_PERMISSION, Question::$TYPE_PERMISSION_HIDDEN);
     $default_question_templates = array(Question::$TKEY_FIRSTNAME, Question::$TKEY_LASTNAME, Question::$TKEY_EMAIL, Question::$TKEY_ZIP);
     $results = $q->execute();
     foreach ($results as $idx => $ques_rec) {
         if (!in_array($ques_rec->ques_template, $default_question_templates) && !in_array($ques_rec->ques_type, $permission_types)) {
             $new_question = new Question();
             $new_question->ques_inq_id = $to_rec->inq_id;
             AIR2_QueryBuilder::copy_question($new_question, $ques_rec->ques_uuid);
             $this->air_save($new_question);
         }
     }
 }
 /**
  * Create
  *
  * @param array   $data
  * @return Question $q
  */
 protected function air_create($data)
 {
     if (!isset($data['ques_template']) && !isset($data['duplicate'])) {
         throw new Rframe_Exception(Rframe::BAD_DATA, "Missing required param: ques_template OR duplicate");
     }
     if (isset($data['ques_template']) && $data['ques_template'] == 'fileupload') {
         if ($this->parent_rec->has_file_upload_question()) {
             throw new Rframe_Exception(Rframe::BAD_DATA, "Only one file upload question allowed per query");
         }
     }
     $q = new Question();
     $q->ques_inq_id = $this->parent_rec->inq_id;
     // rethrow as api exceptions
     try {
         if (isset($data['ques_template'])) {
             AIR2_QueryBuilder::make_question($q, $data['ques_template']);
         } elseif (isset($data['duplicate'])) {
             AIR2_QueryBuilder::copy_question($q, $data['duplicate']);
         }
     } catch (Exception $e) {
         throw new Rframe_Exception(RFrame::BAD_DATA, $e->getMessage());
     }
     // optionally fix the whole sequence
     if (isset($data['resequence'])) {
         $this->_fix_sequence($q, $data['resequence']);
     }
     return $q;
 }
 /**
  * See if the permission question is needed.
  *
  *
  * @param bool    $force (optional) force creation
  */
 public function check_permission_question($force = false)
 {
     // get all existing questions
     if (!$force) {
         $q = AIR2_Query::create()->from('Question q');
         $q->where('q.ques_inq_id = ?', $this->inq_id);
         $q->andWhere('q.ques_public_flag = 1');
         $q->andWhereNotIn('q.ques_type', array(Question::$TYPE_CONTRIBUTOR, Question::$TYPE_PERMISSION_HIDDEN, Question::$TYPE_PERMISSION, Question::$TYPE_PICK_COUNTRY, Question::$TYPE_PICK_STATE));
         $count = $q->count();
     }
     if ($force || $count) {
         $permq = $this->_fetch_permission_question();
         if (!$permq && !$this->_has_permission_question) {
             // doctrine doesn't seem to notice the question below right away
             // this is a backstop to prevent adding duplicates
             $this->_has_permission_question = true;
             $question = new Question();
             $question->ques_inq_id = $this->inq_id;
             $question->ques_dis_seq = 99;
             $template = Question::$TKEY_PERMISSION;
             AIR2_QueryBuilder::make_question($question, $template);
             // save question
             $question->save();
         }
         // update flag on this inquiry if necessary
         if (!$this->inq_public_flag) {
             $this->inq_public_flag = 1;
             $this->save();
         }
     } elseif (!$count && $this->inq_type == self::$TYPE_FORMBUILDER) {
         // legacy queries allowed to have permission question
         // with no accompanying public questions.
         // so no-op here. See redmine #7785
     } else {
         $permq = $this->_fetch_permission_question();
         if ($permq) {
             $permq->delete();
             // update flag on this inquiry if necessary
             if ($this->inq_public_flag) {
                 $this->inq_public_flag = 0;
                 $this->save();
             }
         }
     }
 }