Psyduck - 可達鴨 之 鴨力山大 v0.1

Current Path : home/irplbiz/public_html/iwp/cron/
Upload File :
Current File : /home/irplbiz/public_html/iwp/cron/manageEasyCron.php

<?php

#
# manageEasyCron
# This Class is used to manage the EasyCron API with IWP Admin Panel
# Develope by : Revmakx Team
#

/**
 * ClassName : manageEasyCron
 */
 
require_once(APP_ROOT."/lib/easyCronAPI.php");

class manageEasyCron{
	
	private static $manageCronID;
	private static $taskCronID;
	private static $token;
	private static $easyCronAPIObj;
	private static $panelVersion;
	
/*	public static function __construct(){
		
		self::loadAPIDetails();
	}
	*/
	
	/*
	* This function will save the API token and then creates task cron and manage cron.
	*/
	public static function activate($params){
				
		$token = $params['token'];
		$manageCronID = $taskCronID = '';
		
		updateOption("easyCronToken", $token);	
		self::loadAPIDetails();
		
		//first add 1 min cron, if free user it will give error
		//add "task cron" 
		$url = APP_FULL_URL.'cron.php?type=task';
		
		self::$easyCronAPIObj->setOptions(array('cron_job_name' => 'IWP Task Cron'));
		$result = self::$easyCronAPIObj->add($url, 1);
		if(!empty($result) && $result['status']=='success'){
			$taskCronID = $result['cron_job_id'];
		}
		else{
			// Customize free user error message 
			if($result['status']=='error' && !empty($result['error']) && $result['error']['code']=='14'){
				return array('status' => 'error', 'error' => array('message' => 'Using a free plan? Sign up for their basic plan - Starter, to activate the Easycron API'));
			}
			return $result;
		}		
		
		
		//add "manage cron" 
		$url = APP_FULL_URL.'cron.php?type=manage';
		
		self::$easyCronAPIObj->setOptions(array('cron_job_name' => 'IWP Manage Cron'));
		$result = self::$easyCronAPIObj->add($url, 30);
		if(!empty($result) && $result['status']=='success'){
			$manageCronID = $result['cron_job_id'];
		}
		else{
			return $result;
		}
		
		if (defined('APP_V3')) {
			$panelVersion = 'v3';
		}else{
			$panelVersion = 'v2';
		}
		//save the IDs in DB
		if($taskCronID && $manageCronID){
			updateOption("easyCronJobIDs", serialize(array('taskCronID' => $taskCronID, 'manageCronID' => $manageCronID, 'panelVersion' => $panelVersion)));
		}
		
		self::loadAPIDetails();
		return array('status' => 'success');
				
	}
	
	/*
	* This function will delete task cron and manage cron.
	*/
	public static function deactivate(){
		
		self::loadAPIDetails();
		
		$manageCronIDResult = self::$easyCronAPIObj->delete(self::$manageCronID);
		$taskCronIDResult = self::$easyCronAPIObj->delete(self::$taskCronID);
		deleteOption("easyCronJobIDs");		
		self::loadAPIDetails();
		if($manageCronIDResult['status']=='error' || $taskCronIDResult['status']=='error'){
			//error message
			return array('status' => 'error', 'error' => array('message' => 'Deactivated. But there is error in deleting the cron task, please manually delete cron job IDs '.self::$manageCronID.' and  '.self::$taskCronID.''));
		}
		else{
			//success
			return array('status' => 'success');
		}
	}
	
	/*
	* To check whether easycron is active or not.
	*/
	public static function isActive(){
		
		self::loadAPIDetails();
		
		if(!empty(self::$manageCronID) && !empty(self::$taskCronID)){
			return true;
		}
		return false;
	}

	/*
		We can't find directly if the easy cron API key active or not, so we can get the timezone of a user account. if the API key fails, it will throw an error
	*/
	public static function isAccessTokenValid(){
		if(self::isActive()){
			$result = self::$easyCronAPIObj->timezone();
			if(!empty($result) && !empty($result['error']) && $result['error']['code'] == '1'){
    			// 'message' => 'Wrong API token.',
				self::deactivate();
				return false;
			}else{
				return true;
			}
		}
		return false;
	}

	/*
	* To check whether easycron is active or not.
	*/
	public static function cronPanelVersion(){
		
		self::loadAPIDetails();
		
		if(!empty(self::$panelVersion)){
			return self::$panelVersion;
		}
		return '';
	}
	
	/*
	* To get a saved token from DB.
	*/
	public static function getTokenFromDB(){
		return getOption("easyCronToken");
	}
	
	
	/*
	* To enable taskCron (1 min)
	*/
	public static function taskCronEnable(){
		
		self::loadAPIDetails();
		
		$result = self::$easyCronAPIObj->enable(self::$taskCronID);
		return $result;
	}
	
	/*
	* To disable taskCron (1 min)
	*/
	public static function taskCronDisable(){
		
		self::loadAPIDetails();
		
		$result = self::$easyCronAPIObj->disable(self::$taskCronID);
		return $result;
	}
	
	/*
	* To enable manage cron (30 mins)
	*/
	public static function manageCronEnable(){
		
		self::loadAPIDetails();
		
		$result = self::$easyCronAPIObj->enable(self::$manageCronID);
		return $result;
	}

	public static function editTaskCron($frequency){
		self::loadAPIDetails();
		$url = APP_FULL_URL.'cron.php?type=task';
		$result = self::$easyCronAPIObj->edit(self::$taskCronID,$url, $frequency);
		if(!empty($result) && $result['status']=='success'){
			return true;
		}
		return false;
	}

	public static function taskCronLogs(){
		self::loadAPIDetails();
		return self::$easyCronAPIObj->logs(self::$taskCronID);
	}
	public static function getTaskCronRunningFrequency(){
		return getOption('taskCronRunningFrequency');
	}

	public static function getTaskCronNextSchedule(){
		return getOption('taskCronNextSchedule');
	}

	public static function deleteTaskCronRunningFrequency(){
		deleteOption("taskCronRunningFrequency");		
	}

	public static function updateTaskCronRunningFrequency($frequency){
		updateOption('taskCronRunningFrequency',$frequency);
	}

	public static function updateTaskCronNextSchedule($time){
		updateOption('taskCronNextSchedule',$time);
	}
	
	public static function isTaskCronScheduledTimeExpired(){
		$taskCronNextSchedule = getOption('taskCronNextSchedule');
		if(empty($taskCronNextSchedule) || $taskCronNextSchedule <= time()){
			return true;
		}
		return false;

	}
	/*
	* To get API token from DB
	*/
	private static function loadAPIDetails(){
		
		self::$easyCronAPIObj = new easyCronAPI();

		self::$token = getOption("easyCronToken");
		self::$easyCronAPIObj->setToken(self::$token);
		$jobIDs = array();
		$easyCronJobIDs = getOption("easyCronJobIDs");
		if(!empty($easyCronJobIDs)){
			$jobIDs = unserialize($easyCronJobIDs);
		}
		self::$manageCronID = $jobIDs['manageCronID'];
		self::$taskCronID = $jobIDs['taskCronID'];
		if (!empty($jobIDs['panelVersion'])) {
			self::$panelVersion = $jobIDs['panelVersion'];
		}else{
			self::$panelVersion = '';
		}
	}
	
}

panelRequestManager::addFunctions('manageEasyCron::activate', 'manageEasyCron::deactivate', 'manageEasyCron::isActive', 'manageEasyCron::taskCronEnable', 'manageEasyCron::taskCronDisable', 'manageEasyCron::manageCronEnable', 'manageEasyCron::getTokenFromDB','manageEasyCron::isAccessTokenValid');