927 lines
33 KiB
PHP
927 lines
33 KiB
PHP
<?php
|
|
/**
|
|
* Static content controller.
|
|
*
|
|
* This file will render views from views/pages/
|
|
*
|
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
*
|
|
* Licensed under The MIT License
|
|
* For full copyright and license information, please see the LICENSE.txt
|
|
* Redistributions of files must retain the above copyright notice.
|
|
*
|
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
* @link http://cakephp.org CakePHP(tm) Project
|
|
* @package app.Controller
|
|
* @since CakePHP(tm) v 0.2.9
|
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
|
*/
|
|
|
|
use Cake\Network\Email\Email;
|
|
use Cake\ORM\TableRegistry;
|
|
|
|
App::uses('AppController', 'Controller');
|
|
|
|
|
|
/**
|
|
* Static content controller
|
|
*
|
|
* Override this controller by placing a copy in controllers directory of an application
|
|
*
|
|
* @package app.Controller
|
|
* @link http://book.cakephp.org/2.0/en/controllers/pages-controller.html
|
|
*/
|
|
class PagesController extends AppController {
|
|
|
|
/**
|
|
* This controller does not use a model
|
|
*
|
|
* @var array
|
|
*/
|
|
public $uses = array('Comment','GroupExpense','FamilyExpense','Meal','LogAppVisitors','UserGroup','UserSubscription');
|
|
|
|
var $helpers = array('Html', 'Form');
|
|
|
|
public $components = array('Captcha','MobileDetect','Permission');
|
|
|
|
private $group_status = ['Active' => 1,'Archived' => 2];
|
|
|
|
public function beforeRender() {
|
|
parent::beforeRender();
|
|
|
|
$this->layout = 'visitor';
|
|
|
|
if($this->Session->check("mobile_app_layout")){
|
|
$this->layout = 'mobile';
|
|
$this->Session->delete("mobile_app_layout");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function index()
|
|
{
|
|
|
|
}
|
|
|
|
public function termscondition(){
|
|
|
|
|
|
}
|
|
|
|
public function privacypolicy(){
|
|
|
|
|
|
}
|
|
|
|
public function faq(){
|
|
|
|
|
|
}
|
|
|
|
public function news(){
|
|
|
|
|
|
}
|
|
|
|
public function downloadAndroidApp(){
|
|
|
|
$this->render('download_android_app');
|
|
|
|
}
|
|
|
|
|
|
public function feedback()
|
|
{
|
|
|
|
|
|
if ($this->request->is('Post') && $this->request->data["Comment"]) {
|
|
|
|
$error = "";
|
|
//validate email and comment
|
|
$email = trim($this->request->data['Comment']["feedbackemail"]);
|
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
$error = "EMAIL_ERR";
|
|
$this->set('email_error', "Email is invalid");
|
|
}
|
|
|
|
$comment = trim($this->request->data['Comment']["comment"]);
|
|
|
|
if (empty($comment)) {
|
|
$error = "COMMENT_ERR";
|
|
$this->set("comment_error", __("LBL_WRITE_IN_COMMENT_BOX"));
|
|
}
|
|
|
|
if (isset($_COOKIE['ecc']) && $_COOKIE['ecc'] !== $this->request->data['captcha']){
|
|
$message = '<div class="alert alert-danger alert-dismissible" role="alert">' . 'Captcha doesn\'t not match' . '</div>';
|
|
$this->Session->write('system.message', $message);
|
|
$error ='captcha';
|
|
}else{
|
|
$this->Session->write('system.message','');
|
|
}
|
|
|
|
// $responseData = $this->getCaptchaResponse($this->request->data['captcha-response']);
|
|
// if($responseData->success){
|
|
if( $error == "" ) {
|
|
$captcha = $this->Session->read('captcha_code');
|
|
if (strlen($captcha) > 0 && ($captcha == $this->request->data['Comment']['captcha'])) {
|
|
$this->Session->delete('captcha_code');
|
|
//if ( $error == "" && strlen($captcha)> 0 && ($captcha == $this->request->data['Comment']['captcha']) ){
|
|
//insert into comment table
|
|
$this->request->data['Comment']["ip"] = $this->getClientIp();
|
|
$this->request->data['Comment']["create_date"] = date("Y-m-d h:i:s");
|
|
$result = $this->Comment->createFeedback($this->request->data['Comment']);
|
|
if (!empty($result)) {
|
|
$this->set("error", __("LBL_DATA_SAVING_FAILED"));
|
|
} else {
|
|
$this->request->data["Comment"]["captcha"] = "";
|
|
$this->set("success", "Message Sent!");
|
|
|
|
$params = array();
|
|
$params["email"] = trim($this->request->data['Comment']["feedbackemail"]);
|
|
$trimed_comment = trim($this->request->data['Comment']["comment"]);
|
|
$params["comment"] = nl2br($trimed_comment);
|
|
$params["ip"] = $this->request->data['Comment']["ip"];
|
|
$this->sendEmail($params);
|
|
}
|
|
} else {
|
|
$this->request->data["Comment"]["captcha"] = "";
|
|
$this->set("captcha_error", __("LBL_CAPTCHA_ERROR"));
|
|
}
|
|
}
|
|
} else {
|
|
$token = $this->getSecretKey(5);
|
|
$this->set("captcha",$token);
|
|
$this->Session->write("captcha_code",$token);
|
|
$this->Session->write('system.message', '');
|
|
}
|
|
|
|
}
|
|
|
|
private function getSecretKey($length = 10){
|
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
$charactersLength = strlen($characters);
|
|
$randomString = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
}
|
|
return $randomString;
|
|
}
|
|
|
|
private function sendEmail($params){
|
|
|
|
$data = array();
|
|
$data["email_from"] = $params["email"];
|
|
$data["comment"] = $params["comment"];
|
|
$data["ip"] = $params["ip"];
|
|
|
|
$default = array(
|
|
'host' => Configure::read('expensecount.email.smtp.host'),
|
|
'port' => 587,
|
|
'auth' => 'plain',
|
|
'username' => Configure::read('expensecount.email.smtp.username'),
|
|
'password' => Configure::read('expensecount.email.smtp.password'),
|
|
'tsl' => false,
|
|
'transport' => 'Smtp',
|
|
'from' => array(Configure::read('expensecount.email.smtp.from') => 'ExpenseCount'),
|
|
'returnPath' => Configure::read('expensecount.email.smtp.from'),
|
|
'layout' => false,
|
|
'emailFormat' => 'html',
|
|
//'template' => 'only_text',
|
|
'charset' => 'utf-8',
|
|
'headerCharset' => 'utf-8',
|
|
);
|
|
|
|
App::uses('CakeEmail', 'Network/Email');
|
|
|
|
//echo $Email->
|
|
$Email = new CakeEmail($default);
|
|
$Email->to(array(SUPPORT_EMAIL,"asoftbd07@gmail.com"));
|
|
$Email->emailFormat('html');
|
|
$Email->template('feedback',null)->viewVars( array('data' => $data));
|
|
$Email->subject('ExpenseCount-Feedback on "'.date("Y-m-d h:i:s").'" ');
|
|
$Email->replyTo($data["email_from"]);
|
|
$Email->from(array(Configure::read('expensecount.email.smtp.from') => "ExpenseCount.com"));
|
|
//$Email->smtpOptions = $default;
|
|
$Email->delivery = 'Smtp';
|
|
$Email->send();
|
|
}
|
|
|
|
public function aboutus(){/*
|
|
$data = array();
|
|
$data["email"] = "rajibcuetcse@gmail.com";
|
|
$data["expense_title"] = "PAGE CONTROLLER";
|
|
$data["unique_url"] = "UTF34234";
|
|
|
|
|
|
$default = array(
|
|
'host' => Configure::read('expensecount.email.smtp.host'),
|
|
'port' => 25,
|
|
'auth' => 'plain',
|
|
'username' => Configure::read('expensecount.email.smtp.username'),
|
|
'password' => Configure::read('expensecount.email.smtp.password'),
|
|
'tsl' => false,
|
|
'transport' => 'smtp',
|
|
'from' => array(Configure::read('expensecount.email.smtp.from') => 'ExpenseCount'),
|
|
'returnPath' => Configure::read('expensecount.email.smtp.from'),
|
|
'layout' => false,
|
|
'emailFormat' => 'html',
|
|
// 'template' => 'email',
|
|
'charset' => 'utf-8',
|
|
'headerCharset' => 'utf-8',
|
|
);
|
|
|
|
|
|
|
|
|
|
App::uses('CakeEmail', 'Network/Email');
|
|
//echo $Email->
|
|
$Email = new CakeEmail();
|
|
$Email->to($data["email"]);
|
|
$Email->emailFormat('html');
|
|
$Email->template('email',null)->viewVars( array('data' => $data));
|
|
$Email->subject('ExpenseCount "'.$data["expense_title"].'" ');
|
|
$Email->replyTo(Configure::read('expensecount.email.smtp.from'));
|
|
$Email->from(array(Configure::read('expensecount.email.smtp.from') => "ExpenseCount"));
|
|
$Email->smtpOptions = $default;
|
|
$Email->delivery = 'smtp';
|
|
$Email->send();
|
|
|
|
|
|
exit;
|
|
|
|
*/}
|
|
|
|
public function mobileApps($expense_type="")
|
|
{
|
|
|
|
if($this->request->is('post')){
|
|
|
|
$expense_type = $this->request->data('expense_type');
|
|
$app_type = $this->request->data('app_type');
|
|
$this->saveAppVisitorsInfo($expense_type,$app_type);
|
|
|
|
if($expense_type == 1 && $app_type == 1){
|
|
return $this->redirect("https://play.google.com/store/apps/details?id=com.expensecount.groupExpense");
|
|
}elseif ($expense_type == 1 && $app_type == 2){
|
|
return $this->redirect("https://itunes.apple.com/us/app/groupexpense/id1150902475?mt=8");
|
|
}elseif ($expense_type == 2 && $app_type == 1){
|
|
return $this->redirect("https://play.google.com/store/apps/details?id=com.expensecount.messExpense");
|
|
}elseif ($expense_type == 2 && $app_type == 2){
|
|
return $this->redirect("https://itunes.apple.com/us/app/messexpense/id1179871989?mt=8");
|
|
}elseif ($expense_type == 3 && $app_type == 1){
|
|
return $this->redirect("https://play.google.com/store/apps/details?id=com.expensecount.familyExpense");
|
|
}elseif ($expense_type == 3 && $app_type == 2){
|
|
return $this->redirect("https://itunes.apple.com/us/app/familyexpense/id1193007779?mt=8");
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
$detect = new MobileDetectComponent();
|
|
if($this->Session->check("mobile_app_layout")){
|
|
$this->Session->delete("mobile_app_layout");
|
|
|
|
}
|
|
|
|
|
|
if ($detect->isAndroid()) {
|
|
$this->Session->write("mobile_app_layout","true");
|
|
$this->set("device","android");
|
|
} else if($detect->isIphone()){
|
|
$this->Session->write("mobile_app_layout","true");
|
|
$this->set("device","iphone");
|
|
} else if($detect->isWindows()){
|
|
$this->Session->write("mobile_app_layout","true");
|
|
$this->set("device","windows");
|
|
|
|
} else {
|
|
$this->set("device","pc");
|
|
}
|
|
|
|
|
|
|
|
$this->set("expenseType",$expense_type);
|
|
|
|
}
|
|
|
|
|
|
private function saveAppVisitorsInfo($expense_type,$app_type){
|
|
$result = false;
|
|
$inputData["expense_type"] = $expense_type;
|
|
$inputData["app_type"] = $app_type;
|
|
$inputData["visiting_date"] = $this->getSystemCurrentTimeStamp();
|
|
$inputData["ip"] = $this->getClientIp();
|
|
$inputData["device_info"] = $this->getUserAgent();
|
|
//pr($inputData);exit;
|
|
$result = $this->LogAppVisitors->insertLogAppVisitors($inputData);
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
public function facebookApp(){
|
|
|
|
}
|
|
|
|
|
|
|
|
public function get_captcha()
|
|
{
|
|
$this->autoRender = false;
|
|
App::import('Component','Captcha');
|
|
|
|
//generate random charcters for captcha
|
|
$random = mt_rand(100, 99999);
|
|
|
|
//save characters in session
|
|
$this->Session->write('captcha_code', $random);
|
|
|
|
$settings = array(
|
|
'characters' => $random,
|
|
'winHeight' => 70, // captcha image height
|
|
'winWidth' => 220, // captcha image width
|
|
'fontSize' => 25, // captcha image characters fontsize
|
|
'fontPath' => WWW_ROOT.'tahomabd.ttf', // captcha image font
|
|
'noiseColor' => '#ccc',
|
|
'bgColor' => '#fff',
|
|
'noiseLevel' => '100',
|
|
'textColor' => '#000'
|
|
);
|
|
|
|
$img = $this->Captcha->ShowImage($settings);
|
|
echo $img;
|
|
}
|
|
|
|
public function convertDateToString(){
|
|
|
|
/* $this->loadModel('GroupExpense');
|
|
$this->loadModel('FamilyExpense');
|
|
$this->loadModel('Meal');
|
|
|
|
$result = $this->GroupExpense->find('all', array(
|
|
'conditions' => array('expense_date_new' => null),
|
|
'limit' => 500
|
|
|
|
));
|
|
|
|
|
|
foreach($result as $key=>$value){
|
|
$id = $value["GroupExpense"]["id"];
|
|
$oldDate = $value["GroupExpense"]["expense_date"];
|
|
|
|
$data = array();
|
|
|
|
$data["id"] = $id;
|
|
|
|
$newDateStr = date("d-M-Y",$oldDate);
|
|
$newDateStrArray = explode("-",$newDateStr);
|
|
|
|
$newDateStrArray[1] = ucfirst($newDateStrArray[1]);
|
|
|
|
$newDateStr = implode("-",$newDateStrArray);
|
|
|
|
$data["expense_date_new"] = "'".$newDateStr."'";
|
|
//$data["expense_date"] = 0;
|
|
|
|
|
|
$this->GroupExpense->updateAll(
|
|
array('expense_date_new'=> $data["expense_date_new"]),
|
|
array('id' => $data["id"]));
|
|
}
|
|
|
|
echo "<pre>";
|
|
print_r($result); */
|
|
|
|
/* $result = $this->FamilyExpense->find('all', array(
|
|
'conditions' => array('expense_date_new' => null),
|
|
'limit' => 500
|
|
|
|
));
|
|
foreach($result as $key=>$value){
|
|
|
|
|
|
$id = $value["FamilyExpense"]["id"];
|
|
$oldDate = $value["FamilyExpense"]["expense_date"];
|
|
|
|
|
|
$data = array();
|
|
|
|
$data["id"] = $id;
|
|
|
|
$newDateStr = date("d-M-Y",$oldDate);
|
|
$newDateStrArray = explode("-",$newDateStr);
|
|
|
|
$newDateStrArray[1] = ucfirst($newDateStrArray[1]);
|
|
|
|
$newDateStr = implode("-",$newDateStrArray);
|
|
|
|
$data["expense_date_new"] = "'".$newDateStr."'";
|
|
//$data["expense_date"] = 0;
|
|
|
|
|
|
$this->FamilyExpense->updateAll(
|
|
array('expense_date_new'=> $data["expense_date_new"]),
|
|
array('id' => $data["id"]));
|
|
|
|
}
|
|
echo "<pre>";
|
|
print_r($result); */
|
|
|
|
|
|
/* $result = $this->Meal->find('all', array(
|
|
'conditions' => array('date_new' => null),
|
|
'limit' => 500
|
|
|
|
));
|
|
foreach($result as $key=>$value){
|
|
|
|
|
|
$id = $value["Meal"]["id"];
|
|
$oldDate = $value["Meal"]["date"];
|
|
|
|
|
|
$data = array();
|
|
|
|
$data["id"] = $id;
|
|
|
|
$newDateStr = date("d-M-Y",$oldDate);
|
|
$newDateStrArray = explode("-",$newDateStr);
|
|
|
|
$newDateStrArray[1] = ucfirst($newDateStrArray[1]);
|
|
|
|
$newDateStr = implode("-",$newDateStrArray);
|
|
|
|
$data["date_new"] = "'".$newDateStr."'";
|
|
//$data["date"] = 0;
|
|
|
|
|
|
$this->Meal->updateAll(
|
|
array('date_new'=> $data["date_new"]),
|
|
array('id' => $data["id"]));
|
|
|
|
}
|
|
|
|
|
|
|
|
echo "<pre>";
|
|
print_r($result); */
|
|
|
|
|
|
|
|
// $unique_url = $this->Expense->createExpense($data,false);
|
|
exit;
|
|
}
|
|
|
|
public function myExpenses($unique_url=null)
|
|
{
|
|
$this->Session->write('system.message', '');
|
|
$session_user_id = $this->Session->read('userData.id');
|
|
$session_user_id = isset($session_user_id) ? $session_user_id : '';
|
|
$userExpenses = [];
|
|
// If the user is logged in, get the expense group from the database; otherwise, get it from the cookie.
|
|
$this->Session->write('system.is_now_login', false);
|
|
|
|
if($this->Session->check('userData.id')){
|
|
$conditions = array('UserGroup.user_id' => $session_user_id, 'UserGroup.status' => $this->group_status['Active']);
|
|
$fields = array('UserGroup.unique_url','UserGroup.participant_id','Expense.title','Expense.create_date');
|
|
$userExpenses = $this->UserGroup->groupListWithExpense($fields, $conditions);
|
|
|
|
$archive_conditions = array('UserGroup.user_id' => $session_user_id, 'UserGroup.status' => $this->group_status['Archived']);
|
|
$archive_fields = array('UserGroup.unique_url','UserGroup.participant_id','Expense.title','Expense.create_date');
|
|
$archivedExpenses = $this->UserGroup->groupListWithExpense($archive_fields, $archive_conditions);
|
|
}else{
|
|
$userExpenses = $this->Cookie->read('Expenses');
|
|
$archivedExpenses=[];
|
|
}
|
|
|
|
$this->set('user_id', $session_user_id);
|
|
$this->set('my_expenses', $userExpenses);
|
|
$this->set('archived_expenses', $archivedExpenses);
|
|
|
|
}
|
|
public function removeGroup($unique_url)
|
|
{
|
|
$this->Session->write('system.message', '');
|
|
$session_user_id = $this->Session->read('userData.id');
|
|
$session_user_id = isset($session_user_id) ? $session_user_id : '';
|
|
|
|
if(!empty($unique_url)){
|
|
|
|
// delete a group from myExpense
|
|
if($this->Session->check('userData.id')) {
|
|
$userGrpdata['skip_process_validation'] = 1;
|
|
$userGrpdata['user_id'] = $session_user_id;
|
|
$userGrpdata['unique_url'] = $unique_url;
|
|
$this->callAPI(HTTP_SITE_URL . "/users/groupdelete.json", 'POST', json_encode($userGrpdata));
|
|
|
|
}
|
|
if (empty($session_user_id)) {
|
|
$expenses = $this->Cookie->read('Expenses');
|
|
foreach ($expenses as $key => $expense) {
|
|
if ($expense['unique_url'] == $unique_url) {
|
|
unset($expenses[$key]);
|
|
break;
|
|
}
|
|
|
|
}
|
|
$expenses = array_values($expenses);
|
|
$this->Cookie->write('Expenses', $expenses, false, '24000 hours');
|
|
}
|
|
|
|
}
|
|
|
|
return $this->redirect('myExpenses');
|
|
|
|
}
|
|
public function archiveGroup($unique_url)
|
|
{
|
|
$this->Session->write('system.message', '');
|
|
$session_user_id = $this->Session->read('userData.id');
|
|
$session_user_id = isset($session_user_id) ? $session_user_id : '';
|
|
|
|
if(!empty($unique_url)){
|
|
|
|
// delete a group from myExpense
|
|
if($this->Session->check('userData.id')) {
|
|
$userGrpdata['skip_process_validation'] = 1;
|
|
$userGrpdata['user_id'] = $session_user_id;
|
|
$userGrpdata['unique_url'] = $unique_url;
|
|
$userGrpdata['status'] = $this->group_status['Archived'];
|
|
$this->callAPI(HTTP_SITE_URL . "/users/groupRestore.json", 'POST', json_encode($userGrpdata));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $this->redirect('myExpenses');
|
|
|
|
}
|
|
|
|
public function restoreGroup($unique_url)
|
|
{
|
|
$this->Session->write('system.message', '');
|
|
$session_user_id = $this->Session->read('userData.id');
|
|
$session_user_id = isset($session_user_id) ? $session_user_id : '';
|
|
|
|
if(!empty($unique_url)){
|
|
|
|
// restore a group from archived Expense
|
|
if($this->Session->check('userData.id')) {
|
|
$userGrpdata['skip_process_validation'] = 1;
|
|
$userGrpdata['user_id'] = $session_user_id;
|
|
$userGrpdata['unique_url'] = $unique_url;
|
|
$userGrpdata['status'] = $this->group_status['Active'];
|
|
$this->callAPI(HTTP_SITE_URL . "/users/groupRestore.json", 'POST', json_encode($userGrpdata));
|
|
}
|
|
|
|
}
|
|
|
|
return $this->redirect('myExpenses');
|
|
|
|
}
|
|
public function myExpenses_old($key=null, $refresh=null)
|
|
{
|
|
|
|
$session_user_id = ($this->Session->read('userData.id')) ? $this->Session->read('userData.id') : '' ;
|
|
|
|
//if ($session_user_id == '') {
|
|
//$this->redirect('/users/login');
|
|
//} else {
|
|
if(!empty($key) || (isset($key) && $key !== '')){
|
|
|
|
// delete a group from myExpense
|
|
$my_expenses = $this->Cookie->read('Expenses');
|
|
|
|
$userGrpdata['skip_process_validation'] = 1;
|
|
$userGrpdata['user_id'] = $session_user_id;
|
|
$userGrpdata['unique_url'] = $my_expenses[$key]['unique_url'];
|
|
$this->callAPI(HTTP_SITE_URL . "/users/groupdelete.json", 'POST', json_encode($userGrpdata));
|
|
|
|
unset($my_expenses[$key]);
|
|
$my_expenses = $this->Cookie->write('Expenses', $my_expenses, false, '24000 hours');
|
|
}
|
|
|
|
if($refresh == 1){
|
|
$this->Cookie->write('Expenses', null, false, '24000 hours');
|
|
}
|
|
|
|
if($this->Cookie->read('Expenses') === null) {
|
|
// system.is_now_login is used to check if user just loged in now. I think we might not need this.
|
|
// If there are groups in cookie show it; otherwise load from database; Reset the cookie during logout
|
|
$this->Session->write('system.is_now_login', false);
|
|
if($this->Session->check('userData.id')){
|
|
$user_id = $this->Session->read('userData.id');
|
|
$conditions = array('UserGroup.user_id' => $user_id);
|
|
$fields = array('UserGroup.unique_url','UserGroup.participant_id','Expense.title','Expense.create_date');
|
|
$userExpenses = $this->UserGroup->listWithExpense($fields, $conditions);
|
|
if(!empty($userExpenses)){
|
|
$this->Cookie->write('Expenses', $userExpenses, false, '24000 hour');
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
$this->Session->write('system.message', '');
|
|
}
|
|
|
|
$my_expenses = $this->Cookie->read('Expenses');
|
|
$this->set('user_id', $session_user_id);
|
|
$this->set('my_expenses', $my_expenses);
|
|
//}
|
|
}
|
|
|
|
public function products()
|
|
{
|
|
$products = array();
|
|
$requestData = $this->deviceData();
|
|
|
|
$apiResponse = $this->callGETAPI(HTTP_SITE_URL . "/products/list.json?".http_build_query($requestData));
|
|
$apiResponseArr = json_decode($apiResponse, true);
|
|
if (isset($apiResponseArr['response']['status']) && ($apiResponseArr['response']['status'] == '+000')) {
|
|
$allproducts = $apiResponseArr['response']['products'];
|
|
if(!empty($allproducts)){
|
|
foreach ($allproducts as $k => $product){
|
|
if(empty($products[$product['expense_type']])){
|
|
$products[$product['expense_type']] = $product;
|
|
}
|
|
$productPriceArray[$product['expense_type']][] = $product;
|
|
}
|
|
}
|
|
} else {
|
|
$this->Session->write('system.message', 'No Product Found');
|
|
}
|
|
$this->set(compact('products','productPriceArray'));
|
|
}
|
|
|
|
public function getProduct()
|
|
{
|
|
$this->autoRender = false;
|
|
$product = array();
|
|
if($this->request->is('ajax')) {
|
|
$this->loadModel('Product');
|
|
$conditions = array(
|
|
'expense_type' => $this->request->data['expense_type'],
|
|
'payment_cycle' => $this->request->data['payment_cycle']
|
|
);
|
|
$product = $this->Product->list($conditions);
|
|
}
|
|
echo json_encode($product[0]);
|
|
}
|
|
|
|
function preparingProductBuyInput($requestData)
|
|
{
|
|
/*
|
|
"product_id":"2",
|
|
"product_sku":"FE6M",
|
|
"user_id":"34",
|
|
"payment_type_id":"1",
|
|
"platform_id":"2",
|
|
"amount":"20",
|
|
"access_token":"0c1d9f14e828929a9fd7c0ca46bf4a6a8d0e6bc3ce78ed61d41cd8665521fd81",
|
|
"device_id":"234234-34234-234234-234234-324234",
|
|
"random_number":"4537",
|
|
*/
|
|
$item_name = explode('-',$requestData['item_name']);
|
|
|
|
$data['product_id'] = ltrim($item_name[1],'d');
|
|
$data['product_sku'] = ltrim($item_name[2],'s');
|
|
$data['user_id'] = ltrim($item_name[3],'u');
|
|
$data['expense_type'] = ltrim($item_name[0],'t');
|
|
$data['amount'] = $requestData['amt'];
|
|
$data['platform_id'] = 3; //1 = android, 2 = iphone 3 = web.
|
|
$data['payment_type_id'] = 3; //1= Wallet, 2 = Credit Card, 3=Paypal
|
|
$data["device_id"] = session_id();
|
|
$data["random_number"] = rand(1000, 9999);
|
|
$data["access_token"] = $this->getUserToken($data["device_id"], $data["random_number"]);
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function paypalipn()
|
|
{
|
|
// echo 'this is paypal ipn page';
|
|
// pr($this->request->query);
|
|
// die;
|
|
|
|
$this->loadModel('UserSubscription');
|
|
$this->loadModel('User');
|
|
|
|
$raw_post_data = file_get_contents('php://input');
|
|
$raw_post_array = explode('&', $raw_post_data);
|
|
$myPost = array();
|
|
foreach ($raw_post_array as $keyval) {
|
|
$keyval = explode ('=', $keyval);
|
|
if (count($keyval) == 2)
|
|
$myPost[$keyval[0]] = urldecode($keyval[1]);
|
|
}
|
|
|
|
// Read the post from PayPal system and add 'cmd'
|
|
$req = 'cmd=_notify-validate';
|
|
if(function_exists('get_magic_quotes_gpc')) {
|
|
$get_magic_quotes_exists = true;
|
|
}
|
|
foreach ($myPost as $key => $value) {
|
|
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
|
|
$value = urlencode(stripslashes($value));
|
|
} else {
|
|
$value = urlencode($value);
|
|
}
|
|
$req .= "&$key=$value";
|
|
}
|
|
|
|
/*
|
|
* Post IPN data back to PayPal to validate the IPN data is genuine
|
|
* Without this step anyone can fake IPN data
|
|
*/
|
|
$paypalURL = PAYPAL_URL;
|
|
$ch = curl_init($paypalURL);
|
|
if ($ch == FALSE) {
|
|
return FALSE;
|
|
}
|
|
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
|
|
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
|
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
|
|
|
|
// Set TCP timeout to 30 seconds
|
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: company-name'));
|
|
$res = curl_exec($ch);
|
|
|
|
/*
|
|
* Inspect IPN validation result and act accordingly
|
|
* Split response headers and payload, a better way for strcmp
|
|
*/
|
|
$tokens = explode("\r\n\r\n", trim($res));
|
|
$res = trim(end($tokens));
|
|
if (strcmp($res, "VERIFIED") == 0 || strcasecmp($res, "VERIFIED") == 0) {
|
|
|
|
// Retrieve transaction data from PayPal
|
|
$inputData = array();
|
|
$paypalInfo = $_POST;
|
|
$inputData['subscr_id'] = $subscr_id = $paypalInfo['subscr_id'];
|
|
$inputData['payer_email'] = $payer_email = $paypalInfo['payer_email'];
|
|
$inputData['item_name'] = $item_name = $paypalInfo['item_name'];
|
|
$inputData['item_number'] = $item_number = $paypalInfo['item_number'];
|
|
$inputData['txn_id'] = $txn_id = !empty($paypalInfo['txn_id'])?$paypalInfo['txn_id']:'';
|
|
$inputData['payment_gross'] = $payment_gross = !empty($paypalInfo['mc_gross'])?$paypalInfo['mc_gross']:0;
|
|
$inputData['currency_code'] = $currency_code = $paypalInfo['mc_currency'];
|
|
$inputData['validity'] = $subscr_period = !empty($paypalInfo['period3'])?$paypalInfo['period3']:floor($payment_gross/$itemPrice);
|
|
$inputData['payment_status'] = $payment_status = !empty($paypalInfo['payment_status'])?$paypalInfo['payment_status']:'';
|
|
$inputData['user_id'] = $custom = $paypalInfo['custom'];
|
|
$subscr_date = !empty($paypalInfo['subscr_date'])?$paypalInfo['subscr_date']:date("Y-m-d H:i:s");
|
|
$dt = new DateTime($subscr_date);
|
|
$inputData['valid_from'] = $subscr_date = $dt->format("Y-m-d H:i:s");
|
|
$inputData['valid_to'] = $subscr_date_valid_to = date("Y-m-d H:i:s", strtotime(" + $subscr_period month", strtotime($subscr_date)));
|
|
|
|
if(!empty($txn_id)){
|
|
// Check if transaction data exists with the same TXN ID
|
|
// $prevPayment = $db->query("SELECT id FROM user_subscriptions WHERE txn_id = '".$txn_id."'");
|
|
|
|
// Insert transaction data into the database
|
|
/*$insert = $db->query("INSERT INTO user_subscriptions
|
|
(user_id,validity,valid_from,
|
|
valid_to,item_number,txn_id,payment_gross,
|
|
currency_code,subscr_id,payment_status,payer_email)
|
|
|
|
VALUES('".$custom."','".$subscr_period."','".$subscr_date."','"
|
|
.$subscr_date_valid_to."','".$item_number."','".$txn_id."','".$payment_gross."','"
|
|
.$currency_code."','".$subscr_id."','".$payment_status."','".$payer_email."')");
|
|
// Update subscription id in the users table
|
|
if($insert && !empty($custom)){
|
|
$subscription_id = $db->insert_id;
|
|
$update = $db->query("UPDATE users SET subscription_id = {$subscription_id} WHERE id = {$custom}");
|
|
}
|
|
*/
|
|
|
|
|
|
$existUserSub = $this->UserSubscription->isUserSubscriptionExist($txn_id);
|
|
|
|
if (isset($existUser[0]) && empty($existUser[0])) {
|
|
$UserSubObj = $this->UserSubscription->insertUserSubscription($inputData);
|
|
|
|
if (isset($UserSubObj[1]['id']) && ($UserSubObj[1]['id'] > 0)) {
|
|
$subscription_id = $UserSubObj[1]['id'];
|
|
$user_id = $custom;
|
|
$this->User->updateFieldsById($user_id, $fields = array('user_subscription_id' => $subscription_id));
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
die;
|
|
// return false;
|
|
}
|
|
|
|
public function paypalcancel()
|
|
{
|
|
// do nothing
|
|
}
|
|
|
|
public function createGroup()
|
|
{
|
|
echo 'this is createGroup page';
|
|
pr($this->request->query);
|
|
die;
|
|
|
|
$data = $this->preparingProductBuyInput($this->request->query);
|
|
|
|
$apiResponse = $this->callAPI(HTTP_SITE_URL . "/products/buy.json", 'POST', json_encode($data));
|
|
$apiResponseArr = json_decode($apiResponse, true);
|
|
|
|
if (isset($apiResponseArr['response']['status']) && ($apiResponseArr['response']['status'] == '+000')) {
|
|
$this->redirect('/pages/myExpenses');
|
|
|
|
/*if ($data['expense_type'] == 1):
|
|
$this->redirect('/Home/createGroupExpense');
|
|
elseif ($data['expense_type'] == 2):
|
|
$this->redirect('/Home/createMessExpense');
|
|
elseif ($data['expense_type'] == 3):
|
|
$this->redirect('/Home/createFamilyExpense');
|
|
endif;*/
|
|
} else {
|
|
$message = 'Something Wrong';
|
|
$this->Session->write('system.message', $message);
|
|
$this->redirect('/pages/products');
|
|
}
|
|
}
|
|
|
|
public function getToken(){
|
|
$device_id = "2sdfd6788ds76f8sd6f8f";
|
|
$random_number = "c9du5htkwwACZWLcraKrngKbKPtJ1YaY";
|
|
$unique_number = $device_id.$random_number; // device id + six digit random number
|
|
$salt = 'Nop@ss%!*-+@s=_17';
|
|
$generated_token = hash('sha256', $unique_number . $salt);
|
|
echo $generated_token;exit;
|
|
}
|
|
|
|
public function getSecretKeyss()
|
|
{
|
|
$device_id = "2sdfd6788ds76f8sd6f8f";
|
|
$this->loadModel('AccessKey');
|
|
$access_key = $this->AccessKey->getAccessToken($device_id);
|
|
//print_r($access_key['AccessKey']['secret_key']);
|
|
echo $access_key;
|
|
exit;
|
|
}
|
|
|
|
public function addGroup()
|
|
{
|
|
$url = $this->request->data['unique_url'];
|
|
$unique_url = str_replace(HTTP_SITE_URL.'/', '', $url);
|
|
$sessionProfileId = $this->Session->read('userData.profile_id');
|
|
$sessionUserId = $this->Session->read('userData.id');
|
|
list($status, $status_desc, $expObj) = $this->validateUniqueUrl($unique_url);
|
|
if (empty($status)) {
|
|
$permission = $this->Permission->PermissionByUserId($unique_url, $sessionUserId);
|
|
if ($permission != NO_PERMIT) {
|
|
|
|
$user_group = $this->UserGroup->find('first', array(
|
|
'conditions' => array('UserGroup.unique_url' => $unique_url, 'UserGroup.user_id' => $sessionUserId)
|
|
));
|
|
|
|
if (empty($user_group)) {
|
|
$inputData['user_id'] = $sessionUserId;
|
|
$inputData['unique_url'] = $unique_url;
|
|
$inputData['participant_id'] = '1_0';
|
|
$result = $this->UserGroup->save($inputData);
|
|
$expense_name = 'GroupExpense';
|
|
$expense_type = substr($data["unique_url"], 0 , 1);
|
|
if ($expense_type == 2) {
|
|
$expense_name = "MessExpense";
|
|
} elseif ($expense_type == 3) {
|
|
$expense_name = "FamilyExpense";
|
|
}
|
|
$this->userGroupUpdateOnFirebase($sessionUserId, $expense_name);
|
|
$this->Cookie->delete('Expenses');
|
|
|
|
$this->Session->setFlash(__('LBL_Add_GROUP_SUCCESS_MESSAGE'), 'default', ['class' => 'alert alert-success']);
|
|
|
|
|
|
} else {
|
|
|
|
$this->Session->setFlash(__('LBL_Add_GROUP_EXISTS_MESSAGE'), 'default', ['class' => 'alert alert-danger']);
|
|
}
|
|
|
|
} else {
|
|
|
|
$this->Session->setFlash('You do not have permission to access this group!', 'default', ['class' => 'alert alert-danger']);
|
|
}
|
|
}
|
|
else{
|
|
$this->Session->setFlash( __('LBL_Add_GROUP_NOT_EXISTS_MESSAGE'), 'default', ['class' => 'alert alert-danger']);
|
|
}
|
|
|
|
return $this->redirect(['controller' => 'pages', 'action' => 'myExpenses']);
|
|
}
|
|
|
|
|
|
} |