.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
*
* @copyright 2008-2009, KnowledgeTree Inc.
* @license GNU General Public License version 3
* @author KnowledgeTree Team
* @package Installer
* @version Version 0.1
*/
class windowsScheduler extends windowsService {
/**
* Batch Script to execute
*
* @author KnowledgeTree Team
* @access private
* @var string
*/
private $schedulerScriptPath;
/**
* Php Script to execute
*
* @author KnowledgeTree Team
* @access private
* @var string
*/
private $schedulerSource;
/**
* Scheduler Directory
*
* @author KnowledgeTree Team
* @access private
* @var string
*/
private $schedulerDir;
/**
* Service name
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return string
*/
public $name = "KTScheduler";
public $hrname = "KnowledgeTree Scheduler Service. (KTScheduler)";
/**
* Load defaults needed by service
*
* @author KnowledgeTree Team
* @access public
* @param string
* @return void
*/
function load() {
$this->setSchedulerDIR(SYS_VAR_DIR."bin");
$this->setSchedulerScriptPath("taskrunner.bat");
$this->setSchedulerSource("schedulerService.php");
}
/**
* Set Scheduler Directory path
*
* @author KnowledgeTree Team
* @access private
* @param none
* @return string
*/
private function setSchedulerDIR($schedulerDIR) {
if(!file_exists($schedulerDIR)) {
mkdir($schedulerDIR);
}
$this->schedulerDir = $schedulerDIR;
}
/**
* Retrieve Scheduler Directory path
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return string
*/
public function getSchedulerDir() {
if(file_exists($this->schedulerDir))
return $this->schedulerDir;
return false;
}
/**
* Set Batch Script path
*
* @author KnowledgeTree Team
* @access private
* @param string
* @return void
*/
private function setSchedulerScriptPath($schedulerScriptPath) {
$this->schedulerScriptPath = "{$this->getSchedulerDir()}".DS."$schedulerScriptPath";
}
/**
* Retrieve Batch Script path
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return string
*/
public function getSchedulerScriptPath() {
if(file_exists($this->schedulerScriptPath))
return $this->schedulerScriptPath;
return false;
}
/**
* Set Php Script path
*
* @author KnowledgeTree Team
* @access private
* @param none
* @return string
*/
private function setSchedulerSource($schedulerSource) {
$this->schedulerSource = SYS_BIN_DIR."win32".DS.$schedulerSource;
}
/**
* Retrieve Php Script path
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return string
*/
public function getSchedulerSource() {
if(file_exists($this->schedulerSource))
return $this->schedulerSource;
return false;
}
private function setWinservice($winservice = "winserv.exe") {
$this->winservice = SYS_BIN_DIR . "win32" . DS . $winservice;
}
private function setOptions() {
$this->options = "-displayname {$this->name} -start auto -binary \"{$this->getSchedulerScriptPath()}\" -headless -invisible ";
}
private function writeTaskRunner() {
if(DEBUG) { // Check if bin is readable and writable
echo "Attempt to Create {$this->getSchedulerDir()}\\taskrunner.bat
";
}
$taskrunner = SYS_VAR_DIR."bin".DS."taskrunner.bat";
$fp = fopen($taskrunner, "w+");
$content = "@echo off \n";
$content .= "\"".$this->util->useZendPhp()."php.exe\" "."\"{$this->getSchedulerSource()}\"";
fwrite($fp, $content);
fclose($fp);
}
private function writeSchedulerInstall($cmd) {
$schedulerInstallFile = SYS_VAR_DIR."bin".DS."schedulerinstall.bat";
$fp = fopen($schedulerInstallFile, "w+");
fwrite($fp, $cmd);
fclose($fp);
}
/**
* Retrieve Status Service
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return string
*/
public function status() {
$cmd = "sc query {$this->name}";
$response = $this->util->pexec($cmd);
if($response['out']) {
$state = preg_replace('/^STATE *\: *\d */', '', trim($response['out'][3])); // Status store in third key
return $state;
}
return '';
}
/**
* Install Scheduler Service
*
* @author KnowledgeTree Team
* @access public
* @param none
* @return array
*/
public function install() {
$state = $this->status();
if($state == '') {
$this->writeTaskRunner();
//if (function_exists('win32_create_service')) { // TODO what if it does not exist? check how the dmsctl.bat does this
// if(DEBUG) {
// echo '
';
// print_r(array('service' => $this->name, 'display' => $this->name, 'path' => $this->getSchedulerScriptPath()));
// echo '';
// echo ''; // print_r(file_get_contents($this->getSchedulerScriptPath())); // echo ''; // return ; // } /* $response = win32_create_service(array( 'service' => $this->name, 'display' => $this->name, 'path' => $this->getSchedulerScriptPath() )); return $response; */ //} else { // Attempt to use the winserv // TODO: Add service using winserv $this->setWinservice(); $this->setOptions(); $cmd = "\"{$this->winservice}\" install $this->name $this->options"; if(DEBUG) { echo "$cmd