'500',
'type' => 'Db connection error',
'message' => $ex->getMessage(),
]);
exit;
}
$backup_expense = $db->query("select * from backup_expenses where unique_url='".$unique_url."'");
//check if the record already in backup tables or not
if (!empty($backup_expense)) {
$prod_expense = $db->query("select * from expenses where unique_url= '".$unique_url."'");
if(empty($prod_expense)) {
// if there is no such expense on production theb proceed to shift expense data from backup to production
$expense_id = $backup_expense[0]["backup_expenses"]["id"];
try{
$db->query("insert into expenses select * from backup_expenses where id =".$expense_id);
$db->query("delete from backup_expenses where id =".$expense_id); // delete from expenses
} catch(Exception $ex){
if($showMessagge){
echo "shifting from backup expense to expense failed!
";
}
}
if($expenseType == "1" || $expenseType == "2"){
try{
$db->query("insert into group_expenses select * from backup_group_expenses where expense_id =".$expense_id);
$db->query("delete from backup_group_expenses where expense_id =".$expense_id); // delete from group expense
} catch(Exception $ex){
if($showMessagge){
echo "backup group expenses delete failed
";
}
}
try{
$db->query("insert into participants select * from backup_participants where expense_id =".$expense_id);
$db->query("delete from backup_participants where expense_id =".$expense_id); // delete from backup participants
} catch(Exception $ex){
if($showMessagge){
echo "backup participants expenses delete failed
";
}
}
if($expenseType == "2"){
try{
$db->query("insert into meals select * from backup_meals where expense_id =".$expense_id);
$db->query("delete from backup_meals where expense_id =".$expense_id); // delete from backup meals
} catch(Exception $ex){
if($showMessagge){
echo "backup meals expenses insert/delete failed
";
}
}
}
} else if($expenseType == "3"){
try{
$db->query("insert into family_expenses select * from backup_family_expenses where expense_id =".$expense_id);
$db->query("delete from backup_family_expenses where expense_id =".$expense_id); // delete from backup_family_expenses
} catch(Exception $ex){
if($showMessagge){
echo "backup MyXpense insert/delete failed
";
}
}
}
try{
$db->query("insert into logs select * from backup_logs where expense_id =".$expense_id);
$db->query("delete from backup_logs where expense_id =".$expense_id); // delete from backup_logs
} catch(Exception $ex){
if($showMessagge){
echo "backup logs insert/delete failed
";
}
}
// restore group settings
try{
$db->query("insert into group_settings select * from backup_group_settings where expense_id =".$expense_id);
$db->query("delete from backup_group_settings where expense_id =".$expense_id); // delete from backup_group_settings
} catch(Exception $ex){
if($showMessagge){
echo "backup group_settings insert/delete failed
";
}
}
// restore permissions
try{
$db->query("insert into permissions select * from backup_permissions where expense_id =".$expense_id);
$db->query("delete from backup_permissions where expense_id =".$expense_id); // delete from backup_permissions
} catch(Exception $ex){
if($showMessagge){
echo "backup permissions insert/delete failed
";
}
}
} else {
if($showMessagge){
echo "Expense is already in production database. Could not perform restore!";
exit;
}
}
} else {
try {
$archieve_db = ConnectionManager::getDataSource('archieve');
}catch (Exception $ex){
echo json_encode([
'status' => '500',
'type' => 'Db connection error',
'message' => $ex->getMessage(),
]);
exit;
}
$archieve_expense = $archieve_db->query("select * from expenses where unique_url='".$unique_url."'");
//if the expense already in archieve database, then proceed
if(!empty($archieve_expense)) {
try{
$prod_expense = $db->query("select * from expenses where unique_url='".$unique_url."'");
} catch (Exception $ex){
if($showMessagge){
echo "production expense not found";
}
}
if(empty($prod_expense)) {
// if there is no such expense on production then proceed to shift expense data from archeive to production
$expense_id = $archieve_expense[0]["expenses"]["id"];
$expenseArray = $archieve_expense[0]["expenses"];
if(!empty($expenseArray)){
try{
App::import('model','Expense');
$expense = new Expense();
$expense->save($expenseArray);
$archieve_db->query("delete from expenses where id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge){
echo "insert into expenses failed";
exit;
}
}
}
if($expenseType == "1" || $expenseType == "2"){
//insert into group_expense from archieve
$groupExpenseArray = array();
try {
$prod_group_expense = $archieve_db->query("select * from group_expenses where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_group_expense = null;
}
foreach($prod_group_expense as $key=>$value){
$groupExpenseArray["GroupExpense"][$key] = $value["group_expenses"];
}
if(!empty($groupExpenseArray)){
App::import('model','GroupExpense');
$group_expense = new GroupExpense();
$group_expense->saveMany($groupExpenseArray["GroupExpense"]);
try {
$archieve_db->query("delete from group_expenses where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
}
}
//insert into participants from archieve
$participantsArray = array();
try {
$prod_participants = $archieve_db->query("select * from participants where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_participants = null;
}
foreach($prod_participants as $key=>$value){
$participantsArray["Participant"][$key] = $value["participants"];
}
if(!empty($participantsArray)){
App::import('model','Participant');
$participant = new Participant();
$participant->saveMany($participantsArray["Participant"]);
try {
$archieve_db->query("delete from participants where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
}
}
if($expenseType == "2"){
//insert into meals from archieve
$mealsArray = array();
try {
$prod_meals = $archieve_db->query("select * from meals where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_meals = null;
}
foreach($prod_meals as $key=>$value) {
$mealsArray["Meal"][$key] = $value["meals"];
}
if(!empty($mealsArray)){
App::import('model','Meal');
$meal = new Meal();
$meal->saveMany($mealsArray["Meal"]);
try {
$archieve_db->query("delete from meals where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
}
}
}
} else if($expenseType == "3"){
//insert into family_expenses from archieve
$family_expensesArray = array();
try {
$prod_family_expenses = $archieve_db->query("select * from family_expenses where expense_id=".$expense_id);
} catch (Exception $ex) {
}
foreach($prod_family_expenses as $key=>$value){
$family_expensesArray["FamilyExpense"][$key] = $value["family_expenses"];
}
if(!empty($family_expensesArray)){
App::import('model','FamilyExpense');
$familyexpense = new FamilyExpense();
$familyexpense->saveMany($family_expensesArray["FamilyExpense"]);
try {
$archieve_db->query("delete from family_expenses where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
}
}
}
//insert into logs from archieve
$logsArray = array();
try {
$prod_logs = $archieve_db->query("select * from logs where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_logs = null;
}
foreach($prod_logs as $key=>$value){
$logsArray["Log"][$key] = $value["logs"];
}
if(!empty($logsArray)){
App::import('model','Log');
$log = new Log();
$log->saveMany($logsArray["Log"]);
try {
$archieve_db->query("delete from logs where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
}
}
//insert into group_settings from archieve
$groupSettingArray = array();
try {
$archive_group_settings = $archieve_db->query("select * from group_settings where expense_id=".$expense_id);
} catch (Exception $ex) {
$archive_group_settings = null;
}
foreach($archive_group_settings as $key=>$value){
$groupSettingArray["GroupSetting"][$key] = $value["group_settings"];
}
if(!empty($groupSettingArray)){
App::import('model','GroupSetting');
$groupSetting = new GroupSetting();
$groupSetting->saveMany($groupSettingArray["GroupSetting"]);
try {
$archieve_db->query("delete from group_settings where expense_id =".$expense_id); // delete from archive group_settings
} catch (Exception $ex) {
}
}
//insert into permissions from archieve
$permissionArray = array();
try {
$archive_permissions = $archieve_db->query("select * from permissions where expense_id=".$expense_id);
} catch (Exception $ex) {
$archive_permissions = null;
}
foreach($archive_permissions as $key=>$value){
$permissionArray["Permission"][$key] = $value["permissions"];
}
if(!empty($permissionArray)){
App::import('model','PermissionTable');
$permission = new PermissionTable();
$permission->saveMany($permissionArray["Permission"]);
try {
$archieve_db->query("delete from permissions where expense_id =".$expense_id); // delete from archive permissions
} catch (Exception $ex) {
}
}
} else {
if($showMessagge){
echo "Expense is already in production database. Could not perform restore!";
exit;
}
}
}
else {
if($showMessagge){
echo "Expense not available in Archieve database";
exit;
}
}
}
}
}
/*
* For making automatic data backup to backup tables and delete them after backup
*/
public function processBackupAndRemove($expiredRecordList, $showMessagge = 0) {
//get all the expense_id
foreach($expiredRecordList as $key=>$value){
if(isset($value["expired_records"]) && !empty($value["expired_records"])) {
$expenseIdList[] = $value["expired_records"]["id"];
$expenseType = substr($value["expired_records"]["unique_url"], 0, 1);
if ($expenseType == "1" || $expenseType == "2") {
if ($expenseType == "2") {
$messExpenseList[] = $value["expired_records"]["id"];
}
$groupAndMessExpenseList[] = $value["expired_records"]["id"];
} else if ($expenseType == "3") {
$familyExpenseList[] = $value["expired_records"]["id"];
}
} else {
$expenseIdList[] = $value["expenses"]["id"];
$expenseType = substr($value["expenses"]["unique_url"], 0, 1);
if ($expenseType == "1" || $expenseType == "2") {
if ($expenseType == "2") {
$messExpenseList[] = $value["expenses"]["id"];
}
$groupAndMessExpenseList[] = $value["expenses"]["id"];
} else if ($expenseType == "3") {
$familyExpenseList[] = $value["expenses"]["id"];
}
}
}
$expenseIds = implode(",",$expenseIdList);
//check existing data in the backup tables
$db = ConnectionManager::getDataSource('default');
$backup_expenses = $db->query("select id,unique_url from backup_expenses where id in(".$expenseIds.")");
if(!empty($backup_expenses)){
$this->deleteExistingExpense($backup_expenses, $db);
}
try{
//process to shift expenses table to backup_expenses table
// echo "insert into backup_expenses select * from expenses where id in(".$expenseIds.")";
$db->query("insert into backup_expenses select * from expenses where id in(".$expenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_expenses.'. $ex->getMessage(), 0, $ex);
}
}
try{
//delete from expenses
$db->query("delete from expenses where id in(".$expenseIds.")"); // delete from expenses
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed delete expenses.'. $ex->getMessage(), 0, $ex);
}
}
try{
//process to shift expense_emails table to backup_expense_emails table
$db->query("insert into backup_expense_emails select * from expense_emails where id in(".$expenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_expense_emails.'. $ex->getMessage(), 0, $ex);
}
}
try{
// delete from expense_emails
$db->query("delete from expense_emails where id in(".$expenseIds.")"); // delete from participants
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed delete expense_emails.'. $ex->getMessage(), 0, $ex);
}
}
if(!empty($groupAndMessExpenseList)){
$groupExpenseIds = implode(",",$groupAndMessExpenseList);
try{
//process to shift group_expenses table to backup_group_expenses table
$db->query("insert into backup_group_expenses select * from group_expenses where expense_id in(".$groupExpenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_group_expenses.'. $ex->getMessage(), 0, $ex);
}
}
try{
// delete from group_expenses
$db->query("delete from group_expenses where expense_id in(".$groupExpenseIds.")"); // delete from group_expenses
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed delete group_expenses.'. $ex->getMessage(), 0, $ex);
}
}
try{
//process to shift participants table to backup_participants table
$db->query("insert into backup_participants select * from participants where expense_id in(".$groupExpenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_participants.'. $ex->getMessage(), 0, $ex);
}
}
try{
// delete from participants
$db->query("delete from participants where expense_id in(".$groupExpenseIds.")"); // delete from participants
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed delete participants.'. $ex->getMessage(), 0, $ex);
}
}
}
//For mess expense specially
if(!empty($messExpenseList)){
$messExpenseIds = implode(",",$messExpenseList);
try{
//process to shift meals table to backup_meal table
$db->query("insert into backup_meals select * from meals where expense_id in(".$messExpenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_meals.'. $ex->getMessage(), 0, $ex);
}
}
try{
//delete from meals
$db->query("delete from meals where expense_id in(".$messExpenseIds.")"); // delete from meals
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed delete meals.'. $ex->getMessage(), 0, $ex);
}
}
}
//if it is family expense
if(!empty($familyExpenseList)){
$familyExpenseIds = implode(",",$familyExpenseList);
try{
//process to shift family_expenses table to backup_family_expenses table
$db->query("insert into backup_family_expenses select * from family_expenses where expense_id in(".$familyExpenseIds.")");
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_family_expenses.'. $ex->getMessage(), 0, $ex);
}
}
try{
//delete from family_expenses
$db->query("delete from family_expenses where expense_id in(".$familyExpenseIds.")"); // delete from family_expenses
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to delete family_expenses.'. $ex->getMessage(), 0, $ex);
}
}
}
try{
//process to shift logs table to backup_logs table
$db->query("insert into backup_logs select * from logs where expense_id in(".$expenseIds.")");
} catch(Exception $ex){
if($showMessagge){
if($showMessagge){
throw new Exception('Failed to insert backup_logs.'. $ex->getMessage(), 0, $ex);
}
}
}
try{
//delete from logs
$db->query("delete from logs where expense_id in(".$expenseIds.")"); // delete from logs
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to delete logs.'. $ex->getMessage(), 0, $ex);
}
}
// Group Settings backup and delete processs start
try{
//process to shift group_settings table to backup_group_settings table
$db->query("insert into backup_group_settings select * from group_settings where expense_id in(".$expenseIds.")");
}
catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_group_settings.'. $ex->getMessage(), 0, $ex);
}
}
try{
//delete from table group_settings
$db->query("delete from group_settings where expense_id in(".$expenseIds.")"); // delete from group_settings
}
catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to delete group_settings.'. $ex->getMessage(), 0, $ex);
}
}
// Group Settings backup and delete end
// Permission table backup and delete start
try{
//process to shift permissions table to backup_permissions table
$db->query("insert into backup_permissions select * from permissions where expense_id in(".$expenseIds.")");
}
catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to insert backup_permissions.'. $ex->getMessage(), 0, $ex);
}
}
try{
//delete from table permissions
$db->query("delete from permissions where expense_id in(".$expenseIds.")"); // delete from permissions
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to delete permissions.'. $ex->getMessage(), 0, $ex);
}
}
// permissions backup and delete end
try{
//process to delete records from table expired_records
$db->query("delete from expired_records where id in(".$expenseIds.")"); // delete from expired_records
} catch(Exception $ex){
if($showMessagge){
throw new Exception('Failed to delete expired_records.'. $ex->getMessage(), 0, $ex);
}
}
}
/*
* For deleting existing expenses in the backup table
*/
private function deleteExistingExpense($backup_expenses, $db)
{
foreach($backup_expenses as $key=>$value){
$backup_expenseIdList[] = $value["backup_expenses"]["id"];
$expenseType = substr($value["backup_expenses"]["unique_url"], 0, 1);
if($expenseType == "1" || $expenseType == "2"){
if($expenseType == "2"){
$messExpenseList[] = $value["backup_expenses"]["id"];
}
$groupAndMessExpenseList[] = $value["backup_expenses"]["id"];
} else if($expenseType == "3" ){
$familyExpenseList[] = $value["backup_expenses"]["id"];
}
}
$backup_expenseIds = implode(",", $backup_expenseIdList);
//echo $backup_expenseIds;exit;
try {
//delete records from backup_expenses in case any previous records avilable
$db->query("delete from backup_expenses where id in(".$backup_expenseIds.")"); // delete from expenses
} catch (Exception $ex) {
}
if(!empty($groupAndMessExpenseList)) {
try {
//delete records from backup_group_expenses in case any previous records avilable
$db->query("delete from backup_group_expenses where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
try {
//delete records from backup_participants in case any previous records avilable
$db->query("delete from backup_participants where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
//For mess expense specially
if(!empty($messExpenseList)) {
try {
//delete records from backup_meals in case any previous records avilable
$db->query("delete from backup_meals where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
if(!empty($familyExpenseList)) {
try {
//delete records from backup_family_expenses in case any previous records avilable
$db->query("delete from backup_family_expenses where expense_id in(".$backup_expenseIds.")");
} catch (Exception $ex) {
}
}
try {
//delete records from backup_logs in case any previous records avilable
$db->query("delete from backup_logs where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
try {
//delete records from backup_group_settings in case any previous records avilable
$db->query("delete from backup_group_settings where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) { }
try {
//delete records from backup_permissions in case any previous records avilable
$db->query("delete from backup_permissions where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
/*
* For archieve expenses from main database to archieve
*/
public function archieveSingleExpense($unique_url, $showMessagge = 0)
{
$db = ConnectionManager::getDataSource('default');
$backup_expense = $db->query("select * from backup_expenses where unique_url='".$unique_url."'");
if (!empty($backup_expense)) {
$archieve_db = ConnectionManager::getDataSource('archieve');
$archieve_expense = $archieve_db->query("select * from expenses where unique_url='".$unique_url."'");
if (!empty($archieve_expense)) {
$this->deleteExistingArchievedExpense($archieve_expense , $archieve_db);
}
$expense_id = $backup_expense[0]["backup_expenses"]["id"];
$expenseArray = $backup_expense;
if(!empty($expenseArray)){
try{
$this->insertIntoArchieve("backup_expenses","expenses", $expenseArray, $archieve_db);
$db->query("delete from backup_expenses where id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge){
throw new Exception('Failed inserting expenses.'. $ex->getMessage(), 0, $ex);
}
}
}
try {
$prod_group_expense = $db->query("select * from backup_group_expenses where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_group_expense = null;
}
if(!empty($prod_group_expense)){
try {
$this->insertIntoArchieve("backup_group_expenses","group_expenses", $prod_group_expense, $archieve_db);
$db->query("delete from backup_group_expenses where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge){
throw new Exception('Failed inserting group_expenses.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into participants from archieve
try {
$prod_participants = $db->query("select * from backup_participants where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_participants = null;
}
if(!empty($prod_participants)){
try {
$this->insertIntoArchieve("backup_participants","participants", $prod_participants, $archieve_db);
$db->query("delete from backup_participants where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting participants.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into meals from archieve
try {
$prod_meals = $db->query("select * from backup_meals where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_meals = null;
}
if(!empty($prod_meals)){
try {
$this->insertIntoArchieve("backup_meals","meals", $prod_meals, $archieve_db);
$db->query("delete from backup_meals where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting participants.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into family_expenses from archieve
try {
$prod_family_expenses = $db->query("select * from backup_family_expenses where expense_id=".$expense_id);
} catch (Exception $ex) {
}
if(!empty($prod_family_expenses)){
try {
$this->insertIntoArchieve("backup_family_expenses","family_expenses", $prod_family_expenses, $archieve_db);
$db->query("delete from backup_family_expenses where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting family_expenses.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into logs from archieve
try {
$prod_logs = $db->query("select * from backup_logs where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_logs = null;
}
if(!empty($prod_logs)){
try {
$this->insertIntoArchieve("backup_logs","logs", $prod_logs, $archieve_db);
$db->query("delete from backup_logs where expense_id =".$expense_id); // delete from expenses
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting logs.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into group_settings from archieve
try {
$prod_group_settings = $db->query("select * from backup_group_settings where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_group_settings = null;
}
if(!empty($prod_group_settings)){
try {
$this->insertIntoArchieve("backup_group_settings","group_settings", $prod_group_settings, $archieve_db);
$db->query("delete from backup_group_settings where expense_id =".$expense_id); // delete from backup_group_settings
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting group_settings.'. $ex->getMessage(), 0, $ex);
}
}
}
//insert into permissions from archieve
try {
$prod_permissions = $db->query("select * from backup_permissions where expense_id=".$expense_id);
} catch (Exception $ex) {
$prod_permissions = null;
}
if(!empty($prod_permissions)){
try {
$this->insertIntoArchieve("backup_permissions","permissions", $prod_permissions, $archieve_db);
$db->query("delete from backup_permissions where expense_id =".$expense_id); // delete from backup_permissions
} catch (Exception $ex) {
if($showMessagge) {
throw new Exception('Failed inserting permissions.'. $ex->getMessage(), 0, $ex);
}
}
}
} else {
if($showMessagge){
echo "Expense not available in backup table";
exit;
}
}
}
private function insertIntoArchieve($table, $insert_table, $data, $archieve_db)
{
foreach($data as $single_data) {
$insertStr = "";
$index = 0;
foreach ($single_data[$table] as $key => $value) {
if (strpos($value, "'") !== false) {
$value = addslashes($value);
}
$value = "'" . $value . "'";
if ($index++ == 0) {
$insertStr = $value;
} else {
$insertStr .= "," . $value;
}
}
$archieve_db->query("insert into " . $insert_table . " values(" . $insertStr . ")");
}
}
private function deleteExistingArchievedExpense($archieve_expense_id, $db)
{
foreach($archieve_expense_id as $key=>$value){
$backup_expenseIdList[] = $value["expenses"]["id"];
$expenseType = substr($value["expenses"]["unique_url"], 0, 1);
if($expenseType == "1" || $expenseType == "2"){
if($expenseType == "2"){
$messExpenseList[] = $value["expenses"]["id"];
}
$groupAndMessExpenseList[] = $value["expenses"]["id"];
} else if($expenseType == "3" ){
$familyExpenseList[] = $value["expenses"]["id"];
}
}
$backup_expenseIds = implode(",", $backup_expenseIdList);
//echo $backup_expenseIds;exit;
try {
//delete records from backup_expenses in case any previous records avilable
$db->query("delete from expenses where id in(".$backup_expenseIds.")"); // delete from expenses
} catch (Exception $ex) {
}
if(!empty($groupAndMessExpenseList)) {
try {
//delete records from backup_group_expenses in case any previous records avilable
$db->query("delete from group_expenses where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
try {
//delete records from backup_participants in case any previous records avilable
$db->query("delete from participants where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
//For mess expense specially
if(!empty($messExpenseList)) {
try {
//delete records from backup_meals in case any previous records avilable
$db->query("delete from meals where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
if(!empty($familyExpenseList)) {
try {
//delete records from backup_family_expenses in case any previous records avilable
$db->query("delete from family_expenses where expense_id in(".$backup_expenseIds.")");
} catch (Exception $ex) {
}
}
try {
//delete records from backup_logs in case any previous records avilable
$db->query("delete from logs where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {}
try {
//delete records from archive group_settings in case any previous records avilable
$db->query("delete from group_settings where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
try {
//delete records from archive permissions in case any previous records avilable
$db->query("delete from permissions where expense_id in(" . $backup_expenseIds . ")");
} catch (Exception $ex) {
}
}
/*
* For making automatic data backup to the archive database and delete from backup tables
*/
public function processArchiveAndRemove($backupRecordList,$showMessagge) {
$db = ConnectionManager::getDataSource('default');
$archiveDb = ConnectionManager::getDataSource('archieve');
$db->begin();
$archiveDb->begin();
try {
foreach ($backupRecordList as $value) {
$backup_record = $value['backup_expenses'];
if (empty($backup_record['unique_url'])) {
throw new Exception('unique_url missing');
}
$this->archieveSingleExpense($backup_record['unique_url'], $showMessagge);
}
$db->commit();
$archiveDb->commit();
if ($showMessagge) {
echo "Archive completed successfully";
}
} catch (Exception $ex) {
$db->rollback();
$archiveDb->rollback();
$message = "Archive process failed. Rolled back. Error: " . $ex->getMessage();
$this->emailSend($message,"Archive process failed");
echo $message;
}
}
/*
* For making automatic data removed from archive database
*/
public function processRemoveArchive($archiveRecordList,$showMessagge) {
$archiveDb = ConnectionManager::getDataSource('archieve');
$archiveDb->begin();
try {
$this->deleteExistingArchievedExpense($archiveRecordList, $archiveDb);
$archiveDb->commit();
if ($showMessagge) {
echo "Record removed from the archive database successfully.";
}
} catch (Exception $ex) {
$archiveDb->rollback();
if ($showMessagge) {
echo "Record removed from the archive failed. Rolled back. Error: " . $ex->getMessage();
}
}
}
private function emailSend($message,$subject)
{
App::uses('ComponentCollection', 'Controller');
App::uses('NotificationComponent', 'Controller/Component');
$this->Notification = new NotificationComponent(new ComponentCollection());
$this->Notification->sendEmail(array(
"email_from" => SUPPORT_EMAIL,
"email_to" => REPORTING_EMAIL,
"title" => $message,
"template" => "backup_archive_process_error",
"subject" => $subject,
));
}
}