/**
  * Clean out the data received from the screen by:
  * - remove empty/blank groupid  - the groupid is not required and therefore is an empty value is maintained will cause an out of range exception 
  *
  * @param Array $post_array
  */
 function processPost($post_array)
 {
     $session = SessionWrapper::getInstance();
     // check if the groupid is blank then remove it
     $permissions = $this->getPermissions();
     $permissions_array = $permissions->toArray();
     if (array_key_exists('permissions', $post_array)) {
         if (is_array($post_array['permissions'])) {
             $data = array();
             foreach ($post_array['permissions'] as $key => $value) {
                 $data[$key] = $value;
                 if (array_key_exists('groupid', $value)) {
                     if (isEmptyString($value['groupid'])) {
                         unset($post_array['permissions'][$key]['groupid']);
                     }
                 }
                 if (isArrayKeyAnEmptyString('create', $value)) {
                     $post_array['permissions'][$key]['create'] = 0;
                 } else {
                     $post_array['permissions'][$key]['create'] = trim(intval($value['create']));
                 }
                 if (isArrayKeyAnEmptyString('edit', $value)) {
                     $post_array['permissions'][$key]['edit'] = 0;
                 } else {
                     $post_array['permissions'][$key]['edit'] = trim(intval($value['edit']));
                 }
                 if (isArrayKeyAnEmptyString('view', $value)) {
                     $post_array['permissions'][$key]['view'] = 0;
                 } else {
                     $post_array['permissions'][$key]['view'] = trim(intval($value['view']));
                 }
                 if (isArrayKeyAnEmptyString('list', $value)) {
                     $post_array['permissions'][$key]['list'] = 0;
                 } else {
                     $post_array['permissions'][$key]['list'] = trim(intval($value['list']));
                 }
                 if (isArrayKeyAnEmptyString('delete', $value)) {
                     $post_array['permissions'][$key]['delete'] = 0;
                 } else {
                     $post_array['permissions'][$key]['delete'] = trim(intval($value['delete']));
                 }
                 if (isArrayKeyAnEmptyString('approve', $value)) {
                     $post_array['permissions'][$key]['approve'] = 0;
                 } else {
                     $post_array['permissions'][$key]['approve'] = trim(intval($value['approve']));
                 }
                 if (isArrayKeyAnEmptyString('export', $value)) {
                     $post_array['permissions'][$key]['export'] = 0;
                 } else {
                     $post_array['permissions'][$key]['export'] = trim(intval($value['export']));
                 }
                 if (isArrayKeyAnEmptyString('id', $value)) {
                     unset($post_array['permissions'][$key]['id']);
                     $post_array['permissions'][$key]['createdby'] = $session->getVar('userid');
                     $post_array['permissions'][$key]['datecreated'] = getCurrentMysqlTimestamp();
                 }
                 if (!isArrayKeyAnEmptyString('id', $value)) {
                     $post_array['permissions'][$key]['lastupdatedby'] = $session->getVar('userid');
                     $post_array['permissions'][$key]['lastupdatedate'] = getCurrentMysqlTimestamp();
                     $data = $post_array['permissions'][$key];
                     unset($post_array['permissions'][$key]);
                     $newkey = array_search_key_by_id($permissions_array, $value['id']);
                     // debugMessage($data);
                     $post_array['permissions'][$newkey] = $data;
                 }
             }
             // end loop through permissions to unset empty groupids
         }
     }
     // now process the data
     // debugMessage($post_array['permissions']); // exit();
     parent::processPost($post_array);
 }
function sendSMSMessage($to, $txt, $source = '', $msgid = '')
{
    $session = SessionWrapper::getInstance();
    $phone = $to;
    $message = $txt;
    $sendsms = true;
    if (isEmptyString($source)) {
        $source = getSmsSenderName();
    }
    $server = getSmsServer();
    $username = getSmsUsername();
    $password = getSmsPassword();
    $parameters = array('username' => $username, 'password' => $password, 'type' => 'TEXT', 'sender' => $source, 'mobile' => $phone, 'message' => $message);
    // debugMessage($parameters);
    $client = new Zend_Http_Client($server, array('adapter' => 'Zend_Http_Client_Adapter_Curl', 'timeout' => 30));
    $client->setParameterGet($parameters);
    // debugMessage($client);
    // debugMessage(getClientUrl($client)); exit;
    $smsresult = array(1 => '', 2 => '');
    if ($sendsms) {
        try {
            //$response = $client->request();
            //$body = $response->getBody();
            // debugMessage($body);
            $body = 'SUBMIT_SUCCESS | 53d5cc68-6522-4562-1db4-bee4ae855484';
            $msgarray = explode('|', trim($body));
            if (!isArrayKeyAnEmptyString('0', $msgarray)) {
                $smsresult[1] = trim($msgarray[0]);
            } else {
                $smsresult[1] = '';
            }
            if (!isArrayKeyAnEmptyString('1', $msgarray)) {
                $smsresult[2] = trim($msgarray[1]);
            } else {
                $smsresult[2] = '';
            }
            // check no of receipients
            $countphones = count(explode(',', trim($phone)));
            // save to outbox too
            $query = "INSERT INTO outbox (phone, msg, source, resultcode, smsid, datecreated, createdby, messageid, msgcount) values ('" . $phone . "', '" . $message . "', '" . $parameters['sender'] . "', '" . $smsresult[1] . "', '" . $smsresult[2] . "', '" . getCurrentMysqlTimestamp() . "', '" . $session->getVar('userid') . "', '" . $msgid . "', '" . $countphones . "') ";
            // debugMessage($query);
            $conn = Doctrine_Manager::connection();
            $conn->execute($query);
            return $smsresult;
        } catch (Zend_Http_Client_Adapter_Exception $e) {
            # error handling
            $message = "Error in sending Message: " . $e->getMessage();
            debugMessage($message);
            return array(1 => '', 2 => '');
        }
    }
    // debugMessage($smsresult); exit;
    return array(1 => '', 2 => '');
}
 public function processrolesAction()
 {
     $session = SessionWrapper::getInstance();
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(TRUE);
     $this->_translate = Zend_Registry::get("translate");
     $post_array = $this->_getAllParams();
     // debugMessage($this->_getAllParams()); exit;
     $id = $post_array['id'];
     $post_array['id'] = decode($id);
     $perms = $post_array['permissions'];
     unset($post_array['permissions']);
     if (isEmptyString($id)) {
         // add new role first
         $newrole = new AclGroup();
         $post_array['createdby'] = $session->getVar('userid');
         $newrole->processPost($post_array);
         // debugMessage($newrole->toArray()); debugMessage('error is '.$newrole->getErrorStackAsString());
         $newrole->save();
         $post_array['id'] = $newrole->getID();
     } else {
         // update role first
         $newrole = new AclGroup();
         $newrole->populate(decode($id));
         $newrole->processPost($post_array);
         // debugMessage($newrole->toArray()); debugMessage('error is '.$newrole->getErrorStackAsString()); // exit();
         $newrole->save();
     }
     // exit;
     $role = new AclGroup();
     $role->populate($post_array['id']);
     $permissions = $role->getPermissions();
     $permissions_array = $permissions->toArray();
     $post_array['permissions'] = $perms;
     // set audit entry before save
     if (!isArrayKeyAnEmptyString('permissions', $post_array)) {
         $data = array();
         foreach ($post_array['permissions'] as $key => $value) {
             $data[$key] = $value;
             $post_array['permissions'][$key]['groupid'] = $post_array['id'];
             if (isArrayKeyAnEmptyString('flag', $value)) {
                 $post_array['permissions'][$key]['flag'] = 0;
             } else {
                 $post_array['permissions'][$key]['flag'] = trim(intval($value['flag']));
             }
             if (isArrayKeyAnEmptyString('create', $value)) {
                 $post_array['permissions'][$key]['create'] = 0;
             } else {
                 $post_array['permissions'][$key]['create'] = trim(intval($value['create']));
             }
             if (isArrayKeyAnEmptyString('edit', $value)) {
                 $post_array['permissions'][$key]['edit'] = 0;
             } else {
                 $post_array['permissions'][$key]['edit'] = trim(intval($value['edit']));
             }
             if (isArrayKeyAnEmptyString('view', $value)) {
                 $post_array['permissions'][$key]['view'] = 0;
             } else {
                 $post_array['permissions'][$key]['view'] = trim(intval($value['view']));
             }
             if (isArrayKeyAnEmptyString('list', $value)) {
                 $post_array['permissions'][$key]['list'] = 0;
             } else {
                 $post_array['permissions'][$key]['list'] = trim(intval($value['list']));
             }
             if (isArrayKeyAnEmptyString('delete', $value)) {
                 $post_array['permissions'][$key]['delete'] = 0;
             } else {
                 $post_array['permissions'][$key]['delete'] = trim(intval($value['delete']));
             }
             if (isArrayKeyAnEmptyString('approve', $value)) {
                 $post_array['permissions'][$key]['approve'] = 0;
             } else {
                 $post_array['permissions'][$key]['approve'] = trim(intval($value['approve']));
             }
             if (isArrayKeyAnEmptyString('export', $value)) {
                 $post_array['permissions'][$key]['export'] = 0;
             } else {
                 $post_array['permissions'][$key]['export'] = trim(intval($value['export']));
             }
             if (isArrayKeyAnEmptyString('id', $value)) {
                 $post_array['permissions'][$key]['id'] = NULL;
             }
             $post_array['permissions'][$key]['createdby'] = $session->getVar('userid');
             $post_array['permissions'][$key]['datecreated'] = getCurrentMysqlTimestamp();
             if (!isArrayKeyAnEmptyString('id', $value)) {
                 $post_array['permissions'][$key]['lastupdatedby'] = $session->getVar('userid');
                 $post_array['permissions'][$key]['lastupdatedate'] = getCurrentMysqlTimestamp();
             } else {
                 $post_array['createdby'] = $session->getVar('userid');
             }
         }
         // end loop through permissions to unset empty groupids
     }
     // debugMessage($post_array); exit();
     if (!isEmptyString($id)) {
         $beforesave = $post_array['permissions'];
         // debugMessage($beforesave);
     }
     $perm_collection = new Doctrine_Collection(Doctrine_Core::getTable("AclPermission"));
     foreach ($post_array['permissions'] as $key => $value) {
         $perm = new AclPermission();
         if (!isArrayKeyAnEmptyString('id', $value)) {
             $perm->populate($value['id']);
         }
         $perm->processPost($value);
         if ($perm->isValid()) {
             $perm_collection->add($perm);
         } else {
             debugMessage('Error: ' . $perm->getErrorStackAsString());
             exit;
         }
     }
     try {
         $perm_collection->save();
         if (isEmptyString($id)) {
             # add log to audit trail
             $url = $this->view->serverUrl($this->view->baseUrl('role/view/id/' . encode($newrole->getID())));
             $usecase = '0.4';
             $module = '0';
             $type = SYSTEM_CREATEROLE;
             $details = "Role <a href='" . $url . "' class='blockanchor'>" . $newrole->getName() . "</a> created";
         } else {
             $url = $this->view->serverUrl($this->view->baseUrl('role/view/id/' . encode($newrole->getID())));
             $usecase = '0.5';
             $module = '0';
             $type = SYSTEM_UPDATEROLE;
             $details = "Role <a href='" . $url . "' class='blockanchor'>" . $newrole->getName() . "</a> updated";
             $prejson = json_encode($beforesave);
             $after = $perm_collection->toArray();
             debugMessage($after);
             $postjson = json_encode($post_array);
             // debugMessage($postjson);
             // $diff = array_diff($beforesave, $after);  // debugMessage($diff);
             $jsondiff = '';
             // debugMessage($jsondiff);
         }
         $browser = new Browser();
         $audit_values = $session->getVar('browseraudit');
         $audit_values['module'] = $module;
         $audit_values['usecase'] = $usecase;
         $audit_values['transactiontype'] = $type;
         $audit_values['status'] = "Y";
         $audit_values['userid'] = $session->getVar('userid');
         $audit_values['transactiondetails'] = $details;
         $audit_values['url'] = $url;
         if (!isEmptyString($id)) {
             $audit_values['isupdate'] = 1;
             $audit_values['prejson'] = $prejson;
             $audit_values['postjson'] = $postjson;
             $audit_values['jsondiff'] = $jsondiff;
         }
         // debugMessage($audit_values);
         $this->notify(new sfEvent($this, $type, $audit_values));
         if (!isEmptyString($this->_getParam(SUCCESS_MESSAGE))) {
             $session->setVar(SUCCESS_MESSAGE, $this->_translate->translate($this->_getParam(SUCCESS_MESSAGE)));
         }
         $this->_helper->redirector->gotoUrl($this->view->baseUrl("role/view/id/" . encode($role->getID())));
     } catch (Exception $e) {
         // debugMessage($perm_collection->toArray());
         // debugMessage('error in save. '.$e->getMessage());
         $session->setVar(ERROR_MESSAGE, $e->getMessage());
         $this->_helper->redirector->gotoUrl(decode($this->_getParam(URL_FAILURE)));
     }
 }