diff --git a/application/config/database.php b/application/config/database.php
index e8ab51e..de9475a 100644
--- a/application/config/database.php
+++ b/application/config/database.php
@@ -76,8 +76,8 @@ $query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
- 'username' => 'jostheta',
- 'password' => 'Pa$$w0rd',
+ 'username' => 'root',
+ 'password' => '',
'database' => 'gforms',
'dbdriver' => 'mysqli',
'dbprefix' => '',
diff --git a/application/controllers/Forms.php b/application/controllers/Forms.php
index a4f4037..f6580e2 100644
--- a/application/controllers/Forms.php
+++ b/application/controllers/Forms.php
@@ -220,20 +220,36 @@ class Forms extends CI_Controller
public function submit_response() {
$this->load->model('Form_model');
-
+
$form_id = $this->input->post('form_id');
$responses = $this->input->post('responses');
-
- if ($this->Form_model->save_responses($form_id, $responses)) {
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode(['success' => true]));
+ $questions = $this->Form_model->get_questions_by_form_id($form_id); // Assuming you have a method to get questions by form_id
+
+ $errors = [];
+
+ foreach ($questions as $question) {
+ if ($question->is_required && empty($responses[$question->question_id])) {
+ $errors[$question->question_id] = 'This is a required question';
+ }
+ }
+
+ if (!empty($errors)) {
+ $this->session->set_flashdata('errors', $errors);
+ $this->session->set_flashdata('responses', $responses); // Persisting responses
+ redirect('forms/respond_form/' . $form_id); // Redirect back to the form
} else {
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode(['success' => false]));
+ if ($this->Form_model->save_responses($form_id, $responses)) {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(['success' => true]));
+ } else {
+ $this->output
+ ->set_content_type('application/json')
+ ->set_output(json_encode(['success' => false]));
+ }
}
}
+
// List all forms of the current logged-in user
public function list_user_forms() {
diff --git a/application/models/Form_model.php b/application/models/Form_model.php
index f6d0dc3..9a32dcd 100644
--- a/application/models/Form_model.php
+++ b/application/models/Form_model.php
@@ -21,7 +21,8 @@ class Form_model extends CI_Model {
$this->db->insert('questions', [
'form_id' => $formId,
'question_text' => $question['question'],
- 'question_type' => $question['type']
+ 'question_type' => $question['type'],
+ 'is_required' => $question['required']
]);
$questionId = $this->db->insert_id();
@@ -239,7 +240,8 @@ class Form_model extends CI_Model {
$this->db->insert('questions', [
'form_id' => $form_id,
'question_text' => $question['question_text'],
- 'question_type' => $question['question_type']
+ 'question_type' => $question['question_type'],
+ 'is_required' => $question['required']
]);
$question_id = $this->db->insert_id();
diff --git a/application/views/forms/create.php b/application/views/forms/create.php
index 15cafd4..a413d76 100644
--- a/application/views/forms/create.php
+++ b/application/views/forms/create.php
@@ -20,6 +20,7 @@
Multiple choice
Checkbox
Paragraph
+ Dropdown
@@ -57,6 +58,7 @@
diff --git a/application/views/forms/preview.php b/application/views/forms/preview.php
index 1b0afb9..05b8895 100644
--- a/application/views/forms/preview.php
+++ b/application/views/forms/preview.php
@@ -4,8 +4,9 @@
session->flashdata('error')): ?>
@@ -14,45 +15,65 @@
-
- $question) : ?>
-
+
+ $question): ?>
+
- question_type == 'paragraph') : ?>
+ question_type == 'paragraph'): ?>
-
+
- options)) : ?>
- options as $optionIndex => $option) : ?>
-
- question_type == 'multiple-choice') : ?>
-
- = htmlspecialchars($option->option_text, ENT_QUOTES, 'UTF-8') ?>
- question_type == 'checkbox') : ?>
-
- = htmlspecialchars($option->option_text, ENT_QUOTES, 'UTF-8') ?>
-
-
-
-
+ options)): ?>
+ question_type == 'dropdown'): ?>
+
+ options as $optionIndex => $option): ?>
+
+ = htmlspecialchars($option->option_text, ENT_QUOTES, 'UTF-8') ?>
+
+
+
+
+ options as $optionIndex => $option): ?>
+
+ question_type == 'multiple-choice'): ?>
+
+ = htmlspecialchars($option->option_text, ENT_QUOTES, 'UTF-8') ?>
+ question_type == 'checkbox'): ?>
+
+ = htmlspecialchars($option->option_text, ENT_QUOTES, 'UTF-8') ?>
+
+
+
+
+
No options found for this question.
+
-
+
No questions found for this form.
Publish
-
+
\ No newline at end of file
diff --git a/application/views/forms/respond_form.php b/application/views/forms/respond_form.php
index e00e752..fb828f7 100644
--- a/application/views/forms/respond_form.php
+++ b/application/views/forms/respond_form.php
@@ -3,50 +3,90 @@
+
\ No newline at end of file
diff --git a/application/views/forms/view_form.php b/application/views/forms/view_form.php
index e40f879..26d2d1d 100644
--- a/application/views/forms/view_form.php
+++ b/application/views/forms/view_form.php
@@ -18,6 +18,7 @@
@@ -36,7 +37,7 @@
options)) : ?>
options as $optionIndex => $option) : ?>
-
+
0) : ?>
@@ -53,6 +54,9 @@
diff --git a/assets/css/style.css b/assets/css/style.css
index c4ebe5f..2592467 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -336,7 +336,39 @@ tr:nth-child(even) {
}
+.checkbox-inline input[type="checkbox"] {
+ position: relative;
+ appearance: none;
+ width: 40px;
+ height: 20px;
+ background: #ccc;
+ outline: none;
+ cursor: pointer;
+ border-radius: 20px;
+ transition: background 0.3s;
+ margin-left:15px;
+}
+.checkbox-inline input[type="checkbox"]:checked {
+ background: #2196F3;
+}
+
+.checkbox-inline input[type="checkbox"]::before {
+ content: '';
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ top: 2px;
+ left: 2px;
+ background: #fff;
+ transition: transform 0.3s;
+}
+
+.checkbox-inline input[type="checkbox"]:checked::before {
+ transform: translateX(20px);
+
+}
diff --git a/assets/images/down-arrow.png b/assets/images/down-arrow.png
new file mode 100644
index 0000000..88e0ed9
Binary files /dev/null and b/assets/images/down-arrow.png differ
diff --git a/assets/js/edit.js b/assets/js/edit.js
index 3b79e7b..a948f7c 100644
--- a/assets/js/edit.js
+++ b/assets/js/edit.js
@@ -50,6 +50,10 @@ $(document).ready(function() {
newOption.find('.question-type-image').attr('src', base_url + 'assets/images/square.png');
newOption.find('.question-type-image').attr('alt', 'Square for Checkbox');
}
+ else if (currentQuestionType === 'dropdown') {
+ newOption.find('.question-type-image').attr('src', base_url + 'assets/images/down-arrow.png');
+ newOption.find('.question-type-image').attr('alt', 'down-arrow for dropdown');
+ }
// Check if the close button already exists before appending it
if (optionCount > 1 && newOption.find('.question-box_option-block_option-close').length === 0) {
@@ -106,7 +110,14 @@ $(document).ready(function() {
images.attr('alt', 'Square for Checkbox');
optionsContainer.show();
shortAnswerContainer.hide();
- } else if (selectedType === 'paragraph') {
+ }
+ else if (selectedType === 'dropdown') {
+ images.attr('src', base_url + 'assets/images/down-arrow.png');
+ images.attr('alt', 'down-arrow for dropdown');
+ optionsContainer.show();
+ shortAnswerContainer.hide();
+ }
+ else if (selectedType === 'paragraph') {
images.attr('src', '');
images.attr('alt', '');
optionsContainer.hide();
@@ -129,6 +140,7 @@ $(document).ready(function() {
var questionData = {
question_text: questionBox.find('.question-box_header_question').val(),
question_type: questionBox.find('.question-box_header_question-type_select').val(),
+ required: questionBox.find('.required-checkbox').is(':checked') ? 1 : 0,
options: []
};
diff --git a/assets/js/script.js b/assets/js/script.js
index 2717629..1610b35 100644
--- a/assets/js/script.js
+++ b/assets/js/script.js
@@ -37,6 +37,9 @@ $(document).ready(function() {
} else if (currentQuestionType === 'checkbox') {
newOption.find('img').attr('src', base_url+'assets/images/square.png');
}
+ else if (currentQuestionType === 'dropdown') {
+ newOption.find('img').attr('src', base_url+'assets/images/down-arrow.png');
+ }
if (optionCount > 1) {
newOption.append(' ');
@@ -86,7 +89,14 @@ $(document).ready(function() {
image.attr('alt', 'Square for Checkbox');
optionsContainer.show();
shortAnswerContainer.hide();
- } else if (selectedType === 'paragraph') {
+ }
+ else if (selectedType === 'dropdown') {
+ image.attr('src', base_url+'assets/images/down-arrow.png');
+ image.attr('alt', 'down arrow for dropdown');
+ optionsContainer.show();
+ shortAnswerContainer.hide();
+ }
+ else if (selectedType === 'paragraph') {
image.attr('src', '');
image.attr('alt', '');
optionsContainer.hide();
@@ -136,6 +146,7 @@ $(document).ready(function() {
var questionData = {
question: questionBox.find('.question-box_header_question').val(),
type: questionBox.find('#question-type').val(),
+ required: questionBox.find('.required-checkbox').is(':checked') ? 1 : 0,
options: []
};
@@ -229,29 +240,38 @@ $(document).ready(function() {
});
$(document).ready(function() {
- $('#response-form').on('submit', function(e) {
- e.preventDefault();
-
- $.ajax({
- url: $(this).attr('action'),
- type: $(this).attr('method'),
- data: $(this).serialize(),
- dataType: 'json',
- success: function(data) {
- if (data.success) {
- alert('Response submitted successfully!');
- // Optionally, you can clear the form or redirect the user
- window.location.href = base_url + 'my_forms';
- } else {
+ // Handle dropdowns with initial "Choose" option
+ $('select[data-initial-value="choose"]').on('change', function() {
+ var $this = $(this);
+ if ($this.val() === "") {
+ $this.addClass('default-value');
+ } else {
+ $this.removeClass('default-value');
+ }
+ });
+
+ $(document).ready(function() {
+ $('#response-form').on('submit', function(e) {
+ e.preventDefault();
+
+ $.ajax({
+ url: $(this).attr('action'),
+ type: $(this).attr('method'),
+ data: $(this).serialize(),
+ dataType: 'json',
+ success: function(data) {
+ if (data.success) {
+ alert('Response submitted successfully!');
+ // Optionally, you can clear the form or redirect the user
+ window.location.href = base_url + 'my_forms';
+ } else {
+ alert('An error occurred. Please try again.');
+ }
+ },
+ error: function() {
alert('An error occurred. Please try again.');
}
- },
- error: function() {
- alert('An error occurred. Please try again.');
- }
+ });
});
});
- });
-
-
-
+ });
\ No newline at end of file