AnonSec Shell
Server IP : 162.214.74.102  /  Your IP : 216.73.217.114
Web Server : Apache
System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64
User : lrsys ( 1015)
PHP Version : 5.6.40
Disable Function : exec,passthru,shell_exec,system
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/lrsys/www/lrsys_apps/erp/application/plugins/module_forms/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/www/lrsys_apps/erp/application/plugins/module_forms/controllers/QuestionsController.php
<?php

require_once 'Controller.php';
require_once __DIR__ . '/../models/QuestionsModel.php';
require_once __DIR__ . '/../models/ChoicesModel.php';
require_once __DIR__ . '/../models/QuestionsformsModel.php';

/**
 *
 */
class QuestionsController extends Controller
{
	/**
	 * @var
	 */
	protected $model;

	/**
	 * @var ChoicesModel
	 */
	protected $modelChoices;

	/**
	 * @var QuestionsformsModel
	 */
	protected $modelQuestionsforms;

	/**
	 * @var string
	 */
	protected $controller = 'questions';

	/**
	 * QuestionsController constructor.
	 * @param $ui
	 * @param $_L
	 * @param $config
	 * @param $_pd
	 */
	public function __construct($ui, $_L, $config, $_pd)
	{
		parent::__construct($ui, $_L, $config, $_pd);
		$this->model = new QuestionsModel();
		$this->modelChoices = new ChoicesModel();
		$this->modelQuestionsforms = new QuestionsformsModel();
	}

	/**
	 * Método de Criação de perguntas
	 */
	public function create()
    {
        $this->validate();

		$form_id = $this->data['form_id'];

		$question_data = [];
		$question_data['type_id'] 			= $this->data['type_id'];
		$question_data['question'] 			= $this->data['question'];
		$question_data['multi_selections'] 	= isset($this->data['multi_selections']) ? true : false; // Multipla seleção
		$question_data['multiple_choice'] 	= isset($this->data['multi_selections']) ? true : false; // Multipla escolha
		$question_data['description'] 		= $this->data['description'];
		$question_data['max_characters'] 	= $this->data['max_characters'];
		$question_data['range_value'] 		= $this->data['opinion-scale'];
		$question_data['required'] 			= (isset($this->data['required'])) ? true : false;
		$question_data['variable'] 			= (isset($this->data['variable']) && !empty($this->data['variable'])) ? $this->data['variable'] : null;
		$question_data['webservice_field_id'] = (isset($this->data['webservice_field']) && !empty($this->data['webservice_field'])) ? $this->data['webservice_field'] : null;

		// Busca a última questão baseada pelo 'sorder'
		$last_question = ORM::for_table('module_forms_questions')
			->table_alias('q')
			->select('q.id')
			->select('q.question')
			->select('q.sorder')
			->join('module_forms_questions_forms', 'q.id = qf.question_id', 'qf')
			->where('qf.form_id', $form_id)
			->order_by_desc('sorder')
			->find_one();

		if ($last_question) {
			$question_data['sorder'] = $last_question->sorder + 1;
		}

		// Insere a pergunta
		$question = $this->model->createQuestion($question_data);

		$data_questions_forms = [];
		$data_questions_forms['form_id'] = $form_id;
		$data_questions_forms['question_id'] = $question->id;

		// Insere a questão na tabela N:N
		$this->modelQuestionsforms->createQuestionform($data_questions_forms);

		if (isset($this->data['choices']) && count($this->data['choices']) > 0) {
			foreach ($this->data['choices'] as $choice) {
				$choices_data = [];
				$choices_data['question_id'] = $question->id;
				$choices_data['name'] = $choice;

				// Insere as opções da pergunta
				$this->modelChoices->createChoice($choices_data);
			}
		}

		header('Content-Type: application/json');
		echo json_encode(['status' => true, 'msg' => $this->_L['module_forms_question_created_msg']]);
		die();
    }

	/**
	 * Método de edição de perguntas
	 */
    public function update()
    {
		$question = $this->validate('update');

		$form_id = $this->data['form_id'];
		$question_id = $this->data['question_id'];

		$question_data = [];
		$question_data['type_id'] 			= $this->data['type_id'];
		$question_data['question'] 			= $this->data['question'];
		$question_data['multi_selections'] 	= ($question_data['type_id'] == 14) ? true : false; // Multipla escolha
		$question_data['description'] 		= $this->data['description'];
		$question_data['max_characters'] 	= $this->data['max_characters'];
		$question_data['range_value'] 		= $this->data['opinion-scale'];
		$question_data['required'] 			= (isset($this->data['required']) && $this->data['required'] == 'Yes') ? true : false;
		$question_data['variable'] 			= (isset($this->data['variable']) && !empty($this->data['variable'])) ? $this->data['variable'] : null;
		$question_data['webservice_field_id'] = (isset($this->data['webservice_field']) && !empty($this->data['webservice_field'])) ? $this->data['webservice_field'] : null;

		// Insere a pergunta
		$this->model->updateQuestion($question_data, $question);

		// Remove as choices antigas antes de adicionar as choices atualizadas
		ORM::for_table('module_forms_choices')->where('question_id', $question_id)->delete_many();

		if (isset($this->data['choices']) && count($this->data['choices']) > 0) {
			foreach ($this->data['choices'] as $choice) {
				if (strlen($choice) > 0) {
					$choices_data = [];
					$choices_data['question_id'] = $question->id;
					$choices_data['name'] = $choice;

					// Insere as opções da pergunta
					$this->modelChoices->createChoice($choices_data);
				}
			}
		}

		header('Content-Type: application/json');
		echo json_encode(['status' => true, 'msg' => $this->_L['module_forms_question_edit_msg']]);
		die();
    }

    public function delete()
    {
        if (!isset($this->routes[3]) || !is_numeric($this->routes[3])) {
            r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['Invalid ID']);
        }

        // Verifica se a questão existe
        $question = $this->model->getOne($this->routes[3]);

        if (!$question) {
			r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['Not_Found']);
		}

		// Remove da tabela N:N
		$questions_forms = $this->modelQuestionsforms->getByParam('question_id', $question->id);
		if ($questions_forms) {
			foreach ($questions_forms as $item) {
				$this->modelQuestionsforms->delete($item->id);
			}
		}

		// Remove as múltiplas escolhas
		ORM::for_table('module_forms_choices')
			->where('question_id', $question->id)
			->delete_many();

		// Remove os jumps lógicos
		ORM::for_table('module_forms_logic_jumps')
			->where('question_id', $question->id)
			->delete_many();

		$this->model->delete($question->id);

        header('Content-Type: application/json');
        echo json_encode(['status' => true, 'msg' => $this->_L['module_forms_question_delete_msg']]);
        exit;
    }

	public function validate($action = 'create')
    {
        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
            r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['Method'] .' '. $this->_L['Not Permited']);
        }

		if (!isset($_POST['form_id']) || empty($_POST['form_id'])) {
			r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['module_forms_form_id_required']);
		}

		$this->data = $_POST;

        if ($action == "update") {
        	if (!isset($_POST['question_id']) || empty($_POST['question_id'])) {
				r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['module_forms_question_id_required']);
			}

			$question = ORM::for_table('module_forms_questions')->find_one($_POST['question_id']);

			if (!$question) {
				r2($_SERVER['HTTP_REFERER'], 'e', $this->_L['Not_Found']);
			}

			return $question;
		}
    }

	/**
	 * Carrega o template do Modal de Questões
	 */
	public function modalAddQuestion()
	{
		$form_id = '';
		$question_id = '';

		if (isset($this->routes['3'])) {
			$form_id = filter_var($this->routes['3'], FILTER_SANITIZE_NUMBER_INT);
		}
		if (isset($this->routes['4'])) {
			$question_id = filter_var($this->routes['4'], FILTER_SANITIZE_NUMBER_INT);
		}

		if (!empty($form_id)) {
			$this->ui->assign('form_id', $form_id);

			$form = ORM::for_table('module_forms_forms')->find_one($form_id);
			$this->ui->assign('form', $form);

			if (!empty($question_id)) {
				$question = ORM::for_table('module_forms_questions')
					->table_alias('q')
					->select('q.*')
					->select('qf.form_id')
					->select('qf.question_id')
					->select('t.name', 'type')
					->join('module_forms_questions_forms', 'q.id = qf.question_id', 'qf')
					->join('module_forms_forms', 'f.id = qf.form_id', 'f')
					->join('module_forms_types', 'q.type_id = t.id', 't')
					->where('qf.form_id', $form_id)
					->where('qf.question_id', $question_id)
					->find_one();
				$this->ui->assign('question', $question);
			}

			$questions = ORM::for_table('module_forms_questions')
				->table_alias('q')
				->select('q.id')
				->select('q.question')
				->select('q.parent_id')
				->select('q.sorder')
				->select('t.name', 'type')
				->select_expr('(SELECT COUNT(quest.id) FROM module_forms_questions quest WHERE q.id = quest.parent_id)', 'has_child')
				->join('module_forms_questions_forms', 'q.id = qf.question_id', 'qf')
				->join('module_forms_forms', 'qf.form_id = f.id', 'f')
				->join('module_forms_types', 'q.type_id = t.id', 't')
				->where('qf.form_id', $form_id)
				->order_by_asc('q.sorder')
				->find_array();
			$this->ui->assign('questions', $questions);

			$webservices_fields = ORM::for_table('module_forms_webservices')
				->table_alias('w')
				->select('w.id', 'webservice_id')
				->select('w.title', 'webservice')
				->select('wf.id', 'webservice_field_id')
				->select('wf.label', 'label')
				->select('wf.name', 'name')
				->join('module_forms_webservices_fields', 'w.id = wf.webservice_id', 'wf')
				->where('w.id', $form->webservice_id)
				->find_many();
			$this->ui->assign('webservices_fields', $webservices_fields);
		}

		if (!empty($question_id))
			$_st = $this->_L['module_forms_edit_question'];
		else if (!empty($form_id))
			$_st = $this->_L['module_forms_new_question'];

		$assets_css = Asset::css(['modal', 's2/css/select2.min', 'toggle/bootstrap-toggle.min']);
		$assets_css .= Asset::css('/../../../' . $this->_pd . '/assets/css/questions');
		$this->ui->assign('xheader', $assets_css);

		$assets_js = Asset::js(['modal', 's2/js/select2.min', 'toggle/bootstrap-toggle.min', 'dp/dist/datepicker.min']);
		$assets_js .= Asset::js_external($this->_pd . '/assets/js/forms.js');
		$assets_js .= Asset::js_external($this->_pd . '/assets/js/questions.js');
		$this->ui->assign('xfooter', $assets_js);

		$this->ui->assign('_st', $_st);
		$this->ui->display($this->_pd . '/views/questions/modal_add.tpl');
	}

	/**
	 * Método que retorna um json com todas as quesões
	 */
	public function listAjax()
	{
		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
			$form_id = null;
			if (isset($_POST['form_id']) && !empty($_POST['form_id'])) {
				$form_id = filter_var($_POST['form_id'], FILTER_SANITIZE_NUMBER_INT);
			}

			if ($form_id) {
				$questions = ORM::for_table('module_forms_questions')
					->table_alias('q')
					->select('q.id')
					->select('q.question')
					->select('q.parent_id')
					->select('q.sorder')
					->select('q.type_id')
					->select('t.name', 'type')
					->select_expr('(SELECT COUNT(quest.id) FROM module_forms_questions quest WHERE q.id = quest.parent_id)', 'has_child')
					->join('module_forms_questions_forms', 'q.id = qf.question_id', 'qf')
					->join('module_forms_forms', 'qf.form_id = f.id', 'f')
					->join('module_forms_types', 'q.type_id = t.id', 't')
					->where('qf.form_id', $form_id)
					->order_by_asc('q.sorder')
					->find_array();

				header('Content-Type: application/json');
				echo json_encode($questions);
				exit;
			}
		}
		header('Content-Type: application/json');
		echo json_encode(['status' => false, 'msg' => 'Error']);
		exit;
	}

	/**
	 * Método para salvar o ID da questão pai
	 */
	public function addParent()
	{
		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
			$parent_id = (isset($_POST['parent_id'])) ? filter_var($_POST['parent_id'], FILTER_SANITIZE_NUMBER_INT) : null;
			$question_id = (isset($_POST['question_id'])) ? filter_var($_POST['question_id'], FILTER_SANITIZE_NUMBER_INT) : null;

			$question = ORM::for_table('module_forms_questions')->find_one($question_id);

			if ($question) {
				$question->parent_id = $parent_id;
				$question->save();

				header('Content-Type: application/json');
				echo '{"status": true, "msg": "OK"}';
				exit;
			}
		}
	}

	/**
	 * Carrega o template do Modal de Jumps Lógicos
	 */
	public function modalAddLogicJump()
	{
		if (isset($this->routes['3'])) {
			$this->ui->assign('question_id', $this->routes['3']);
		}

		$question = $this->model->getOne($this->routes['3']);
		$this->ui->assign('question', $question);

		$logic_jumps = ORM::for_table('module_forms_logic_jumps')
			->where('question_id', $question->id)
			->find_many();
		$this->ui->assign('logic_jumps', $logic_jumps);

		$questions = $this->model->all();
		$this->ui->assign('questions', $questions);

		$conditions = ORM::for_table('module_forms_conditions')
			->table_alias('c')
			->select('c.id')
			->select('c.condition')
			->select('c.operator')
			->join('module_forms_types_conditions', 'tc.condition_id = c.id', 'tc')
			->where('tc.type_id', $question->type_id)
			->order_by_asc('c.condition')
			->find_array();
		$this->ui->assign('conditions', $conditions);

		$this->ui->assign('_st', $this->_L['module_forms_logic_jump']);
		$this->ui->display($this->_pd . '/views/questions/modal_logic_jumps.tpl');
	}

	/**
	 * Adiciona os Jumps lógicos as perguntas
	 */
	public function createLogicJump()
	{
		if (isset($_POST['question']) && count($_POST['question']) > 0) {
			$data = array();
			$result = false;

			if (isset($_POST['id']) && is_numeric($_POST['id'])) {
				// Antes de inserir os novos registros, remove os registros antigos.
				ORM::for_table('module_forms_logic_jumps')->where('question_id', (int) $_POST['id'])->delete_many();

				// Faz update adicionando o valor do 'default_jump_to'
				if (isset($_POST['default_jump_to']) && is_numeric($_POST['default_jump_to'])) {
					$default_jump_to = (isset($_POST['default_jump_to'])) ? filter_var($_POST['default_jump_to'], FILTER_SANITIZE_NUMBER_INT) : null;
					$question = ORM::for_table('module_forms_questions')->find_one((int) $_POST['id']);
					$question->default_jump_to = $default_jump_to;
					$question->save();
				}
			}

			foreach($_POST['question'] as $i => $item) {
				$data['question_id'] = (isset($_POST['question'][$i])) ? filter_var($_POST['question'][$i], FILTER_SANITIZE_NUMBER_INT) : null;
				$data['condition_id'] = (isset($_POST['condition'][$i])) ? filter_var($_POST['condition'][$i], FILTER_SANITIZE_NUMBER_INT) : null;
				$data['value'] = (isset($_POST['condition_value'][$i])) ? filter_var($_POST['condition_value'][$i], FILTER_SANITIZE_STRING) : null;
				$data['jump_to'] = (isset($_POST['jump_to'][$i])) ? filter_var($_POST['jump_to'][$i], FILTER_SANITIZE_NUMBER_INT) : null;

				// Insere os Jumps
				$result = ORM::for_table('module_forms_logic_jumps')->create($data)->save();
			}

			if ($result) {
				header('Content-Type: application/json');
				echo json_encode(['status' => true, 'msg' => 'Jump Lógico Adicionado com sucesso']);
				exit;
			}
		}
	}

	/**
	 *
	 */
	public function validateLoginJump()
	{
		if (!isset($_POST['question']) || empty($_POST['question'])) {
			r2(U . "module_forms/{$this->controller}/listQuestions", 'e', '');
		}
	}

	/**
	 * Método para clonar a questão
	 */
	public function cloneQuestion()
	{
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			if (!isset($_POST['question_id']) || empty($_POST['question_id'])) {
				r2(U . "module_forms/{$this->controller}/listQuestions", 'e', '');
			}

			if (!isset($_POST['question_id']) || empty($_POST['question_id'])) {
				r2(U . "module_forms/{$this->controller}/listQuestions", 'e', '');
			}

			// Busca os dados da questão que será clonada
			$question = ORM::for_table('module_forms_questions')->find_one((int) $_POST['question_id']);
			$data = $question->as_array();
			unset($data['id']);

			// Cria a nova questão
			$new_question = $this->model->createQuestion($data);

			// Faz o relacionamento com o form
			$question_forms = [
				'form_id' => $_POST['form_id'],
				'question_id' => $new_question->id
			];
			ORM::for_table('module_forms_questions_forms')->create($question_forms)->save();

			echo json_encode(['status' => true, 'msg' => $this->_L['Clone question succesfully']]);
			exit;
		}
	}

	/**
	 *
	 */
	public function findChoices()
	{
		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
			$question_id = (isset($_POST['question_id'])) ? $_POST['question_id'] : false;

			$statement = ORM::for_table('module_forms_choices');

			if ($question_id) {
				$statement->where('question_id', $question_id);
			}

			$question_choices = $statement->find_array();

			header('Content-Type: application/json');
			echo json_encode($question_choices);
			exit;
		}
	}

}

Anon7 - 2022
AnonSec Team