diff --git a/application/config/constants.php b/application/config/constants.php index ef4cdaf2c..f21b6c962 100644 --- a/application/config/constants.php +++ b/application/config/constants.php @@ -31,6 +31,13 @@ define('EXIT_VALIDATION_UDF_NOT_VALID_VAL', 17); // UDF validation has been fail define('EXIT_AUTO_MIN', 1000); // lowest automatically-assigned error code define('EXIT_AUTO_MAX', 2000); // highest automatically-assigned error code +/* +|-------------------------------------------------------------------------- +| General purpose +|-------------------------------------------------------------------------- +*/ +define('BEGINNING_OF_TIME', '1970-01-01'); + /* |-------------------------------------------------------------------------- | Authentication constants diff --git a/application/config/jqm.php b/application/config/jqm.php index 5890241ae..579fc6987 100644 --- a/application/config/jqm.php +++ b/application/config/jqm.php @@ -2,5 +2,15 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -// -$config['addable_jobs_black_list'] = array('doomsday', 'sudo rm -fR /', 'sudo mv / /dev/null'); +// White list of permissions that are able to store a spcific job type in database +$config['job_type_permissions_white_list'] = array( + 'SAPStammdatenUpdate' => array( + 'admin' + ), + 'OEHPayment' => array( + 'admin' + ), + 'SAPPayment' => array( + 'admin' + ) +); diff --git a/application/config/navigation.php b/application/config/navigation.php index 9253c87a1..f44b297a5 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -102,6 +102,13 @@ $config['navigation_header'] = array( 'expand' => true, 'sort' => 20, 'requiredPermissions' => 'system/developer:r' + ), + 'jobsqueueviewer' => array( + 'link' => site_url('system/jq/JobsQueueViewer'), + 'description' => 'Jobs Queue Viewer', + 'expand' => true, + 'sort' => 20, + 'requiredPermissions' => 'system/developer:r' ) ) ) diff --git a/application/controllers/system/JobsQueueMonitor.php b/application/controllers/system/JobsQueueMonitor.php deleted file mode 100644 index affb59bef..000000000 --- a/application/controllers/system/JobsQueueMonitor.php +++ /dev/null @@ -1,56 +0,0 @@ - 'monitoring:r', - 'getJobsByStatus' => 'monitoring:r', - 'getJobsByCreationTime' => 'monitoring:r' - ) - ); - - // Loads JobsQueueLib - $this->load->library('JobsQueueLib'); - } - - /** - * - */ - public function getJobsByType() - { - $jobType = $this->input->get(JobsQueueLib::PARAM_JOB_TYPE); - - $this->outputJson($this->jobsqueuelib->getJobsByType($jobType)); - } - - /** - * - */ - public function getJobsByStatus() - { - $jobStatus = $this->input->get(JobsQueueLib::PARAM_JOB_STATUS); - - $this->outputJson($this->jobsqueuelib->getJobsByStatus($jobStatus)); - } - - /** - * - */ - public function getJobsByCreationTime() - { - $jobCreationTime = $this->input->get(JobsQueueLib::PARAM_JOB_CREATION_TIME); - - $this->outputJson($this->jobsqueuelib->getJobsByCreationTime($jobCreationTime)); - } -} diff --git a/application/controllers/system/LogsViewer.php b/application/controllers/system/LogsViewer.php index 8caf9f3a7..4e39db5e3 100644 --- a/application/controllers/system/LogsViewer.php +++ b/application/controllers/system/LogsViewer.php @@ -35,7 +35,7 @@ class LogsViewer extends Auth_Controller // Public methods /** - * Main page of the InfoCenter tool + * Everything has a beginning */ public function index() { diff --git a/application/controllers/system/jq/JobsQueueManager.php b/application/controllers/system/jq/JobsQueueManager.php new file mode 100644 index 000000000..4e82ff44e --- /dev/null +++ b/application/controllers/system/jq/JobsQueueManager.php @@ -0,0 +1,51 @@ + 'admin:r', + 'addNewJobsToQueue' => 'admin:rw' + ) + ); + + // Loads JobsQueueLib + $this->load->library('JobsQueueLib'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * To get all the most recently added jobs using the given job type + */ + public function getLastJobs() + { + $type = $this->input->get(JobsQueueLib::PARAM_JOB_TYPE); + + $this->outputJson($this->jobsqueuelib->getLastJobs($type)); + } + + /** + * Add new jobs in the jobs queue with the given type + * jobs is an array of job objects + */ + public function addNewJobsToQueue() + { + $type = $this->input->post(JobsQueueLib::PARAM_JOB_TYPE); + $jobs = $this->input->post(JobsQueueLib::PARAM_JOBS); + + $this->outputJson($this->jobsqueuelib->addNewJobsToQueue($type, $jobs)); + } +} diff --git a/application/controllers/system/jq/JobsQueueViewer.php b/application/controllers/system/jq/JobsQueueViewer.php new file mode 100644 index 000000000..7e8760209 --- /dev/null +++ b/application/controllers/system/jq/JobsQueueViewer.php @@ -0,0 +1,48 @@ + 'system/developer:r' + ) + ); + + // Loads WidgetLib + $this->load->library('WidgetLib'); + + // Loads phrases system + $this->loadPhrases( + array( + 'global', + 'ui', + 'filter' + ) + ); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Everything has a beginning + */ + public function index() + { + $this->load->view('system/jq/jobsQueueViewer.php'); + } +} diff --git a/application/core/JQW_Controller.php b/application/core/JQW_Controller.php index 9cb058f6b..616eaf4fd 100644 --- a/application/core/JQW_Controller.php +++ b/application/core/JQW_Controller.php @@ -3,18 +3,22 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); /** + * Job Queue Worker * + * This controller acts as interface of the JobsQueueLib that contains all the needed functionalities to operate with + * the Jobs Queue System + * This is an abstract class that provide basic functionalities, it has to be extended to broaden its logic */ abstract class JQW_Controller extends JOB_Controller { /** - * + * Constructor */ public function __construct() { parent::__construct(); - // Loads LogLib with different ... + // Loads LogLib with different parameters $this->load->library('LogLib', array( 'classIndex' => 5, 'functionIndex' => 5, @@ -23,33 +27,36 @@ abstract class JQW_Controller extends JOB_Controller 'dbExecuteUser' => 'Jobs queue system' )); - // Loads JobsQueueLib + // Loads JobsQueueLib library $this->load->library('JobsQueueLib'); } - // ------------------------------------------------------------------------------------------------------------ - // Protected methods to read/write the jobs queue + //------------------------------------------------------------------------------------------------------------------ + // Protected methods /** - * + * To get all the most recently added jobs using the given job type */ - protected function getJobsByType($jobType) + protected function getLastJobs($type) { - $jobs = $this->jobsqueuelib->getJobsByType($jobType); + $jobs = $this->jobsqueuelib->getLastJobs($type); - if (isError($jobs)) $this->logError(getError($jobs), $jobType); + // If an error occurred then log it in database + if (isError($jobs)) $this->logError(getError($jobs), $type); return $jobs; } /** - * + * Add new jobs in the jobs queue with the given type + * jobs is an array of job objects */ - protected function addNewJobsToQueue($jobType, $jobs) + protected function addNewJobsToQueue($type, $jobs) { - $result = $this->jobsqueuelib->addNewJobsToQueue($jobType, $jobs); + $result = $this->jobsqueuelib->addNewJobsToQueue($type, $jobs); - if (isError($result)) $this->logError(getError($result), $jobType); + // If an error occurred then log it in database + if (isError($result)) $this->logError(getError($result), $type); return $result; } diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index 6e87833bd..f909c7083 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -93,6 +93,7 @@ class FilterWidgetLib const OP_NOT_SET = 'nset'; // Filter options values + const OPT_HOURS = 'hours'; const OPT_DAYS = 'days'; const OPT_MONTHS = 'months'; @@ -884,7 +885,8 @@ class FilterWidgetLib // It it's a date type if (is_numeric($filterDefinition->condition) && isset($filterDefinition->option) - && ($filterDefinition->option == self::OPT_DAYS + && ($filterDefinition->option == self::OPT_HOURS + || $filterDefinition->option == self::OPT_DAYS || $filterDefinition->option == self::OPT_MONTHS)) { $condition = '< (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)'; @@ -899,7 +901,8 @@ class FilterWidgetLib // It it's a date type if (is_numeric($filterDefinition->condition) && isset($filterDefinition->option) - && ($filterDefinition->option == self::OPT_DAYS + && ($filterDefinition->option == self::OPT_HOURS + || $filterDefinition->option == self::OPT_DAYS || $filterDefinition->option == self::OPT_MONTHS)) { $condition = '> (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)'; diff --git a/application/libraries/JobsQueueLib.php b/application/libraries/JobsQueueLib.php index 0c7e44274..fe73b40c6 100644 --- a/application/libraries/JobsQueueLib.php +++ b/application/libraries/JobsQueueLib.php @@ -2,27 +2,33 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); +/** + * Library that contains all the needed functionalities to operate with the Jobs Queue System + */ class JobsQueueLib { - // - const STATUS_RUNNING = 'running'; - const STATUS_NEW = 'new'; - const STATUS_DONE = 'done'; - - // - const PARAM_JOB_TYPE = 'jobType'; - const PARAM_JOB_STATUS = 'jobStatus'; - const PARAM_JOB_CREATION_TIME = 'jobCreatinTime'; - - // + // Job types + // SAP const JOB_TYPE_SAP_STAMMDATEN_UPDATE = 'SAPStammdatenUpdate'; const JOB_TYPE_SAP_PAYMENT = 'SAPPayment'; + // DVUH const JOB_TYPE_OEH_PAYMENT = 'OEHPayment'; + // Job statuses + const STATUS_NEW = 'new'; + const STATUS_RUNNING = 'running'; + const STATUS_DONE = 'done'; + const STATUS_FAILED = 'failed'; + + // Parameter names + const PARAM_JOB_TYPE = 'type'; + const PARAM_JOB_STATUS = 'status'; + const PARAM_JOBS = 'jobs'; + private $_ci; // CI instance /** - * Construct + * Constructor */ public function __construct($authenticate = true) { diff --git a/application/models/system/JobsQueue_model.php b/application/models/system/JobsQueue_model.php new file mode 100644 index 000000000..e35b45cb3 --- /dev/null +++ b/application/models/system/JobsQueue_model.php @@ -0,0 +1,15 @@ +dbTable = 'system.tbl_jobsqueue'; + $this->pk = 'jobid'; + } +} diff --git a/application/views/system/jq/jobsQueueViewer.php b/application/views/system/jq/jobsQueueViewer.php new file mode 100644 index 000000000..6d92d610b --- /dev/null +++ b/application/views/system/jq/jobsQueueViewer.php @@ -0,0 +1,47 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Jobs Queue Viewer', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', + 'customJSs' => array('public/js/bootstrapper.js') + ) + ); +?> + +
+