Commit | Line | Data |
---|---|---|
2bf0718d J |
1 | <?php |
2 | ||
3 | require_once 'CRM/Core/Form.php'; | |
4 | require_once 'wci-helper-functions.php'; | |
82ba21f9 | 5 | require_once 'CRM/Wci/BAO/ProgressBar.php'; |
cde51233 | 6 | require_once 'CRM/Wci/DAO/ProgressBarFormula.php'; |
2bf0718d J |
7 | |
8 | /** | |
9 | * Form controller class | |
10 | * | |
11 | * @see http://wiki.civicrm.org/confluence/display/CRMDOC43/QuickForm+Reference | |
12 | */ | |
13 | class CRM_Wci_Form_ProgressBar extends CRM_Core_Form { | |
cde51233 | 14 | private $_id; |
2bf0718d | 15 | function preProcess() { |
abcb1117 | 16 | $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE, NULL, 'REQUEST'); |
c68d158b | 17 | CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.wci', 'addmore.js'); |
2bf0718d | 18 | parent::preProcess(); |
cde51233 | 19 | } |
10119db1 | 20 | function fillData() { |
abcb1117 | 21 | $count = 1; |
540f6530 | 22 | if (isset($this->_id)) { |
abcb1117 J |
23 | /** Updating existing progress bar*/ |
24 | $query = "SELECT * FROM civicrm_wci_progress_bar where id=" . $this->_id; | |
cde51233 J |
25 | $params = array(); |
26 | ||
e364fc74 | 27 | $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBar'); |
cde51233 J |
28 | |
29 | while ($dao->fetch()) { | |
30 | $con_page[$dao->id] = array(); | |
31 | CRM_Core_DAO::storeValues($dao, $con_page[$dao->id]); | |
32 | $this->setDefaults(array( | |
33 | 'progressbar_name' => $con_page[$dao->id]['name'])); | |
34 | $this->setDefaults(array( | |
35 | 'starting_amount' => $con_page[$dao->id]['starting_amount'])); | |
36 | $this->setDefaults(array( | |
37 | 'goal_amount' => $con_page[$dao->id]['goal_amount'])); | |
38 | } | |
39 | ||
abcb1117 | 40 | $query = "SELECT * FROM civicrm_wci_progress_bar_formula WHERE progress_bar_id =" . $this->_id; |
cde51233 | 41 | $params = array(); |
abcb1117 | 42 | |
e364fc74 | 43 | $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBarFormula'); |
cde51233 | 44 | |
cde51233 J |
45 | while ($dao->fetch()) { |
46 | $for_page[$dao->id] = array(); | |
47 | CRM_Core_DAO::storeValues($dao, $for_page[$dao->id]); | |
48 | ||
abcb1117 J |
49 | $this->add( |
50 | 'select', // field type | |
51 | 'contribution_page_'.$count, // field name | |
52 | 'Contribution page', // field label | |
53 | getContributionPageOptions(), // list of options | |
a8c878ab | 54 | false // is required |
abcb1117 J |
55 | ); |
56 | $this->add( | |
57 | 'text', // field type | |
58 | 'percentage_'.$count, // field name | |
59 | 'Percentage', // field label | |
a8c878ab | 60 | false // is required |
abcb1117 J |
61 | ); |
62 | //save formula id | |
63 | $this->addElement('hidden', 'contrib_elem_'.$count , $for_page[$dao->id]['id']); | |
64 | ||
cde51233 J |
65 | $this->setDefaults(array( |
66 | 'contribution_page_'.$count => $for_page[$dao->id]['contribution_page_id'])); | |
67 | $this->setDefaults(array( | |
68 | 'percentage_'.$count => $for_page[$dao->id]['percentage'])); | |
abcb1117 | 69 | |
cde51233 J |
70 | $count++; |
71 | } | |
540f6530 | 72 | CRM_Utils_System::setTitle(ts('Edit Progress Bar')); |
abcb1117 | 73 | $count--; // because last iteration increments it to the next |
10119db1 J |
74 | } |
75 | else { | |
abcb1117 J |
76 | /** New progress bar*/ |
77 | $this->add( | |
78 | 'select', // field type | |
79 | 'contribution_page_1', // field name | |
80 | 'Contribution page', // field label | |
81 | getContributionPageOptions(), // list of options | |
82 | true // is required | |
83 | ); | |
84 | $this->add( | |
85 | 'text', // field type | |
86 | 'percentage_1', // field name | |
87 | 'Percentage', // field label | |
88 | true // is required | |
89 | ); | |
540f6530 | 90 | CRM_Utils_System::setTitle(ts('Create Progress Bar')); |
abcb1117 J |
91 | } |
92 | ||
93 | $this->addElement('hidden', 'contrib_count', $count); | |
2bf0718d | 94 | } |
cde51233 | 95 | |
2bf0718d | 96 | function buildQuickForm() { |
cde51233 | 97 | |
2bf0718d J |
98 | $this->add( |
99 | 'text', // field type | |
100 | 'progressbar_name', // field name | |
101 | 'Name', // field label | |
102 | true // is required | |
4d4d53e3 | 103 | )->setSize(35); |
2bf0718d J |
104 | $this->add( |
105 | 'text', // field type | |
106 | 'starting_amount', // field name | |
107 | 'Starting amount', // field label | |
108 | true // is required | |
4d4d53e3 | 109 | )->setSize(35); |
2bf0718d J |
110 | $this->add( |
111 | 'text', // field type | |
112 | 'goal_amount', // field name | |
113 | 'Goal amount', // field label | |
114 | true // is required | |
4d4d53e3 | 115 | )->setSize(35); |
2bf0718d | 116 | |
10119db1 | 117 | $this->fillData(); |
cde51233 | 118 | |
c1a7ee1f | 119 | $this->addElement('link', 'addmore_link',' ', 'addmore', 'Add another contribution page'); |
2bf0718d | 120 | |
2bf0718d | 121 | $this->addButtons(array( |
2bf0718d J |
122 | array( |
123 | 'type' => 'submit', | |
124 | 'name' => ts('Save'), | |
125 | 'isDefault' => TRUE, | |
126 | ), | |
127 | )); | |
128 | ||
129 | // export form elements | |
130 | $this->assign('elementNames', $this->getRenderableElementNames()); | |
540f6530 | 131 | |
2bf0718d J |
132 | parent::buildQuickForm(); |
133 | } | |
134 | ||
135 | function postProcess() { | |
abcb1117 J |
136 | $errorScope = CRM_Core_TemporaryErrorScope::useException(); |
137 | if (isset($this->_id)) { | |
138 | try { | |
a8c878ab J |
139 | $transaction = new CRM_Core_Transaction(); |
140 | ||
abcb1117 J |
141 | $sql = "UPDATE civicrm_wci_progress_bar SET name = '". $_REQUEST['progressbar_name'] . |
142 | "', starting_amount = '" . $_REQUEST['starting_amount'] . | |
143 | "', goal_amount = '" . $_REQUEST['goal_amount'] . | |
144 | "' where id =".$this->_id; | |
145 | ||
abcb1117 | 146 | CRM_Core_DAO::executeQuery($sql); |
a8c878ab J |
147 | /** Delete existiing formula fields and add fields fresh*/ |
148 | CRM_Core_DAO::executeQuery('DELETE FROM civicrm_wci_progress_bar_formula WHERE progress_bar_id=' . $this->_id); | |
149 | ||
150 | for($i = 1; $i <= (int)$_REQUEST['contrib_count']; $i++) { | |
abcb1117 J |
151 | $page = 'contribution_page_' . (string)$i; |
152 | $perc = 'percentage_' . (string)$i; | |
a8c878ab | 153 | $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage) |
abcb1117 | 154 | VALUES ('" . $_REQUEST[$page] . "','" . $this->_id . "','" . $_REQUEST[$perc] . "')"; |
abcb1117 J |
155 | |
156 | CRM_Core_DAO::executeQuery($sql); | |
a8c878ab J |
157 | } |
158 | ||
abcb1117 | 159 | $transaction->commit(); |
8966f337 | 160 | CRM_Core_Session::setStatus(ts('Progress bar created successfuly'), '', 'success'); |
29da8770 | 161 | CRM_Utils_System::redirect('progress-bar?reset=1'); |
abcb1117 J |
162 | } |
163 | catch (Exception $e) { | |
8966f337 | 164 | CRM_Core_Session::setStatus(ts('Failed to create progress bar'), '', 'error'); |
abcb1117 J |
165 | $transaction->rollback(); |
166 | } | |
cde51233 | 167 | |
10119db1 J |
168 | } |
169 | else { | |
cde51233 J |
170 | $sql = "INSERT INTO civicrm_wci_progress_bar (name, starting_amount, goal_amount) |
171 | VALUES ('" . $_REQUEST['progressbar_name'] . "','" . $_REQUEST['starting_amount'] . "','" . $_REQUEST['goal_amount'] . "')"; | |
cde51233 J |
172 | try { |
173 | $transaction = new CRM_Core_Transaction(); | |
e5812687 | 174 | CRM_Core_DAO::executeQuery($sql); |
cde51233 J |
175 | $progressbar_id = CRM_Core_DAO::singleValueQuery('SELECT LAST_INSERT_ID()'); |
176 | for($i = 1; $i <= (int)$_REQUEST['contrib_count']; $i++): | |
177 | $page = 'contribution_page_' . (string)$i; | |
178 | $perc = 'percentage_' . (string)$i; | |
179 | ||
180 | $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage) | |
181 | VALUES ('" . $_REQUEST[$page] . "','" . $progressbar_id . "','" . $_REQUEST[$perc] . "')"; | |
182 | ||
183 | CRM_Core_DAO::executeQuery($sql); | |
184 | endfor; | |
abcb1117 | 185 | $transaction->commit(); |
9c5af9ef | 186 | CRM_Utils_System::redirect('civicrm/wci/progress-bar?reset=1'); |
cde51233 J |
187 | } |
188 | catch (Exception $e) { | |
189 | //TODO | |
190 | print_r($e->getMessage()); | |
191 | $transaction->rollback(); | |
192 | } | |
193 | $elem = $this->getElement('contrib_count'); | |
194 | $elem->setValue('1'); | |
195 | } | |
2bf0718d J |
196 | parent::postProcess(); |
197 | } | |
2bf0718d J |
198 | |
199 | /** | |
200 | * Get the fields/elements defined in this form. | |
201 | * | |
202 | * @return array (string) | |
203 | */ | |
204 | function getRenderableElementNames() { | |
205 | // The _elements list includes some items which should not be | |
206 | // auto-rendered in the loop -- such as "qfKey" and "buttons". These | |
207 | // items don't have labels. We'll identify renderable by filtering on | |
208 | // the 'label'. | |
209 | $elementNames = array(); | |
210 | foreach ($this->_elements as $element) { | |
211 | $label = $element->getLabel(); | |
212 | if (!empty($label)) { | |
213 | $elementNames[] = $element->getName(); | |
214 | } | |
215 | } | |
216 | return $elementNames; | |
217 | } | |
218 | } | |
219 |