fixed beta 1 bugs, 31062, 31063, 31101, 31067, 31065
[com.zyxware.civiwci.git] / CRM / Wci / Form / ProgressBar.php
1 <?php
2
3 require_once 'CRM/Core/Form.php';
4 require_once 'wci-helper-functions.php';
5 require_once 'CRM/Wci/BAO/ProgressBar.php';
6 require_once 'CRM/Wci/DAO/ProgressBarFormula.php';
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 {
14 private $_id;
15 function preProcess() {
16 $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE, NULL, 'REQUEST');
17 CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.wci', 'addmore.js');
18 parent::preProcess();
19 }
20 function fillData() {
21 $count = 1;
22 if (isset($this->_id)) {
23 /** Updating existing progress bar*/
24 $query = "SELECT * FROM civicrm_wci_progress_bar where id=" . $this->_id;
25 $params = array();
26
27 $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBar');
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
40 $query = "SELECT * FROM civicrm_wci_progress_bar_formula WHERE progress_bar_id =" . $this->_id;
41 $params = array();
42
43 $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBarFormula');
44
45 while ($dao->fetch()) {
46 $for_page[$dao->id] = array();
47 CRM_Core_DAO::storeValues($dao, $for_page[$dao->id]);
48
49 $this->add(
50 'select', // field type
51 'contribution_page_'.$count, // field name
52 'Contribution page', // field label
53 getContributionPageOptions(), // list of options
54 false // is required
55 );
56 $this->add(
57 'text', // field type
58 'percentage_'.$count, // field name
59 'Percentage of contribution taken', // field label
60 false // is required
61 );
62 //save formula id
63 $this->addElement('hidden', 'contrib_elem_'.$count , $for_page[$dao->id]['id']);
64
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']));
69
70 $count++;
71 }
72 CRM_Utils_System::setTitle(ts('Edit Progress Bar'));
73 $count--; // because last iteration increments it to the next
74 }
75 else {
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 of contribution taken', // field label
88 true // is required
89 );
90 CRM_Utils_System::setTitle(ts('Create Progress Bar'));
91 }
92
93 $this->addElement('hidden', 'contrib_count', $count);
94 }
95
96 function buildQuickForm() {
97
98 $this->add(
99 'text', // field type
100 'progressbar_name', // field name
101 'Name', // field label
102 true // is required
103 )->setSize(35);
104 $this->add(
105 'text', // field type
106 'starting_amount', // field name
107 'Starting amount', // field label
108 true // is required
109 )->setSize(35);
110 $this->add(
111 'text', // field type
112 'goal_amount', // field name
113 'Goal amount', // field label
114 true // is required
115 )->setSize(35);
116
117 $this->fillData();
118
119 $this->addElement('link', 'addmore_link',' ', 'addmore', 'Add another contribution page');
120
121 $this->addButtons(array(
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());
131
132 parent::buildQuickForm();
133 }
134
135 function postProcess() {
136 $errorScope = CRM_Core_TemporaryErrorScope::useException();
137 if (isset($this->_id)) {
138 try {
139 $transaction = new CRM_Core_Transaction();
140
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
146 CRM_Core_DAO::executeQuery($sql);
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++) {
151 $page = 'contribution_page_' . (string)$i;
152 $perc = 'percentage_' . (string)$i;
153 $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage)
154 VALUES ('" . $_REQUEST[$page] . "','" . $this->_id . "','" . $_REQUEST[$perc] . "')";
155
156 CRM_Core_DAO::executeQuery($sql);
157 }
158
159 $transaction->commit();
160 CRM_Core_Session::setStatus(ts('Progress bar created successfuly'), '', 'success');
161 CRM_Utils_System::redirect('progress-bar?reset=1');
162 }
163 catch (Exception $e) {
164 CRM_Core_Session::setStatus(ts('Failed to create progress bar'), '', 'error');
165 $transaction->rollback();
166 }
167
168 }
169 else {
170 $sql = "INSERT INTO civicrm_wci_progress_bar (name, starting_amount, goal_amount)
171 VALUES ('" . $_REQUEST['progressbar_name'] . "','" . $_REQUEST['starting_amount'] . "','" . $_REQUEST['goal_amount'] . "')";
172 try {
173 $transaction = new CRM_Core_Transaction();
174 CRM_Core_DAO::executeQuery($sql);
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;
185 $transaction->commit();
186 CRM_Utils_System::redirect('civicrm/wci/progress-bar?reset=1');
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 }
196 parent::postProcess();
197 }
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