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