diff --git a/composer.json b/composer.json index c918b8685..ec147b930 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,7 @@ "pear/console_getopt": "1.4.*", "typo3/class-alias-loader": "^1.0", "ralouphie/getallheaders": "^2.0", - "smarty/smarty": "2.6.30", + "smarty/smarty": "2.6.31", "pdepend/pdepend": "@stable", "chumper/zipper": "^1.0", "php-imap/php-imap": "^3.0", diff --git a/composer.lock b/composer.lock index 9d27220f7..3649e6861 100644 --- a/composer.lock +++ b/composer.lock @@ -2898,16 +2898,16 @@ }, { "name": "smarty/smarty", - "version": "v2.6.30", + "version": "v2.6.31", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "c5c9d6514ceaf15fe35345886668726829560f93" + "reference": "4ab9757b492f08a38f68123a6e7c1df7110bbc49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c5c9d6514ceaf15fe35345886668726829560f93", - "reference": "c5c9d6514ceaf15fe35345886668726829560f93", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/4ab9757b492f08a38f68123a6e7c1df7110bbc49", + "reference": "4ab9757b492f08a38f68123a6e7c1df7110bbc49", "shasum": "" }, "require": { diff --git a/database/factories/AdditionalTablesFactory.php b/database/factories/AdditionalTablesFactory.php new file mode 100644 index 000000000..03325eeb7 --- /dev/null +++ b/database/factories/AdditionalTablesFactory.php @@ -0,0 +1,28 @@ +define(\ProcessMaker\Model\AdditionalTables::class, function(Faker $faker) { + return [ + 'ADD_TAB_UID' => G::generateUniqueID(), + 'ADD_TAB_NAME' => $faker->name, + 'ADD_TAB_CLASS_NAME' => $faker->name, + 'ADD_TAB_DESCRIPTION' => $faker->text, + 'ADD_TAB_SDW_LOG_INSERT' => 0, + 'ADD_TAB_SDW_LOG_UPDATE' => 0, + 'ADD_TAB_SDW_LOG_DELETE' => 0, + 'ADD_TAB_SDW_LOG_SELECT' => 0, + 'ADD_TAB_SDW_MAX_LENGTH' => 0, + 'ADD_TAB_SDW_AUTO_DELETE' => 0, + 'ADD_TAB_PLG_UID' => '', + 'DBS_UID' => 'workflow', + 'PRO_UID' => function() { + return factory(\ProcessMaker\Model\Process::class)->create()->PRO_UID; + }, + 'ADD_TAB_TYPE' => '', + 'ADD_TAB_GRID' => '', + 'ADD_TAB_TAG' => '', + 'ADD_TAB_OFFLINE' => 0, + 'ADD_TAB_UPDATE_DATE' => $faker->dateTime() + ]; +}); diff --git a/database/factories/FieldsFactory.php b/database/factories/FieldsFactory.php new file mode 100644 index 000000000..70615e769 --- /dev/null +++ b/database/factories/FieldsFactory.php @@ -0,0 +1,50 @@ +define(\ProcessMaker\Model\Fields::class, function (Faker $faker) { + return [ + 'FLD_UID' => G::generateUniqueID(), + 'ADD_TAB_UID' => G::generateUniqueID(), + 'FLD_INDEX' => 0, + 'FLD_NAME' => 'VAR_' . $faker->sentence(1), + 'FLD_DESCRIPTION' => $faker->sentence(2), + 'FLD_TYPE' => 'VARCHAR', + 'FLD_SIZE' => 255, + 'FLD_NULL' => 1, + 'FLD_AUTO_INCREMENT' => 0, + 'FLD_KEY' => 1, + 'FLD_TABLE_INDEX' => 0, + 'FLD_FOREIGN_KEY' => 0, + 'FLD_FOREIGN_KEY_TABLE' => '', + 'FLD_DYN_NAME' => '', + 'FLD_DYN_UID' => '', + 'FLD_FILTER' => 0, + ]; +}); + +// Create columns from a table with the foreign keys +$factory->state(\ProcessMaker\Model\Fields::class, 'foreign_keys', function (Faker $faker) { + return [ + 'FLD_UID' => G::generateUniqueID(), + 'ADD_TAB_UID' => function() { + $table = factory(AdditionalTables::class)->create(['ADD_TAB_OFFLINE' => 1]); + return $table->ADD_TAB_UID; + }, + 'FLD_INDEX' => 0, + 'FLD_NAME' => 'VAR_' . $faker->sentence(1), + 'FLD_DESCRIPTION' => $faker->sentence(2), + 'FLD_TYPE' => 'VARCHAR', + 'FLD_SIZE' => 255, + 'FLD_NULL' => 1, + 'FLD_AUTO_INCREMENT' => 0, + 'FLD_KEY' => 1, + 'FLD_TABLE_INDEX' => 0, + 'FLD_FOREIGN_KEY' => 0, + 'FLD_FOREIGN_KEY_TABLE' => '', + 'FLD_DYN_NAME' => '', + 'FLD_DYN_UID' => '', + 'FLD_FILTER' => 0, + ]; +}); diff --git a/rbac/engine/data/mysql/insert.sql b/rbac/engine/data/mysql/insert.sql index 874e3eae8..8bc913275 100644 --- a/rbac/engine/data/mysql/insert.sql +++ b/rbac/engine/data/mysql/insert.sql @@ -225,7 +225,7 @@ INSERT INTO `RBAC_SYSTEMS` VALUES ('00000000000000000000000000000002','PROCESSMAKER','2007-07-31 19:10:22','2007-08-03 12:24:36',1); INSERT INTO `RBAC_USERS` VALUES -('00000000000000000000000000000001','admin','21232f297a57a5a743894a0e4a801fc3','Administrator','','admin@processmaker.com','2020-01-01','2007-08-03 12:24:36','2008-02-13 07:24:07',1,'MYSQL','00000000000000000000000000000000','',''), +('00000000000000000000000000000001','admin','21232f297a57a5a743894a0e4a801fc3','Administrator','','admin@processmaker.com',DATE_ADD(curdate(), INTERVAL 1 YEAR),'2007-08-03 12:24:36','2008-02-13 07:24:07',1,'MYSQL','00000000000000000000000000000000','',''), ('00000000000000000000000000000002','guest','$2y$10$rasFC.VNv9TLStNtFVJu6OjxhCi6FezdwkLrBzTFwmXsNnfW0/YZm','Guest','','guest@processmaker.com','2030-01-01','2009-02-01 12:24:36','2009-02-01 12:24:36',0,'MYSQL','00000000000000000000000000000000','',''); INSERT INTO `RBAC_USERS_ROLES` VALUES diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 44ebccbbd..8b22f86b5 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -32,6 +32,7 @@ define('PMTABLE_KEY', 'pmtable'); define('DB_ADAPTER', 'mysql'); // Path related some specific directories define('PATH_SEP', '/'); +define("PATH_PLUGINS", PATH_CORE . "plugins" . PATH_SEP); define('PATH_WORKSPACE', PATH_TRUNK . '/shared/sites/' . SYS_SYS . '/'); define('PATH_METHODS', dirname(__DIR__) . '/workflow/engine/methods/'); define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); diff --git a/tests/resources/dynaformDataForRenewUids.json b/tests/resources/dynaformDataForRenewUids.json new file mode 100644 index 000000000..6156ab080 --- /dev/null +++ b/tests/resources/dynaformDataForRenewUids.json @@ -0,0 +1,929 @@ +{ + "process": { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_TITLE": "test", + "PRO_DESCRIPTION": "", + "PRO_PARENT": "7084112395dfb826264eac2069406712", + "PRO_TIME": "1", + "PRO_TIMEUNIT": "DAYS", + "PRO_STATUS": "ACTIVE", + "PRO_STATUS_ID": "1", + "PRO_TYPE_DAY": "", + "PRO_TYPE": "NORMAL", + "PRO_ASSIGNMENT": "FALSE", + "PRO_SHOW_MAP": "0", + "PRO_SHOW_MESSAGE": "0", + "PRO_SUBPROCESS": "0", + "PRO_TRI_CREATE": "", + "PRO_TRI_OPEN": "", + "PRO_TRI_DELETED": "", + "PRO_TRI_CANCELED": "", + "PRO_TRI_PAUSED": "", + "PRO_TRI_REASSIGNED": "", + "PRO_TRI_UNPAUSED": "", + "PRO_TYPE_PROCESS": "PUBLIC", + "PRO_SHOW_DELEGATE": "0", + "PRO_SHOW_DYNAFORM": "0", + "PRO_CATEGORY": "", + "PRO_SUB_CATEGORY": "", + "PRO_INDUSTRY": "0", + "PRO_UPDATE_DATE": "2019-12-19 14:16:06", + "PRO_CREATE_USER": "00000000000000000000000000000001", + "PRO_HEIGHT": "5000", + "PRO_WIDTH": "10000", + "PRO_TITLE_X": "0", + "PRO_TITLE_Y": "0", + "PRO_DEBUG": "0", + "PRO_DYNAFORMS": "a:1:{s:7:\"PROCESS\";s:0:\"\";}", + "PRO_DERIVATION_SCREEN_TPL": "", + "PRO_COST": "0", + "PRO_UNIT_COST": "", + "PRO_ITEE": "1", + "PRO_ACTION_DONE": "a:1:{i:0;s:41:\"GATEWAYTOGATEWAY_DELETE_CORRUPTED_RECORDS\";}", + "CATEGORY_ID": "0", + "PRO_CATEGORY_LABEL": "No Category", + "PRO_BPMN": "1" + }, + "tasks": [ + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "5978729975dfb8d7a264fa0070639752", + "TAS_TITLE": "Task 1", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "NORMAL", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "TRUE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "143", + "TAS_POSY": "82", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "5730239675dfb8626a65a28038679991" + }, + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "3458788095dfb8d7a18fa33047794245", + "TAS_TITLE": "Task 2", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "NORMAL", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "TRUE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "143", + "TAS_POSY": "181", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "6279149375dfb8626a95495099553981" + }, + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "7916511005dfb8d7a234286082436886", + "TAS_TITLE": "Task 3", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "NORMAL", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "FALSE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "337", + "TAS_POSY": "181", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "3347609685dfb8626a35d06089327263" + }, + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "9865926225dfb8d7a1fc385009206952", + "TAS_TITLE": "Task 4", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "NORMAL", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "1", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "TRUE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "143", + "TAS_POSY": "274", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "8420128765dfb8626acccb8059629296" + }, + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "3454769755dfb8d7a1cadc9088436060", + "TAS_TITLE": "Task 5", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "NORMAL", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "1", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "FALSE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "337", + "TAS_POSY": "274", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "7400740655dfb86269feaa1089812754" + }, + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "PRO_ID": "0", + "TAS_UID": "wee-532835dfb8d7a2d0a29054950929", + "TAS_TITLE": "WEBENTRYEVENT", + "TAS_DESCRIPTION": "", + "TAS_DEF_TITLE": "", + "TAS_DEF_SUBJECT_MESSAGE": "", + "TAS_DEF_PROC_CODE": "", + "TAS_DEF_MESSAGE": "", + "TAS_DEF_DESCRIPTION": "", + "TAS_TYPE": "WEBENTRYEVENT", + "TAS_DURATION": "1", + "TAS_DELAY_TYPE": "", + "TAS_TEMPORIZER": "0", + "TAS_TYPE_DAY": "", + "TAS_TIMEUNIT": "DAYS", + "TAS_ALERT": "FALSE", + "TAS_PRIORITY_VARIABLE": "", + "TAS_ASSIGN_TYPE": "BALANCED", + "TAS_ASSIGN_VARIABLE": "@@SYS_NEXT_USER_TO_BE_ASSIGNED", + "TAS_GROUP_VARIABLE": "", + "TAS_MI_INSTANCE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCE", + "TAS_MI_COMPLETE_VARIABLE": "@@SYS_VAR_TOTAL_INSTANCES_COMPLETE", + "TAS_ASSIGN_LOCATION": "FALSE", + "TAS_ASSIGN_LOCATION_ADHOC": "FALSE", + "TAS_TRANSFER_FLY": "FALSE", + "TAS_LAST_ASSIGNED": "0", + "TAS_USER": "0", + "TAS_CAN_UPLOAD": "FALSE", + "TAS_VIEW_UPLOAD": "FALSE", + "TAS_VIEW_ADDITIONAL_DOCUMENTATION": "FALSE", + "TAS_CAN_CANCEL": "FALSE", + "TAS_OWNER_APP": "FALSE", + "STG_UID": "", + "TAS_CAN_PAUSE": "FALSE", + "TAS_CAN_SEND_MESSAGE": "TRUE", + "TAS_CAN_DELETE_DOCS": "FALSE", + "TAS_SELF_SERVICE": "FALSE", + "TAS_START": "TRUE", + "TAS_TO_LAST_USER": "FALSE", + "TAS_SEND_LAST_EMAIL": "FALSE", + "TAS_DERIVATION": "NORMAL", + "TAS_POSX": "62", + "TAS_POSY": "202", + "TAS_WIDTH": "110", + "TAS_HEIGHT": "60", + "TAS_COLOR": "", + "TAS_EVN_UID": "", + "TAS_BOUNDARY": "", + "TAS_DERIVATION_SCREEN_TPL": "", + "TAS_SELFSERVICE_TIMEOUT": "0", + "TAS_SELFSERVICE_TIME": "0", + "TAS_SELFSERVICE_TIME_UNIT": "", + "TAS_SELFSERVICE_TRIGGER_UID": "", + "TAS_SELFSERVICE_EXECUTION": "EVERY_TIME", + "TAS_NOT_EMAIL_FROM_FORMAT": "0", + "TAS_OFFLINE": "FALSE", + "TAS_EMAIL_SERVER_UID": "", + "TAS_AUTO_ROOT": "FALSE", + "TAS_RECEIVE_SERVER_UID": "", + "TAS_RECEIVE_LAST_EMAIL": "FALSE", + "TAS_RECEIVE_EMAIL_FROM_FORMAT": "0", + "TAS_RECEIVE_MESSAGE_TYPE": "text", + "TAS_RECEIVE_MESSAGE_TEMPLATE": "alert_message.html", + "TAS_RECEIVE_SUBJECT_MESSAGE": "", + "TAS_RECEIVE_MESSAGE": "", + "TAS_AVERAGE": "", + "TAS_SDV": "", + "TAS_UID_OLD": "wee-873125dfb8626b28bf4015522377" + } + ], + "routes": [ + { + "ROU_UID": "1212118285dfb8626c112f2028203620", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "3454769755dfb8d7a1cadc9088436060", + "ROU_NEXT_TASK": "-1", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + }, + { + "ROU_UID": "2179164525dfb8626c19333095716699", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "9865926225dfb8d7a1fc385009206952", + "ROU_NEXT_TASK": "3454769755dfb8d7a1cadc9088436060", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + }, + { + "ROU_UID": "2685133935dfb8626c23ee2060782509", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "7916511005dfb8d7a234286082436886", + "ROU_NEXT_TASK": "-1", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + }, + { + "ROU_UID": "3309845585dfb8626cf6d41085941718", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "wee-532835dfb8d7a2d0a29054950929", + "ROU_NEXT_TASK": "3458788095dfb8d7a18fa33047794245", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + }, + { + "ROU_UID": "7287866925dfb8626c065a7095532193", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "3458788095dfb8d7a18fa33047794245", + "ROU_NEXT_TASK": "7916511005dfb8d7a234286082436886", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + }, + { + "ROU_UID": "8808316485dfb8626c2ed28017700589", + "ROU_PARENT": "0", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "5978729975dfb8d7a264fa0070639752", + "ROU_NEXT_TASK": "-1", + "ROU_CASE": "1", + "ROU_TYPE": "SEQUENTIAL", + "ROU_DEFAULT": "0", + "ROU_CONDITION": "", + "ROU_TO_LAST_USER": "FALSE", + "ROU_OPTIONAL": "FALSE", + "ROU_SEND_EMAIL": "TRUE", + "ROU_SOURCEANCHOR": "1", + "ROU_TARGETANCHOR": "0", + "ROU_TO_PORT": "1", + "ROU_FROM_PORT": "2", + "ROU_EVN_UID": "", + "GAT_UID": "" + } + ], + "lanes": [], + "gateways": [], + "inputs": [], + "outputs": [], + "dynaforms": [ + { + "DYN_UID": "1981330525dfb8626c70026010918765", + "DYN_TITLE": "dynaform1", + "DYN_DESCRIPTION": "", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "DYN_TYPE": "xmlform", + "DYN_FILENAME": "3598973985dfb86269c23d6071638314\/1981330525dfb8626c70026010918765", + "DYN_CONTENT": "{\"name\":\"dynaform1\",\"description\":\"\",\"items\":[{\"type\":\"form\",\"variable\":\"\",\"var_uid\":\"\",\"dataType\":\"\",\"id\":\"1981330525dfb8626c70026010918765\",\"name\":\"dynaform1\",\"description\":\"\",\"mode\":\"edit\",\"script\":\"\",\"language\":\"en\",\"externalLibs\":\"\",\"printable\":false,\"items\":[[{\"type\":\"text\",\"variable\":\"textVar001\",\"var_uid\":\"2420200535dfb8626c83d16045380736\",\"dataType\":\"string\",\"protectedValue\":false,\"id\":\"textVar001\",\"name\":\"textVar001\",\"label\":\"text_1\",\"defaultValue\":\"\",\"placeholder\":\"\",\"hint\":\"\",\"required\":false,\"requiredFieldErrorMessage\":\"\",\"textTransform\":\"none\",\"validate\":\"\",\"validateMessage\":\"\",\"maxLength\":1000,\"formula\":\"\",\"mode\":\"parent\",\"operation\":\"\",\"dbConnection\":\"workflow\",\"dbConnectionLabel\":\"PM Database\",\"sql\":\"\",\"var_name\":\"textVar001\",\"colSpan\":12}]],\"variables\":[{\"var_uid\":\"2420200535dfb8626c83d16045380736\",\"prj_uid\":\"3598973985dfb86269c23d6071638314\",\"var_name\":\"textVar001\",\"var_field_type\":\"string\",\"var_field_size\":10,\"var_label\":\"string\",\"var_dbconnection\":\"workflow\",\"var_dbconnection_label\":\"PM Database\",\"var_sql\":\"\",\"var_null\":0,\"var_default\":\"\",\"var_accepted_values\":\"[]\",\"inp_doc_uid\":\"\"}]}]}", + "DYN_LABEL": "", + "DYN_VERSION": "2", + "DYN_UPDATE_DATE": "2019-12-19 14:02:48" + } + ], + "steps": [ + { + "STEP_UID": "1497588005dfb8626c75079092586998", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "9865926225dfb8d7a1fc385009206952", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "1500595075dfb8626c761f9080007968", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "7916511005dfb8d7a234286082436886", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "2804442295dfb8626c78449036895613", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "wee-532835dfb8d7a2d0a29054950929", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "3986576985dfb8626c721d3097828590", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "3454769755dfb8d7a1cadc9088436060", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "4754027025dfb8626c73c99090309776", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "3458788095dfb8d7a18fa33047794245", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "8110336185dfb8626ce6121078206082", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "wee-532835dfb8d7a2d0a29054950929", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + }, + { + "STEP_UID": "9520990735dfb8626c77338089242336", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "5978729975dfb8d7a264fa0070639752", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_CONDITION": "", + "STEP_POSITION": "1", + "STEP_MODE": "EDIT" + } + ], + "triggers": [], + "taskusers": [], + "groupwfs": [], + "steptriggers": [], + "dbconnections": [], + "reportTables": [], + "reportTablesVars": [], + "stepSupervisor": [ + { + "STEP_UID": "2322645545dfb8626c79580010259901", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "STEP_TYPE_OBJ": "DYNAFORM", + "STEP_UID_OBJ": "1981330525dfb8626c70026010918765", + "STEP_POSITION": "1" + } + ], + "dynaformFiles": { + "1981330525dfb8626c70026010918765": "test" + }, + "gridFiles": { + "1981330525dfb8626c70026010918765": "test" + }, + "objectPermissions": [{ + "PRO_UID": "3865635965dfb8d7a152330088145190", + "OP_OBJ_UID": "1981330525dfb8626c70026010918765", + "OP_OBJ_TYPE": "DYNAFORM" + } + ], + "subProcess": [], + "caseTracker": [ + { + "PRO_UID": "3865635965dfb8d7a152330088145190", + "CT_MAP_TYPE": "PROCESSMAP", + "CT_DERIVATION_HISTORY": "1", + "CT_MESSAGE_HISTORY": "1" + } + ], + "caseTrackerObject": [ + { + "CTO_UID": "9681402035dfb8626c7a720057282635", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "CTO_TYPE_OBJ": "DYNAFORM", + "CTO_UID_OBJ": "1981330525dfb8626c70026010918765", + "CTO_CONDITION": "", + "CTO_POSITION": "1" + } + ], + "stage": [], + "fieldCondition": [ + { + "FCD_DYN_UID": "1981330525dfb8626c70026010918765" + } + ], + "event": [], + "caseScheduler": [], + "processCategory": [], + "taskExtraProperties": [], + "processUser": [], + "processVariables": [ + { + "VAR_UID": "2420200535dfb8626c83d16045380736", + "PRJ_UID": "3865635965dfb8d7a152330088145190", + "VAR_NAME": "textVar001", + "VAR_FIELD_TYPE": "string", + "VAR_FIELD_SIZE": "10", + "VAR_LABEL": "string", + "VAR_DBCONNECTION": "workflow", + "VAR_SQL": "", + "VAR_NULL": "0", + "VAR_DEFAULT": "", + "VAR_ACCEPTED_VALUES": "[]", + "INP_DOC_UID": "" + } + ], + "webEntry": [ + { + "DYN_UID": "1981330525dfb8626c70026010918765" + } + ], + "webEntryEvent": [ + { + "WEE_UID": "7839596635dfb8626d46f82082790649", + "PRJ_UID": "3598973985dfb86269c23d6071638314", + "EVN_UID": "8868532835dfb8d7a2d0a29054950929", + "ACT_UID": "3458788095dfb8d7a18fa33047794245", + "DYN_UID": "1981330525dfb8626c70026010918765", + "USR_UID": "00000000000000000000000000000002", + "WEE_TITLE": "1833424275dfb847c912110048244199", + "WEE_DESCRIPTION": "", + "WEE_STATUS": "ENABLED", + "WEE_WE_UID": "9067551515dfb8626d0f040095365609", + "WEE_WE_TAS_UID": "wee-873125dfb8626b28bf4015522377", + "WEE_WE_URL": "1833424275dfb847c912110048244199.php", + "WE_CUSTOM_TITLE": "", + "WE_TYPE": "SINGLE", + "WE_AUTHENTICATION": "ANONYMOUS", + "WE_HIDE_INFORMATION_BAR": "1", + "WE_CALLBACK": "PROCESSMAKER", + "WE_CALLBACK_URL": "", + "WE_LINK_GENERATION": "DEFAULT", + "WE_LINK_SKIN": "classic", + "WE_LINK_LANGUAGE": "en", + "WE_LINK_DOMAIN": "", + "TAS_UID": "wee-873125dfb8626b28bf4015522377", + "WE_SHOW_IN_NEW_CASE": "0", + "EVN_UID_OLD": "8469873125dfb8626b28bf4015522377" + } + ], + "messageType": [], + "messageTypeVariable": [], + "messageEventDefinition": [], + "scriptTask": [], + "timerEvent": [], + "emailEvent": [], + "filesManager": [ + { + "PRF_UID": "2320529945dfb8626e07327095962435", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/public\/3598973985dfb86269c23d6071638314\/1833424275dfb847c912110048244199.php", + "PRF_TYPE": "file", + "PRF_EDITABLE": "0", + "PRF_CREATE_DATE": "2019-12-19 14:16:06", + "PRF_UPDATE_DATE": "" + }, + { + "PRF_UID": "3478830955dfb84d9e1d771040119182", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/mailTemplates\/3598973985dfb86269c23d6071638314\/actionsByEmailErrorReply.html", + "PRF_TYPE": "file", + "PRF_EDITABLE": "1", + "PRF_CREATE_DATE": "2019-12-19 14:10:33", + "PRF_UPDATE_DATE": "" + }, + { + "PRF_UID": "5200351355dfb84d9e18946005177341", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/mailTemplates\/3598973985dfb86269c23d6071638314\/actionsByEmail.html", + "PRF_TYPE": "file", + "PRF_EDITABLE": "1", + "PRF_CREATE_DATE": "2019-12-19 14:10:33", + "PRF_UPDATE_DATE": "" + }, + { + "PRF_UID": "6235128035dfb8626dffd94027574889", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/public\/3598973985dfb86269c23d6071638314\/1833424275dfb847c912110048244199Info.php", + "PRF_TYPE": "file", + "PRF_EDITABLE": "0", + "PRF_CREATE_DATE": "2019-12-19 14:16:06", + "PRF_UPDATE_DATE": "" + }, + { + "PRF_UID": "6966516255dfb8626dfbd42099136357", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/public\/3598973985dfb86269c23d6071638314\/1833424275dfb847c912110048244199Post.php", + "PRF_TYPE": "file", + "PRF_EDITABLE": "0", + "PRF_CREATE_DATE": "2019-12-19 14:16:06", + "PRF_UPDATE_DATE": "" + }, + { + "PRF_UID": "7327359135dfb8626e03770066162194", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "USR_UID": "00000000000000000000000000000001", + "PRF_UPDATE_USR_UID": "", + "PRF_PATH": "\/var\/www\/shared\/sites\/workflow\/public\/3598973985dfb86269c23d6071638314\/wsClient.php", + "PRF_TYPE": "file", + "PRF_EDITABLE": "0", + "PRF_CREATE_DATE": "2019-12-19 14:16:06", + "PRF_UPDATE_DATE": "" + } + ], + "abeConfiguration": [ + { + "ABE_UID": "4306137575dfb8626d54c87075844725", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "3454769755dfb8d7a1cadc9088436060", + "ABE_TYPE": "LINK", + "ABE_TEMPLATE": "actionsByEmailErrorReply.html", + "ABE_DYN_TYPE": "NORMAL", + "DYN_UID": "1981330525dfb8626c70026010918765", + "ABE_EMAIL_FIELD": "", + "ABE_ACTION_FIELD": "", + "ABE_ACTION_BODY_FIELD": "", + "ABE_CASE_NOTE_IN_RESPONSE": "0", + "ABE_FORCE_LOGIN": "0", + "ABE_CREATE_DATE": "2019-12-19 14:16:06", + "ABE_UPDATE_DATE": "2019-12-19 14:16:06", + "ABE_SUBJECT_FIELD": "", + "ABE_MAILSERVER_OR_MAILCURRENT": "0", + "ABE_CUSTOM_GRID": "b:0;", + "ABE_EMAIL_SERVER_UID": "", + "ABE_EMAIL_SERVER_RECEIVER_UID": "", + "TAS_UID_OLD": "7400740655dfb86269feaa1089812754" + }, + { + "ABE_UID": "5375484805dfb8626d58030072013572", + "PRO_UID": "3865635965dfb8d7a152330088145190", + "TAS_UID": "9865926225dfb8d7a1fc385009206952", + "ABE_TYPE": "LINK", + "ABE_TEMPLATE": "actionsByEmailErrorReply.html", + "ABE_DYN_TYPE": "NORMAL", + "DYN_UID": "1981330525dfb8626c70026010918765", + "ABE_EMAIL_FIELD": "test", + "ABE_ACTION_FIELD": "", + "ABE_ACTION_BODY_FIELD": "", + "ABE_CASE_NOTE_IN_RESPONSE": "0", + "ABE_FORCE_LOGIN": "0", + "ABE_CREATE_DATE": "2019-12-19 14:16:06", + "ABE_UPDATE_DATE": "2019-12-19 14:16:06", + "ABE_SUBJECT_FIELD": "test", + "ABE_MAILSERVER_OR_MAILCURRENT": "0", + "ABE_CUSTOM_GRID": "b:0;", + "ABE_EMAIL_SERVER_UID": "", + "ABE_EMAIL_SERVER_RECEIVER_UID": "", + "TAS_UID_OLD": "8420128765dfb8626acccb8059629296" + } + ], + "elementTask": [], + "uid": { + "PROCESS": { + "7084112395dfb826264eac2069406712": "3865635965dfb8d7a152330088145190" + }, + "TASK": { + "5730239675dfb8626a65a28038679991": "5978729975dfb8d7a264fa0070639752", + "6279149375dfb8626a95495099553981": "3458788095dfb8d7a18fa33047794245", + "3347609685dfb8626a35d06089327263": "7916511005dfb8d7a234286082436886", + "8420128765dfb8626acccb8059629296": "9865926225dfb8d7a1fc385009206952", + "7400740655dfb86269feaa1089812754": "3454769755dfb8d7a1cadc9088436060", + "wee-873125dfb8626b28bf4015522377": "wee-532835dfb8d7a2d0a29054950929" + } + } +} diff --git a/tests/unit/workflow/engine/classes/DerivationTest.php b/tests/unit/workflow/engine/classes/DerivationTest.php index da821037e..d06bc0697 100644 --- a/tests/unit/workflow/engine/classes/DerivationTest.php +++ b/tests/unit/workflow/engine/classes/DerivationTest.php @@ -28,7 +28,7 @@ class DerivationTest extends TestCase // Truncate the APP_SEQUENCE table DB::table('APP_SEQUENCE')->truncate(); - config(["system.workspace" => "test"]); + config(["system.workspace" => "new_site"]); $workspace = config("system.workspace"); if (!file_exists(PATH_DB . $workspace)) { diff --git a/tests/unit/workflow/engine/classes/ProcessesTest.php b/tests/unit/workflow/engine/classes/ProcessesTest.php index 5abf4eb07..efd542075 100644 --- a/tests/unit/workflow/engine/classes/ProcessesTest.php +++ b/tests/unit/workflow/engine/classes/ProcessesTest.php @@ -13,6 +13,7 @@ use Tests\TestCase; class ProcessesTest extends TestCase { + private $processes; /** * Constructor of the class. @@ -33,6 +34,7 @@ class ProcessesTest extends TestCase protected function setUp() { parent::setUp(); + $this->processes = new Processes(); } /** @@ -154,7 +156,7 @@ class ProcessesTest extends TestCase * This checks fi the returned output documents are correct with the differect * parameters. * @test - * @covers Processes::getOutputRows() + * @covers \Processes::getOutputRows() */ public function it_should_return_output_documents() { @@ -205,7 +207,7 @@ class ProcessesTest extends TestCase /** * This checks if the dynaforms structure is saved with the different parameters. * @test - * @covers Processes::createDynaformRows() + * @covers \Processes::createDynaformRows() */ public function it_sholud_create_dynaform() { @@ -269,7 +271,7 @@ class ProcessesTest extends TestCase * This checks if the input documents structure is saved with the different * parameters. * @test - * @covers Processes::createInputRows() + * @covers \Processes::createInputRows() */ public function it_should_create_input_document() { @@ -339,7 +341,7 @@ class ProcessesTest extends TestCase * This checks if the output documents structure is saved with the different * parameters. * @test - * @covers Processes::createOutputRows() + * @covers \Processes::createOutputRows() */ public function it_should_create_output_document() { @@ -432,7 +434,7 @@ class ProcessesTest extends TestCase /** * This gets the data structure of a project. * @test - * @covers Processes::getWorkflowData() + * @covers \Processes::getWorkflowData() */ public function it_should_get_workflow_data() { @@ -459,4 +461,40 @@ class ProcessesTest extends TestCase $result = $processes->getWorkflowData($process->PRO_UID); $this->assertNotNull($result); } + + /** + * This test guarantees the replacement of new identifiers. + * @test + * @covers \Processes::renewAllDynaformGuid() + */ + public function it_should_renew_all_dynaform_guid() + { + $pathData = PATH_TRUNK . "/tests/resources/dynaformDataForRenewUids.json"; + $data = file_get_contents($pathData); + $result = json_decode($data, JSON_OBJECT_AS_ARRAY); + $result = (object) $result; + $this->processes->renewAllDynaformGuid($result); + foreach ($result as $key => $value) { + $this->assertObjectHasAttribute($key, $result); + } + + //without PRO_DYNAFORMS + $result = json_decode($data, JSON_OBJECT_AS_ARRAY); + $result = (object) $result; + unset($result->process['PRO_DYNAFORMS']); + $this->processes->renewAllDynaformGuid($result); + foreach ($result as $key => $value) { + $this->assertObjectHasAttribute($key, $result); + } + + //for process inside PRO_DYNAFORMS + $result = json_decode($data, JSON_OBJECT_AS_ARRAY); + $result = (object) $result; + $result->process['PRO_DYNAFORMS'] = []; + $result->process['PRO_DYNAFORMS']['PROCESS'] = $result->dynaforms[0]['DYN_UID']; + $this->processes->renewAllDynaformGuid($result); + foreach ($result as $key => $value) { + $this->assertObjectHasAttribute($key, $result); + } + } } diff --git a/tests/unit/workflow/engine/classes/model/AdditionalTablesTest.php b/tests/unit/workflow/engine/classes/model/AdditionalTablesTest.php new file mode 100644 index 000000000..fbfa82cba --- /dev/null +++ b/tests/unit/workflow/engine/classes/model/AdditionalTablesTest.php @@ -0,0 +1,109 @@ + "", + "ADD_TAB_NAME" => "PMT_TEST11", + "ADD_TAB_CLASS_NAME" => "PmtTest11", + "ADD_TAB_DESCRIPTION" => "", + "ADD_TAB_PLG_UID" => "", + "DBS_UID" => "workflow", + "PRO_UID" => "", + "ADD_TAB_TYPE" => "", + "ADD_TAB_GRID" => "", + "ADD_TAB_OFFLINE" => false, + "ADD_TAB_UPDATE_DATE" => "2019-10-22 19:52:52" + ]; + + $additionalTables = new AdditionalTables(); + $result = $additionalTables->create($data); + + $additionalTablesModel = AdditionalTablesModel::where('ADD_TAB_UID', '=', $result) + ->get() + ->first(); + $actual = $additionalTablesModel->toArray(); + unset($data["ADD_TAB_UID"]); + + $this->assertArraySubset($data, $actual); + } + + /** + * This attempts to create a PMTable without correct data to cause an exception. + * @test + * @covers \AdditionalTables::create() + */ + public function it_should_create_without_data() + { + $data = [ + ]; + $additionalTables = new AdditionalTables(); + $this->expectException(Exception::class); + $additionalTables->create($data); + } + + /** + * This updates the data of a PMTable. + * @test + * @covers \AdditionalTables::update() + */ + public function it_should_update() + { + $additionalTables = factory(AdditionalTablesModel::class)->create(); + + $expected = [ + "ADD_TAB_UID" => $additionalTables->ADD_TAB_UID, + "ADD_TAB_NAME" => "PMT_TEST11", + "ADD_TAB_CLASS_NAME" => "PmtTest11", + "DBS_UID" => "workflow", + "ADD_TAB_OFFLINE" => false, + "ADD_TAB_UPDATE_DATE" => "2019-10-22 19:53:11" + ]; + $additionalTables = new AdditionalTables(); + $additionalTables->update($expected); + + $additionalTables = AdditionalTablesModel::where('ADD_TAB_UID', '=', $expected['ADD_TAB_UID']) + ->get() + ->first(); + + $this->assertEquals($expected["ADD_TAB_NAME"], $additionalTables->ADD_TAB_NAME); + $this->assertEquals($expected["ADD_TAB_CLASS_NAME"], $additionalTables->ADD_TAB_CLASS_NAME); + } + + /** + * It tries to update the data of a non-existent "PMTable". + * @test + * @covers \AdditionalTables::update() + */ + public function it_should_update_if_registry_not_exist() + { + $expected = [ + "ADD_TAB_UID" => G::generateUniqueID(), + "ADD_TAB_NAME" => "PMT_TEST11", + "ADD_TAB_CLASS_NAME" => "PmtTest11", + "DBS_UID" => "workflow", + "ADD_TAB_OFFLINE" => false, + "ADD_TAB_UPDATE_DATE" => "2019-10-22 19:53:11" + ]; + + $this->expectException(Exception::class); + $additionalTables = new AdditionalTables(); + $additionalTables->update($expected); + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LightTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LightTest.php new file mode 100644 index 000000000..b860a6390 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LightTest.php @@ -0,0 +1,101 @@ + true, + 'tz' => true, + ]; + $light = new Light(); + + /** + * In the getConfiguration() method, the next section: + * + * $postMaxSize = $this->return_bytes(ini_get('post_max_size')); + * $uploadMaxFileSize = $this->return_bytes(ini_get('upload_max_filesize')); + * if ($postMaxSize < $uploadMaxFileSize) { + * $uploadMaxFileSize = $postMaxSize; + * } + * + * It can only be tested if you change the values of "post_max_size" and "upload_max_filesize" + * in php.ini, you can't use the ini_set() function. + * The mode change of these directives is "PHP_INI_PERDIR", where is entry can be + * set in php.ini, .htaccess, httpd.conf or .user.ini, see here: + * https://www.php.net/manual/es/ini.list.php + * https://www.php.net/manual/en/configuration.changes.modes.php + */ + $result = $light->getConfiguration($param); + + $this->assertArrayHasKey('mobile_offline_tables_download_interval', $result); + } + + /** + * This returns the value of mobile_offline_tables_download_interval + * @test + * @covers \ProcessMaker\BusinessModel\Light::getConfiguration + */ + public function this_should_return_mobile_offline_tables_download_interval_inside_env() + { + $oldContent = ""; + $path = PATH_CONFIG . "env.ini"; + if (file_exists($path)) { + $oldContent = file_get_contents($path); + } + + $expected = 30; + + $content = "mobile_offline_tables_download_interval = {$expected};"; + file_put_contents($path, $content); + + $light = new Light(); + $result = $light->getConfiguration([]); + $actual = $result['mobile_offline_tables_download_interval']; + + file_put_contents($path, $oldContent); + + $this->assertEquals($expected, $actual); + } + + /** + * This returns the default value of mobile_offline_tables_download_interval. + * @test + * @covers \ProcessMaker\BusinessModel\Light::getConfiguration + */ + public function this_should_return_default_value_if_mobile_offline_tables_download_interval_inside_env_is_not_an_integer() + { + $oldContent = ""; + $path = PATH_CONFIG . "env.ini"; + if (file_exists($path)) { + $oldContent = file_get_contents($path); + } + + $faker = $faker = Factory::create(); + $alphanumeric = $faker->regexify('[A-Za-z0-9]{20}'); + $content = "mobile_offline_tables_download_interval = '{$alphanumeric}';"; + file_put_contents($path, $content); + + $light = new Light(); + $result = $light->getConfiguration([]); + $expected = (string) $result['mobile_offline_tables_download_interval']; + + file_put_contents($path, $oldContent); + + $this->assertTrue(ctype_digit($expected)); + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php index 19634a5a4..c03e3da6a 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php @@ -2,22 +2,20 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\Core; +use G; +use Faker\Factory; use ProcessMaker\Core\System; use Tests\TestCase; class SystemTest extends TestCase { + /** * Define the required variables */ - protected function setUp() + public function setUp() { - $this->markTestIncomplete();//@todo: Please correct this unit test - $config = config('database.connections.testexternal'); - define('DB_HOST', $config['host']); - define('DB_NAME', $config['database']); - define('DB_USER', $config['username']); - define('DB_PASS', $config['password']); + parent::setUp(); } /** @@ -27,6 +25,8 @@ class SystemTest extends TestCase */ public function it_should_init_laravel_configurations() { + $this->markTestIncomplete("@todo: Please correct this unit test"); + $object = new System(); $object->initLaravel(); @@ -36,4 +36,112 @@ class SystemTest extends TestCase $this->assertEquals(DB_USER, config('database.connections.workflow.username')); $this->assertEquals(DB_PASS, config('database.connections.workflow.password')); } -} \ No newline at end of file + + /** + * It should return default system configuration parameters. + * @test + * @covers \ProcessMaker\Core\System::getSystemConfiguration() + */ + public function it_should_return_default_system_configuration_parameters() + { + $result = System::getSystemConfiguration(); + + $this->assertArrayHasKey('server_hostname_requests_frontend', $result); + $this->assertArrayHasKey('disable_php_upload_execution', $result); + $this->assertArrayHasKey('mobile_offline_tables_download_interval', $result); + } + + /** + * It should return default system configuration parameters without workspace. + * @test + * @covers \ProcessMaker\Core\System::getSystemConfiguration() + */ + public function it_should_return_default_system_configuration_parameters_without_workspace() + { + config(["system.workspace" => '']); + putenv("REQUEST_URI=/sysworkflow"); + + $result = System::getSystemConfiguration(); + + $this->assertArrayHasKey('server_hostname_requests_frontend', $result); + $this->assertArrayHasKey('disable_php_upload_execution', $result); + $this->assertArrayHasKey('mobile_offline_tables_download_interval', $result); + } + + /** + * It should return system configuration parameters defined inside env file. + * @test + * @covers \ProcessMaker\Core\System::getSystemConfiguration() + */ + public function it_should_return_system_configuration_parameters_defined_inside_env_file() + { + $oldContent = ""; + $path = PATH_CONFIG . "env.ini"; + if (file_exists($path)) { + $oldContent = file_get_contents($path); + } + + $expected = 30; + + $content = "mobile_offline_tables_download_interval = {$expected};"; + file_put_contents($path, $content); + + $result = System::getSystemConfiguration(); + $actual = $result['mobile_offline_tables_download_interval']; + + file_put_contents($path, $oldContent); + + $this->assertEquals($expected, $actual); + } + + /** + * It should return default system configuration parameters defined inside env file when is not integer. + * @test + * @covers \ProcessMaker\Core\System::getSystemConfiguration() + */ + public function it_should_return_default_system_configuration_parameters_defined_inside_env_file_when_is_not_an_integer() + { + $oldContent = ""; + $path = PATH_CONFIG . "env.ini"; + if (file_exists($path)) { + $oldContent = file_get_contents($path); + } + + $faker = $faker = Factory::create(); + $alphanumeric = $faker->regexify('[A-Za-z0-9]{20}'); + $content = "mobile_offline_tables_download_interval = '{$alphanumeric}';"; + file_put_contents($path, $content); + + $result = System::getSystemConfiguration(); + + $expected = (string) $result['mobile_offline_tables_download_interval']; + + file_put_contents($path, $oldContent); + + $this->assertTrue(is_numeric($expected)); + } + + /** + * It should return proxy_pass defined inside env file. + * @test + * @covers \ProcessMaker\Core\System::getSystemConfiguration() + */ + public function it_should_return_proxy_pass_defined_inside_env_file() + { + $oldContent = ""; + $path = PATH_CONFIG . "env.ini"; + if (file_exists($path)) { + $oldContent = file_get_contents($path); + } + + $faker = $faker = Factory::create(); + $content = "proxy_pass = '{$faker->password}';"; + file_put_contents($path, $content); + + $result = System::getSystemConfiguration(); + + file_put_contents($path, $oldContent); + + $this->assertArrayHasKey("proxy_pass", $result); + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/AdditionalTablesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/AdditionalTablesTest.php new file mode 100644 index 000000000..1083cb19d --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/AdditionalTablesTest.php @@ -0,0 +1,81 @@ +create([ + 'ADD_TAB_UID' => function () { + return factory(Fields::class)->create()->ADD_TAB_UID; + } + ]); + $this->assertInstanceOf(Fields::class, $table->columns); + } + + /** + * Test scope query to get the offline tables + * + * @covers \ProcessMaker\Model\AdditionalTables::scopeOffline() + * @test + */ + public function it_filter_offline_table() + { + factory(AdditionalTables::class)->create(['ADD_TAB_OFFLINE' => 0]); + $table = factory(AdditionalTables::class)->create([ + 'ADD_TAB_OFFLINE' => 1 + ]); + $this->assertCount(1, $table->offline([$table->ADD_TAB_OFFLINE])->get()); + } + + /** + * Test get the structure of offline tables + * + * @covers \ProcessMaker\Model\AdditionalTables::getTablesOfflineStructure() + * @test + */ + public function it_get_structure_from_offline_tables() + { + factory(Fields::class)->states('foreign_keys')->create(); + $results = AdditionalTables::getTablesOfflineStructure(); + $this->assertNotEmpty($results); + foreach ($results as $row) { + $this->assertArrayHasKey('add_tab_uid', $row); + $this->assertArrayHasKey('add_tab_name', $row); + $this->assertArrayHasKey('add_tab_description', $row); + $this->assertArrayHasKey('add_tab_class_name', $row); + $this->assertArrayHasKey('fields', $row); + } + } + + /** + * Test get the data of offline tables + * + * @covers \ProcessMaker\Model\AdditionalTables::getTablesOfflineData() + * @test + */ + public function it_get_data_from_offline_tables() + { + factory(Fields::class)->states('foreign_keys')->create(); + $results = AdditionalTables::getTablesOfflineData(); + $this->assertNotEmpty($results); + foreach ($results as $row) { + $this->assertArrayHasKey('add_tab_uid', $row); + $this->assertArrayHasKey('add_tab_name', $row); + $this->assertArrayHasKey('add_tab_description', $row); + $this->assertArrayHasKey('add_tab_class_name', $row); + $this->assertArrayHasKey('rows', $row); + } + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/FieldsTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/FieldsTest.php new file mode 100644 index 000000000..ecabbe6cf --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/FieldsTest.php @@ -0,0 +1,40 @@ +create([ + 'ADD_TAB_UID' => function () { + return factory(AdditionalTables::class)->create()->ADD_TAB_UID; + } + ]); + $this->assertInstanceOf(AdditionalTables::class, $tableColumns->table); + } + + /** + * Test scope and the query with a specific ADD_TAB_UID + * + * @covers \ProcessMaker\Model\Fields::scopeTable() + * @covers \ProcessMaker\Model\Fields::getFields() + * @test + */ + public function it_get_fields_from_specific_table() + { + $fields = factory(Fields::class)->create(); + $result = Fields::getFields($fields->ADD_TAB_UID); + $this->assertNotEmpty($result); + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Project/WorkflowTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Project/WorkflowTest.php new file mode 100644 index 000000000..ff0e0fd68 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Project/WorkflowTest.php @@ -0,0 +1,118 @@ +workflow = new Workflow(); + $this->directories = []; + $this->files = []; + $this->faker = Factory::create(); + } + + /** + * This method is executed after each test. + */ + public function tearDown() + { + parent::tearDown(); + foreach ($this->files as $value) { + unlink($value); + } + foreach ($this->directories as $value) { + rmdir($value); + } + } + + /** + * This test ensures that the getData method returns the correct data. + * @test + * @covers \ProcessMaker\Project\Workflow::getData() + */ + public function it_should_return_the_data_when_the_project_id_is_valid() + { + $process = factory(Process::class)->create(); + $dynaforms = factory(Dynaform::class, 5)->create([ + 'PRO_UID' => $process->PRO_UID + ]); + factory(WebEntry::class, 5)->create([ + 'PRO_UID' => $process->PRO_UID + ]); + + $directory = PATH_DYNAFORM . $process->PRO_UID . "/"; + $this->directories[] = $directory; + mkdir($directory); + foreach ($dynaforms as $dynaform) { + Dynaform::where('PRO_UID', $process->PRO_UID) + ->where('DYN_UID', $dynaform->DYN_UID) + ->update(['DYN_FILENAME' => $process->PRO_UID . '/' . $dynaform->DYN_UID]); + + $dynUid = $dynaform->DYN_UID; + $data = ''; + $filename = $directory . $dynUid . ".xml"; + $this->files[] = $filename; + file_put_contents($filename, $data); + + $filename = $directory . $dynUid . ".html"; + $this->files[] = $filename; + file_put_contents($filename, $data); + } + + //template + $directory = PATH_DATA_MAILTEMPLATES . $process->PRO_UID; + $this->directories[] = $directory; + mkdir($directory); + + $filename = $directory . "/test.html"; + $this->files[] = $filename; + file_put_contents($filename, ''); + + //public files + $directory = PATH_DATA_PUBLIC . $process->PRO_UID; + $this->directories[] = $directory; + mkdir($directory); + + $filename = $directory . "/wsClient.php"; + $this->files[] = $filename; + file_put_contents($filename, ''); + + $actual = $this->workflow->getData($process->PRO_UID); + + $this->assertCount(2, $actual); + $this->assertArrayHasKey('process', $actual[0]); + $this->assertArrayHasKey('DYNAFORMS', $actual[1]); + } + + /** + * This test should throw an exception when the parameter is not correct. + * @test + * @covers \ProcessMaker\Project\Workflow::getData() + */ + public function it_should_throw_exception_when_get_data_is_failed() + { + $proUid = $this->faker->regexify("/[a-zA-Z]{32}/"); + + $this->expectException(Exception::class); + $actual = $this->workflow->getData($proUid); + } +} diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index 488701120..6f7da3e5a 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -357,6 +357,7 @@ class PmDynaform $option->value = isset($row[0]) ? $row[0] : ""; $option->label = isset($row[1]) ? $row[1] : ""; $json->optionsSql[] = $option; + $json->queryOutputData[] = $option; } } if ($value === "suggest" && isset($json->queryField) && $json->queryField == true) { diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index 8c7eb52f8..1c928ed61 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -1017,6 +1017,9 @@ class Processes $map[$val['DYN_UID']] = $newGuid; $oData->dynaforms[$key]['DYN_UID'] = $newGuid; unset($oData->dynaforms[$key]['DYN_ID']); + + //this is important when UID's is updated + $oData->dynaforms[$key]['DYN_FILENAME'] = $oData->dynaforms[$key]['PRO_UID'] . "/" . $oData->dynaforms[$key]['DYN_UID']; } $oData->uid["DYNAFORM"] = $map; diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php index 1eefa6356..d896ee0b7 100644 --- a/workflow/engine/classes/model/AdditionalTables.php +++ b/workflow/engine/classes/model/AdditionalTables.php @@ -1086,6 +1086,7 @@ class AdditionalTables extends BaseAdditionalTables $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION); $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TYPE); $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_OFFLINE); $criteria->addSelectColumn(AdditionalTablesPeer::PRO_UID); $criteria->addSelectColumn(AdditionalTablesPeer::DBS_UID); diff --git a/workflow/engine/classes/model/Translation.php b/workflow/engine/classes/model/Translation.php index b4cc04ba0..3463fa736 100644 --- a/workflow/engine/classes/model/Translation.php +++ b/workflow/engine/classes/model/Translation.php @@ -237,7 +237,7 @@ class Translation extends BaseTranslation } $res['cacheFileMafe'] = $cacheFileMafe; - $res['languague'] = count($cacheFileMafe); + $res['languague'] = (is_array($cacheFileMafe) || $cacheFileMafe instanceof Countable) ? count($cacheFileMafe) : 0; $res['rowsMafeJS'] = count( $translation ); return $res; } catch (Exception $e) { diff --git a/workflow/engine/classes/model/map/AdditionalTablesMapBuilder.php b/workflow/engine/classes/model/map/AdditionalTablesMapBuilder.php index 10e79dff7..a9e72fb72 100644 --- a/workflow/engine/classes/model/map/AdditionalTablesMapBuilder.php +++ b/workflow/engine/classes/model/map/AdditionalTablesMapBuilder.php @@ -97,6 +97,10 @@ class AdditionalTablesMapBuilder $tMap->addColumn('ADD_TAB_TAG', 'AddTabTag', 'string', CreoleTypes::VARCHAR, false, 256); + $tMap->addColumn('ADD_TAB_OFFLINE', 'AddTabOffline', 'int', CreoleTypes::TINYINT, true, null); + + $tMap->addColumn('ADD_TAB_UPDATE_DATE', 'AddTabUpdateDate', 'int', CreoleTypes::TIMESTAMP, true, null); + } // doBuild() } // AdditionalTablesMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAdditionalTables.php b/workflow/engine/classes/model/om/BaseAdditionalTables.php index 256e33890..187add267 100644 --- a/workflow/engine/classes/model/om/BaseAdditionalTables.php +++ b/workflow/engine/classes/model/om/BaseAdditionalTables.php @@ -123,6 +123,18 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent */ protected $add_tab_tag = ''; + /** + * The value for the add_tab_offline field. + * @var int + */ + protected $add_tab_offline = 0; + + /** + * The value for the add_tab_update_date field. + * @var int + */ + protected $add_tab_update_date; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -313,6 +325,49 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent return $this->add_tab_tag; } + /** + * Get the [add_tab_offline] column value. + * + * @return int + */ + public function getAddTabOffline() + { + + return $this->add_tab_offline; + } + + /** + * Get the [optionally formatted] [add_tab_update_date] column value. + * + * @param string $format The date/time format string (either date()-style or strftime()-style). + * If format is NULL, then the integer unix timestamp will be returned. + * @return mixed Formatted date/time value as string or integer unix timestamp (if format is NULL). + * @throws PropelException - if unable to convert the date/time to timestamp. + */ + public function getAddTabUpdateDate($format = 'Y-m-d H:i:s') + { + + if ($this->add_tab_update_date === null || $this->add_tab_update_date === '') { + return null; + } elseif (!is_int($this->add_tab_update_date)) { + // a non-timestamp value was set externally, so we convert it + $ts = strtotime($this->add_tab_update_date); + if ($ts === -1 || $ts === false) { + throw new PropelException("Unable to parse value of [add_tab_update_date] as date/time value: " . + var_export($this->add_tab_update_date, true)); + } + } else { + $ts = $this->add_tab_update_date; + } + if ($format === null) { + return $ts; + } elseif (strpos($format, '%') !== false) { + return strftime($format, $ts); + } else { + return date($format, $ts); + } + } + /** * Set the value of [add_tab_uid] column. * @@ -665,6 +720,57 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent } // setAddTabTag() + /** + * Set the value of [add_tab_offline] column. + * + * @param int $v new value + * @return void + */ + public function setAddTabOffline($v) + { + + // Since the native PHP type for this column is integer, + // we will cast the input value to an int (if it is not). + if ($v !== null && !is_int($v) && is_numeric($v)) { + $v = (int) $v; + } + + if ($this->add_tab_offline !== $v || $v === 0) { + $this->add_tab_offline = $v; + $this->modifiedColumns[] = AdditionalTablesPeer::ADD_TAB_OFFLINE; + } + + } // setAddTabOffline() + + /** + * Set the value of [add_tab_update_date] column. + * + * @param int $v new value + * @return void + */ + public function setAddTabUpdateDate($v) + { + + if ($v !== null && !is_int($v)) { + $ts = strtotime($v); + //Date/time accepts null values + if ($v == '') { + $ts = null; + } + if ($ts === -1 || $ts === false) { + throw new PropelException("Unable to parse date/time value for [add_tab_update_date] from input: " . + var_export($v, true)); + } + } else { + $ts = $v; + } + if ($this->add_tab_update_date !== $ts) { + $this->add_tab_update_date = $ts; + $this->modifiedColumns[] = AdditionalTablesPeer::ADD_TAB_UPDATE_DATE; + } + + } // setAddTabUpdateDate() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -714,12 +820,16 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent $this->add_tab_tag = $rs->getString($startcol + 15); + $this->add_tab_offline = $rs->getInt($startcol + 16); + + $this->add_tab_update_date = $rs->getTimestamp($startcol + 17, null); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 16; // 16 = AdditionalTablesPeer::NUM_COLUMNS - AdditionalTablesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 18; // 18 = AdditionalTablesPeer::NUM_COLUMNS - AdditionalTablesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AdditionalTables object", $e); @@ -971,6 +1081,12 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent case 15: return $this->getAddTabTag(); break; + case 16: + return $this->getAddTabOffline(); + break; + case 17: + return $this->getAddTabUpdateDate(); + break; default: return null; break; @@ -1007,6 +1123,8 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent $keys[13] => $this->getAddTabType(), $keys[14] => $this->getAddTabGrid(), $keys[15] => $this->getAddTabTag(), + $keys[16] => $this->getAddTabOffline(), + $keys[17] => $this->getAddTabUpdateDate(), ); return $result; } @@ -1086,6 +1204,12 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent case 15: $this->setAddTabTag($value); break; + case 16: + $this->setAddTabOffline($value); + break; + case 17: + $this->setAddTabUpdateDate($value); + break; } // switch() } @@ -1173,6 +1297,14 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent $this->setAddTabTag($arr[$keys[15]]); } + if (array_key_exists($keys[16], $arr)) { + $this->setAddTabOffline($arr[$keys[16]]); + } + + if (array_key_exists($keys[17], $arr)) { + $this->setAddTabUpdateDate($arr[$keys[17]]); + } + } /** @@ -1248,6 +1380,14 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent $criteria->add(AdditionalTablesPeer::ADD_TAB_TAG, $this->add_tab_tag); } + if ($this->isColumnModified(AdditionalTablesPeer::ADD_TAB_OFFLINE)) { + $criteria->add(AdditionalTablesPeer::ADD_TAB_OFFLINE, $this->add_tab_offline); + } + + if ($this->isColumnModified(AdditionalTablesPeer::ADD_TAB_UPDATE_DATE)) { + $criteria->add(AdditionalTablesPeer::ADD_TAB_UPDATE_DATE, $this->add_tab_update_date); + } + return $criteria; } @@ -1332,6 +1472,10 @@ abstract class BaseAdditionalTables extends BaseObject implements Persistent $copyObj->setAddTabTag($this->add_tab_tag); + $copyObj->setAddTabOffline($this->add_tab_offline); + + $copyObj->setAddTabUpdateDate($this->add_tab_update_date); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseAdditionalTablesPeer.php b/workflow/engine/classes/model/om/BaseAdditionalTablesPeer.php index 688e4d01a..bdf8b61a6 100644 --- a/workflow/engine/classes/model/om/BaseAdditionalTablesPeer.php +++ b/workflow/engine/classes/model/om/BaseAdditionalTablesPeer.php @@ -25,7 +25,7 @@ abstract class BaseAdditionalTablesPeer const CLASS_DEFAULT = 'classes.model.AdditionalTables'; /** The total number of columns. */ - const NUM_COLUMNS = 16; + const NUM_COLUMNS = 18; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -79,6 +79,12 @@ abstract class BaseAdditionalTablesPeer /** the column name for the ADD_TAB_TAG field */ const ADD_TAB_TAG = 'ADDITIONAL_TABLES.ADD_TAB_TAG'; + /** the column name for the ADD_TAB_OFFLINE field */ + const ADD_TAB_OFFLINE = 'ADDITIONAL_TABLES.ADD_TAB_OFFLINE'; + + /** the column name for the ADD_TAB_UPDATE_DATE field */ + const ADD_TAB_UPDATE_DATE = 'ADDITIONAL_TABLES.ADD_TAB_UPDATE_DATE'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -90,10 +96,10 @@ abstract class BaseAdditionalTablesPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AddTabUid', 'AddTabName', 'AddTabClassName', 'AddTabDescription', 'AddTabSdwLogInsert', 'AddTabSdwLogUpdate', 'AddTabSdwLogDelete', 'AddTabSdwLogSelect', 'AddTabSdwMaxLength', 'AddTabSdwAutoDelete', 'AddTabPlgUid', 'DbsUid', 'ProUid', 'AddTabType', 'AddTabGrid', 'AddTabTag', ), - BasePeer::TYPE_COLNAME => array (AdditionalTablesPeer::ADD_TAB_UID, AdditionalTablesPeer::ADD_TAB_NAME, AdditionalTablesPeer::ADD_TAB_CLASS_NAME, AdditionalTablesPeer::ADD_TAB_DESCRIPTION, AdditionalTablesPeer::ADD_TAB_SDW_LOG_INSERT, AdditionalTablesPeer::ADD_TAB_SDW_LOG_UPDATE, AdditionalTablesPeer::ADD_TAB_SDW_LOG_DELETE, AdditionalTablesPeer::ADD_TAB_SDW_LOG_SELECT, AdditionalTablesPeer::ADD_TAB_SDW_MAX_LENGTH, AdditionalTablesPeer::ADD_TAB_SDW_AUTO_DELETE, AdditionalTablesPeer::ADD_TAB_PLG_UID, AdditionalTablesPeer::DBS_UID, AdditionalTablesPeer::PRO_UID, AdditionalTablesPeer::ADD_TAB_TYPE, AdditionalTablesPeer::ADD_TAB_GRID, AdditionalTablesPeer::ADD_TAB_TAG, ), - BasePeer::TYPE_FIELDNAME => array ('ADD_TAB_UID', 'ADD_TAB_NAME', 'ADD_TAB_CLASS_NAME', 'ADD_TAB_DESCRIPTION', 'ADD_TAB_SDW_LOG_INSERT', 'ADD_TAB_SDW_LOG_UPDATE', 'ADD_TAB_SDW_LOG_DELETE', 'ADD_TAB_SDW_LOG_SELECT', 'ADD_TAB_SDW_MAX_LENGTH', 'ADD_TAB_SDW_AUTO_DELETE', 'ADD_TAB_PLG_UID', 'DBS_UID', 'PRO_UID', 'ADD_TAB_TYPE', 'ADD_TAB_GRID', 'ADD_TAB_TAG', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ) + BasePeer::TYPE_PHPNAME => array ('AddTabUid', 'AddTabName', 'AddTabClassName', 'AddTabDescription', 'AddTabSdwLogInsert', 'AddTabSdwLogUpdate', 'AddTabSdwLogDelete', 'AddTabSdwLogSelect', 'AddTabSdwMaxLength', 'AddTabSdwAutoDelete', 'AddTabPlgUid', 'DbsUid', 'ProUid', 'AddTabType', 'AddTabGrid', 'AddTabTag', 'AddTabOffline', 'AddTabUpdateDate', ), + BasePeer::TYPE_COLNAME => array (AdditionalTablesPeer::ADD_TAB_UID, AdditionalTablesPeer::ADD_TAB_NAME, AdditionalTablesPeer::ADD_TAB_CLASS_NAME, AdditionalTablesPeer::ADD_TAB_DESCRIPTION, AdditionalTablesPeer::ADD_TAB_SDW_LOG_INSERT, AdditionalTablesPeer::ADD_TAB_SDW_LOG_UPDATE, AdditionalTablesPeer::ADD_TAB_SDW_LOG_DELETE, AdditionalTablesPeer::ADD_TAB_SDW_LOG_SELECT, AdditionalTablesPeer::ADD_TAB_SDW_MAX_LENGTH, AdditionalTablesPeer::ADD_TAB_SDW_AUTO_DELETE, AdditionalTablesPeer::ADD_TAB_PLG_UID, AdditionalTablesPeer::DBS_UID, AdditionalTablesPeer::PRO_UID, AdditionalTablesPeer::ADD_TAB_TYPE, AdditionalTablesPeer::ADD_TAB_GRID, AdditionalTablesPeer::ADD_TAB_TAG, AdditionalTablesPeer::ADD_TAB_OFFLINE, AdditionalTablesPeer::ADD_TAB_UPDATE_DATE, ), + BasePeer::TYPE_FIELDNAME => array ('ADD_TAB_UID', 'ADD_TAB_NAME', 'ADD_TAB_CLASS_NAME', 'ADD_TAB_DESCRIPTION', 'ADD_TAB_SDW_LOG_INSERT', 'ADD_TAB_SDW_LOG_UPDATE', 'ADD_TAB_SDW_LOG_DELETE', 'ADD_TAB_SDW_LOG_SELECT', 'ADD_TAB_SDW_MAX_LENGTH', 'ADD_TAB_SDW_AUTO_DELETE', 'ADD_TAB_PLG_UID', 'DBS_UID', 'PRO_UID', 'ADD_TAB_TYPE', 'ADD_TAB_GRID', 'ADD_TAB_TAG', 'ADD_TAB_OFFLINE', 'ADD_TAB_UPDATE_DATE', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ) ); /** @@ -103,10 +109,10 @@ abstract class BaseAdditionalTablesPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AddTabUid' => 0, 'AddTabName' => 1, 'AddTabClassName' => 2, 'AddTabDescription' => 3, 'AddTabSdwLogInsert' => 4, 'AddTabSdwLogUpdate' => 5, 'AddTabSdwLogDelete' => 6, 'AddTabSdwLogSelect' => 7, 'AddTabSdwMaxLength' => 8, 'AddTabSdwAutoDelete' => 9, 'AddTabPlgUid' => 10, 'DbsUid' => 11, 'ProUid' => 12, 'AddTabType' => 13, 'AddTabGrid' => 14, 'AddTabTag' => 15, ), - BasePeer::TYPE_COLNAME => array (AdditionalTablesPeer::ADD_TAB_UID => 0, AdditionalTablesPeer::ADD_TAB_NAME => 1, AdditionalTablesPeer::ADD_TAB_CLASS_NAME => 2, AdditionalTablesPeer::ADD_TAB_DESCRIPTION => 3, AdditionalTablesPeer::ADD_TAB_SDW_LOG_INSERT => 4, AdditionalTablesPeer::ADD_TAB_SDW_LOG_UPDATE => 5, AdditionalTablesPeer::ADD_TAB_SDW_LOG_DELETE => 6, AdditionalTablesPeer::ADD_TAB_SDW_LOG_SELECT => 7, AdditionalTablesPeer::ADD_TAB_SDW_MAX_LENGTH => 8, AdditionalTablesPeer::ADD_TAB_SDW_AUTO_DELETE => 9, AdditionalTablesPeer::ADD_TAB_PLG_UID => 10, AdditionalTablesPeer::DBS_UID => 11, AdditionalTablesPeer::PRO_UID => 12, AdditionalTablesPeer::ADD_TAB_TYPE => 13, AdditionalTablesPeer::ADD_TAB_GRID => 14, AdditionalTablesPeer::ADD_TAB_TAG => 15, ), - BasePeer::TYPE_FIELDNAME => array ('ADD_TAB_UID' => 0, 'ADD_TAB_NAME' => 1, 'ADD_TAB_CLASS_NAME' => 2, 'ADD_TAB_DESCRIPTION' => 3, 'ADD_TAB_SDW_LOG_INSERT' => 4, 'ADD_TAB_SDW_LOG_UPDATE' => 5, 'ADD_TAB_SDW_LOG_DELETE' => 6, 'ADD_TAB_SDW_LOG_SELECT' => 7, 'ADD_TAB_SDW_MAX_LENGTH' => 8, 'ADD_TAB_SDW_AUTO_DELETE' => 9, 'ADD_TAB_PLG_UID' => 10, 'DBS_UID' => 11, 'PRO_UID' => 12, 'ADD_TAB_TYPE' => 13, 'ADD_TAB_GRID' => 14, 'ADD_TAB_TAG' => 15, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ) + BasePeer::TYPE_PHPNAME => array ('AddTabUid' => 0, 'AddTabName' => 1, 'AddTabClassName' => 2, 'AddTabDescription' => 3, 'AddTabSdwLogInsert' => 4, 'AddTabSdwLogUpdate' => 5, 'AddTabSdwLogDelete' => 6, 'AddTabSdwLogSelect' => 7, 'AddTabSdwMaxLength' => 8, 'AddTabSdwAutoDelete' => 9, 'AddTabPlgUid' => 10, 'DbsUid' => 11, 'ProUid' => 12, 'AddTabType' => 13, 'AddTabGrid' => 14, 'AddTabTag' => 15, 'AddTabOffline' => 16, 'AddTabUpdateDate' => 17, ), + BasePeer::TYPE_COLNAME => array (AdditionalTablesPeer::ADD_TAB_UID => 0, AdditionalTablesPeer::ADD_TAB_NAME => 1, AdditionalTablesPeer::ADD_TAB_CLASS_NAME => 2, AdditionalTablesPeer::ADD_TAB_DESCRIPTION => 3, AdditionalTablesPeer::ADD_TAB_SDW_LOG_INSERT => 4, AdditionalTablesPeer::ADD_TAB_SDW_LOG_UPDATE => 5, AdditionalTablesPeer::ADD_TAB_SDW_LOG_DELETE => 6, AdditionalTablesPeer::ADD_TAB_SDW_LOG_SELECT => 7, AdditionalTablesPeer::ADD_TAB_SDW_MAX_LENGTH => 8, AdditionalTablesPeer::ADD_TAB_SDW_AUTO_DELETE => 9, AdditionalTablesPeer::ADD_TAB_PLG_UID => 10, AdditionalTablesPeer::DBS_UID => 11, AdditionalTablesPeer::PRO_UID => 12, AdditionalTablesPeer::ADD_TAB_TYPE => 13, AdditionalTablesPeer::ADD_TAB_GRID => 14, AdditionalTablesPeer::ADD_TAB_TAG => 15, AdditionalTablesPeer::ADD_TAB_OFFLINE => 16, AdditionalTablesPeer::ADD_TAB_UPDATE_DATE => 17, ), + BasePeer::TYPE_FIELDNAME => array ('ADD_TAB_UID' => 0, 'ADD_TAB_NAME' => 1, 'ADD_TAB_CLASS_NAME' => 2, 'ADD_TAB_DESCRIPTION' => 3, 'ADD_TAB_SDW_LOG_INSERT' => 4, 'ADD_TAB_SDW_LOG_UPDATE' => 5, 'ADD_TAB_SDW_LOG_DELETE' => 6, 'ADD_TAB_SDW_LOG_SELECT' => 7, 'ADD_TAB_SDW_MAX_LENGTH' => 8, 'ADD_TAB_SDW_AUTO_DELETE' => 9, 'ADD_TAB_PLG_UID' => 10, 'DBS_UID' => 11, 'PRO_UID' => 12, 'ADD_TAB_TYPE' => 13, 'ADD_TAB_GRID' => 14, 'ADD_TAB_TAG' => 15, 'ADD_TAB_OFFLINE' => 16, 'ADD_TAB_UPDATE_DATE' => 17, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ) ); /** @@ -239,6 +245,10 @@ abstract class BaseAdditionalTablesPeer $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_OFFLINE); + + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UPDATE_DATE); + } const COUNT = 'COUNT(ADDITIONAL_TABLES.ADD_TAB_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index a9b23a22b..348415bde 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -2522,6 +2522,8 @@ + + diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 0166d016d..44a2f770d 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -2755,6 +2755,18 @@ msgstr "AVAILABLE GROUPS" msgid "AVAILABLE MEMBERS" msgstr "AVAILABLE MEMBERS" +# TRANSLATION +# LABEL/ID_AVAILABLE_OFFLINE +#: LABEL/ID_AVAILABLE_OFFLINE +msgid "Available offline" +msgstr "Available offline" + +# TRANSLATION +# LABEL/ID_AVAILABLE_OFFLINE_THE_MOBILE_APPLICATIONS +#: LABEL/ID_AVAILABLE_OFFLINE_THE_MOBILE_APPLICATIONS +msgid "Available offline, the mobile applications will download this table for offline use" +msgstr "Available offline, the mobile applications will download this table for offline use" + # TRANSLATION # LABEL/ID_AVAILABLE_PERMISSIONS #: LABEL/ID_AVAILABLE_PERMISSIONS @@ -20075,6 +20087,24 @@ msgstr "User has been updated successfully" msgid "Off" msgstr "Off" +# TRANSLATION +# LABEL/ID_OFFLINE_TABLES +#: LABEL/ID_OFFLINE_TABLES +msgid "Offline Tables" +msgstr "Offline Tables" + +# TRANSLATION +# LABEL/ID_OFFLINE_TABLES_ENABLE +#: LABEL/ID_OFFLINE_TABLES_ENABLE +msgid "Set Offline" +msgstr "Set Offline" + +# TRANSLATION +# LABEL/ID_OFFLINE_TABLES_DISABLE +#: LABEL/ID_OFFLINE_TABLES_DISABLE +msgid "Set Online" +msgstr "Set Online" + # TRANSLATION # LABEL/ID_OF_THE_MONTH #: LABEL/ID_OF_THE_MONTH diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 3d59b1cc3..d9d3e660d 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -1,6 +1,7 @@ rows)); + $data = []; + $enable = false; + foreach ($array as $value) { + if ($value->type !== "NORMAL") { + $data[] = $value->id; + $enable = $value->offline ? 1 : 0; + } + } + AdditionalTablesModel::updatePropertyOffline($data, $enable); + $result->success = true; + $result->message = $enable ? G::LoadTranslation("ID_ENABLE") : G::LoadTranslation("ID_DISABLE"); + } catch (Exception $e) { + $result->success = false; + $result->message = $e->getMessage(); + } + return $result; + } + /** * delete pm table * diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 3da7580e6..3c05dd3a7 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -1,5 +1,5 @@ INSERT INTO USERS (USR_UID,USR_USERNAME,USR_PASSWORD,USR_FIRSTNAME,USR_LASTNAME,USR_EMAIL,USR_DUE_DATE,USR_CREATE_DATE,USR_UPDATE_DATE,USR_STATUS,USR_COUNTRY,USR_CITY,USR_LOCATION,USR_ADDRESS,USR_PHONE,USR_FAX,USR_CELLULAR,USR_ZIP_CODE,DEP_UID,USR_POSITION,USR_RESUME,USR_BIRTHDAY,USR_ROLE,USR_REPORTS_TO,USR_REPLACED_BY ) VALUES -('00000000000000000000000000000001','admin','21232f297a57a5a743894a0e4a801fc3','Administrator',' ', 'admin@processmaker.com','2020-01-01','1999-11-30 00:00:00','2008-05-23 18:36:19','ACTIVE', 'US','FL','MMK','','', '1-305-402-0282','1-305-675-1400','','','Administrator', '','1999-02-25','PROCESSMAKER_ADMIN','',''), +('00000000000000000000000000000001','admin','21232f297a57a5a743894a0e4a801fc3','Administrator',' ','admin@processmaker.com',DATE_ADD(curdate(), INTERVAL 1 YEAR),'1999-11-30 00:00:00','2008-05-23 18:36:19','ACTIVE', 'US','FL','MMK','','', '1-305-402-0282','1-305-675-1400','','','Administrator', '','1999-02-25','PROCESSMAKER_ADMIN','',''), ('00000000000000000000000000000002','guest','674ba9750749d735ec9787d606170d78','Guest',' ', 'guest@processmaker.com','2030-01-01','2009-02-01 12:24:36','2009-02-01 12:24:36','INACTIVE', 'US','FL','MMK','','', '1-305-402-0282','1-305-675-1400','','','Guest', '','2009-02-01','PROCESSMAKER_GUEST','',''); INSERT INTO CONTENT (CON_CATEGORY,CON_PARENT,CON_ID,CON_LANG,CON_VALUE) VALUES @@ -57261,6 +57261,8 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_AVAILABLE_FIELDS','en','Available Fields','2014-01-15') , ( 'LABEL','ID_AVAILABLE_GROUPS','en','AVAILABLE GROUPS','2014-01-15') , ( 'LABEL','ID_AVAILABLE_MEMBERS','en','AVAILABLE MEMBERS','2014-01-15') , +( 'LABEL','ID_AVAILABLE_OFFLINE','en','Available offline','2019-10-15') , +( 'LABEL','ID_AVAILABLE_OFFLINE_THE_MOBILE_APPLICATIONS','en','Available offline, the mobile applications will download this table for offline use','2019-10-15') , ( 'LABEL','ID_AVAILABLE_PERMISSIONS','en','AVAILABLE PERMISSIONS','2014-01-15') , ( 'LABEL','ID_AVAILABLE_TRIGGERS','en','Available Triggers','2014-01-15') , ( 'LABEL','ID_AVAILABLE_USERS','en','AVAILABLE USERS','2014-01-15') , @@ -60214,6 +60216,9 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_OBJECT_REMOVE','en','Object has been removed successfully','2014-01-15') , ( 'LABEL','ID_OBJECT_UPDATE','en','User has been updated successfully','2014-01-15') , ( 'LABEL','ID_OFF','en','Off','2014-01-15') , +( 'LABEL','ID_OFFLINE_TABLES','en','Offline Tables','2019-12-19') , +( 'LABEL','ID_OFFLINE_TABLES_ENABLE','en','Set Offline Tables','2019-12-19') , +( 'LABEL','ID_OFFLINE_TABLES_DISABLE','en','Set Online Tables','2019-12-19') , ( 'LABEL','ID_OF_THE_MONTH','en','of the month(s)','2014-01-15') , ( 'LABEL','ID_OK','en','Ok','2015-09-17') , ( 'LABEL','ID_OLD_VERSION','en','old version','2014-01-15') , diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 0d2445581..eb0682aad 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -1162,6 +1162,8 @@ CREATE TABLE `ADDITIONAL_TABLES` `ADD_TAB_TYPE` VARCHAR(32) default '', `ADD_TAB_GRID` VARCHAR(256) default '', `ADD_TAB_TAG` VARCHAR(256) default '', + `ADD_TAB_OFFLINE` TINYINT default 0 NOT NULL, + `ADD_TAB_UPDATE_DATE` DATETIME NOT NULL, PRIMARY KEY (`ADD_TAB_UID`), KEY `indexAdditionalProcess`(`PRO_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8'; diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index 9015c2cab..fbb5832fe 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -268,41 +268,44 @@ if (isset($_POST["PRO_FILENAME"]) && try { /*----------------------------------********---------------------------------*/ $objectsToImport = ''; - // only uploadFileNewProcessExist - if (version_compare($data['version'], '3.0', '>') && isset($_POST['objectsToImport']) && $_POST['objectsToImport'] === '' && $_POST['IMPORT_OPTION']==="1") { - $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; - $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); - $objectImport = $ids->getIdObjectList($objectImport); - $granularImport = true; - $result = array( - "success" => true, - "catchMessage" => '', - "ExistProcessInDatabase" => 0, - "ExistGroupsInDatabase" => 0, - "notExistProcessInDatabase" => 0, - "affectedGroups" => '', - "sNewProUid" => '', - "project_type" => 'bpmn', - "isGranularImport" => $granularImport, - "objectGranularImport" => $objectImport, - "project_type_aux" => '' - ); - echo G::json_encode($result); - exit(0); - } + if (version_compare($data['version'], '3.0', '>')) { + $dataObject = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; + $exportObjects = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); + $idObjectList = $exportObjects->getIdObjectList($dataObject); - if (version_compare($data['version'], '3.0', '>') && $_POST['IMPORT_OPTION']==="3") { - $objectsToImport = []; - $objects = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; - $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); - $objects = $ids->getIdObjectList($objects); - foreach ($objects as $object) { - $objectsToImport[] = (object)array('id' => $object, 'action' => 'replace'); + // only uploadFileNewProcessExist + if (isset($_POST['objectsToImport']) && $_POST['objectsToImport'] === '' && $_POST['IMPORT_OPTION'] === "1") { + $granularImport = true; + $result = [ + "success" => true, + "catchMessage" => '', + "ExistProcessInDatabase" => 0, + "ExistGroupsInDatabase" => 0, + "notExistProcessInDatabase" => 0, + "affectedGroups" => '', + "sNewProUid" => '', + "project_type" => 'bpmn', + "isGranularImport" => $granularImport, + "objectGranularImport" => $idObjectList, + "project_type_aux" => '' + ]; + echo G::json_encode($result); + exit(0); } - } - if (isset($_POST['objectsToImport']) && !empty(G::json_decode($_POST['objectsToImport']))) { - $objectsToImport = G::json_decode($_POST['objectsToImport']); + $actionImport = "merge"; + if ($_POST['IMPORT_OPTION'] === "3") { + $actionImport = "replace"; + } + + $objectsToImport = []; + foreach ($idObjectList as $object) { + $objectsToImport[] = (object) ['id' => $object, 'action' => $actionImport]; + } + + if (isset($_POST['objectsToImport']) && !empty(G::json_decode($_POST['objectsToImport']))) { + $objectsToImport = G::json_decode($_POST['objectsToImport']); + } } /*----------------------------------********---------------------------------*/ $prjUid = $importer->import($option, $optionGroup, false, $objectsToImport); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index f6a135071..e81fde5a5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -696,9 +696,8 @@ class Light $sAppDocUid = $oAppDocument->getAppDocUid(); $iDocVersion = $oAppDocument->getDocVersion(); $info = pathinfo($oAppDocument->getAppDocFilename()); - $ext = (isset($info['extension']) ? $info['extension'] : '');//BUG fix: must handle files without any extension + $ext = (isset($info['extension']) ? $info['extension'] : ''); //BUG fix: must handle files without any extension - //$app_uid = G::getPathFromUID($oAppDocument->Fields['APP_UID']); $file = G::getPathFromFileUID($oAppDocument->Fields['APP_UID'], $sAppDocUid); $realPath = PATH_DOCUMENT . G::getPathFromUID($app_uid) . '/' . $file[0] . $file[1] . '_' . $iDocVersion . '.' . $ext; @@ -1358,12 +1357,14 @@ class Light */ public function getConfiguration($params) { + $response = []; + $sysConf = Bootstrap::getSystemConfiguration('', '', config("system.workspace")); $multiTimeZone = false; //Set Time Zone /*----------------------------------********---------------------------------*/ if (\PMLicensedFeatures::getSingleton()->verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) { - $multiTimeZone = (int)($sysConf['system_utc_time_zone']) == 1; + $multiTimeZone = (int) ($sysConf['system_utc_time_zone']) == 1; } /*----------------------------------********---------------------------------*/ $tz = isset($_SESSION['USR_TIME_ZONE']) ? $_SESSION['USR_TIME_ZONE'] : $sysConf['time_zone']; @@ -1423,6 +1424,8 @@ class Light $response['tz'] = isset($_SESSION['USR_TIME_ZONE']) ? $_SESSION['USR_TIME_ZONE'] : $sysConf['time_zone']; } + $response['mobile_offline_tables_download_interval'] = $sysConf['mobile_offline_tables_download_interval']; + return $response; } @@ -1431,13 +1434,13 @@ class Light switch (substr($size_str, -1)) { case 'M': case 'm': - return (int)$size_str * 1048576; + return (int) $size_str * 1048576; case 'K': case 'k': - return (int)$size_str * 1024; + return (int) $size_str * 1024; case 'G': case 'g': - return (int)$size_str * 1073741824; + return (int) $size_str * 1073741824; default: return $size_str; } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php b/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php index a4b30fb01..27ce991aa 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php @@ -486,7 +486,9 @@ class ReportTable 'DBS_UID' => ($arrayData['REP_TAB_CONNECTION']) ? $arrayData['REP_TAB_CONNECTION'] : 'workflow', 'PRO_UID' => $arrayData['PRO_UID'], 'ADD_TAB_TYPE' => $arrayData['REP_TAB_TYPE'], - 'ADD_TAB_GRID' => $arrayData['REP_TAB_GRID'] + 'ADD_TAB_GRID' => $arrayData['REP_TAB_GRID'], + 'ADD_TAB_OFFLINE' => !empty($arrayData['REP_TAB_OFFLINE']) ?? 0, + 'ADD_TAB_UPDATE_DATE' => date('Y-m-d H:i:s'), ]; if ($arrayData['REP_TAB_UID'] == '' || (isset($arrayData['forceUid']) && $arrayData['forceUid'])) { @@ -806,6 +808,8 @@ class ReportTable $tableData->REP_TAB_CONNECTION = $contentSchema['DBS_UID']; $tableData->REP_TAB_TYPE = (isset($contentSchema['ADD_TAB_TYPE'])) ? $contentSchema['ADD_TAB_TYPE'] : ''; $tableData->REP_TAB_GRID = (isset($contentSchema['ADD_TAB_GRID'])) ? $contentSchema['ADD_TAB_GRID'] : ''; + $tableData->REP_TAB_OFFLINE = (isset($contentSchema['ADD_TAB_OFFLINE'])) ? $contentSchema['ADD_TAB_OFFLINE'] : '0'; + $tableData->REP_TAB_UPDATE_DATE = date('Y-m-d H:i:s'); $tableData->columns = G::json_encode($columns); $tableData->forceUid = true; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php index 7f85689d6..1a3a31387 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php @@ -20,7 +20,7 @@ class Table * * @return array */ - public function getTables($pro_uid = '', $reportFlag = false) + public function getTables($pro_uid = '', $reportFlag = false, $offline = false) { //VALIDATION if ($reportFlag) { @@ -87,6 +87,7 @@ class Table $tabData['PMT_UID'] = $tab_uid; $tabData['PMT_TAB_NAME'] = $table['ADD_TAB_NAME']; $tabData['PMT_TAB_DESCRIPTION'] = $table['ADD_TAB_DESCRIPTION']; + $tabData['PMT_TAB_OFFLINE'] = $table['ADD_TAB_OFFLINE']; $tabData['PMT_TAB_CLASS_NAME'] = $table['ADD_TAB_CLASS_NAME']; $tabData['PMT_NUM_ROWS'] = $tableData['count']; } @@ -384,6 +385,8 @@ class Table 'ADD_TAB_NAME' => $dataValidate['REP_TAB_NAME'], 'ADD_TAB_CLASS_NAME' => $repTabClassName, 'ADD_TAB_DESCRIPTION' => $dataValidate['REP_TAB_DSC'], + 'ADD_TAB_OFFLINE' => 0, + 'ADD_TAB_UPDATE_DATE' => date('Y-m-d H:i:s'), 'ADD_TAB_PLG_UID' => '', 'DBS_UID' => ($dataValidate['REP_TAB_CONNECTION'] ? $dataValidate['REP_TAB_CONNECTION'] : 'workflow'), 'PRO_UID' => $dataValidate['PRO_UID'], @@ -396,6 +399,8 @@ class Table 'ADD_TAB_NAME' => $dataValidate['PMT_TAB_NAME'], 'ADD_TAB_CLASS_NAME' => $repTabClassName, 'ADD_TAB_DESCRIPTION' => $dataValidate['PMT_TAB_DSC'], + 'ADD_TAB_OFFLINE' => !empty($dataValidate['PMT_TAB_OFFLINE']) ?? 0, + 'ADD_TAB_UPDATE_DATE' => date('Y-m-d H:i:s'), 'ADD_TAB_PLG_UID' => '', 'DBS_UID' => ($dataValidate['PMT_TAB_CONNECTION'] ? $dataValidate['PMT_TAB_CONNECTION'] : 'workflow'), 'PRO_UID' => '', @@ -549,6 +554,11 @@ class Table $dataValidate['rep_tab_dsc'] = $tableData['pmt_tab_dsc']; $tableDsc = true; } + if (!empty($tableData['pmt_tab_offline'])) { + $dataValidate['rep_tab_offline'] = $tableData['pmt_tab_offline']; + $tableDsc = true; + } + $dataValidate['rep_tab_update_date'] = date('Y-m-d H:i:s'); } if (!empty($tableData['fields'])) { $dataValidate['fields'] = $tableData['fields']; diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 7de260e0c..beeb70ce8 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -73,7 +73,8 @@ class System 'files_white_list' => '', 'delay' => '0', 'tries' => '10', - 'retry_after' => '90' + 'retry_after' => '90', + 'mobile_offline_tables_download_interval' => 24 ]; /** @@ -1203,6 +1204,15 @@ class System $config['proxy_pass'] = G::decrypt($config['proxy_pass'], 'proxy_pass'); } + /** + * Here if you validate if the type of data obtained from the configuration + * files are valid, otherwise the default value is used. + */ + $value = (string) $config['mobile_offline_tables_download_interval']; + if (!is_numeric($value)) { + $config['mobile_offline_tables_download_interval'] = self::$defaultConfig['mobile_offline_tables_download_interval']; + } + return $config; } diff --git a/workflow/engine/src/ProcessMaker/Model/AdditionalTables.php b/workflow/engine/src/ProcessMaker/Model/AdditionalTables.php new file mode 100644 index 000000000..c25583b75 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/AdditionalTables.php @@ -0,0 +1,105 @@ +belongsTo(Fields::class, 'ADD_TAB_UID', 'ADD_TAB_UID'); + } + + /** + * Scope a query to get the offline tables + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeOffline($query) + { + return $query->where('ADD_TAB_OFFLINE', '=', 1); + } + + /** + * Get the structure of offline tables + * + * @return array + */ + public static function getTablesOfflineStructure() + { + $query = AdditionalTables::query()->select([ + 'ADD_TAB_UID', + 'ADD_TAB_NAME', + 'ADD_TAB_DESCRIPTION', + 'ADD_TAB_CLASS_NAME' + ]); + $query->offline(); + + $results = $query->get(); + $data = []; + $results->each(function ($item, $key) use (&$data) { + $data[$key] = array_change_key_case($item->toArray(), CASE_LOWER); + $data[$key]['fields'] = Fields::getFields($item->ADD_TAB_UID); + }); + + return $data; + } + + /** + * Get the data of offline tables + * + * @return array + */ + public static function getTablesOfflineData() + { + $query = AdditionalTables::query()->select([ + 'ADD_TAB_UID', + 'ADD_TAB_NAME', + 'ADD_TAB_DESCRIPTION', + 'ADD_TAB_CLASS_NAME' + ]); + $query->offline(); + + $results = $query->get(); + $data = []; + $results->each(function ($item, $key) use (&$data) { + $data[$key] = array_change_key_case($item->toArray(), CASE_LOWER); + + $additionalTables = new ModelAdditionalTables(); + $result = $additionalTables->getAllData($item->ADD_TAB_UID); + if (empty($result['rows'])) { + $data[$key]['rows'] = []; + } else { + foreach ($result['rows'] as $i => $row) { + $data[$key]['rows'][$i] = $row; + } + } + }); + + return $data; + } + + /** + * Update the offline property. + * @param array $tablesUid + * @param int $value + * @return void + */ + public static function updatePropertyOffline(array $tablesUid, $value): void + { + $query = AdditionalTables::whereIn('ADD_TAB_UID', $tablesUid) + ->update(['ADD_TAB_OFFLINE' => $value]); + } +} diff --git a/workflow/engine/src/ProcessMaker/Model/Fields.php b/workflow/engine/src/ProcessMaker/Model/Fields.php new file mode 100644 index 000000000..6283dd69c --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/Fields.php @@ -0,0 +1,55 @@ +belongsTo(AdditionalTables::class, 'ADD_TAB_UID', 'ADD_TAB_UID'); + } + + /** + * Scope a query to get the offline tables + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $tabUid + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTable($query, $tabUid) + { + return $query->where('ADD_TAB_UID', '=', $tabUid); + } + + /** + * Get the offline tables + * + * @param string $tabUid + * + * @return array + */ + public static function getFields($tabUid) + { + $query = Fields::query(); + $query->table($tabUid); + + $results = $query->get(); + $data = []; + $results->each(function ($item, $key) use (&$data) { + $data[$key] = array_change_key_case($item->toArray(), CASE_LOWER); + }); + + return $data; + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index 26775a4ad..57bd927a7 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -1169,12 +1169,13 @@ class Workflow extends Handler //Getting DynaForms foreach ($workflowData["dynaforms"] as $dynaform) { - $dynFile = PATH_DYNAFORM . $dynaform["DYN_FILENAME"] . ".xml"; + $dynFile = PATH_DYNAFORM . $dynaform["PRO_UID"] . "/" . $dynaform["DYN_UID"] . ".xml"; + $content = file_exists($dynFile) ? file_get_contents($dynFile) : ''; $workflowFile["DYNAFORMS"][] = array( "filename" => $dynaform["DYN_TITLE"], "filepath" => $dynaform["DYN_FILENAME"] . ".xml", - "file_content" => file_get_contents($dynFile) + "file_content" => $content ); $htmlFile = PATH_DYNAFORM . $dynaform["DYN_FILENAME"] . ".html"; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php b/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php index c378f0c71..d18ab1436 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php @@ -1,9 +1,11 @@ - * @copyright Colosa - Bolivia + * @url GET + * @status 200 + * + * @param boolean $offline {@from path} + * + * @return array + * @throws RestException * * @access protected - * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @url GET + * @class AccessControl {@permission PM_LOGIN} + * @link https://wiki.processmaker.com/3.1/REST_API_Administration/PM_Tables#PM_Tables_List:_GET_.2Fpmtable */ - public function doGetPmTables() + public function doGetPmTables($offline = false) { try { - $oPmTable = new \ProcessMaker\BusinessModel\Table(); - $response = $oPmTable->getTables(); + if ($offline) { + $response = AdditionalTables::getTablesOfflineStructure(); + } else { + $pmTable = new BusinessModelTable(); + $response = $pmTable->getTables(); + } + return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** - * @param string $pmt_uid {@min 1} {@max 32} + * Get the data of the offline PM tables + * + * @url GET /offline/data + * @status 200 + * + * @param boolean $compress {@from path} + * * @return array * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws RestException * * @access protected - * @class AccessControl {@permission PM_SETUP_PM_TABLES} + * @class AccessControl {@permission PM_LOGIN} + * @link https://wiki.processmaker.com/3.1/REST_API_Administration/PM_Tables#PM_Tables_List:_GET_.2Fpmtable + */ + public function doGetPmTablesDataOffline($compress = true) + { + try { + $data = AdditionalTables::getTablesOfflineData(); + if ($compress) { + $json = json_encode($data); + $compressed = gzcompress($json, 5); + echo $compressed; + } else { + return $data; + } + } catch (Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * Get the structure from a specific PM Table, including a list of its fields and their properties. + * * @url GET /:pmt_uid + * @status 200 + * + * @param string $pmt_uid {@min 1} {@max 32} + * + * @return array + * @throws RestException + * + * @access protected + * @class AccessControl {@permission PM_SETUP_PM_TABLES} + * @link https://wiki.processmaker.com/3.1/REST_API_Administration/PM_Tables#Get_PM_Table_Structure:_GET_.2Fpmtable.2F.7Bpmt_uid.7D */ public function doGetPmTable($pmt_uid) { try { - $oPmTable = new \ProcessMaker\BusinessModel\Table(); + $oPmTable = new BusinessModelTable(); $response = $oPmTable->getTable($pmt_uid); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** + * Get the data from a PM table + * + * @url GET /:pmt_uid/data + * @status 200 + * * @param string $pmt_uid {@min 1} {@max 32} * @param string $filter * @param string $q - * @return array * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @return array + * @throws RestException * * @access protected * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @url GET /:pmt_uid/data + * */ public function doGetPmTableData($pmt_uid, $filter = null, $q = "") { try { - $oPmTable = new \ProcessMaker\BusinessModel\Table(); + $oPmTable = new BusinessModelTable(); $response = $oPmTable->getTableData($pmt_uid, null, $filter, false, $q); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** + * Create a new PM Table + * + * @url POST + * @status 201 + * * @param array $request_data * @param string $pmt_tab_name {@from body} * @param string $pmt_tab_dsc {@from body} - * @return array * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @return array + * @throws RestException * * @access protected * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @url POST - * @status 201 */ public function doPostPmTable( $request_data, @@ -100,58 +154,58 @@ class Pmtable extends Api $pmt_tab_dsc = '' ) { try { - $oReportTable = new \ProcessMaker\BusinessModel\Table(); + $oReportTable = new BusinessModelTable(); $response = $oReportTable->saveTable($request_data); if (isset($response['pro_uid'])) { unset($response['pro_uid']); } return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** - * @param string $pmt_uid {@min 1} {@max 32} + * Add a new record to a PM Table * - * @param array $request_data - * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia - * - * @access protected - * @class AccessControl {@permission PM_SETUP_PM_TABLES} * @url POST /:pmt_uid/data * @status 201 + * + * @param string $pmt_uid {@min 1} {@max 32} + * @param array $request_data + * + * @return array + * @throws RestException + * @access protected + * @class AccessControl {@permission PM_SETUP_PM_TABLES} */ public function doPostPmTableData( $pmt_uid, $request_data ) { try { - $oReportTable = new \ProcessMaker\BusinessModel\Table(); + $oReportTable = new BusinessModelTable(); $response = $oReportTable->saveTableData($pmt_uid, $request_data); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** - * Update pm-table. + * Update the structure of a PM table. * * @url PUT /:pmt_uid + * @status 200 * * @param string $pmt_uid {@min 1} {@max 32} * @param array $request_data * * @return void - * @throw RestException + * @throws RestException * * @access protected * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @throws RestException */ public function doPutPmTable( $pmt_uid, @@ -167,9 +221,10 @@ class Pmtable extends Api } /** - * Update pm-table data. + * Update the data of an existing record in a PM table. * * @url PUT /:pmt_uid/data + * @status 200 * * @param string $pmt_uid {@min 1} {@max 32} * @param array $request_data @@ -185,37 +240,47 @@ class Pmtable extends Api $request_data ) { try { - $oReportTable = new \ProcessMaker\BusinessModel\Table(); + $oReportTable = new BusinessModelTable(); $response = $oReportTable->updateTableData($pmt_uid, $request_data); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** + * Delete a specified PM table and all its data. + * + * @url DELETE /:pmt_uid + * @status 200 + * * @param string $pmt_uid {@min 1} {@max 32} * * @return void - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws RestException * * @access protected * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @url DELETE /:pmt_uid */ public function doDeletePmTable($pmt_uid) { try { - $oReportTable = new \ProcessMaker\BusinessModel\Table(); + $oReportTable = new BusinessModelTable(); $response = $oReportTable->deleteTable($pmt_uid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** + * Delete a record from a PM table, by specifying its primary key(s). The PM Table can have up to 3 primary key + * fields. + * + * @url DELETE /:pmt_uid/data/:key1/:value1 + * @url DELETE /:pmt_uid/data/:key1/:value1/:key2/:value2 + * @url DELETE /:pmt_uid/data/:key1/:value1/:key2/:value2/:key3/:value3 + * @status 200 + * * @param string $pmt_uid {@min 1} {@max 32} * @param string $key1 {@min 1} * @param string $value1 {@min 1} @@ -225,15 +290,10 @@ class Pmtable extends Api * @param string $value3 * * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws RestException * * @access protected * @class AccessControl {@permission PM_SETUP_PM_TABLES} - * @url DELETE /:pmt_uid/data/:key1/:value1 - * @url DELETE /:pmt_uid/data/:key1/:value1/:key2/:value2 - * @url DELETE /:pmt_uid/data/:key1/:value1/:key2/:value2/:key3/:value3 */ public function doDeletePmTableData($pmt_uid, $key1, $value1, $key2 = '', $value2 = '', $key3 = '', $value3 = '') { @@ -245,10 +305,10 @@ class Pmtable extends Api if ($key3 != '') { $rows[$key3] = $value3; } - $oReportTable = new \ProcessMaker\BusinessModel\Table(); + $oReportTable = new BusinessModelTable(); $response = $oReportTable->deleteTableData($pmt_uid, $rows); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } diff --git a/workflow/engine/templates/pmTables/edit.js b/workflow/engine/templates/pmTables/edit.js index 7e1d70bf8..843d1abe6 100644 --- a/workflow/engine/templates/pmTables/edit.js +++ b/workflow/engine/templates/pmTables/edit.js @@ -1,6 +1,5 @@ /** * PM tables Edit - * @author Erik A. O. */ var store; @@ -17,1031 +16,1015 @@ var removeAllButton; var store; var editor; -var selCombo=''; +var selCombo = ''; -Ext.onReady(function(){ +Ext.onReady(function () { - var fm = Ext.form; - var fieldsCount = 0; - // store for available fields grid - storeA = new Ext.data.GroupingStore( { - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getDynafields' - }), - reader : new Ext.data.JsonReader( { - root: 'processFields', - fields : [{name : 'FIELD_UID'}, {name : 'FIELD_NAME'}] - }), - listeners: { - load: function() { + var fm = Ext.form; + var fieldsCount = 0; + // store for available fields grid + storeA = new Ext.data.GroupingStore({ + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getDynafields' + }), + reader: new Ext.data.JsonReader({ + root: 'processFields', + fields: [{name: 'FIELD_UID'}, {name: 'FIELD_NAME'}] + }), + listeners: { + load: function () { - } - } - }); - //column model for available fields grid - cmodelA = new Ext.grid.ColumnModel({ - defaults: { - width: 55, - sortable: true - }, - columns: [ - { - id:'FIELD_UID', - dataIndex: 'FIELD_UID', - hidden:true, - hideable:false - }, { - header : _("ID_DYNAFORM_FIELDS"), - dataIndex : 'FIELD_NAME', - sortable : true, - align:'left' - } - ] - }); - //selection model for available fields grid - smodelA = new Ext.grid.RowSelectionModel({ - selectSingle: false, - listeners:{ - selectionchange: function(sm){ - switch(sm.getCount()){ - case 0: Ext.getCmp('assignButton').disable(); break; - default: Ext.getCmp('assignButton').enable(); break; - } + } } - } - }); - //grid for table columns grid - availableGrid = new Ext.grid.GridPanel({ - layout: 'fit', - region: 'center', - id: 'availableGrid', - ddGroup : 'assignedGridDDGroup', - enableDragDrop : true, - stripeRows : true, - autoWidth : true, - stripeRows : true, - height : 100, - width : 200, - stateful : true, - stateId : 'gridEdit', - enableColumnResize : true, - enableHdMenu : true, - frame : false, - columnLines : false, - viewConfig : {forceFit:true}, - cm: cmodelA, - sm: smodelA, - store: storeA, - listeners: {rowdblclick: AssignFieldsAction} - }); - - //selecion model for table columns grid - sm = new Ext.grid.RowSelectionModel({ - selectSingle: false, - listeners:{ - selectionchange: function(sm){ - switch(sm.getCount()){ - case 0: - //Ext.getCmp('removeButton').disable(); - Ext.getCmp('editColumn').disable(); - Ext.getCmp('removeColumn').disable(); - break; - case 1: - Ext.getCmp('editColumn').enable(); - Ext.getCmp('removeColumn').enable(); - break; - default: - //Ext.getCmp('removeButton').enable(); - Ext.getCmp('editColumn').disable(); - Ext.getCmp('removeColumn').enable(); - break; - } + }); + //column model for available fields grid + cmodelA = new Ext.grid.ColumnModel({ + defaults: { + width: 55, + sortable: true + }, + columns: [ + { + id: 'FIELD_UID', + dataIndex: 'FIELD_UID', + hidden: true, + hideable: false + }, { + header: _("ID_DYNAFORM_FIELDS"), + dataIndex: 'FIELD_NAME', + sortable: true, + align: 'left' + } + ] + }); + //selection model for available fields grid + smodelA = new Ext.grid.RowSelectionModel({ + selectSingle: false, + listeners: { + selectionchange: function (sm) { + switch (sm.getCount()) { + case 0: + Ext.getCmp('assignButton').disable(); + break; + default: + Ext.getCmp('assignButton').enable(); + break; + } + } } - } - }); + }); + //grid for table columns grid + availableGrid = new Ext.grid.GridPanel({ + layout: 'fit', + region: 'center', + id: 'availableGrid', + ddGroup: 'assignedGridDDGroup', + enableDragDrop: true, + stripeRows: true, + autoWidth: true, + stripeRows: true, + height: 100, + width: 200, + stateful: true, + stateId: 'gridEdit', + enableColumnResize: true, + enableHdMenu: true, + frame: false, + columnLines: false, + viewConfig: {forceFit: true}, + cm: cmodelA, + sm: smodelA, + store: storeA, + listeners: {rowdblclick: AssignFieldsAction} + }); - var sizeField = new fm.NumberField({ - name: 'sizeEdit', - id: 'sizeEdit', - allowBlank: true, - allowDecimals: false, - allowNegative: false, - disabled: true, - nanText: 'This field should content a number', - minValue: 1, - maxValue: 99, - minLength: 0 - }); + //selection model for table columns grid + sm = new Ext.grid.RowSelectionModel({ + selectSingle: false, + listeners: { + selectionchange: function (sm) { + switch (sm.getCount()) { + case 0: + Ext.getCmp('editColumn').disable(); + Ext.getCmp('removeColumn').disable(); + break; + case 1: + Ext.getCmp('editColumn').enable(); + Ext.getCmp('removeColumn').enable(); + break; + default: + Ext.getCmp('editColumn').disable(); + Ext.getCmp('removeColumn').enable(); + break; + } + } + } + }); - //check column for tablesizeField columns grid - var checkColumn = new Ext.grid.CheckColumn({ - header: 'Filter', - dataIndex: 'FIELD_FILTER', - id: 'FIELD_FILTER', - width: 55 - }); - //columns for table columns grid - var cmColumns = [ - { - id: 'uid', - dataIndex: 'uid', - hidden: true, - hideable:false - }, - { - id: 'field_uid', - dataIndex: 'field_uid', - hidden: true, - hideable:false - }, - { - id: 'field_key', - dataIndex: 'field_key', - hidden: true, - hideable:false - }, - { - id: 'field_index', - dataIndex: 'field_index', - hidden: true, - hideable:false - }, - { - id: 'field_null', - dataIndex: 'field_null', - hidden: true, - hideable:false - }, - { - id: 'field_dyn', - header: _("ID_DYNAFORM_FIELD"), - dataIndex: 'field_dyn', - hidden: true - }, { - id: 'field_name', - header: _("ID_FIELD_NAME"), - dataIndex: 'field_name', - width: 220, - editor: { - xtype: 'textfield', - allowBlank: true, - listeners:{ - change: function(f,e){ - this.setValue(this.getValue().replace(/^\s+/,'').replace(/\s+$/,'')); - var valueInputField= /^[0-9a-zA-Z\_|-]+$/.test(this.getValue()) ? true : false; - if (valueInputField) { - this.setValue(this.getValue().replace(/\s/g,'').toUpperCase()); - }else{ - //Ext.Msg.alert(_('ID_WARNING'), _('ID_FIELD_NAME')); - this.setValue(''); + var sizeField = new fm.NumberField({ + name: 'sizeEdit', + id: 'sizeEdit', + allowBlank: true, + allowDecimals: false, + allowNegative: false, + disabled: true, + nanText: 'This field should content a number', + minValue: 1, + maxValue: 99, + minLength: 0 + }); + + //check column for tablesizeField columns grid + var checkColumn = new Ext.grid.CheckColumn({ + header: 'Filter', + dataIndex: 'FIELD_FILTER', + id: 'FIELD_FILTER', + width: 55 + }); + //columns for table columns grid + var cmColumns = [ + { + id: 'uid', + dataIndex: 'uid', + hidden: true, + hideable: false + }, + { + id: 'field_uid', + dataIndex: 'field_uid', + hidden: true, + hideable: false + }, + { + id: 'field_key', + dataIndex: 'field_key', + hidden: true, + hideable: false + }, + { + id: 'field_index', + dataIndex: 'field_index', + hidden: true, + hideable: false + }, + { + id: 'field_null', + dataIndex: 'field_null', + hidden: true, + hideable: false + }, + { + id: 'field_dyn', + header: _("ID_DYNAFORM_FIELD"), + dataIndex: 'field_dyn', + hidden: true + }, { + id: 'field_name', + header: _("ID_FIELD_NAME"), + dataIndex: 'field_name', + width: 220, + editor: { + xtype: 'textfield', + allowBlank: true, + listeners: { + change: function (f, e) { + this.setValue(this.getValue().replace(/^\s+/, '').replace(/\s+$/, '')); + var valueInputField = /^[0-9a-zA-Z\_|-]+$/.test(this.getValue()) ? true : false; + if (valueInputField) { + this.setValue(this.getValue().replace(/\s/g, '').toUpperCase()); + } else { + this.setValue(''); + } + } + }, + validator: function (v) { + if (v != "") { + return (/^[0-9a-zA-Z\_|-]+$/.test(v)) ? true : false; + } else { + return true; + } + }, + } + }, { + id: 'field_label', + header: _("ID_FIELD_LABEL"), + dataIndex: 'field_label', + width: 220, + editor: { + xtype: 'textfield', + allowBlank: true, + listeners: { + change: function (f, e) { + this.setValue(this.getValue().replace(/^\s+/, '').replace(/\s+$/, '')); + var valueInputField = /^[0-9a-zA-Z _\|-]+$/.test(this.getValue()) ? true : false; + if (!valueInputField) { + this.setValue(''); + } + } + }, + validator: function (v) { + if (v != "") { + return (/^[0-9a-zA-Z _\|-]+$/.test(v)) ? true : _('ID_THE') + ' ' + _('ID_FIELD_LABEL') + ' ' + _('ID_FIELD_NOT_EMPTY_OR_SPECIAL_CHAR'); + } else { + return true; + } } - } - }, - validator: function(v) { - if (v != "") { - return (/^[0-9a-zA-Z\_|-]+$/.test(v))? true : false; - } else { - return true; - } - }, - } - }, { - id: 'field_label', - header: _("ID_FIELD_LABEL"), - dataIndex: 'field_label', - width: 220, - editor:{ - xtype: 'textfield', - allowBlank: true, - listeners:{ - change: function(f,e){ - this.setValue(this.getValue().replace(/^\s+/,'').replace(/\s+$/,'')); - var valueInputField= /^[0-9a-zA-Z _\|-]+$/.test(this.getValue()) ? true : false; - if (!valueInputField) { - this.setValue(''); - } - } - }, - validator: function(v) { - if (v != "") { - return (/^[0-9a-zA-Z _\|-]+$/.test(v))? true : _('ID_THE') + ' ' +_('ID_FIELD_LABEL') + ' ' + _('ID_FIELD_NOT_EMPTY_OR_SPECIAL_CHAR'); - } else { - return true; - } - }, - } - }, { - id: 'field_type', - header: _("ID_TYPE"), - dataIndex: 'field_type', - width: 75, - editor: new fm.ComboBox({ - id: "fieldType", - typeAhead: true, - editable: false, - lazyRender: true, - mode: 'local', - displayField:'type', - valueField:'type_id', - autocomplete: true, - triggerAction: 'all', - forceSelection: true, - store: new Ext.data.SimpleStore({ - fields: ['type_id', 'type'], - data: columnsTypes, - sortInfo: {field:'type_id', direction:'ASC'} - }), - listeners: { - beforerender: function (combo) - { - if (combo.getValue() == "" && combo.store.getAt(0)) { - combo.setValue(combo.store.getAt(0).get(combo.valueField)); - } - }, - beforeshow: function (combo) - { + } + }, { + id: 'field_type', + header: _("ID_TYPE"), + dataIndex: 'field_type', + width: 75, + editor: new fm.ComboBox({ + id: "fieldType", + typeAhead: true, + editable: false, + lazyRender: true, + mode: 'local', + displayField: 'type', + valueField: 'type_id', + autocomplete: true, + triggerAction: 'all', + forceSelection: true, + store: new Ext.data.SimpleStore({ + fields: ['type_id', 'type'], + data: columnsTypes, + sortInfo: {field: 'type_id', direction: 'ASC'} + }), + listeners: { + beforerender: function (combo) + { if (combo.getValue() == "" && combo.store.getAt(0)) { combo.setValue(combo.store.getAt(0).get(combo.valueField)); } - }, - 'select': function(combo, row, index) { - if( cm && cm instanceof Ext.grid.ColumnModel) { - if(selCombo != combo.getValue()) { - Ext.getCmp('sizeEdit').setValue(''); - } + }, + beforeshow: function (combo) + { + if (combo.getValue() == "" && combo.store.getAt(0)) { + combo.setValue(combo.store.getAt(0).get(combo.valueField)); + } + }, + 'select': function (combo, row, index) { + if (cm && cm instanceof Ext.grid.ColumnModel) { + if (selCombo != combo.getValue()) { + Ext.getCmp('sizeEdit').setValue(''); + } - selCombo = combo.getValue(); + selCombo = combo.getValue(); - var fieldNull = Ext.getCmp("field_null"); - var fieldPrimaryKey = Ext.getCmp("field_primary_key"); - var fieldIndex = Ext.getCmp("field_index"); - var fieldInc = Ext.getCmp("field_incre"); - var sizeEdit = Ext.getCmp("sizeEdit"); + var fieldNull = Ext.getCmp("field_null"); + var fieldPrimaryKey = Ext.getCmp("field_primary_key"); + var fieldIndex = Ext.getCmp("field_index"); + var fieldInc = Ext.getCmp("field_incre"); + var sizeEdit = Ext.getCmp("sizeEdit"); - editorFieldsEnableDisable(selCombo, fieldNull, fieldPrimaryKey, fieldIndex, fieldInc, sizeEdit); + editorFieldsEnableDisable(selCombo, fieldNull, fieldPrimaryKey, fieldIndex, fieldInc, sizeEdit); - flagShowMessageError = 1; - } - }//select - } - }) - }, { - id: 'field_size', - header: _("ID_SIZE"), - dataIndex: 'field_size', - width: 50, - align: 'right', - editor: sizeField - }, { - xtype: 'booleancolumn', - header: _('ID_NULL'), - dataIndex: 'field_null', - align: 'center', - width: 50, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox', - id: 'field_null', - checked: false, - disabled: true + flagShowMessageError = 1; + } + } + } + }) + }, { + id: 'field_size', + header: _("ID_SIZE"), + dataIndex: 'field_size', + width: 50, + align: 'right', + editor: sizeField + }, { + xtype: 'booleancolumn', + header: _('ID_NULL'), + dataIndex: 'field_null', + align: 'center', + width: 50, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox', + id: 'field_null', + checked: false, + disabled: true + } + }, { + xtype: 'booleancolumn', + header: _('ID_PRIMARY_KEY'), + dataIndex: 'field_key', + align: 'center', + width: 80, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox', + id: 'field_primary_key', + disabled: true, + inputValue: 'always' + } + }, { + xtype: 'booleancolumn', + header: _('ID_AUTO_INCREMENT'), + dataIndex: 'field_autoincrement', + align: 'center', + width: 80, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox', + id: 'field_incre', + disabled: true, + inputValue: 'always' + } } - }, { - xtype: 'booleancolumn', - header: _('ID_PRIMARY_KEY'), - dataIndex: 'field_key', - align: 'center', - width: 80, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox', - id: 'field_primary_key', - disabled: true, - inputValue: 'always' + /*----------------------------------********---------------------------------*/ + , { + xtype: 'booleancolumn', + header: _('ID_INDEX'), + dataIndex: 'field_index', + align: 'center', + width: 80, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox', + id: 'field_index', + disabled: true, + inputValue: 'always' + } } - }, { - xtype: 'booleancolumn', - header: _('ID_AUTO_INCREMENT'), - dataIndex: 'field_autoincrement', - align: 'center', - width: 80, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox', - id: 'field_incre', - disabled: true, - inputValue: 'always' - } - } - /*----------------------------------********---------------------------------*/ - , { - xtype: 'booleancolumn', - header: _('ID_INDEX'), - dataIndex: 'field_index', - align: 'center', - width: 80, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox', - id: 'field_index', - disabled: true, - inputValue: 'always' - } - } - /*----------------------------------********---------------------------------*/ - ]; + /*----------------------------------********---------------------------------*/ + ]; - //if permissions plugin is enabled - if (TABLE !== false && TABLE.ADD_TAB_TAG == 'plugin@simplereport') { - cmColumns.push({ - xtype: 'booleancolumn', - header: 'Filter', - dataIndex: 'field_filter', - align: 'center', - width: 50, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox' - } - }) - } + //if permissions plugin is enabled + if (TABLE !== false && TABLE.ADD_TAB_TAG == 'plugin@simplereport') { + cmColumns.push({ + xtype: 'booleancolumn', + header: 'Filter', + dataIndex: 'field_filter', + align: 'center', + width: 50, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox' + } + }) + } - //column model for table columns grid - var cm = new Ext.grid.ColumnModel({ - // specify any defaults for each column - defaults: { - resizable: false, - sortable: true // columns are not sortable by default - }, - columns:cmColumns - }); - //store for table columns grid - store = new Ext.data.ArrayStore({ - fields: [ - {name: 'uid', type: 'string'}, - {name: 'field_uid', type: 'string'}, - {name: 'field_key', type: 'string'}, - {name: 'field_index', type: 'string'}, - {name: 'field_name', type: 'string'}, - {name: 'field_label', type: 'string'}, - {name: 'field_type'}, - {name: 'field_size', type: 'float'}, - {name: 'field_null', type: 'float'}, - {name: 'field_autoincrement', type: 'float'}, - {name: 'field_filter', type: 'string'} - ] - }); - //row editor for table columns grid - var flagShowMessageError = 1; + //column model for table columns grid + var cm = new Ext.grid.ColumnModel({ + // specify any defaults for each column + defaults: { + resizable: false, + sortable: true // columns are not sortable by default + }, + columns: cmColumns + }); + //store for table columns grid + store = new Ext.data.ArrayStore({ + fields: [ + {name: 'uid', type: 'string'}, + {name: 'field_uid', type: 'string'}, + {name: 'field_key', type: 'string'}, + {name: 'field_index', type: 'string'}, + {name: 'field_name', type: 'string'}, + {name: 'field_label', type: 'string'}, + {name: 'field_type'}, + {name: 'field_size', type: 'float'}, + {name: 'field_null', type: 'float'}, + {name: 'field_autoincrement', type: 'float'}, + {name: 'field_filter', type: 'string'} + ] + }); + //row editor for table columns grid + var flagShowMessageError = 1; - editor = new Ext.ux.grid.RowEditor({ - saveText: _("ID_UPDATE"), - isValid: function () - { - var valid = true; - this.items.each(function(f) { - if(!f.isValid(true)){ - valid = false; + editor = new Ext.ux.grid.RowEditor({ + saveText: _("ID_UPDATE"), + isValid: function () + { + var valid = true; + this.items.each(function (f) { + if (!f.isValid(true)) { + valid = false; - if (valid) { - flagShowMessageError = 1; + if (valid) { + flagShowMessageError = 1; + } + + return false; + } + }); + + if (valid) { + flagShowMessageError = 1; + } + + return valid; + }, + showTooltip: function (msg) + { + if (flagShowMessageError == 1) { + if (msg != "" && msg != "
") { + Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); } - return false; + flagShowMessageError = 0; } - }); + }, + listeners: { + canceledit: function (grid, obj) { + if (grid.record.data.field_label == '' && grid.record.data.field_name == '') { + store.remove(grid.record); + } - if (valid) { - flagShowMessageError = 1; + flagShowMessageError = 1; + } } + }); - return valid; - }, - showTooltip: function (msg) - { - if (flagShowMessageError == 1) { - if (msg != "" && msg != "
") { - Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); + editor.on({ + beforeedit: function (roweditor, rowIndex) + { + setTimeout( + function () + { + var fieldTypeValue = Ext.getCmp("fieldType").getValue(); + var fieldNull = Ext.getCmp("field_null"); + var fieldPrimaryKey = Ext.getCmp("field_primary_key"); + var fieldIndex = Ext.getCmp("field_index"); + var fieldInc = Ext.getCmp("field_incre"); + var sizeEdit = Ext.getCmp("sizeEdit"); + + editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, fieldIndex, fieldInc, sizeEdit); + }, + 250 + ); + }, + afteredit: function (roweditor, changes, r, rowIndex) + { + row = assignedGrid.getSelectionModel().getSelected(); + //if a column was set as PK so can't be null + if (row.get('field_key') == true) { + row.data.field_null = false; } - flagShowMessageError = 0; - } - }, - listeners: { - canceledit: function(grid,obj){ - if ( grid.record.data.field_label == '' && grid.record.data.field_name == '') { - store.remove(grid.record); + if (row.get('field_index') == true) { + row.data.field_null = false; + } + row.commit(); } + }); - flagShowMessageError = 1; - } - } - }); - - editor.on({ - beforeedit: function(roweditor, rowIndex) - { - setTimeout( - function () + //table columns grid + assignedGrid = new Ext.grid.GridPanel({ + region: 'center', + id: 'assignedGrid', + ddGroup: 'availableGridDDGroup', + enableDragDrop: true, + enableColumnResize: true, + enableColumnMove: false, + viewConfig: {forceFit: true}, + cm: cm, + sm: sm, + store: store, + plugins: [editor, checkColumn], + tbar: [ { - var fieldTypeValue = Ext.getCmp("fieldType").getValue(); - var fieldNull = Ext.getCmp("field_null"); - var fieldPrimaryKey = Ext.getCmp("field_primary_key"); - var fieldIndex = Ext.getCmp("field_index"); - var fieldInc = Ext.getCmp("field_incre"); - var sizeEdit = Ext.getCmp("sizeEdit"); + icon: '/images/add-row-after.png', + text: _("ID_ADD_FIELD"), + handler: addColumn + }, { + id: 'editColumn', + icon: '/images/edit-row.png', + text: _("ID_EDIT_FIELD"), + disabled: true, + handler: editColumn + }, { + id: 'removeColumn', + icon: '/images/delete-row.png', + text: _("ID_REMOVE_FIELD"), + disabled: true, + handler: removeColumn + } + ], - editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, fieldIndex, fieldInc, sizeEdit); + border: false, + + listeners: { + render: function (grid) { + var ddrow = new Ext.dd.DropTarget(grid.getView().mainBody, { + ddGroup: 'availableGridDDGroup', + copy: false, + notifyDrop: function (dd, e, data) { + var ds = grid.store; + var sm = grid.getSelectionModel(); + var rows = sm.getSelections(); + if (dd.getDragData(e)) { + var cindex = dd.getDragData(e).rowIndex; + //skipping primary keys, we can't reorder + if (store.data.items[cindex].data.field_key) + return; + + if (typeof (cindex) != "undefined") { + for (var i = 0; i < rows.length; i++) { + //skipping primary keys, we can't reorder + if (rows[i].data.field_key) + continue; + + var srcIndex = ds.indexOfId(rows[i].id); + ds.remove(ds.getById(rows[i].id)); + if (i > 0 && cindex < srcIndex) { + cindex++; + } + ds.insert(cindex, rows[i]); + } + sm.selectRecords(rows); + } + } + } + }); + } + } + }); + + assignedGrid.getSelectionModel().on('selectionchange', function (sm) { + }); + + // (vertical) selection buttons + buttonsPanel = new Ext.Panel({ + width: 40, + layout: { + type: 'vbox', + padding: '0', + pack: 'center', + align: 'center' + }, + defaults: {margins: '0 0 35 0'}, + items: [ + {xtype: 'button', text: '>', + handler: AssignFieldsAction, + id: 'assignButton', disabled: true }, - 250 - ); - }, - afteredit: function(roweditor, changes, r, rowIndex) - { - row = assignedGrid.getSelectionModel().getSelected(); - //if a column was set as PK so can't be null - if (row.get('field_key') == true) { - row.data.field_null = false; - } - - if (row.get('field_index') == true) { - row.data.field_null = false; - } - row.commit(); - } - }); - - //table columns grid - assignedGrid = new Ext.grid.GridPanel({ - //title: 'Columns', - region: 'center', - id: 'assignedGrid', - ddGroup : 'availableGridDDGroup', - enableDragDrop : true, - enableColumnResize : true, - enableColumnMove: false, - viewConfig : {forceFit:true}, - cm: cm, - sm: sm, - store: store, - plugins: [editor, checkColumn], - tbar: [ - { - icon: '/images/add-row-after.png', - text: _("ID_ADD_FIELD"), - handler: addColumn - }, { - id: 'editColumn', - icon: '/images/edit-row.png', - text: _("ID_EDIT_FIELD"), - disabled: true, - handler: editColumn - }, { - id: 'removeColumn', - icon: '/images/delete-row.png', - text: _("ID_REMOVE_FIELD"), - disabled: true, - handler: removeColumn - } - ], - - border: false, - - listeners: { - render: function(grid) { - var ddrow = new Ext.dd.DropTarget(grid.getView().mainBody, { - ddGroup: 'availableGridDDGroup', - copy: false, - notifyDrop: function(dd, e, data) { - var ds = grid.store; - var sm = grid.getSelectionModel(); - var rows = sm.getSelections(); - if (dd.getDragData(e)) { - var cindex = dd.getDragData(e).rowIndex; - //skipping primary keys, we can't reorder - if (store.data.items[cindex].data.field_key) - return; - - if (typeof(cindex) != "undefined") { - for(var i = 0; i < rows.length; i++) { - //skipping primary keys, we can't reorder - if (rows[i].data.field_key ) - continue; - - var srcIndex = ds.indexOfId(rows[i].id); - ds.remove(ds.getById(rows[i].id)); - if (i > 0 && cindex < srcIndex) { - cindex++; - } - ds.insert(cindex, rows[i]); - } - sm.selectRecords(rows); - } + {xtype: 'button', text: '<', + handler: RemoveFieldsAction, + id: 'removeButton', disabled: true + }, + {xtype: 'button', text: '>>', + handler: AssignAllFieldsAction, + id: 'assignButtonAll', disabled: false}, + {xtype: 'button', text: '<<', + handler: RemoveAllFieldsAction, + id: 'removeButtonAll', disabled: false } - } - }); - } - } - }); + ] - assignedGrid.getSelectionModel().on('selectionchange', function(sm){ - //alert('s'); - }); - - // (vertical) selection buttons - buttonsPanel = new Ext.Panel({ - width : 40, - layout : { - type:'vbox', - padding:'0', - pack:'center', - align:'center' - }, - defaults:{margins:'0 0 35 0'}, - items:[ - { xtype:'button',text: '>', - handler: AssignFieldsAction, - id: 'assignButton', disabled: true - }, - { xtype:'button',text: '<', - handler: RemoveFieldsAction, - id: 'removeButton', disabled: true - }, - { xtype:'button',text: '>>', - handler: AssignAllFieldsAction, - id: 'assignButtonAll', disabled: false}, - { xtype:'button',text: '<<', - handler: RemoveAllFieldsAction, - id: 'removeButtonAll', disabled: false - } - ] - - }); + }); - FieldsPanel = new Ext.Panel({ - //title: _('ID_FIELDS'), - region : 'center', - //autoWidth : true, - width: 150, - layout : 'hbox', - defaults : { flex : 1 }, //auto stretch - layoutConfig : { align : 'stretch' }, - items : [assignedGrid], - viewConfig : {forceFit:true} + FieldsPanel = new Ext.Panel({ + region: 'center', + width: 150, + layout: 'hbox', + defaults: {flex: 1}, //auto stretch + layoutConfig: {align: 'stretch'}, + items: [assignedGrid], + viewConfig: {forceFit: true} - }); + }); - searchTextA = new Ext.form.TextField ({ + searchTextA = new Ext.form.TextField({ id: 'searchTextA', - ctCls:'pm_search_text_field', + ctCls: 'pm_search_text_field', allowBlank: true, width: 110, emptyText: _('ID_EMPTY_SEARCH'), listeners: { - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - DoSearchA(); + specialkey: function (f, e) { + if (e.getKey() == e.ENTER) { + DoSearchA(); + } } - } } }); - searchTextP = new Ext.form.TextField ({ + searchTextP = new Ext.form.TextField({ id: 'searchTextP', - ctCls:'pm_search_text_field', + ctCls: 'pm_search_text_field', allowBlank: true, width: 110, emptyText: _('ID_EMPTY_SEARCH'), listeners: { - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - DoSearchP(); + specialkey: function (f, e) { + if (e.getKey() == e.ENTER) { + DoSearchP(); + } } - } } }); - var types = new Ext.data.SimpleStore({ - fields: ['REP_TAB_TYPE', 'type'], - data : [['NORMAL',_("ID_GLOBAL")],['GRID',_("ID_GRID")]] - }); + var types = new Ext.data.SimpleStore({ + fields: ['REP_TAB_TYPE', 'type'], + data: [['NORMAL', _("ID_GLOBAL")], ['GRID', _("ID_GRID")]] + }); - comboReport = new Ext.form.ComboBox({ - id : 'REP_TAB_TYPE', - name: 'type', - fieldLabel: 'Type', - hiddenName : 'REP_TAB_TYPE', - mode: 'local', - store: types, - displayField:'type', - valueField:'REP_TAB_TYPE', - width: 120, - typeAhead: true, - triggerAction: 'all', - editable:false, - lazyRender: true, - value: typeof TABLE.ADD_TAB_TYPE != 'undefined'? TABLE.ADD_TAB_TYPE : 'NORMAL', - listeners: { - select: function(combo,record,index){ - if (this.getValue()=='NORMAL') { - Ext.getCmp('REP_TAB_GRID').setVisible(false); - loadFieldNormal(); - } else { - Ext.getCmp('availableGrid').store.removeAll(); - Ext.getCmp('REP_TAB_GRID').setVisible(true); - Ext.getCmp('REP_TAB_GRID').setValue(''); - gridsListStore.reload({params:{PRO_UID : PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue()}}); - } - } - } - }); - - dbConnectionsStore = new Ext.data.Store({ - autoLoad: false, - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getDbConnectionsList', - method : 'POST' - }), - baseParams : { - PRO_UID : '' - }, - reader : new Ext.data.JsonReader( { - fields : [{name : 'DBS_UID'}, {name : 'DBS_NAME'}] - }), - listeners: { - load: function() { - if (TABLE !== false) { // is editing - // set current editing process combobox - var i = this.findExact('DBS_UID', TABLE.DBS_UID, 0); - if (i > -1){ - comboDbConnections.setValue(this.getAt(i).data.DBS_UID); - comboDbConnections.setRawValue(this.getAt(i).data.DBS_NAME); - comboDbConnections.setDisabled(true); - } else { - // DB COnnection deleted - Ext.Msg.alert( _('ID_ERROR'), _('ID_DB_CONNECTION_NOT_EXIST') ); - } - } else { - comboDbConnections.setValue('rp'); - } - } - } - }); - - comboDbConnections = new Ext.form.ComboBox({ - id: 'REP_TAB_CONNECTION', - fieldLabel : _("ID_DB_CONNECTION"), - hiddenName : 'DBS_UID', - store : dbConnectionsStore, - //value: 'rp', - valueField : 'DBS_UID', - displayField : 'DBS_NAME', - triggerAction : 'all', - editable : false, - mode:'local' - }); - - var tbar = new Array(); - var items = new Array(); - - items.push({ - id: 'REP_TAB_NAME', - fieldLabel: _("ID_TABLE_NAME") + ' ('+_("ID_AUTO_PREFIX") + ' "PMT_")', - xtype:'textfield', - emptyText: _("ID_SET_A_TABLE_NAME"), - width: 250, - autoCreate: {tag: "input", type: "text", autocomplete: "off", maxlength: sizeTableName }, - stripCharsRe: /(\W+)/g, - listeners:{ - change: function(){ - this.setValue(this.getValue().toUpperCase()); - } - } - }); - items.push({ - id: 'REP_TAB_DSC', - fieldLabel: _("ID_DESCRIPTION"), - xtype:'textarea', - emptyText: _("ID_SET_TABLE_DESCRIPTION"), - width: 250, - height: 40, - allowBlank: true - }); - - items.push( - { - layout: "column", - style: "margin-left: 255px;", - hidden: (dataNumRows > 0)? false : true, - items: [ - { - xtype: "checkbox", - id: "chkKeepData", - name: "chkKeepData", - checked : true, - boxLabel: _("ID_PMTABLE_DATA_KEEP") - } - ] - } - ); - - //items.push(comboDbConnections); - - var frmDetails = new Ext.FormPanel({ - id :'frmDetails', - region : 'north', - labelWidth: 250, - labelAlign :'right', - title : ADD_TAB_UID ? _('ID_PMTABLE') : _('ID_NEW_PMTABLE'), - bodyStyle :'padding:10px', - frame : true, - height: 170, - items : items, - //tbar : tbar, - waitMsgTarget : true, - defaults: { - allowBlank : false, - msgTarget : 'side', - align :'center' - } - }); - - - southPanel = new Ext.FormPanel({ - region: 'south', - buttons:[ - { - text: TABLE === false ? _("ID_CREATE") : _("ID_UPDATE"), - handler: function() { - if (TABLE === false || dataNumRows == 0 || Ext.getCmp("chkKeepData").checked == true) { - if (TABLE !== false && TABLE.ADD_TAB_NAME !== Ext.getCmp('REP_TAB_NAME').getValue().trim()) { - PMExt.confirm(_('ID_CONFIRM'), _('ID_THE_NAME_CHANGE_MAY_CAUSE_DATA_LOSS'), createReportTable); - } else { - createReportTable(); + comboReport = new Ext.form.ComboBox({ + id: 'REP_TAB_TYPE', + name: 'type', + fieldLabel: 'Type', + hiddenName: 'REP_TAB_TYPE', + mode: 'local', + store: types, + displayField: 'type', + valueField: 'REP_TAB_TYPE', + width: 120, + typeAhead: true, + triggerAction: 'all', + editable: false, + lazyRender: true, + value: typeof TABLE.ADD_TAB_TYPE != 'undefined' ? TABLE.ADD_TAB_TYPE : 'NORMAL', + listeners: { + select: function (combo, record, index) { + if (this.getValue() == 'NORMAL') { + Ext.getCmp('REP_TAB_GRID').setVisible(false); + loadFieldNormal(); + } else { + Ext.getCmp('availableGrid').store.removeAll(); + Ext.getCmp('REP_TAB_GRID').setVisible(true); + Ext.getCmp('REP_TAB_GRID').setValue(''); + gridsListStore.reload({params: {PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue()}}); + } } - } - else { - PMExt.confirm(_('ID_CONFIRM'), _('ID_PMTABLE_SAVE_AND_DATA_LOST'), createReportTable); - } } - }, { - text:_("ID_CANCEL"), - handler: function() { - proParam = PRO_UID !== false ? '?PRO_UID='+PRO_UID : ''; - location.href = '../pmTables' + proParam; + }); + + dbConnectionsStore = new Ext.data.Store({ + autoLoad: false, + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getDbConnectionsList', + method: 'POST' + }), + baseParams: { + PRO_UID: '' + }, + reader: new Ext.data.JsonReader({ + fields: [{name: 'DBS_UID'}, {name: 'DBS_NAME'}] + }), + listeners: { + load: function () { + if (TABLE !== false) { // is editing + // set current editing process combobox + var i = this.findExact('DBS_UID', TABLE.DBS_UID, 0); + if (i > -1) { + comboDbConnections.setValue(this.getAt(i).data.DBS_UID); + comboDbConnections.setRawValue(this.getAt(i).data.DBS_NAME); + comboDbConnections.setDisabled(true); + } else { + // DB COnnection deleted + Ext.Msg.alert(_('ID_ERROR'), _('ID_DB_CONNECTION_NOT_EXIST')); + } + } else { + comboDbConnections.setValue('rp'); + } + } } - } - ] - }); + }); - var viewport = new Ext.Viewport({ - layout: 'border', - autoScroll: false, - items:[frmDetails, FieldsPanel, southPanel] - }); + comboDbConnections = new Ext.form.ComboBox({ + id: 'REP_TAB_CONNECTION', + fieldLabel: _("ID_DB_CONNECTION"), + hiddenName: 'DBS_UID', + store: dbConnectionsStore, + valueField: 'DBS_UID', + displayField: 'DBS_NAME', + triggerAction: 'all', + editable: false, + mode: 'local' + }); - /*** Editing routines ***/ - if (TABLE !== false) { - Ext.getCmp('REP_TAB_NAME').setValue(TABLE.ADD_TAB_NAME); - Ext.getCmp('REP_TAB_NAME').setDisabled(false); - Ext.getCmp('REP_TAB_DSC').setValue(TABLE.ADD_TAB_DESCRIPTION); + var tbar = new Array(); + var items = new Array(); - loadTableRowsFromArray(TABLE.FIELDS); - } + items.push({ + id: 'REP_TAB_NAME', + fieldLabel: _("ID_TABLE_NAME") + ' (' + _("ID_AUTO_PREFIX") + ' "PMT_")', + xtype: 'textfield', + emptyText: _("ID_SET_A_TABLE_NAME"), + width: 250, + autoCreate: {tag: "input", type: "text", autocomplete: "off", maxlength: sizeTableName}, + stripCharsRe: /(\W+)/g, + listeners: { + change: function () { + this.setValue(this.getValue().toUpperCase()); + } + } + }); + items.push({ + id: 'REP_TAB_DSC', + fieldLabel: _("ID_DESCRIPTION"), + xtype: 'textarea', + emptyText: _("ID_SET_TABLE_DESCRIPTION"), + width: 250, + height: 40, + allowBlank: true + }); + items.push({ + layout: "column", + style: "margin-left: 255px;", + hidden: (dataNumRows > 0) ? false : true, + items: [ + { + xtype: "checkbox", + id: "chkKeepData", + name: "chkKeepData", + checked: true, + boxLabel: _("ID_PMTABLE_DATA_KEEP") + } + ] + }); - var newEl, - tpl = new Ext.Template( - '' - ); + var frmDetails = new Ext.FormPanel({ + id: 'frmDetails', + region: 'north', + labelWidth: 250, + labelAlign: 'right', + title: ADD_TAB_UID ? _('ID_PMTABLE') : _('ID_NEW_PMTABLE'), + bodyStyle: 'padding:10px', + frame: true, + height: 170, + items: items, + waitMsgTarget: true, + defaults: { + allowBlank: false, + msgTarget: 'side', + align: 'center' + } + }); + + southPanel = new Ext.FormPanel({ + region: 'south', + buttons: [ + { + text: TABLE === false ? _("ID_CREATE") : _("ID_UPDATE"), + handler: function () { + if (TABLE === false || dataNumRows == 0 || Ext.getCmp("chkKeepData").checked == true) { + if (TABLE !== false && TABLE.ADD_TAB_NAME !== Ext.getCmp('REP_TAB_NAME').getValue().trim()) { + PMExt.confirm(_('ID_CONFIRM'), _('ID_THE_NAME_CHANGE_MAY_CAUSE_DATA_LOSS'), createReportTable); + } else { + createReportTable(); + } + } else { + PMExt.confirm(_('ID_CONFIRM'), _('ID_PMTABLE_SAVE_AND_DATA_LOST'), createReportTable); + } + } + }, { + text: _("ID_CANCEL"), + handler: function () { + proParam = PRO_UID !== false ? '?PRO_UID=' + PRO_UID : ''; + location.href = '../pmTables' + proParam; + } + } + ] + }); + + var viewport = new Ext.Viewport({ + layout: 'border', + autoScroll: false, + items: [frmDetails, FieldsPanel, southPanel] + }); + + /*** Editing routines ***/ + if (TABLE !== false) { + Ext.getCmp('REP_TAB_NAME').setValue(TABLE.ADD_TAB_NAME); + Ext.getCmp('REP_TAB_NAME').setDisabled(false); + Ext.getCmp('REP_TAB_DSC').setValue(TABLE.ADD_TAB_DESCRIPTION); + loadTableRowsFromArray(TABLE.FIELDS); + } + + var newEl, + tpl = new Ext.Template( + '' + ); Ext.getCmp("chkKeepData").on('check', function () { - if (dataNumRows > 0 && Ext.getCmp("chkKeepData").checked === false) { - newEl = tpl.insertFirst(document.getElementById('assignedGrid')); - Ext.fly('hideWarning').on('click', function() { - Ext.fly(newEl).slideOut('t', {useDisplay:true}); - }); - Ext.fly(newEl).slideIn(); - } else if (Ext.getCmp("chkKeepData").checked === true) { - Ext.fly(newEl).slideOut('t', {useDisplay:true}); - } + if (dataNumRows > 0 && Ext.getCmp("chkKeepData").checked === false) { + newEl = tpl.insertFirst(document.getElementById('assignedGrid')); + Ext.fly('hideWarning').on('click', function () { + Ext.fly(newEl).slideOut('t', {useDisplay: true}); + }); + Ext.fly(newEl).slideIn(); + } else if (Ext.getCmp("chkKeepData").checked === true) { + Ext.fly(newEl).slideOut('t', {useDisplay: true}); + } }); }); // actions - function createReportTable() { - var tableName = Ext.getCmp('REP_TAB_NAME').getValue().trim(); - var tableDescription = Ext.getCmp('REP_TAB_DSC').getValue().trim(); + var tableName = Ext.getCmp('REP_TAB_NAME').getValue().trim(); + var tableDescription = Ext.getCmp('REP_TAB_DSC').getValue().trim(); - //validate table name - if (tableName == '') { - Ext.getCmp('REP_TAB_NAME').focus(); - PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_IS_REQUIRED'), function(){ - Ext.getCmp('REP_TAB_NAME').focus(); - }); - return false; - } - - // validate table name length - if(tableName.length < 4) { - PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_TOO_SHORT'), function(){ - Ext.getCmp('REP_TAB_NAME').focus(); - }); - return false; - } - - var allRows = assignedGrid.getStore(); - var columns = new Array(); - var hasSomePrimaryKey = false; - - //validate columns count - if(allRows.getCount() == 0) { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT7')); - return false; - } - var fieldsNames = new Array(); - // Reserved Words - var reservedWords = new Array('DESC'); - - - for (var i = 0; i < allRows.getCount(); i++) { - row = allRows.getAt(i); - - if (in_array(row.data['field_name'], fieldsNames)) { - PMExt.error(_('ID_ERROR'),_('ID_PMTABLES_ALERT1') + ' ' + row.data['field_name']+''); - return false; - } - - for (j=0; j < reservedWords.length; j++) { - if (row.data['field_name'] == reservedWords[j]) { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_RESERVED_FIELDNAME_WARNING', reservedWords[j])); + //validate table name + if (tableName == '') { + Ext.getCmp('REP_TAB_NAME').focus(); + PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_IS_REQUIRED'), function () { + Ext.getCmp('REP_TAB_NAME').focus(); + }); return false; - } } - // validate that fieldname is not empty - if(row.data['field_name'].trim() == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT2')); - return false; + // validate table name length + if (tableName.length < 4) { + PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_TOO_SHORT'), function () { + Ext.getCmp('REP_TAB_NAME').focus(); + }); + return false; } - if(row.data['field_label'].trim() == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT3')); - return false; + var allRows = assignedGrid.getStore(); + var columns = new Array(); + var hasSomePrimaryKey = false; + + //validate columns count + if (allRows.getCount() == 0) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT7')); + return false; } + var fieldsNames = new Array(); + // Reserved Words + var reservedWords = new Array('DESC'); - if (row.data['field_type'] == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT4') + ' '+row.data['field_name']+''); - return false; - } - // validate field size for varchar & int column types - if ((row.data['field_type'] == 'VARCHAR' || row.data['field_type'] == 'INTEGER') && row.data['field_size'] == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT5')+' '+row.data['field_name']+' ('+row.data['field_type']+').'); - return false; - } + for (var i = 0; i < allRows.getCount(); i++) { + row = allRows.getAt(i); - if (row.data['field_index']) { - hasSomeIndex = true; - } - - if (row.data['field_key']) { - hasSomePrimaryKey = true; - } - fieldsNames.push(row.data['field_name']); - columns.push(row.data); - } - - if (!hasSomePrimaryKey) { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT6')); - return; - } - - Ext.Msg.show({ - title : '', - msg : TABLE !== false ? _('ID_UPDATING_TABLE') : _('ID_CREATING_TABLE'), - wait:true, - waitConfig: {interval:500} - }); - - var p = { - REP_TAB_UID: (TABLE !== false)? TABLE.ADD_TAB_UID : "", - PRO_UID: "", - REP_TAB_NAME: (TABLE !== false)? tableName : "PMT_" + tableName, - REP_TAB_NAME_OLD_NAME: "PMT_" + ((TABLE !== false) ? TABLE.ADD_TAB_NAME : tableName), - REP_TAB_DSC: tableDescription, - REP_TAB_CONNECTION: "workflow", - REP_TAB_TYPE: "", - REP_TAB_GRID: "", - columns: Ext.util.JSON.encode(columns) - }; - - if (dataNumRows > 0) { - p.keepData = (Ext.getCmp("chkKeepData").checked == true)? 1 : 0; - } - - Ext.Ajax.request({ - url: '../pmTablesProxy/save', - params: p, - success: function(resp){ - try { - result = Ext.util.JSON.decode(resp.responseText); - Ext.MessageBox.hide(); - if (result.success) { - proParam = PRO_UID !== false ? '?PRO_UID='+PRO_UID : ''; - location.href = '../pmTables' + proParam; //history.back(); - } else { - PMExt.error(_('ID_ERROR'), result.type +': '+result.msg); - if (window.console && window.console.firebug) { - window.console.log(result.msg); - window.console.log(result.trace); - } + if (in_array(row.data['field_name'], fieldsNames)) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT1') + ' ' + row.data['field_name'] + ''); + return false; } - } catch (e) { - if (dbg) { - _showDebugWin(resp.responseText); - } else { - PMExt.error( _('ID_ERROR'), _('ID_SOMETHING_WRONG')); + + for (j = 0; j < reservedWords.length; j++) { + if (row.data['field_name'] == reservedWords[j]) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_RESERVED_FIELDNAME_WARNING', reservedWords[j])); + return false; + } } - } - }, - failure: function(obj, resp){ - Ext.Msg.alert( _('ID_ERROR'), resp.result.msg); + + // validate that fieldname is not empty + if (row.data['field_name'].trim() == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT2')); + return false; + } + + if (row.data['field_label'].trim() == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT3')); + return false; + } + + if (row.data['field_type'] == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT4') + ' ' + row.data['field_name'] + ''); + return false; + } + + // validate field size for varchar & int column types + if ((row.data['field_type'] == 'VARCHAR' || row.data['field_type'] == 'INTEGER') && row.data['field_size'] == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT5') + ' ' + row.data['field_name'] + ' (' + row.data['field_type'] + ').'); + return false; + } + + if (row.data['field_index']) { + hasSomeIndex = true; + } + + if (row.data['field_key']) { + hasSomePrimaryKey = true; + } + fieldsNames.push(row.data['field_name']); + columns.push(row.data); } - }); + + if (!hasSomePrimaryKey) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT6')); + return; + } + + Ext.Msg.show({ + title: '', + msg: TABLE !== false ? _('ID_UPDATING_TABLE') : _('ID_CREATING_TABLE'), + wait: true, + waitConfig: {interval: 500} + }); + + var p = { + REP_TAB_UID: (TABLE !== false) ? TABLE.ADD_TAB_UID : "", + PRO_UID: "", + REP_TAB_NAME: (TABLE !== false) ? tableName : "PMT_" + tableName, + REP_TAB_NAME_OLD_NAME: "PMT_" + ((TABLE !== false) ? TABLE.ADD_TAB_NAME : tableName), + REP_TAB_DSC: tableDescription, + REP_TAB_CONNECTION: "workflow", + REP_TAB_TYPE: "", + REP_TAB_GRID: "", + columns: Ext.util.JSON.encode(columns) + }; + + if (dataNumRows > 0) { + p.keepData = (Ext.getCmp("chkKeepData").checked == true) ? 1 : 0; + } + + Ext.Ajax.request({ + url: '../pmTablesProxy/save', + params: p, + success: function (resp) { + try { + result = Ext.util.JSON.decode(resp.responseText); + Ext.MessageBox.hide(); + if (result.success) { + proParam = PRO_UID !== false ? '?PRO_UID=' + PRO_UID : ''; + location.href = '../pmTables' + proParam; //history.back(); + } else { + PMExt.error(_('ID_ERROR'), result.type + ': ' + result.msg); + if (window.console && window.console.firebug) { + window.console.log(result.msg); + window.console.log(result.trace); + } + } + } catch (e) { + if (dbg) { + _showDebugWin(resp.responseText); + } else { + PMExt.error(_('ID_ERROR'), _('ID_SOMETHING_WRONG')); + } + } + }, + failure: function (obj, resp) { + Ext.Msg.alert(_('ID_ERROR'), resp.result.msg); + } + }); } //end createReportTable function _showDebugWin(content) { - dbgWin = new Ext.Window({ - title: '', - id: 'dbgWin', - layout: 'fit', - width: 570, - height: 400, - modal: false, - autoScroll: true, - maximizable: true, - //closeAction: 'hide', - maximizable : false, - items: [], - x: 0, - y: 0, - html: '
' + content + '
' - }); + dbgWin = new Ext.Window({ + title: '', + id: 'dbgWin', + layout: 'fit', + width: 570, + height: 400, + modal: false, + autoScroll: true, + maximizable: true, + maximizable: false, + items: [], + x: 0, + y: 0, + html: '
' + content + '
' + }); - dbgWin.show(); + dbgWin.show(); } function addColumn() { - var PMRow = assignedGrid.getStore().recordType; - //var meta = mapPMFieldType(records[i].data['FIELD_UID']); - var row = new PMRow({ - uid : '', - field_uid : '', - field_dyn : '', - field_name : '', - field_label: '', - field_type : '', - field_size : '', - field_key : 0, - field_index : 0, - field_null : 1 - }); - var len = assignedGrid.getStore().data.length; + var PMRow = assignedGrid.getStore().recordType; + var row = new PMRow({ + uid: '', + field_uid: '', + field_dyn: '', + field_name: '', + field_label: '', + field_type: '', + field_size: '', + field_key: 0, + field_index: 0, + field_null: 1 + }); + var len = assignedGrid.getStore().data.length; - editor.stopEditing(); - store.insert(len, row); - assignedGrid.getView().refresh(); - assignedGrid.getSelectionModel().selectRow(len); - editor.startEditing(len); + editor.stopEditing(); + store.insert(len, row); + assignedGrid.getView().refresh(); + assignedGrid.getSelectionModel().selectRow(len); + editor.startEditing(len); } function editColumn() { - var row = Ext.getCmp('assignedGrid').getSelectionModel().getSelected(); - var selIndex = store.indexOfId(row.id); - editor.stopEditing(); - assignedGrid.getView().refresh(); - assignedGrid.getSelectionModel().selectRow(selIndex); - editor.startEditing(selIndex); + var row = Ext.getCmp('assignedGrid').getSelectionModel().getSelected(); + var selIndex = store.indexOfId(row.id); + editor.stopEditing(); + assignedGrid.getView().refresh(); + assignedGrid.getSelectionModel().selectRow(selIndex); + editor.startEditing(selIndex); } function removeColumn() { - PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELD'), function(){ - var records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); - Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); - }); + PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELD'), function () { + var records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); + Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); + }); } function editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, fieldIndex, fieldInc, sizeEdit) @@ -1062,11 +1045,11 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, f //Numbers if (fieldTypeValue == "INTEGER" || fieldTypeValue == "BIGINT") { - //Enable All + //Enable All } if (fieldTypeValue == "TINYINT" || fieldTypeValue == "SMALLINT") { - swSize = 0; + swSize = 0; } if (fieldTypeValue == "DECIMAL" || fieldTypeValue == "FLOAT") { @@ -1076,10 +1059,10 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, f } if (fieldTypeValue == "DOUBLE" || fieldTypeValue == "REAL") { - swSize = 0; - swPK = 0; - swAI = 0; - swI = 0; + swSize = 0; + swPK = 0; + swAI = 0; + swI = 0; } //String @@ -1149,190 +1132,191 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldNull, fieldPrimaryKey, f } } -////ASSIGNBUTON FUNCTIONALITY -AssignFieldsAction = function(){ - records = Ext.getCmp('availableGrid').getSelectionModel().getSelections(); +//Assign button functionality +AssignFieldsAction = function () { + var records, i; - for(i=0; i < records.length; i++){ - var PMRow = assignedGrid.getStore().recordType; - var meta = mapPMFieldType(records[i].data['FIELD_UID']); - var row = new PMRow({ - uid : '', - field_uid : records[i].data['FIELD_UID'], - field_dyn : records[i].data['FIELD_NAME'], - field_name : records[i].data['FIELD_NAME'].toUpperCase(), - field_label : records[i].data['FIELD_NAME'].toUpperCase(), - field_type : meta.type, - field_size : meta.size, - field_key : 0, - field_index : 0, - field_null : 1 - }); + records = Ext.getCmp('availableGrid').getSelectionModel().getSelections(); - store.add(row); - } + for (i = 0; i < records.length; i++) { + var PMRow = assignedGrid.getStore().recordType; + var meta = mapPMFieldType(records[i].data['FIELD_UID']); + var row = new PMRow({ + uid: '', + field_uid: records[i].data['FIELD_UID'], + field_dyn: records[i].data['FIELD_NAME'], + field_name: records[i].data['FIELD_NAME'].toUpperCase(), + field_label: records[i].data['FIELD_NAME'].toUpperCase(), + field_type: meta.type, + field_size: meta.size, + field_key: 0, + field_index: 0, + field_null: 1 + }); - //remove from source grid - Ext.each(records, Ext.getCmp('availableGrid').store.remove, Ext.getCmp('availableGrid').store); + store.add(row); + } + + //remove from source grid + Ext.each(records, Ext.getCmp('availableGrid').store.remove, Ext.getCmp('availableGrid').store); }; //RemoveButton Functionality -RemoveFieldsAction = function(){ +RemoveFieldsAction = function () { - records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); - var PMRow = availableGrid.getStore().recordType; - for(i=0; i < records.length; i++){ - if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { - var row = new PMRow({ - FIELD_UID : records[i].data['field_uid'], - FIELD_NAME : records[i].data['field_dyn'] - }); - availableGrid.getStore().add(row); - } else { - records[i] = null; + records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); + var PMRow = availableGrid.getStore().recordType; + for (i = 0; i < records.length; i++) { + if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { + var row = new PMRow({ + FIELD_UID: records[i].data['field_uid'], + FIELD_NAME: records[i].data['field_dyn'] + }); + availableGrid.getStore().add(row); + } else { + records[i] = null; + } } - } - //remove from source grid - Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); + //remove from source grid + Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); }; //AssignALLButton Functionality -AssignAllFieldsAction = function(){ - var available = Ext.getCmp('availableGrid'); - var allRows = available.getStore(); - var arrAux = new Array(); - records = new Array() +AssignAllFieldsAction = function () { + var available = Ext.getCmp('availableGrid'); + var allRows = available.getStore(); + var arrAux = new Array(); + records = new Array() - if (allRows.getCount() > 0){ - var PMRow = assignedGrid.getStore().recordType; - for (i=0; i < allRows.getCount(); i++){ - records[i] = allRows.getAt(i); - var meta = mapPMFieldType(records[i].data['FIELD_UID']); - var row = new PMRow({ - uid : '', - field_uid : records[i].data['FIELD_UID'], - field_dyn : records[i].data['FIELD_NAME'], - field_name : records[i].data['FIELD_NAME'].toUpperCase(), - field_label : records[i].data['FIELD_NAME'].toUpperCase(), - field_type : meta.type, - field_size : meta.size, - field_key : 0, - field_index : 0, - field_null : 1 - }); + if (allRows.getCount() > 0) { + var PMRow = assignedGrid.getStore().recordType; + for (i = 0; i < allRows.getCount(); i++) { + records[i] = allRows.getAt(i); + var meta = mapPMFieldType(records[i].data['FIELD_UID']); + var row = new PMRow({ + uid: '', + field_uid: records[i].data['FIELD_UID'], + field_dyn: records[i].data['FIELD_NAME'], + field_name: records[i].data['FIELD_NAME'].toUpperCase(), + field_label: records[i].data['FIELD_NAME'].toUpperCase(), + field_type: meta.type, + field_size: meta.size, + field_key: 0, + field_index: 0, + field_null: 1 + }); - store.add(row); + store.add(row); + } + //remove from source grid + Ext.each(records, Ext.getCmp('availableGrid').store.remove, Ext.getCmp('availableGrid').store); } - //remove from source grid - Ext.each(records, Ext.getCmp('availableGrid').store.remove, Ext.getCmp('availableGrid').store); - } }; //RevomeALLButton Functionality -RemoveAllFieldsAction = function(){ - var allRows = Ext.getCmp('assignedGrid').getStore(); - var records = new Array(); - if (allRows.getCount() > 0) { - var PMRow = availableGrid.getStore().recordType; - for (var i=0; i < allRows.getCount(); i++){ - records[i] = allRows.getAt(i); - if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { - var row = new PMRow({ - FIELD_UID : records[i].data['field_uid'], - FIELD_NAME : records[i].data['field_dyn'] - }); - availableGrid.getStore().add(row); - } else { - records[i] = null; - } +RemoveAllFieldsAction = function () { + var allRows = Ext.getCmp('assignedGrid').getStore(); + var records = new Array(); + if (allRows.getCount() > 0) { + var PMRow = availableGrid.getStore().recordType; + for (var i = 0; i < allRows.getCount(); i++) { + records[i] = allRows.getAt(i); + if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { + var row = new PMRow({ + FIELD_UID: records[i].data['field_uid'], + FIELD_NAME: records[i].data['field_dyn'] + }); + availableGrid.getStore().add(row); + } else { + records[i] = null; + } + } + //remove from source grid + Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); } - //remove from source grid - Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); - } }; // drag & drop handler -var DDLoadFields = function(){ - var availableGridDropTargetEl = availableGrid.getView().scroller.dom; - var availableGridDropTarget = new Ext.dd.DropTarget(availableGridDropTargetEl, { - ddGroup : 'availableGridDDGroup', - notifyDrop : function(ddSource, e, data){ +var DDLoadFields = function () { + var availableGridDropTargetEl = availableGrid.getView().scroller.dom; + var availableGridDropTarget = new Ext.dd.DropTarget(availableGridDropTargetEl, { + ddGroup: 'availableGridDDGroup', + notifyDrop: function (ddSource, e, data) { - var records = ddSource.dragData.selections; - var PMRow = availableGrid.getStore().recordType; + var records = ddSource.dragData.selections; + var PMRow = availableGrid.getStore().recordType; - for (i=0; i < records.length; i++){ - if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { - var row = new PMRow({ - FIELD_UID: records[i].data['field_uid'], - FIELD_NAME: records[i].data['field_dyn'] - }); - availableGrid.getStore().add(row); - } else if (records[i].data['field_dyn'] != '') { - records[i] = null; + for (i = 0; i < records.length; i++) { + if (records[i].data['field_dyn'] != '' && records[i].data['field_name'] != 'APP_UID' && records[i].data['field_name'] != 'APP_NUMBER' && records[i].data['field_name'] != 'ROW') { + var row = new PMRow({ + FIELD_UID: records[i].data['field_uid'], + FIELD_NAME: records[i].data['field_dyn'] + }); + availableGrid.getStore().add(row); + } else if (records[i].data['field_dyn'] != '') { + records[i] = null; + } + } + + Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store); + return true; } - } + }); - Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store); - return true; - } - }); + //droptarget on grid forassignment + var assignedGridDropTargetEl = assignedGrid.getView().scroller.dom; + var assignedGridDropTarget = new Ext.dd.DropTarget(assignedGridDropTargetEl, { + ddGroup: 'assignedGridDDGroup', + notifyDrop: function (ddSource, e, data) { - //droptarget on grid forassignment - var assignedGridDropTargetEl = assignedGrid.getView().scroller.dom; - var assignedGridDropTarget = new Ext.dd.DropTarget(assignedGridDropTargetEl, { - ddGroup : 'assignedGridDDGroup', - notifyDrop : function(ddSource, e, data){ + var records = ddSource.dragData.selections; + var PMRow = assignedGrid.getStore().recordType; - var records = ddSource.dragData.selections; - var PMRow = assignedGrid.getStore().recordType; + //add on target grid + for (i = 0; i < records.length; i++) { + var meta = mapPMFieldType(records[i].data['FIELD_UID']); + var row = new PMRow({ + uid: '', + field_uid: records[i].data['FIELD_UID'], + field_dyn: records[i].data['FIELD_NAME'], + field_name: records[i].data['FIELD_NAME'].toUpperCase(), + field_label: records[i].data['FIELD_NAME'].toUpperCase(), + field_type: meta.type, + field_size: meta.size, + field_key: 0, + field_index: 0, + field_null: 1 + }); - //add on target grid - for (i=0; i < records.length; i++){ - //arrAux[r] = records[r].data['FIELD_UID']; - var meta = mapPMFieldType(records[i].data['FIELD_UID']); - var row = new PMRow({ - uid : '', - field_uid : records[i].data['FIELD_UID'], - field_dyn : records[i].data['FIELD_NAME'], - field_name : records[i].data['FIELD_NAME'].toUpperCase(), - field_label : records[i].data['FIELD_NAME'].toUpperCase(), - field_type : meta.type, - field_size : meta.size, - field_key : 0, - field_index : 0, - field_null : 1 - }); + store.add(row); + } + //remove from source grid + Ext.each(records, availableGrid.store.remove, availableGrid.store); - store.add(row); - } - //remove from source grid - Ext.each(records, availableGrid.store.remove, availableGrid.store); - - return true; - } - }); - //sw_func_groups = true; + return true; + } + }); }; function loadTableRowsFromArray(records) { var PMRow = assignedGrid.getStore().recordType; - if (records.length == 0) return; - for (i=0;i('+ _('ID_OLD_VERSION') +')' : v; - }}); - cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable: true, width: 400, hidden: false, align: 'left', renderer: function (v, p, r) { - if (r.get('ADD_TAB_TAG')) { - tag = r.get('ADD_TAB_TAG').replace('plugin@', ''); - tag = tag.charAt(0).toUpperCase() + tag.slice(1); - switch(tag.toLowerCase()){ - case 'simplereport': - tag = _('ID_SIMPLE_REPORT'); - break; + cmodelColumns.push({id: 'ADD_TAB_UID', dataIndex: 'ADD_TAB_UID', hidden: true, hideable: false}); + cmodelColumns.push({dataIndex: 'ADD_TAB_TAG', hidden: true, hideable: false}); + cmodelColumns.push({header: _('ID_NAME'), dataIndex: 'ADD_TAB_NAME', width: 300, align: 'left', renderer: function (v, p, r) { + return r.get('TYPE') == 'CLASSIC' ? v + ' (' + _('ID_OLD_VERSION') + ')' : v; } - } - - v = Ext.util.Format.htmlEncode(v); + }); + cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable: true, width: 400, hidden: false, align: 'left', renderer: function (v, p, r) { + if (r.get('ADD_TAB_TAG')) { + tag = r.get('ADD_TAB_TAG').replace('plugin@', ''); + tag = tag.charAt(0).toUpperCase() + tag.slice(1); + switch (tag.toLowerCase()) { + case 'simplereport': + tag = _('ID_SIMPLE_REPORT'); + break; + } + } - return r.get("ADD_TAB_TAG") ? "" + tag + ": "+ v : v; - }}); - cmodelColumns.push({header: _('ID_TABLE_TYPE'), dataIndex: 'PRO_UID', width: 120, align:'left', renderer: function(v,p,r){ - color = r.get('PRO_UID') ? 'blue' : 'green'; - value = r.get('PRO_UID') ? _('ID_REPORT_TABLE') : _('ID_PMTABLE'); - return ''+value+' '; - }}); + v = Ext.util.Format.htmlEncode(v); + + return r.get("ADD_TAB_TAG") ? "" + tag + ": " + v : v; + } + }); + cmodelColumns.push({header: _('ID_TABLE_TYPE'), dataIndex: 'PRO_UID', width: 120, align: 'left', renderer: function (v, p, r) { + color = r.get('PRO_UID') ? 'blue' : 'green'; + value = r.get('PRO_UID') ? _('ID_REPORT_TABLE') : _('ID_PMTABLE'); + return '' + value + ' '; + } + }); cmodelColumns.push({dataIndex: "DBS_UID", hidden: true, hideable: false}); - cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align:'left', renderer: function (v, p, r) { - return '
' + v + '
'; - }}); + cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align: 'left', renderer: function (v, p, r) { + return '
' + v + '
'; + } + }); if (PRO_UID === false) { - cmodelColumns.push({header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 180, align:'left'}); + cmodelColumns.push({header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 180, align: 'left'}); } - cmodelColumns.push({header: _('ID_TYPE'), dataIndex: 'ADD_TAB_TYPE', width: 400, hidden:true, align:'left'}); + cmodelColumns.push({header: _('ID_TYPE'), dataIndex: 'ADD_TAB_TYPE', width: 400, hidden: true, align: 'left'}); + + cmodelColumns.push({header: _('ID_AVAILABLE_OFFLINE'), dataIndex: 'ADD_TAB_OFFLINE', width: 400, align: 'left', renderer: function (value) { + return value === "1" ? _('ID_YES') : _('ID_NO'); + } + }); cmodel = new Ext.grid.ColumnModel({ - defaults: { - width: 50, - sortable: true - }, - columns: cmodelColumns + defaults: { + width: 50, + sortable: true + }, + columns: cmodelColumns }); bbarpaging = new Ext.PagingToolbar({ @@ -327,53 +357,54 @@ Ext.onReady(function(){ pageSize: pageSize, store: store, displayInfo: true, - displayMsg: (PRO_UID? _('ID_GRID_PAGE_DISPLAYING_REPORTABLES_MESSAGE') : _('ID_GRID_PAGE_DISPLAYING_PMTABLES_MESSAGE')) + '    ', + displayMsg: (PRO_UID ? _('ID_GRID_PAGE_DISPLAYING_REPORTABLES_MESSAGE') : _('ID_GRID_PAGE_DISPLAYING_PMTABLES_MESSAGE')) + '    ', emptyMsg: _('ID_GRID_PAGE_NO_PMTABLES_MESSAGE'), - items: ['-',_('ID_PAGE_SIZE')+':',comboPageSize] + items: ['-', _('ID_PAGE_SIZE') + ':', comboPageSize] }); infoGrid = new Ext.grid.GridPanel({ - region: 'center', - layout: 'fit', - id: 'infoGrid', - height:100, - autoWidth : true, - title : (PRO_UID? _('ID_REPORT_TABLES') : _('ID_PMTABLE')), - stateful : true, - stateId : 'gridList', - enableColumnResize: true, - enableHdMenu: true, - frame:false, - columnLines: false, - viewConfig: { - forceFit:true - }, - store: store, - loadMask: true, - cm: cmodel, - sm: chkSelModel, - tbar: [ - newButton, - editButton, - deleteButton,'-', - dataButton,'-' , - importButton, - exportButton, - '->', - searchText, - clearTextButton, - searchButton], - bbar: bbarpaging, - listeners: { - rowdblclick: EditPMTable, - render: function(){ - this.loadMask = new Ext.LoadMask(this.body, {msg: _('ID_LOADING_GRID')}); - } - }, - view: new Ext.grid.GroupingView({ - forceFit:true, - groupTextTpl: '{text}' - }) + region: 'center', + layout: 'fit', + id: 'infoGrid', + height: 100, + autoWidth: true, + title: (PRO_UID ? _('ID_REPORT_TABLES') : _('ID_PMTABLE')), + stateful: true, + stateId: 'gridList', + enableColumnResize: true, + enableHdMenu: true, + frame: false, + columnLines: false, + viewConfig: { + forceFit: true + }, + store: store, + loadMask: true, + cm: cmodel, + sm: chkSelModel, + tbar: [ + newButton, + editButton, + deleteButton, '-', + dataButton, '-', + importButton, + exportButton, + offlineEnableDisable, + '->', + searchText, + clearTextButton, + searchButton], + bbar: bbarpaging, + listeners: { + rowdblclick: EditPMTable, + render: function () { + this.loadMask = new Ext.LoadMask(this.body, {msg: _('ID_LOADING_GRID')}); + } + }, + view: new Ext.grid.GroupingView({ + forceFit: true, + groupTextTpl: '{text}' + }) }); infoGrid.on('rowcontextmenu', function (grid, rowIndex, evt) { @@ -397,552 +428,584 @@ Ext.onReady(function(){ } else { externalOption.setDisabled(true); } - externalOption.setHidden((rowsSelected[0].get("TYPE") != "CLASSIC" && rowsSelected[0].get("DBS_UID") == "workflow")? false : true); + externalOption.setHidden((rowsSelected[0].get("TYPE") != "CLASSIC" && rowsSelected[0].get("DBS_UID") == "workflow") ? false : true); } - },this); + }, this); - infoGrid.on('contextmenu', function(evt){evt.preventDefault();}, this); - infoGrid.addListener('rowcontextmenu',onMessageContextMenu, this); + infoGrid.on('contextmenu', function (evt) { + evt.preventDefault(); + }, this); + infoGrid.addListener('rowcontextmenu', onMessageContextMenu, this); viewport = new Ext.Viewport({ - layout: 'fit', - autoScroll: false, - items: [infoGrid] + layout: 'fit', + autoScroll: false, + items: [infoGrid] }); infoGrid.store.load(); }); -//Funtion Handles Context Menu Opening +//Function Handles Context Menu Opening onMessageContextMenu = function (grid, rowIndex, e) { e.stopEvent(); var coords = e.getXY(); contextMenu.showAt([coords[0], coords[1]]); }; -/////JS FUNCTIONS +// JS Functions //Capitalize String Function -capitalize = function(s){ - s = s.toLowerCase(); - return s.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); +capitalize = function (s) { + s = s.toLowerCase(); + return s.replace(/(^|\s)([a-z])/g, function (m, p1, p2) { + return p1 + p2.toUpperCase(); + }); }; //Do Nothing Function -DoNothing = function(){}; +DoNothing = function () {}; //Load New PM Table Forms -NewReportTable = function() { - if(PRO_UID !== false) { - location.href = 'pmTables/edit?PRO_UID='+PRO_UID+'&tableType=report&flagProcessmap='+flagProcessmap; +NewReportTable = function () { + if (PRO_UID !== false) { + location.href = 'pmTables/edit?PRO_UID=' + PRO_UID + '&tableType=report&flagProcessmap=' + flagProcessmap; } else { - location.href = 'pmTables/edit?tableType=report&flagProcessmap='+flagProcessmap; + location.href = 'pmTables/edit?tableType=report&flagProcessmap=' + flagProcessmap; } }; -NewReportTableOld = function(){ - //location.href = 'reportTables/edit?PRO_UID='+PRO_UID+'&tableType=report'; - //parent.reportTables2(); - //parent.Pm.data.render.buildingBlocks.injector('reportTables2'); - location.href = 'reportTables/reportTables_Edit?PRO_UID='+PRO_UID; +NewReportTableOld = function () { + location.href = 'reportTables/reportTables_Edit?PRO_UID=' + PRO_UID; }; -newPMTable = function(){ - location.href = 'pmTables/edit?tableType=table'; +newPMTable = function () { + location.href = 'pmTables/edit?tableType=table'; }; -EditPMTable = function(){ - var row = Ext.getCmp('infoGrid').getSelectionModel().getSelected(); +EditPMTable = function () { + var row = Ext.getCmp('infoGrid').getSelectionModel().getSelected(); if (row.data.TYPE != 'CLASSIC') { - tableType = row.data.PRO_UID ? 'report' : 'table'; - proParam = PRO_UID !== false ? '&PRO_UID='+PRO_UID : ''; - location.href = 'pmTables/edit?id='+row.data.ADD_TAB_UID+'&flagProcessmap='+flagProcessmap+'&tableType=' + tableType + proParam; - } - else { //edit old report table - location.href = 'reportTables/reportTables_Edit?REP_TAB_UID='+row.data.ADD_TAB_UID + tableType = row.data.PRO_UID ? 'report' : 'table'; + proParam = PRO_UID !== false ? '&PRO_UID=' + PRO_UID : ''; + location.href = 'pmTables/edit?id=' + row.data.ADD_TAB_UID + '&flagProcessmap=' + flagProcessmap + '&tableType=' + tableType + proParam; + } else { //edit old report table + location.href = 'reportTables/reportTables_Edit?REP_TAB_UID=' + row.data.ADD_TAB_UID } }; //Confirm PM Table Deletion Tasks -DeletePMTable = function() { - var rows = Ext.getCmp('infoGrid').getSelectionModel().getSelections(); - var selections = new Array(); +DeletePMTable = function () { + var rows = Ext.getCmp('infoGrid').getSelectionModel().getSelections(); + var selections = new Array(); - for(var i=0; i' + _('ID_IMPORTING_ERROR') + '' + result.message, - items: [], - - buttons: [{ - text: 'Close', - handler: function () { - win.hide(); + if (result.success) { + PMExt.notify('', result.message); + } else { + win = new Ext.Window({ + id: 'windowImportingError', + applyTo: 'hello-win', + layout: 'fit', + width: 500, + height: 300, + closeAction: 'hide', + plain: true, + html: '

' + _('ID_IMPORTING_ERROR') + '

' + result.message, + items: [], + buttons: [{ + text: 'Close', + handler: function () { + win.hide(); + } + }] + }); + win.show(this); } - }] - }); - win.show(this); - } - w.close(); - infoGrid.store.reload(); - }, - failure: function (o, resp) { - w.close(); - infoGrid.store.reload(); - - var result = Ext.util.JSON.decode(resp.response.responseText); - if (result.errorType == 'warning') { - Ext.MessageBox.show({ - title: _('ID_WARNING_PMTABLES'), - width: 510, - height: 300, - msg: "
" + result.message.replace(/\n/g, '
') + "
", - buttons: Ext.MessageBox.OK, - animEl: 'mb9', - fn: function () { + w.close(); + infoGrid.store.reload(); }, - icon: Ext.MessageBox.INFO - }); - } else { - if (result.errorType == 'notice') { - Ext.MessageBox.alert(_("ID_ERROR"), result.message); - } else { - if (result.fromAdmin) { /* from admin tab */ - aOverwrite = result.arrayOverwrite; - aRelated = result.arrayRelated; - aMessage = result.arrayMessage; - pmtablesErrors(aOverwrite, aRelated, aMessage); - } else { /* from designer tab */ - aOverwrite = result.arrayOverwrite; - aRelated = result.arrayRelated; - aMessage = result.arrayMessage; - pmtablesErrors(aOverwrite, aRelated, aMessage); + failure: function (o, resp) { + w.close(); + infoGrid.store.reload(); + + var result = Ext.util.JSON.decode(resp.response.responseText); + if (result.errorType == 'warning') { + Ext.MessageBox.show({ + title: _('ID_WARNING_PMTABLES'), + width: 510, + height: 300, + msg: "
" + result.message.replace(/\n/g, '
') + "
", + buttons: Ext.MessageBox.OK, + animEl: 'mb9', + fn: function () { + }, + icon: Ext.MessageBox.INFO + }); + } else { + if (result.errorType == 'notice') { + Ext.MessageBox.alert(_("ID_ERROR"), result.message); + } else { + if (result.fromAdmin) { /* from admin tab */ + aOverwrite = result.arrayOverwrite; + aRelated = result.arrayRelated; + aMessage = result.arrayMessage; + pmtablesErrors(aOverwrite, aRelated, aMessage); + } else { /* from designer tab */ + aOverwrite = result.arrayOverwrite; + aRelated = result.arrayRelated; + aMessage = result.arrayMessage; + pmtablesErrors(aOverwrite, aRelated, aMessage); + } + } + } } - } + }); } + } else { + Ext.MessageBox.alert(_("ID_ERROR"), _("ID_FILE_UPLOAD_INCORRECT_EXTENSION")); } - }); - } - } else { - Ext.MessageBox.alert(_("ID_ERROR"), _("ID_FILE_UPLOAD_INCORRECT_EXTENSION")); - } - } - },{ - id: 'importPMTableButtonCancel', - text: TRANSLATIONS.ID_CANCEL, - handler: function(){ - w.close(); - } - }] - }) - ] - }); - w.show(); + } + }, { + id: 'importPMTableButtonCancel', + text: TRANSLATIONS.ID_CANCEL, + handler: function () { + w.close(); + } + }] + }) + ] + }); + w.show(); } //Load Export PM Tables Form -ExportPMTable = function(){ - var rows = Ext.getCmp('infoGrid').getSelectionModel().getSelections(); - var toExportRows = new Array(); +ExportPMTable = function () { + var rows = Ext.getCmp('infoGrid').getSelectionModel().getSelections(); + var toExportRows = new Array(); - for(var i=0; i