public function indexAction()
 {
     $this->view->status = 'ok';
     // get the csrf token
     $session = new Zend_Session_Namespace('csrf');
     $csrf = $session->hash;
     // get the forms to display
     $options = array('defaultForm' => Null, 'polling' => Daiquiri_Config::getInstance()->query->polling->toArray(), 'forms' => array(), 'csrf' => $csrf);
     foreach (Daiquiri_Config::getInstance()->query->forms as $key => $form) {
         if ($form->default) {
             $options['defaultForm'] = $key;
         }
         $options['forms'][] = array('key' => $key, 'title' => $form->title);
     }
     $this->view->options = $options;
     // get options for the query plan
     $queryModel = new Query_Model_Query();
     $this->view->plan = array('enabled' => $queryModel->canShowPlan(), 'editable' => $queryModel->canAlterPlan(), 'mail' => Daiquiri_Config::getInstance()->query->processor->mail->enabled);
     // get the different download options
     $this->view->downloadAdapter = Daiquiri_Config::getInstance()->getQueryDownloadAdapter();
     // check if imageviewer is enabled
     if (Daiquiri_Config::getInstance()->query->images->enabled) {
         $this->view->images = true;
     } else {
         $this->view->images = false;
     }
     // check if the table cols/rows should be selectable
     if (Daiquiri_Config::getInstance()->query->results->select) {
         $this->view->select = true;
     } else {
         $this->view->select = false;
     }
     // check if samp is enabled
     if (Daiquiri_Config::getInstance()->query->samp->enabled && Daiquiri_Auth::getInstance()->getCurrentUsername() !== 'guest') {
         $this->view->samp = true;
     } else {
         $this->view->samp = false;
     }
     // check if plot is enabled
     if (Daiquiri_Config::getInstance()->query->plot->enabled) {
         $this->view->plot = true;
     } else {
         $this->view->plot = false;
     }
 }
Exemple #2
0
 /**
  * Submits a new query to the database.
  * @param string $formstring name of the form to use
  * @param array $formParams
  * @return array $response
  */
 public function submit($formstring, array $formParams = array())
 {
     // get the formclass
     $formConfig = Daiquiri_Config::getInstance()->query->forms->{$formstring};
     if ($formConfig === null || get_Class($formConfig) !== 'Zend_Config') {
         throw new Exception('form options not found');
     } else {
         $formOptions = $formConfig->toArray();
         $formOptions['name'] = $formstring;
     }
     // get queues
     $resource = Query_Model_Resource_AbstractQuery::factory();
     $queues = array();
     $defaultQueue = false;
     if ($resource::$hasQueues === true) {
         try {
             $queues = $resource->fetchQueues();
             $defaultQueue = $resource->fetchDefaultQueue();
         } catch (Exception $e) {
             return array('status' => 'error');
         }
         $usrGrp = Daiquiri_Auth::getInstance()->getCurrentRole();
         foreach ($queues as $key => $value) {
             // show only the guest queue for the guest user:
             if ($value['name'] !== "guest" && $usrGrp === "guest") {
                 unset($queues[$key]);
             }
             // remove the guest queue if this is a non guest user
             if ($value['name'] === "guest" && $usrGrp !== "guest") {
                 unset($queues[$key]);
             }
         }
     }
     // get the form
     $form = new $formConfig->class(array('formOptions' => $formOptions, 'queues' => $queues, 'defaultQueue' => $defaultQueue));
     // init errors array
     $errors = array();
     // validate form
     if (!empty($formParams)) {
         if ($form->isValid($formParams)) {
             // form is valid, get sql string from functions
             $sql = $form->getQuery();
             $tablename = $form->getTablename();
             $queueId = $form->getQueue();
             //clean from default flag
             $queueId = str_replace("_def", "", $queueId);
             if (empty($tablename)) {
                 $tablename = null;
             }
             $options = array();
             if (!empty($queueId)) {
                 $options['queue'] = $queues[$queueId]['name'];
             }
             // validate query
             $model = new Query_Model_Query();
             if ($model->validate($sql, false, $tablename, $errors) !== true) {
                 // set description for form
                 $form->setDescription(implode('; ', $errors));
                 // construct response array
                 return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => array('form' => $errors));
             }
             // take a detour to the query plan
             if ($model->canShowPlan()) {
                 // store query, tablename and queue in session
                 Zend_Session::namespaceUnset('query_plan');
                 $ns = new Zend_Session_Namespace('query_plan');
                 $ns->sql = $sql;
                 $ns->tablename = $tablename;
                 if (isset($options['queue'])) {
                     $ns->queue = $options['queue'];
                 } else {
                     $ns->queue = null;
                 }
                 $ns->plan = $model->plan($sql, $errors);
                 if (!empty($errors)) {
                     return $this->getModelHelper('CRUD')->validationErrorResponse($form, $errors);
                 }
                 // construct response with redirect to plan
                 $baseurl = Daiquiri_Config::getInstance()->getSiteUrl();
                 return array('status' => 'plan', 'redirect' => $baseurl . '/query/form/plan?form=' . $formstring);
             } else {
                 // submit query
                 $response = $model->query($sql, false, $tablename, $options);
                 if ($response['status'] === 'ok') {
                     // submitting the query was successful
                     return $response;
                 } else {
                     // set description for form
                     $form->setDescription(implode('; ', $response['errors']));
                     // construct response array
                     return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => array('form' => $response['errors']));
                 }
             }
         } else {
             return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => $form->getMessages());
         }
     }
     return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'form');
 }