/** * 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(); } } } }