fixed beta 1 bugs, 31062, 31063, 31101, 31067, 31065
[com.zyxware.civiwci.git] / CRM / Wci / Form / ProgressBar.php
index 0992e9ecc0b3d3769a88cbea1acd183e8190e7a9..0be406e9b9709035ac9794da50ec3cf005acc05f 100644 (file)
@@ -3,6 +3,7 @@
 require_once 'CRM/Core/Form.php';
 require_once 'wci-helper-functions.php';
 require_once 'CRM/Wci/BAO/ProgressBar.php';
+require_once 'CRM/Wci/DAO/ProgressBarFormula.php';
 
 /**
  * Form controller class
@@ -10,48 +11,112 @@ require_once 'CRM/Wci/BAO/ProgressBar.php';
  * @see http://wiki.civicrm.org/confluence/display/CRMDOC43/QuickForm+Reference
  */
 class CRM_Wci_Form_ProgressBar extends CRM_Core_Form {
-  
+  private $_id;  
   function preProcess() {
-  
+    $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE, NULL, 'REQUEST');
     CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.wci', 'addmore.js');
     parent::preProcess();
   }
+  function fillData() {
+    $count = 1;
+    if (isset($this->_id)) {
+      /** Updating existing progress bar*/
+      $query = "SELECT * FROM civicrm_wci_progress_bar where id=" . $this->_id;
+      $params = array();
+      
+      $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBar');
+
+      while ($dao->fetch()) {
+        $con_page[$dao->id] = array();
+        CRM_Core_DAO::storeValues($dao, $con_page[$dao->id]);
+        $this->setDefaults(array(
+              'progressbar_name' => $con_page[$dao->id]['name']));
+        $this->setDefaults(array(
+              'starting_amount' => $con_page[$dao->id]['starting_amount']));
+        $this->setDefaults(array(
+              'goal_amount' => $con_page[$dao->id]['goal_amount']));
+      }
+       
+      $query = "SELECT * FROM civicrm_wci_progress_bar_formula WHERE progress_bar_id =" . $this->_id;
+      $params = array();
+
+      $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Wci_DAO_ProgressBarFormula');
+
+      while ($dao->fetch()) {
+        $for_page[$dao->id] = array();
+        CRM_Core_DAO::storeValues($dao, $for_page[$dao->id]);
+
+        $this->add(
+          'select', // field type
+          'contribution_page_'.$count, // field name
+          'Contribution page', // field label
+          getContributionPageOptions(), // list of options
+          false // is required
+        );
+        $this->add(
+          'text', // field type
+          'percentage_'.$count, // field name
+          'Percentage of contribution taken', // field label
+          false // is required
+        );
+        //save formula id 
+        $this->addElement('hidden', 'contrib_elem_'.$count , $for_page[$dao->id]['id']);
+
+        $this->setDefaults(array(
+              'contribution_page_'.$count => $for_page[$dao->id]['contribution_page_id']));
+        $this->setDefaults(array(
+              'percentage_'.$count => $for_page[$dao->id]['percentage']));
+
+        $count++;
+      }
+      CRM_Utils_System::setTitle(ts('Edit Progress Bar'));
+      $count--; // because last iteration increments it to the next
+    }  
+    else {
+      /** New progress bar*/
+      $this->add(
+        'select', // field type
+        'contribution_page_1', // field name
+        'Contribution page', // field label
+        getContributionPageOptions(), // list of options
+        true // is required
+      );
+      $this->add(
+        'text', // field type
+        'percentage_1', // field name
+        'Percentage of contribution taken', // field label
+        true // is required
+      );
+      CRM_Utils_System::setTitle(ts('Create Progress Bar'));
+    }
+    
+    $this->addElement('hidden', 'contrib_count', $count);
+  }
+  
   function buildQuickForm() {
+  
     $this->add(
       'text', // field type
       'progressbar_name', // field name
       'Name', // field label
       true // is required
-    );
+    )->setSize(35);
     $this->add(
       'text', // field type
       'starting_amount', // field name
       'Starting amount', // field label
       true // is required
-    );
+    )->setSize(35);
     $this->add(
       'text', // field type
       'goal_amount', // field name
       'Goal amount', // field label
       true // is required
-    );
-    $this->add(
-      'select', // field type
-      'contribution_page_1', // field name
-      'Contribution page', // field label
-      getContributionPageOptions(), // list of options
-      true // is required
-    );
-    $this->add(
-      'text', // field type
-      'percentage_1', // field name
-      'Percentage', // field label
-      true // is required
-    );
+    )->setSize(35);
     
-    $this->addElement('link', 'addmore_link',' ', 'addmore', 'Add more');
-
-    $this->addElement('hidden', 'contrib_count', '1');
+    $this->fillData();
+    
+    $this->addElement('link', 'addmore_link',' ', 'addmore', 'Add another contribution page');
 
     $this->addButtons(array(
       array(
@@ -63,37 +128,72 @@ class CRM_Wci_Form_ProgressBar extends CRM_Core_Form {
 
     // export form elements
     $this->assign('elementNames', $this->getRenderableElementNames());
-
+    
     parent::buildQuickForm();
   }
 
   function postProcess() {
-
-    $sql = "INSERT INTO civicrm_wci_progress_bar (name, starting_amount, goal_amount) 
-    VALUES ('" . $_REQUEST['progressbar_name'] . "','" . $_REQUEST['starting_amount'] . "','" . $_REQUEST['goal_amount'] . "')";
     $errorScope = CRM_Core_TemporaryErrorScope::useException();
-    try {
-      $transaction = new CRM_Core_Transaction();
-      CRM_Core_DAO::executeQuery($sql);
-      $progressbar_id = CRM_Core_DAO::singleValueQuery('SELECT LAST_INSERT_ID()');
-      for($i = 1; $i <= (int)$_REQUEST['contrib_count']; $i++):
-        $page = 'contribution_page_' . (string)$i;
-        $perc = 'percentage_' . (string)$i;
-
-        $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage) 
-        VALUES ('" . $_REQUEST[$page] . "','" . $progressbar_id . "','" . $_REQUEST[$perc] . "')";
+    if (isset($this->_id)) {
+      try {
+        $transaction = new CRM_Core_Transaction();
+        
+        $sql = "UPDATE civicrm_wci_progress_bar SET name = '". $_REQUEST['progressbar_name'] . 
+          "', starting_amount = '" . $_REQUEST['starting_amount'] . 
+          "', goal_amount = '" . $_REQUEST['goal_amount'] . 
+          "' where id =".$this->_id;
+
+        CRM_Core_DAO::executeQuery($sql);
+        /** Delete existiing formula fields and add fields fresh*/
+        CRM_Core_DAO::executeQuery('DELETE FROM civicrm_wci_progress_bar_formula WHERE progress_bar_id=' . $this->_id);
+        
+        for($i = 1; $i <= (int)$_REQUEST['contrib_count']; $i++) {
+          $page = 'contribution_page_' . (string)$i;
+          $perc = 'percentage_' . (string)$i;
+          $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage) 
+              VALUES ('" . $_REQUEST[$page] . "','" . $this->_id . "','" . $_REQUEST[$perc] . "')";
+
+          CRM_Core_DAO::executeQuery($sql);
+        }
         
+        $transaction->commit();
+        CRM_Core_Session::setStatus(ts('Progress bar created successfuly'), '', 'success');
+        CRM_Utils_System::redirect('progress-bar?reset=1');
+      }
+      catch (Exception $e) {
+        CRM_Core_Session::setStatus(ts('Failed to create progress bar'), '', 'error');
+        $transaction->rollback();
+      }
+    
+    } 
+    else {
+      $sql = "INSERT INTO civicrm_wci_progress_bar (name, starting_amount, goal_amount) 
+      VALUES ('" . $_REQUEST['progressbar_name'] . "','" . $_REQUEST['starting_amount'] . "','" . $_REQUEST['goal_amount'] . "')";
+      try {
+        $transaction = new CRM_Core_Transaction();
         CRM_Core_DAO::executeQuery($sql);
-      endfor;
-    }    
-    catch (Exception $e) {
-      //TODO
-      print_r($e->getMessage());
-      $transaction->rollback();
-    }      
+        $progressbar_id = CRM_Core_DAO::singleValueQuery('SELECT LAST_INSERT_ID()');
+        for($i = 1; $i <= (int)$_REQUEST['contrib_count']; $i++):
+          $page = 'contribution_page_' . (string)$i;
+          $perc = 'percentage_' . (string)$i;
+
+          $sql = "INSERT INTO civicrm_wci_progress_bar_formula (contribution_page_id, progress_bar_id, percentage) 
+          VALUES ('" . $_REQUEST[$page] . "','" . $progressbar_id . "','" . $_REQUEST[$perc] . "')";
+          
+          CRM_Core_DAO::executeQuery($sql);
+        endfor;
+        $transaction->commit();
+        CRM_Utils_System::redirect('civicrm/wci/progress-bar?reset=1');
+      }    
+      catch (Exception $e) {
+        //TODO
+        print_r($e->getMessage());
+        $transaction->rollback();
+      }
+      $elem = $this->getElement('contrib_count');
+      $elem->setValue('1');    
+    }
     parent::postProcess();
-    $elem = $this->getElement('contrib_count');
-    $elem->setValue('1');    
   }
 
   /**