2015-04-01 18:01:40 -04:00
< ? php
2010-12-16 20:36:29 +00:00
2019-06-28 15:20:51 -04:00
use ProcessMaker\Model\Process ;
use ProcessMaker\Validation\MySQL57 ;
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'info' );
CLI :: taskDescription ( <<< EOT
2011-02-02 16:32:22 +00:00
Print information about the current system and any specified workspaces .
If no workspace is specified , show information about all available workspaces
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace-name' , true , true );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_info " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'workspace-backup' );
CLI :: taskDescription ( <<< EOT
2015-07-20 12:02:33 -04:00
Backup the specified workspace to a file .
2011-01-27 15:04:37 +00:00
2015-07-20 12:02:33 -04:00
BACKUP - FILE is the backup filename which will be created . If it contains
slashes , it will be treated as a path and filename , either absolute or relative .
Otherwise , it will be treated as a filename inside the " shared/backups " directory .
If no BACKUP - FILE is specified , it will use the workspace name as the filename .
2011-01-27 15:04:37 +00:00
A backup archive will contain all information about the specified workspace
2011-02-02 16:32:22 +00:00
so that it can be restored later . The archive includes a database dump and
all the workspace files .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace' , false );
CLI :: taskArg ( 'backup-file' , true );
2017-08-11 15:54:49 -04:00
CLI :: taskOpt ( " filesize " , " Split the backup file in multiple files which are compressed. The maximum size of these files is set to MAX-SIZE in megabytes. If MAX-SIZE is not set, then it is 1000 megabytes by default. It may be necessary to use this option if using a 32 bit Linux/UNIX system which limits its maximum file size to 2GB. This option does not work on Windows systems. " , " s: " , " filesize= " );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_workspace_backup " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'workspace-restore' );
CLI :: taskDescription ( <<< EOT
2015-07-20 12:02:33 -04:00
Restore a workspace from a backup file
2011-01-27 15:04:37 +00:00
2011-02-02 16:32:22 +00:00
BACKUP - FILE is the backup filename . If it contains slashes , it will be
treated as a path and filename , either absolute or relative . Otherwise , it
will be treated as a filename inside the 'shared/backups' directory .
2011-01-27 15:04:37 +00:00
2011-02-02 16:32:22 +00:00
Specify the WORKSPACE to restore to a different workspace name . Otherwise ,
it will restore to the same workspace name as the original backup .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'backup-file' , false );
CLI :: taskArg ( 'workspace' , true );
2011-02-17 20:51:26 +00:00
CLI :: taskOpt ( " overwrite " , " If a workspace already exists, overwrite it. " , " o " , " overwrite " );
2015-07-20 12:02:33 -04:00
CLI :: taskOpt ( " info " , " Show information about backup file, but do not restore any workspaces. " , " i " );
CLI :: taskOpt ( " multiple " , " Restore from multiple compressed backup files which are numbered. " , " m " );
CLI :: taskOpt ( " workspace " , " Specify which workspace to restore if multiple workspaces are present in the backup file.
2017-08-11 15:54:49 -04:00
Ex : - wworkflow . " , " w : " , " workspace = " );
CLI :: taskOpt ( " lang " , " Specify the language which will be used to rebuild the case cache list. If this option isn't included, then 'en' (English) will be used by default. " , " l: " , " lang= " );
2015-08-05 22:41:55 -04:00
CLI :: taskOpt ( " port " , " Specify the port number used by MySQL. If not specified, then the port 3306 will be used by default. " , " p: " );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_workspace_restore " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'cacheview-repair' );
CLI :: taskDescription ( <<< EOT
2011-02-02 16:32:22 +00:00
Create and populate the APP_CACHE_VIEW table
2011-01-27 15:04:37 +00:00
2011-02-02 16:32:22 +00:00
Specify the workspaces whose cases cache should be repaired . If no workspace
is specified , then the cases will be repaired on all available workspaces .
2011-01-27 15:04:37 +00:00
In order to improve the performance , ProcessMaker includes a cache of cases
in the table APP_CACHE_VIEW . This table must be in sync with the database
2011-02-02 16:32:22 +00:00
to present the correct information in the cases inbox . This command will
create the table and populate it with the right information . This only needs
to be used after upgrading ProcessMaker or if the cases inbox is out of sync .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
2017-08-11 15:54:49 -04:00
CLI :: taskOpt ( " lang " , " Specify the language to rebuild the case cache list. If not specified, then 'en' (English) will be used by default. \n Ex: -lfr (French) Ex: --lang=zh-CN (Mainland Chinese) " , " l: " , " lang= " );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_cacheview_upgrade " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'database-upgrade' );
CLI :: taskDescription ( <<< EOT
2011-02-02 16:32:22 +00:00
Upgrade or repair the database schema to match the latest version
2011-01-27 15:04:37 +00:00
2015-07-20 12:02:33 -04:00
Specify the workspaces whose database schema should be upgraded or repaired .
2011-02-02 16:32:22 +00:00
If no workspace is specified , then the database schema will be upgraded or
repaired on all available workspaces .
2011-01-27 15:04:37 +00:00
2015-07-20 12:02:33 -04:00
This command will read the system schema and attempt to modify the workspaces
tables to match this new schema . Use this command to fix corrupted database
2011-02-02 16:32:22 +00:00
schemas or after ProcessMaker has been upgraded , so the database schemas will
2015-07-20 12:02:33 -04:00
be changed to match the new ProcessMaker code .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_database_upgrade " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'plugins-database-upgrade' );
CLI :: taskDescription ( <<< EOT
2011-02-02 16:32:22 +00:00
Upgrade or repair the database schema for plugins to match the latest version
2011-01-27 15:04:37 +00:00
2015-07-20 12:02:33 -04:00
Specify the workspaces whose database schema should be upgraded or repaired
2011-02-02 16:32:22 +00:00
for plugins . If no workspace is specified , then the database schema will be
upgraded or repaired on all available workspaces .
2011-01-27 15:04:37 +00:00
2015-07-20 12:02:33 -04:00
This is the same as database - upgrade but it works with schemas provided
by plugins . This is useful if plugins are installed that include
database schemas .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_plugins_database_upgrade " );
2011-01-27 15:04:37 +00:00
CLI :: taskName ( 'translation-repair' );
CLI :: taskDescription ( <<< EOT
2011-02-02 16:32:22 +00:00
Upgrade or repair translations for the specified workspace ( s ) .
2011-01-27 15:04:37 +00:00
2011-02-02 16:32:22 +00:00
If no workspace is specified , the command will be run in all workspaces . More
than one workspace can be specified .
2011-11-08 17:37:47 -04:00
2011-01-27 15:04:37 +00:00
This command will go through each language installed in ProcessMaker and
2015-07-20 12:02:33 -04:00
update the translations for the workspace ( s ) to match the current version of
2011-02-02 16:32:22 +00:00
ProcessMaker .
2011-01-27 15:04:37 +00:00
EOT
);
CLI :: taskArg ( 'workspace-name' , true , true );
2017-08-03 16:10:59 -04:00
CLI :: taskOpt ( 'noxml' , 'If this option is enabled, the XML files will not be modified.' , 'NoXml' , 'no-xml' );
CLI :: taskOpt ( 'nomafe' , 'If this option is enabled, the Front End (BPMN Designer and Bootstrap Forms) translation file will not be modified.' , 'NoMafe' , 'no-mafe' );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " run_translation_upgrade " );
2011-01-27 15:04:37 +00:00
2013-06-25 14:36:02 -04:00
CLI :: taskName ( 'migrate-cases-folders' );
2013-06-25 13:50:38 -04:00
CLI :: taskDescription ( <<< EOT
2013-06-25 14:36:02 -04:00
Migrating cases folders of the workspaces
2013-06-25 13:50:38 -04:00
2013-06-25 14:36:02 -04:00
Specify the WORKSPACE to migrate from a existing workspace .
2013-06-25 13:50:38 -04:00
EOT
);
//CLI::taskArg('workspace', true);
2017-08-11 15:54:49 -04:00
CLI :: taskOpt ( " workspace " , " Select the workspace whose case folders will be migrated, if multiple workspaces are present in the server. \n Ex: -wworkflow. Ex: --workspace=workflow " , " w: " , " workspace= " );
2014-03-17 11:54:09 -04:00
CLI :: taskRun ( " runStructureDirectories " );
2013-06-25 13:50:38 -04:00
2016-03-03 17:33:55 -04:00
CLI :: taskName ( 'database-verify-consistency' );
CLI :: taskDescription ( <<< EOT
2017-03-21 15:58:21 -04:00
Verify that the database data is consistent so any database - upgrade operation will be executed flawlessly .
2016-03-03 17:33:55 -04:00
2017-03-21 15:58:21 -04:00
Specify the workspaces whose database schema should be verified . If none are specified , then
all available workspaces will be specified .
2016-03-03 17:33:55 -04:00
This command will read the system schema and data in an attempt to verify the database
integrity . Use this command to check the database data consistency before any costly
database - upgrade operation is planned to be executed .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_database_verify_consistency " );
CLI :: taskName ( 'database-verify-migration-consistency' );
CLI :: taskDescription ( <<< EOT
Verify that the already migrated data is consistent there was not
data loss of any kind
Specify the workspaces whose database schema should be verified .
The workspace parameter is mandatory .
This command will read the Cancelled , Completed , Inbox , My Inbox , participated
unassigned data in an attempt to verify the database integrity . It ' s recommended
to run this script after the migrate cases job has been executed .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_database_verify_migration_consistency " );
2016-06-14 13:43:49 -04:00
CLI :: taskName ( 'migrate-itee-to-dummytask' );
CLI :: taskDescription ( <<< EOT
Migrate the Intermediate throw Email Event to Dummy task
Specify the workspaces , the processes in this workspace will be updated .
If no workspace is specified , the command will be run in all workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_itee_to_dummytask " );
2018-05-09 10:16:05 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
CLI :: taskName ( " check-workspace-disabled-code " );
CLI :: taskDescription ( <<< EOT
Check disabled code for the specified workspace ( s ) .
2015-07-20 12:02:33 -04:00
This command checks the disabled code in the specified workspace ( s ) .
2014-11-19 16:47:22 -04:00
2015-07-20 12:02:33 -04:00
If no workspace is specified , the command will be run in all workspaces .
More than one workspace can be specified .
2014-11-19 16:47:22 -04:00
EOT
);
CLI :: taskArg ( " workspace-name " , true , true );
CLI :: taskRun ( " run_check_workspace_disabled_code " );
2015-03-04 18:42:47 -04:00
CLI :: taskName ( 'migrate-new-cases-lists' );
CLI :: taskDescription ( <<< EOT
Migrating the list cases schema to match the latest version
Specify the WORKSPACE to migrate from a existing workspace .
If no workspace is specified , then the tables schema will be upgraded or
migrate on all available workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_new_cases_lists " );
2016-06-22 11:27:43 -04:00
CLI :: taskName ( 'migrate-list-unassigned' );
CLI :: taskDescription ( <<< EOT
Migrating the AppCacheView table to match the latest version of List Unassigned
Specify the WORKSPACE to migrate from a existing workspace .
If no workspace is specified , then the tables schema will be upgraded or
migrate on all available workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_list_unassigned " );
2018-05-09 10:16:05 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
2017-01-10 17:51:08 -04:00
CLI :: taskName ( 'migrate-indexing-acv' );
CLI :: taskDescription ( <<< EOT
Migrate and populate the indexes for the new relation fields to avoid the use of APP_CACHE_VIEW table
Specify the workspace , the self - service cases in this workspace will be updated .
If no workspace is specified , the command will be running in all workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_indexing_acv " );
2016-07-07 14:25:04 -04:00
CLI :: taskName ( 'migrate-content' );
CLI :: taskDescription ( <<< EOT
Migrating the content schema to match the latest version
Specify the WORKSPACE to migrate from a existing workspace .
If no workspace is specified , then the tables schema will be upgraded or
migrate on all available workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
2017-08-11 15:54:49 -04:00
CLI :: taskOpt ( " lang " , " Specify the language to migrate the content data. If not specified, then 'en' (English) will be used by default. \n Ex: -lfr (French) Ex: --lang=zh-CN (Mainland Chinese) " , " l: " , " lang= " );
2016-07-07 14:25:04 -04:00
CLI :: taskRun ( " run_migrate_content " );
2017-07-26 16:15:32 -04:00
CLI :: taskName ( 'migrate-plugins-singleton-information' );
2017-07-21 16:56:44 -04:00
CLI :: taskDescription ( <<< EOT
Migrating the content schema to match the latest version
2017-07-26 16:15:32 -04:00
Specify the WORKSPACE to migrate from an existing workspace .
2017-07-21 16:56:44 -04:00
If no workspace is specified , then the tables schema will be upgraded or
2017-07-26 16:15:32 -04:00
migrated to all available workspaces .
2017-07-21 16:56:44 -04:00
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_plugin " );
2016-12-08 17:02:13 -05:00
CLI :: taskName ( 'migrate-self-service-value' );
CLI :: taskDescription ( <<< EOT
Migrate the Self - Service values to a new related table APP_ASSIGN_SELF_SERVICE_VALUE_GROUPS
Specify the workspaces , the self - service cases in this workspace will be updated .
If no workspace is specified , the command will be run in all workspaces .
EOT
);
CLI :: taskArg ( 'workspace' , true , true );
CLI :: taskRun ( " run_migrate_self_service_value " );
2017-02-22 12:12:22 -04:00
/**
* Complete the PRO_ID and USR_ID in the LIST_ * tables .
*
* It calls the list_ids @ cliListIds . php
*/
CLI :: taskName ( 'list-ids' );
CLI :: taskDescription ( <<< EOT
Complete the PRO_ID and USR_ID in the LIST_ * tables .
EOT
);
CLI :: taskOpt ( " lang " , " " , " lLANG " , " lang=LANG " );
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( " cliListIds " );
2017-10-09 16:19:12 -04:00
/**
* Upgrade the CONTENT table
*/
CLI :: taskName ( 'upgrade-content' );
CLI :: taskDescription ( <<< EOT
Upgrade the content table
EOT
);
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( " run_upgrade_content " );
2017-08-11 15:54:49 -04:00
/**
2017-08-10 21:36:31 -04:00
*
2017-08-09 14:49:21 -04:00
*/
CLI :: taskName ( 'regenerate-pmtable-classes' );
CLI :: taskDescription ( <<< EOT
Regenerate the class with incorrect reference
This method recursively finds all PHP files that reference the path PATH_DATA
incorrectly , which is caused by importing processes where the data directory
of ProcessMaker has different routes . Modified files are backed up with the
extension '.backup' in the same directory .
EOT
);
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( " regenerate_pmtable_classes " );
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-06-07 15:41:10 -04:00
/**
* Migrate the data from APP_HISTORY table to the new table APP_DATA_CHANGE_LOG .
*/
CLI :: taskName ( 'migrate-history-data' );
CLI :: taskDescription ( <<< EOT
Migrate the content of the APP_HISTORY table to the APP_DATA_CHANGE_LOG table .
EOT
);
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( 'migrate_history_data' );
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-06-07 15:41:10 -04:00
2018-07-18 10:17:29 -04:00
/**
* Remove the DYN_CONTENT_HISTORY
*/
CLI :: taskName ( 'clear-dyn-content-history-data' );
CLI :: taskDescription ( <<< EOT
Clear History of Use data from APP_HISTORY table
EOT
);
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( " run_clear_dyn_content_history_data " );
2018-11-06 15:43:32 -04:00
/**
* Sync JSON definition of the Forms with Input Documents information
*/
CLI :: taskName ( 'sync-forms-with-info-from-input-documents' );
CLI :: taskDescription ( <<< EOT
Sync JSON definition of the Forms with Input Documents information
EOT
);
CLI :: taskArg ( 'workspace' );
CLI :: taskRun ( " run_sync_forms_with_info_from_input_documents " );
2019-05-27 16:00:45 -04:00
/**
* Remove the deprecated files
*/
CLI :: taskName ( 'remove-unused-files' );
CLI :: taskDescription ( <<< EOT
Remove the deprecated files .
EOT
);
CLI :: taskRun ( " remove_deprecated_files " );
2019-06-28 15:20:51 -04:00
/*********************************************************************/
CLI :: taskName ( " check-queries-incompatibilities " );
CLI :: taskDescription ( <<< EOT
Check queries incompatibilities ( MySQL 5.7 ) for the specified workspace ( s ) .
This command checks the queries incompatibilities ( MySQL 5.7 ) in the specified workspace ( s ) .
If no workspace is specified , the command will be run in all workspaces .
More than one workspace can be specified .
EOT
);
CLI :: taskArg ( " workspace-name " , true , true );
CLI :: taskRun ( " run_check_queries_incompatibilities " );
/*********************************************************************/
2017-08-11 15:54:49 -04:00
/**
* Function run_info
2018-05-09 10:16:05 -04:00
*
* @ param array $args
* @ param array $opts
2017-08-11 15:54:49 -04:00
*/
function run_info ( $args , $opts )
{
WorkspaceTools :: printSysInfo ();
2018-05-09 10:16:05 -04:00
//Check if the command is executed by a specific workspace
$workspaces = get_workspaces_from_args ( $args );
if ( count ( $args ) === 1 ) {
$workspaces [ 0 ] -> printMetadata ( false );
} else {
foreach ( $workspaces as $workspace ) {
echo " \n " ;
passthru ( PHP_BINARY . " processmaker info " . $workspace -> name );
}
2017-08-11 15:54:49 -04:00
}
2010-12-16 20:36:29 +00:00
}
2017-10-09 16:19:12 -04:00
/**
* We will upgrade the CONTENT table
* If we apply the command for all workspaces , we will need to execute one by one by redefining the constants
* @ param string $args , workspaceName that we need to apply the upgrade - content
* @ param string $opts
*
* @ return void
*/
function run_upgrade_content ( $args , $opts )
{
//Check if the command is executed by a specific workspace
if ( count ( $args ) === 1 ) {
upgradeContent ( $args , $opts );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker upgrade-content ' . $workspace -> name );
2017-10-09 16:19:12 -04:00
}
}
}
2019-06-28 15:20:51 -04:00
2017-10-09 16:19:12 -04:00
/**
* This function will upgrade the CONTENT table for a workspace
* This function is executed only for one workspace
* @ param array $args , workspaceName that we will to apply the command
* @ param array $opts , we can send additional parameters
*
* @ return void
*/
function upgradeContent ( $args , $opts )
{
try {
//Load the attributes for the workspace
$arrayWorkspace = get_workspaces_from_args ( $args );
//Loop, read all the attributes related to the one workspace
$wsName = $arrayWorkspace [ key ( $arrayWorkspace )] -> name ;
Bootstrap :: setConstantsRelatedWs ( $wsName );
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
try {
G :: outRes ( " Upgrading content for " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
$workspace -> upgradeContent ( $workspace -> name , true );
} catch ( Exception $e ) {
G :: outRes ( " Errors upgrading content of workspace " . CLI :: info ( $workspace -> name ) . " : " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
}
} catch ( Exception $e ) {
G :: outRes ( CLI :: error ( $e -> getMessage ()) . " \n " );
}
}
2017-08-03 16:10:59 -04:00
/**
* We will repair the translation in the languages defined in the workspace
* Verify if we need to execute an external program for each workspace
* If we apply the command for all workspaces , we will need to execute one by one by redefining the constants
* @ param string $args , workspaceName that we need to apply the database - upgrade
* @ param string $opts
*
* @ return void
*/
2017-08-11 15:54:49 -04:00
function run_translation_upgrade ( $args , $opts )
{
2017-08-03 16:10:59 -04:00
$noXml = array_key_exists ( 'noxml' , $opts ) ? '--no-xml' : '' ;
$noMafe = array_key_exists ( 'nomafe' , $opts ) ? '--no-mafe' : '' ;
if ( ! empty ( $noXml )) {
$noMafe = ' ' . $noMafe ;
}
//Check if the command is executed by a specific workspace
if ( count ( $args ) === 1 ) {
translation_upgrade ( $args , $opts );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker translation-repair ' . $noXml . $noMafe . ' ' . $workspace -> name );
2017-08-03 16:10:59 -04:00
}
}
}
2017-02-15 16:26:02 +00:00
2017-08-03 16:10:59 -04:00
/**
* This function will regenerate the translation for a workspace
* This function is executed only for one workspace
* @ param array $args , workspaceName that we will to apply the command
* @ param array $opts , noxml and nomafe flags
*
* @ return void
*/
function translation_upgrade ( $args , $opts )
{
2010-12-16 20:36:29 +00:00
try {
2017-08-03 16:10:59 -04:00
//Load the attributes for the workspace
$arrayWorkspace = get_workspaces_from_args ( $args );
//Loop, read all the attributes related to the one workspace
$wsName = $arrayWorkspace [ key ( $arrayWorkspace )] -> name ;
Bootstrap :: setConstantsRelatedWs ( $wsName );
$workspaces = get_workspaces_from_args ( $args );
$flagUpdateXml = ( ! array_key_exists ( 'noxml' , $opts ));
$flagUpdateMafe = ( ! array_key_exists ( 'nomafe' , $opts ));
foreach ( $workspaces as $workspace ) {
try {
G :: outRes ( " Upgrading translation for " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
$workspace -> upgradeTranslation ( $flagUpdateXml , $flagUpdateMafe );
} catch ( Exception $e ) {
G :: outRes ( " Errors upgrading translation of workspace " . CLI :: info ( $workspace -> name ) . " : " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
}
2010-12-16 20:36:29 +00:00
} catch ( Exception $e ) {
2017-08-03 16:10:59 -04:00
G :: outRes ( CLI :: error ( $e -> getMessage ()) . " \n " );
2010-12-16 20:36:29 +00:00
}
}
2017-08-11 15:54:49 -04:00
function run_cacheview_upgrade ( $args , $opts )
{
$filter = new InputFilter ();
$opts = $filter -> xssFilterHard ( $opts );
$args = $filter -> xssFilterHard ( $args );
$workspaces = get_workspaces_from_args ( $args );
$lang = array_key_exists ( " lang " , $opts ) ? $opts [ 'lang' ] : 'en' ;
foreach ( $workspaces as $workspace ) {
try {
G :: outRes ( " Upgrading cache view for " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
$workspace -> upgradeCacheView ( true , false , $lang );
} catch ( Exception $e ) {
G :: outRes ( " Errors upgrading cache view of workspace " . CLI :: info ( $workspace -> name ) . " : " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
2010-12-16 20:36:29 +00:00
}
}
2017-08-11 15:54:49 -04:00
function run_plugins_database_upgrade ( $args , $opts )
{
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
try {
CLI :: logging ( " Upgrading plugins database for " . CLI :: info ( $workspace -> name ) . " \n " );
$workspace -> upgradePluginsDatabase ();
} catch ( Exception $e ) {
CLI :: logging ( " Errors upgrading plugins database: " . CLI :: error ( $e -> getMessage ()));
}
2010-12-17 14:35:56 +00:00
}
}
2017-08-11 15:54:49 -04:00
function run_database_export ( $args , $opts )
{
if ( count ( $args ) < 2 ) {
throw new Exception ( " Please provide a workspace name and a directory for export " );
}
$workspace = new WorkspaceTools ( $args [ 0 ]);
$workspace -> exportDatabase ( $args [ 1 ]);
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
function run_database_import ( $args , $opts )
{
throw new Exception ( " Not implemented " );
2010-12-16 20:36:29 +00:00
}
2017-05-15 14:12:26 -04:00
/**
* Check if we need to execute an external program for each workspace
2017-05-16 11:33:22 -04:00
* If we apply the command for all workspaces we will need to execute one by one by redefining the constants
2017-05-15 14:12:26 -04:00
* @ param string $args , workspaceName that we need to apply the database - upgrade
* @ param string $opts
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
function run_database_upgrade ( $args , $opts )
{
2017-05-15 14:12:26 -04:00
//Check if the command is executed by a specific workspace
if ( count ( $args ) === 1 ) {
database_upgrade ( 'upgrade' , $args );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker database-upgrade ' . $workspace -> name );
2017-05-15 14:12:26 -04:00
}
}
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
function run_database_check ( $args , $opts )
{
database_upgrade ( " check " , $args );
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
function run_migrate_new_cases_lists ( $args , $opts )
{
migrate_new_cases_lists ( " migrate " , $args , $opts );
2016-03-03 17:33:55 -04:00
}
2017-08-11 15:54:49 -04:00
function run_migrate_counters ( $args , $opts )
{
migrate_counters ( " migrate " , $args );
2015-03-04 18:42:47 -04:00
}
2017-08-11 15:54:49 -04:00
function run_migrate_list_unassigned ( $args , $opts )
{
migrate_list_unassigned ( " migrate " , $args , $opts );
2016-06-22 11:27:43 -04:00
}
2017-05-15 14:12:26 -04:00
/**
2017-05-16 11:33:22 -04:00
* This function is executed only by one workspace
2017-05-15 14:12:26 -04:00
* @ param string $command , the specific actions must be : upgrade | check
* @ param array $args , workspaceName for to apply the database - upgrade
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
function database_upgrade ( $command , $args )
{
$filter = new InputFilter ();
$command = $filter -> xssFilterHard ( $command );
$args = $filter -> xssFilterHard ( $args );
//Load the attributes for the workspace
$workspaces = get_workspaces_from_args ( $args );
$checkOnly = ( strcmp ( $command , " check " ) == 0 );
//Loop, read all the attributes related to the one workspace
$wsName = $workspaces [ key ( $workspaces )] -> name ;
Bootstrap :: setConstantsRelatedWs ( $wsName );
if ( $checkOnly ) {
print_r ( " Checking database in " . pakeColor :: colorize ( $wsName , " INFO " ) . " \n " );
} else {
print_r ( " Upgrading database in " . pakeColor :: colorize ( $wsName , " INFO " ) . " \n " );
}
foreach ( $workspaces as $workspace ) {
try {
$changes = $workspace -> upgradeDatabase ( $checkOnly );
if ( $changes != false ) {
if ( $checkOnly ) {
echo " > " . pakeColor :: colorize ( " Run upgrade " , " INFO " ) . " \n " ;
echo " Tables (add = " . count ( $changes [ 'tablesToAdd' ]);
echo " , alter = " . count ( $changes [ 'tablesToAlter' ]) . " ) " ;
echo " - Indexes (add = " . count ( $changes [ 'tablesWithNewIndex' ]) . " " ;
echo " , alter = " . count ( $changes [ 'tablesToAlterIndex' ]) . " ) \n " ;
} else {
echo " -> Schema fixed \n " ;
}
} else {
echo " > OK \n " ;
}
} catch ( Exception $e ) {
G :: outRes ( " > Error: " . CLI :: error ( $e -> getMessage ()) . " \n " );
2010-12-16 20:36:29 +00:00
}
}
}
2017-08-11 15:54:49 -04:00
function delete_app_from_table ( $con , $tableName , $appUid , $col = " APP_UID " )
{
$stmt = $con -> createStatement ();
$sql = " DELETE FROM " . $tableName . " WHERE " . $col . " =' " . $appUid . " ' " ;
$rs = $stmt -> executeQuery ( $sql , ResultSet :: FETCHMODE_NUM );
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
function run_drafts_clean ( $args , $opts )
{
echo " Cleaning drafts \n " ;
2011-11-08 17:37:47 -04:00
2017-08-11 15:54:49 -04:00
if ( count ( $args ) < 1 ) {
throw new Exception ( " Please specify a workspace name " );
}
$workspace = $args [ 0 ];
2011-11-08 17:37:47 -04:00
2017-08-11 15:54:49 -04:00
if ( ! file_exists ( PATH_DB . $workspace . '/db.php' )) {
throw new Exception ( 'Could not find workspace ' . $workspace );
}
2010-12-16 20:36:29 +00:00
2017-08-11 15:54:49 -04:00
$allDrafts = false ;
if ( count ( $args ) < 2 ) {
echo " Cases older them this much days will be deleted (ENTER for all): " ;
$days = rtrim ( fgets ( STDIN ), " \n " );
if ( $days == " " ) {
$allDrafts = true ;
}
} else {
$days = $args [ 1 ];
if ( strcmp ( $days , " all " ) == 0 ) {
$allDrafts = true ;
}
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
if ( ! $allDrafts && ( ! is_numeric ( $days ) || intval ( $days ) <= 0 )) {
throw new Exception ( " Days value is not valid: " . $days );
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
if ( $allDrafts ) {
echo " Removing all drafts \n " ;
} else {
echo " Removing drafts older than " . $days . " days \n " ;
}
/* Load the configuration from the workspace */
require_once ( PATH_DB . $workspace . '/db.php' );
require_once ( PATH_THIRDPARTY . 'propel/Propel.php' );
PROPEL :: Init ( PATH_METHODS . 'dbConnections/rootDbConnections.php' );
$con = Propel :: getConnection ( " root " );
$stmt = $con -> createStatement ();
if ( ! $allDrafts ) {
$dateSql = " AND DATE_SUB(CURDATE(),INTERVAL " . $days . " DAY) >= APP_CREATE_DATE " ;
} else {
$dateSql = " " ;
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
/* Search for all the draft cases */
$sql = " SELECT APP_UID FROM APPLICATION WHERE APP_STATUS='DRAFT' " . $dateSql ;
$appRows = $stmt -> executeQuery ( $sql , ResultSet :: FETCHMODE_ASSOC );
/* Tables to remove the cases from */
$tables = array (
" APPLICATION " ,
" APP_DELEGATION " ,
" APP_CACHE_VIEW " ,
" APP_THREAD " ,
" APP_DOCUMENT " ,
" APP_EVENT " ,
" APP_HISTORY " ,
" APP_MESSAGE "
);
echo " Found " . $appRows -> getRecordCount () . " cases to remove " ;
foreach ( $appRows as $row ) {
echo " . " ;
$appUid = $row [ 'APP_UID' ];
foreach ( $tables as $table ) {
delete_app_from_table ( $con , $table , $appUid );
}
delete_app_from_table ( $con , " CONTENT " , $appUid , " CON_ID " );
if ( file_exists ( PATH_DB . $workspace . '/files/' . $appUid )) {
echo " \n Removing files from " . $appUid . " \n " ;
G :: rm_dir ( PATH_DB . $workspace . '/files/' . $appUid );
}
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
echo " \n " ;
2010-12-16 20:36:29 +00:00
}
2017-08-11 15:54:49 -04:00
function run_workspace_backup ( $args , $opts )
{
2014-10-10 15:09:26 -04:00
$workspaces = array ();
if ( sizeof ( $args ) > 2 ) {
$filename = array_pop ( $args );
foreach ( $args as $arg ) {
2017-08-11 14:10:44 -04:00
$workspaces [] = new WorkspaceTools ( $arg );
2014-10-10 15:09:26 -04:00
}
2017-08-11 15:54:49 -04:00
} elseif ( sizeof ( $args ) > 0 ) {
2017-08-11 14:10:44 -04:00
$workspace = new WorkspaceTools ( $args [ 0 ]);
2014-10-10 15:09:26 -04:00
$workspaces [] = $workspace ;
if ( sizeof ( $args ) == 2 ) {
$filename = $args [ 1 ];
} else {
$filename = " { $workspace -> name } .tar " ;
}
} else {
throw new Exception ( " No workspace specified for backup " );
2011-01-27 15:04:37 +00:00
}
2013-02-18 11:09:37 -04:00
2014-10-10 15:09:26 -04:00
foreach ( $workspaces as $workspace ) {
if ( ! $workspace -> workspaceExists ()) {
throw new Exception ( " Workspace ' { $workspace -> name } ' not found " );
2014-10-27 11:25:17 -04:00
}
2014-10-10 15:09:26 -04:00
}
2014-10-27 11:25:17 -04:00
2014-10-10 15:09:26 -04:00
//If this is a relative path, put the file in the backups directory
2017-08-11 15:54:49 -04:00
if ( strpos ( $filename , " / " ) === false && strpos ( $filename , '\\' ) === false ) {
2014-10-10 15:09:26 -04:00
$filename = PATH_DATA . " backups/ $filename " ;
}
CLI :: logging ( " Backing up to $filename\n " );
$filesize = array_key_exists ( " filesize " , $opts ) ? $opts [ 'filesize' ] : - 1 ;
if ( $filesize >= 0 ) {
if ( ! Bootstrap :: isLinuxOs ()) {
2012-10-15 14:36:26 -04:00
CLI :: error ( " This is not a Linux enviroment, cannot use this filesize [-s] feature. \n " );
return ;
2014-10-10 15:09:26 -04:00
}
2017-08-11 15:54:49 -04:00
$multipleBackup = new MultipleFilesBackup ( $filename , $filesize ); //if filesize is 0 the default size will be took
2014-10-10 15:09:26 -04:00
//using new method
foreach ( $workspaces as $workspace ) {
$multipleBackup -> addToBackup ( $workspace );
}
$multipleBackup -> letsBackup ();
} else {
//ansient method to backup into one large file
2017-08-11 14:10:44 -04:00
$backup = WorkspaceTools :: createBackup ( $filename );
2011-02-17 20:51:26 +00:00
2014-10-10 15:09:26 -04:00
foreach ( $workspaces as $workspace ) {
$workspace -> backup ( $backup );
}
}
2011-02-17 20:51:26 +00:00
CLI :: logging ( " \n " );
2017-08-11 14:10:44 -04:00
WorkspaceTools :: printSysInfo ();
2014-10-10 15:09:26 -04:00
foreach ( $workspaces as $workspace ) {
CLI :: logging ( " \n " );
$workspace -> printMetadata ( false );
}
2011-01-10 14:14:31 +00:00
}
2017-08-11 15:54:49 -04:00
function run_workspace_restore ( $args , $opts )
{
if ( sizeof ( $args ) > 0 ) {
$filename = $args [ 0 ];
2013-02-18 11:09:37 -04:00
2017-08-11 15:54:49 -04:00
G :: verifyPath ( PATH_DATA . 'upgrade' , true );
2015-06-29 13:57:30 -04:00
2017-08-11 15:54:49 -04:00
if ( isset ( $args [ 1 ]) && strlen ( $args [ 1 ]) >= 30 ) {
eprintln ( " Invalid workspace name, insert a maximum of 30 characters. " , 'red' );
return ;
}
2016-11-04 17:10:36 -04:00
2017-08-11 15:54:49 -04:00
if ( strpos ( $filename , " / " ) === false && strpos ( $filename , '\\' ) === false ) {
$filename = PATH_DATA . " backups/ $filename " ;
if ( ! file_exists ( $filename ) && substr_compare ( $filename , " .tar " , - 4 , 4 , true ) != 0 ) {
$filename .= " .tar " ;
}
}
$info = array_key_exists ( " info " , $opts );
$lang = array_key_exists ( " lang " , $opts ) ? $opts [ 'lang' ] : 'en' ;
$port = array_key_exists ( " port " , $opts ) ? $opts [ 'port' ] : '' ;
2018-06-07 15:41:10 -04:00
$optionMigrateHistoryData = [
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-06-15 16:24:13 -04:00
'keepDynContent' => array_key_exists ( 'keep_dyn_content' , $args )
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-06-07 15:41:10 -04:00
];
2017-08-11 15:54:49 -04:00
if ( $info ) {
WorkspaceTools :: getBackupInfo ( $filename );
} else {
CLI :: logging ( " Restoring from $filename\n " );
$workspace = array_key_exists ( " workspace " , $opts ) ? $opts [ 'workspace' ] : null ;
$overwrite = array_key_exists ( " overwrite " , $opts );
$multiple = array_key_exists ( " multiple " , $opts );
$dstWorkspace = isset ( $args [ 1 ]) ? $args [ 1 ] : null ;
if ( ! empty ( $multiple )) {
if ( ! Bootstrap :: isLinuxOs ()) {
CLI :: error ( " This is not a Linux enviroment, cannot use this multiple [-m] feature. \n " );
return ;
}
MultipleFilesBackup :: letsRestore ( $filename , $workspace , $dstWorkspace , $overwrite );
} else {
$anotherExtention = " .* " ; //if there are files with and extra extention: e.g. <file>.tar.number
$multiplefiles = glob ( $filename . $anotherExtention ); // example: //shared/workflow_data/backups/myWorkspace.tar.*
if ( count ( $multiplefiles ) > 0 ) {
CLI :: error ( " Processmaker found these files: . \n " );
foreach ( $multiplefiles as $index => $value ) {
CLI :: logging ( $value . " \n " );
}
CLI :: error ( " Please, you should use -m parameter to restore them. \n " );
return ;
}
2018-06-07 15:41:10 -04:00
WorkspaceTools :: restore ( $filename , $workspace , $dstWorkspace , $overwrite , $lang , $port , $optionMigrateHistoryData );
2017-08-11 15:54:49 -04:00
}
}
2015-06-29 13:57:30 -04:00
} else {
throw new Exception ( " No workspace specified for restore " );
2017-08-11 15:54:49 -04:00
}
2011-01-14 23:11:13 +00:00
}
2018-05-09 10:16:05 -04:00
/**
* Migrating cases folders of the workspaces
*
* @ param array $command
* @ param array $args
*/
2017-08-11 15:54:49 -04:00
function runStructureDirectories ( $command , $args )
{
2013-06-25 13:50:38 -04:00
$workspaces = get_workspaces_from_args ( $command );
2018-05-09 10:16:05 -04:00
if ( count ( $command ) === 1 ) {
2013-06-25 13:50:38 -04:00
try {
2018-05-09 10:16:05 -04:00
$workspace = $workspaces [ 0 ];
CLI :: logging ( " : " . CLI :: info ( $workspace -> name ) . " \n " );
2013-06-25 13:50:38 -04:00
$workspace -> updateStructureDirectories ( $workspace -> name );
$workspace -> close ();
} catch ( Exception $e ) {
CLI :: logging ( " Errors upgrading workspace " . CLI :: info ( $workspace -> name ) . " : " . CLI :: error ( $e -> getMessage ()) . " \n " );
2018-05-09 10:16:05 -04:00
}
} else {
$count = count ( $workspaces );
$countWorkspace = 0 ;
foreach ( $workspaces as $index => $workspace ) {
$countWorkspace ++ ;
CLI :: logging ( " Updating workspaces ( $countWorkspace / $count ) " );
passthru ( PHP_BINARY . " processmaker migrate-cases-folders " . $workspace -> name );
2013-06-25 13:50:38 -04:00
}
}
}
2016-03-03 17:33:55 -04:00
function run_database_verify_consistency ( $args , $opts )
{
2017-08-11 15:54:49 -04:00
verifyAppCacheConsistency ( $args );
2016-03-03 17:33:55 -04:00
}
function run_database_verify_migration_consistency ( $args , $opts )
{
2017-08-11 15:54:49 -04:00
verifyMigratedDataConsistency ( $args );
2016-03-03 17:33:55 -04:00
}
function verifyAppCacheConsistency ( $args )
{
2017-08-11 15:54:49 -04:00
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
verifyWorkspaceConsistency ( $workspace );
}
2016-03-03 17:33:55 -04:00
}
function verifyWorkspaceConsistency ( $workspace )
{
2017-08-11 15:54:49 -04:00
$isConsistent = true ;
print_r ( " Verifying data in workspace " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
$inconsistentUsers = $workspace -> hasMissingUsers ();
$inconsistentTasks = $workspace -> hasMissingTasks ();
$inconsistentProcesses = $workspace -> hasMissingProcesses ();
$inconsistentDelegations = $workspace -> hasMissingAppDelegations ();
if ( $inconsistentUsers || $inconsistentTasks || $inconsistentProcesses || $inconsistentDelegations ) {
$isConsistent = false ;
}
return $isConsistent ;
2016-03-03 17:33:55 -04:00
}
function verifyMigratedDataConsistency ( $args )
{
2017-08-11 15:54:49 -04:00
$workspaces = get_workspaces_from_args ( $args );
$inconsistentRecords = 0 ;
foreach ( $workspaces as $workspace ) {
print_r ( " Verifying data in workspace " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
$lists = array (
'LIST_CANCELLED' ,
'LIST_COMPLETED' ,
'LIST_INBOX' ,
'LIST_PARTICIPATED_HISTORY' ,
'LIST_PARTICIPATED_LAST' ,
'LIST_MY_INBOX' ,
'LIST_UNASSIGNED' ,
);
foreach ( $lists as $list ) {
$inconsistentRecords += $workspace -> verifyListData ( $list );
}
2016-03-03 17:33:55 -04:00
}
2017-08-11 15:54:49 -04:00
return $inconsistentRecords ;
2016-03-03 17:33:55 -04:00
}
2017-08-11 15:54:49 -04:00
function run_migrate_itee_to_dummytask ( $args , $opts )
{
$filter = new InputFilter ();
$opts = $filter -> xssFilterHard ( $opts );
$args = $filter -> xssFilterHard ( $args );
$arrayWorkspace = get_workspaces_from_args ( $args );
foreach ( $arrayWorkspace as $workspace ) {
try {
$ws = new WorkspaceTools ( $workspace -> name );
$res = $ws -> migrateIteeToDummytask ( $workspace -> name );
} catch ( Exception $e ) {
G :: outRes ( " > Error: " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
2016-06-14 13:43:49 -04:00
}
}
2018-05-09 10:16:05 -04:00
/*----------------------------------********---------------------------------*/
2016-06-14 13:43:49 -04:00
2017-06-12 10:58:54 -04:00
/**
* Check if we need to execute an external program for each workspace
* If we apply the command for all workspaces we will need to execute one by one by redefining the constants
* @ param string $args , workspaceName that we need to apply the database - upgrade
* @ param string $opts
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
function run_check_workspace_disabled_code ( $args , $opts )
{
2017-06-12 10:58:54 -04:00
//Check if the command is executed by a specific workspace
if ( count ( $args ) === 1 ) {
check_workspace_disabled_code ( $args , $opts );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker check-workspace-disabled-code ' . $workspace -> name );
2017-06-12 10:58:54 -04:00
}
}
}
2017-08-11 15:54:49 -04:00
2017-06-12 10:58:54 -04:00
/**
* This function is executed only by one workspace
* Code Security Scanner related to the custom blacklist
* @ param array $args , the specific actions must be : upgrade | check
* @ param array $opts , workspaceName for to apply the database - upgrade
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
2017-06-12 10:58:54 -04:00
function check_workspace_disabled_code ( $args , $opts )
2014-11-19 16:47:22 -04:00
{
try {
2017-06-12 10:58:54 -04:00
//Load the attributes for the workspace
2014-11-19 16:47:22 -04:00
$arrayWorkspace = get_workspaces_from_args ( $args );
2017-06-12 10:58:54 -04:00
//Loop, read all the attributes related to the one workspace
$wsName = $arrayWorkspace [ key ( $arrayWorkspace )] -> name ;
Bootstrap :: setConstantsRelatedWs ( $wsName );
2014-11-19 16:47:22 -04:00
foreach ( $arrayWorkspace as $value ) {
$workspace = $value ;
2015-06-01 14:15:53 -04:00
if ( ! $workspace -> pmLicensedFeaturesVerifyFeature ( " B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4= " )) {
throw new Exception ( " Error: This command cannot be used because your license does not include it. " );
}
2014-11-19 16:47:22 -04:00
echo " > Workspace: " . $workspace -> name . " \n " ;
try {
$arrayFoundDisabledCode = $workspace -> getDisabledCode ();
2015-06-01 14:15:53 -04:00
if ( ! empty ( $arrayFoundDisabledCode )) {
2014-11-19 16:47:22 -04:00
$strFoundDisabledCode = " " ;
foreach ( $arrayFoundDisabledCode as $value2 ) {
$arrayProcessData = $value2 ;
2017-08-11 15:54:49 -04:00
$strFoundDisabledCode .= ( $strFoundDisabledCode != " " ) ? " \n " : " " ;
2014-11-19 16:47:22 -04:00
$strFoundDisabledCode .= " Process: " . $arrayProcessData [ " processTitle " ] . " \n " ;
$strFoundDisabledCode .= " Triggers: \n " ;
foreach ( $arrayProcessData [ " triggers " ] as $value3 ) {
$arrayTriggerData = $value3 ;
$strCodeAndLine = " " ;
foreach ( $arrayTriggerData [ " disabledCode " ] as $key4 => $value4 ) {
2017-08-11 15:54:49 -04:00
$strCodeAndLine .= (( $strCodeAndLine != " " ) ? " , " : " " ) . $key4 . " (Lines " . implode ( " , " , $value4 ) . " ) " ;
2014-11-19 16:47:22 -04:00
}
$strFoundDisabledCode .= " - " . $arrayTriggerData [ " triggerTitle " ] . " : " . $strCodeAndLine . " \n " ;
}
}
echo $strFoundDisabledCode . " \n " ;
} else {
echo " The workspace it's OK \n \n " ;
}
} catch ( Exception $e ) {
2017-08-11 15:54:49 -04:00
G :: outRes ( " Errors to check disabled code: " . CLI :: error ( $e -> getMessage ()) . " \n \n " );
2014-11-19 16:47:22 -04:00
}
2015-06-01 14:15:53 -04:00
$workspace -> close ();
2014-11-19 16:47:22 -04:00
}
2017-06-12 10:58:54 -04:00
echo " Done! \n \n " ;
2014-10-27 11:25:17 -04:00
} catch ( Exception $e ) {
2017-08-11 15:54:49 -04:00
G :: outRes ( CLI :: error ( $e -> getMessage ()) . " \n " );
2014-10-27 11:25:17 -04:00
}
}
2015-03-04 18:42:47 -04:00
2017-08-11 15:54:49 -04:00
function migrate_new_cases_lists ( $command , $args , $opts )
{
2017-02-10 17:14:20 -04:00
$filter = new InputFilter ();
$opts = $filter -> xssFilterHard ( $opts );
$args = $filter -> xssFilterHard ( $args );
$lang = array_key_exists ( " lang " , $opts ) ? $opts [ 'lang' ] : 'en' ;
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
print_r ( " Upgrading database in " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
try {
2019-07-08 14:46:00 -04:00
$workspace -> migrateList ( true , $lang );
2017-02-10 17:14:20 -04:00
echo " > List tables are done \n " ;
} catch ( Exception $e ) {
2017-08-11 15:54:49 -04:00
G :: outRes ( " > Error: " . CLI :: error ( $e -> getMessage ()) . " \n " );
2017-02-10 17:14:20 -04:00
}
2015-03-04 18:42:47 -04:00
}
}
2016-03-03 17:33:55 -04:00
2017-08-11 15:54:49 -04:00
function migrate_counters ( $command , $args )
{
$workspaces = get_workspaces_from_args ( $args );
2016-03-03 17:33:55 -04:00
2017-08-11 15:54:49 -04:00
foreach ( $workspaces as $workspace ) {
print_r ( " Regenerating counters in: " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
2016-03-03 17:33:55 -04:00
2017-08-11 15:54:49 -04:00
try {
$workspace -> migrateCounters ( $workspace -> name , true );
2016-03-03 17:33:55 -04:00
2017-08-11 15:54:49 -04:00
echo " > Counters are done \n " ;
} catch ( Exception $e ) {
G :: outRes ( " > Error: " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
2016-03-03 17:33:55 -04:00
}
}
2016-06-22 11:27:43 -04:00
2019-07-08 14:46:00 -04:00
function migrate_list_unassigned ( $command , $args )
2017-08-11 15:54:49 -04:00
{
$filter = new InputFilter ();
$args = $filter -> xssFilterHard ( $args );
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
print_r ( " Upgrading Unassigned List in " . pakeColor :: colorize ( $workspace -> name , " INFO " ) . " \n " );
try {
2019-07-08 14:46:00 -04:00
$workspace -> runRegenerateListUnassigned ();
2017-08-11 15:54:49 -04:00
echo " > Unassigned List is done \n " ;
} catch ( Exception $e ) {
G :: outRes ( " > Error: " . CLI :: error ( $e -> getMessage ()) . " \n " );
}
2016-06-22 11:27:43 -04:00
}
}
2018-05-09 10:16:05 -04:00
/*----------------------------------********---------------------------------*/
2015-08-12 09:30:43 -04:00
2017-05-17 11:11:39 -04:00
/**
* Check if we need to execute an external program for each workspace
* If we apply the command for all workspaces we will need to execute one by one by redefining the constants
* @ param string $args , workspaceName that we need to apply the database - upgrade
* @ param string $opts , specify the language
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
function run_migrate_content ( $args , $opts )
{
2017-05-17 11:11:39 -04:00
//Check the additional parameters
$lang = array_key_exists ( " lang " , $opts ) ? '--lang=' . $opts [ 'lang' ] : '--lang=' . SYS_LANG ;
//Check if the command is executed by a specific workspace
if ( count ( $args ) === 1 ) {
migrate_content ( $args , $opts );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker migrate-content ' . $lang . ' ' . $workspace -> name );
2017-05-17 11:11:39 -04:00
}
}
}
2017-08-11 15:54:49 -04:00
2017-05-17 11:11:39 -04:00
/**
* This function is executed only by one workspace
* @ param array $args , workspaceName for to apply the migrate - content
* @ param array $opts , specify the language
*
* @ return void
2017-08-11 15:54:49 -04:00
*/
2017-05-17 11:11:39 -04:00
function migrate_content ( $args , $opts )
{
2016-07-07 14:25:04 -04:00
$filter = new InputFilter ();
$args = $filter -> xssFilterHard ( $args );
$workspaces = get_workspaces_from_args ( $args );
2016-07-20 11:48:10 -04:00
$lang = array_key_exists ( " lang " , $opts ) ? $opts [ 'lang' ] : SYS_LANG ;
$start = microtime ( true );
2017-05-17 11:11:39 -04:00
//We defined the constants related the workspace
$wsName = $workspaces [ key ( $workspaces )] -> name ;
2017-05-22 15:57:08 -04:00
Bootstrap :: setConstantsRelatedWs ( $wsName );
2017-05-17 11:11:39 -04:00
//Loop, read all the attributes related to the one workspace
2016-07-20 11:48:10 -04:00
CLI :: logging ( " > Optimizing content data... \n " );
2016-07-07 14:25:04 -04:00
foreach ( $workspaces as $workspace ) {
print_r ( 'Regenerating content in: ' . pakeColor :: colorize ( $workspace -> name , 'INFO' ) . " \n " );
2016-07-20 11:48:10 -04:00
CLI :: logging ( " -> Regenerating content \n " );
2019-03-18 13:36:08 -04:00
$workspace -> migrateContentRun ( $lang );
2016-07-07 14:25:04 -04:00
}
2016-07-20 11:48:10 -04:00
$stop = microtime ( true );
CLI :: logging ( " <*> Optimizing content data Process took " . ( $stop - $start ) . " seconds. \n " );
2016-07-07 14:25:04 -04:00
}
2016-12-08 17:02:13 -05:00
2017-08-11 15:54:49 -04:00
function run_migrate_self_service_value ( $args , $opts )
{
2016-12-08 17:02:13 -05:00
$filter = new InputFilter ();
$args = $filter -> xssFilterHard ( $args );
$workspaces = get_workspaces_from_args ( $args );
$start = microtime ( true );
CLI :: logging ( " > Optimizing Self-Service data... \n " );
foreach ( $workspaces as $workspace ) {
print_r ( 'Migrating records in: ' . pakeColor :: colorize ( $workspace -> name , 'INFO' ) . " \n " );
CLI :: logging ( " -> Migrating Self-Service records \n " );
$workspace -> migrateSelfServiceRecordsRun ( $workspace -> name );
}
$stop = microtime ( true );
CLI :: logging ( " <*> Migrating Self-Service records Process took " . ( $stop - $start ) . " seconds. \n " );
}
2017-01-11 17:05:48 -04:00
2017-08-11 15:54:49 -04:00
function run_migrate_indexing_acv ( $args , $opts )
{
2017-01-11 17:05:48 -04:00
$filter = new InputFilter ();
$args = $filter -> xssFilterHard ( $args );
$workspaces = get_workspaces_from_args ( $args );
$start = microtime ( true );
2017-02-13 15:26:53 -04:00
CLI :: logging ( " > Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW... \n " );
2017-01-11 17:05:48 -04:00
foreach ( $workspaces as $workspace ) {
print_r ( 'Indexing for APP_CACHE_VIEW: ' . pakeColor :: colorize ( $workspace -> name , 'INFO' ) . " \n " );
$workspace -> migratePopulateIndexingACV ( $workspace -> name );
}
$stop = microtime ( true );
2017-02-13 15:26:53 -04:00
CLI :: logging ( " <*> Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW process took " . ( $stop - $start ) . " seconds. \n " );
2017-01-11 17:05:48 -04:00
}
2017-07-21 16:56:44 -04:00
2017-08-11 15:54:49 -04:00
function run_migrate_plugin ( $args , $opts )
{
2017-07-21 16:56:44 -04:00
$workspaces = get_workspaces_from_args ( $args );
2017-07-26 16:15:32 -04:00
//Check if the command is executed by a specific workspace
2017-08-11 14:10:44 -04:00
/** @var WorkspaceTools $workspace */
2017-07-26 16:15:32 -04:00
if ( count ( $workspaces ) === 1 ) {
$workspace = array_shift ( $workspaces );
2017-08-04 09:32:25 -04:00
CLI :: logging ( 'Regenerating Singleton in: ' . pakeColor :: colorize ( $workspace -> name , 'INFO' ) . " \n " );
2017-07-26 16:15:32 -04:00
$workspace -> migrateSingleton ( $workspace -> name );
2017-07-21 16:56:44 -04:00
CLI :: logging ( " -> Regenerating Singleton \n " );
2017-07-26 16:15:32 -04:00
} else {
CLI :: logging ( " > Migrating and populating data... \n " );
$start = microtime ( true );
foreach ( $workspaces as $workspace ) {
2018-04-13 15:41:37 -04:00
passthru ( PHP_BINARY . ' processmaker migrate-plugins-singleton-information ' . $workspace -> name );
2017-07-26 16:15:32 -04:00
}
$stop = microtime ( true );
CLI :: logging ( " <*> Migrating and populating data Singleton took " . ( $stop - $start ) . " seconds. \n " );
2017-07-21 16:56:44 -04:00
}
2017-08-10 21:36:31 -04:00
}
2017-08-11 15:54:49 -04:00
2017-08-09 14:49:21 -04:00
/**
2017-08-10 21:36:31 -04:00
* This method recursively finds all PHP files that reference the path PATH_DATA
* incorrectly , which is caused by importing processes where the data directory
* of ProcessMaker has different routes . Modified files are backed up with the
2017-08-09 14:49:21 -04:00
* extension '.backup' in the same directory .
2017-08-10 21:36:31 -04:00
*
2017-08-09 14:49:21 -04:00
* @ param array $args
* @ param array $opts
* @ throws Exception
* @ return void
*/
function regenerate_pmtable_classes ( $args , $opts )
{
if ( sizeof ( $args ) > 0 ) {
$start = microtime ( true );
CLI :: logging ( " > Updating generated class files for PM Tables... \n " );
Bootstrap :: setConstantsRelatedWs ( $args [ 0 ]);
2017-08-11 14:10:44 -04:00
$workspaceTools = new WorkspaceTools ( $args [ 0 ]);
2017-08-09 14:49:21 -04:00
$workspaceTools -> fixReferencePathFiles ( PATH_DATA_SITE . " classes " , PATH_DATA );
$stop = microtime ( true );
CLI :: logging ( " <*> Updating generated class files for PM Tables took " . ( $stop - $start ) . " seconds. \n " );
} else {
throw new Exception ( " No workspace specified for updating generated class files. " );
}
}
2018-06-07 15:41:10 -04:00
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-06-07 15:41:10 -04:00
/**
* This method migrates data from APP_HISTORY table to APP_DATA_CHANGE_LOG table .
*
* @ param array $args
* @ param string $opts
*/
function migrate_history_data ( $args , $opts )
{
if ( count ( $args ) === 1 ) {
$start = microtime ( true );
CLI :: logging ( " > Migrating history data... \n " );
Bootstrap :: setConstantsRelatedWs ( $args [ 0 ]);
$workspaceTools = new WorkspaceTools ( $args [ 0 ]);
2018-07-18 10:17:29 -04:00
$workspaceTools -> migrateAppHistoryToAppDataChangeLog ( true );
2018-06-07 15:41:10 -04:00
$stop = microtime ( true );
CLI :: logging ( " <*> Migrating history data took " . ( $stop - $start ) . " seconds. \n " );
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
2018-07-18 10:17:29 -04:00
passthru ( PHP_BINARY . ' processmaker migrate-history-data ' . $workspace -> name );
2018-06-07 15:41:10 -04:00
}
}
}
2018-06-11 09:58:48 -04:00
/*----------------------------------********---------------------------------*/
2018-07-18 10:17:29 -04:00
/**
* Will be clean the History of use from the table
* Will be remove the DYN_CONTENT_HISTORY from APP_HISTORY
*
* @ param array $args
* @ param array $opts
*
* @ return void
*/
function run_clear_dyn_content_history_data ( $args , $opts )
{
$workspaces = get_workspaces_from_args ( $args );
$start = microtime ( true );
CLI :: logging ( " > Cleaning history data from APP_HISTORY... \n " );
foreach ( $workspaces as $workspace ) {
CLI :: logging ( 'Remove history of use: ' . pakeColor :: colorize ( $workspace -> name , 'INFO' ) . " \n " );
$workspace -> clearDynContentHistoryData ( true );
}
$stop = microtime ( true );
CLI :: logging ( " <*> Cleaning history data from APP_HISTORY process took " . ( $stop - $start ) . " seconds. \n " );
}
2018-11-06 15:43:32 -04:00
/**
* Sync JSON definition of the Forms with Input Documents information
*
* @ param array $args
* @ param array $opts
*
* @ return void
2019-03-08 09:56:08 -04:00
* @ see workflow / engine / bin / tasks / cliWorkspaces . php CLI :: taskRun ()
2018-11-06 15:43:32 -04:00
*/
function run_sync_forms_with_info_from_input_documents ( $args , $opts ) {
if ( count ( $args ) === 1 ) {
//This variable is not defined and does not involve its value in this
//task, it is removed at the end of the method.
$_SERVER [ 'REQUEST_URI' ] = '' ;
if ( ! defined ( 'SYS_SKIN' )) {
2019-03-08 09:56:08 -04:00
$config = System :: getSystemConfiguration ();
define ( 'SYS_SKIN' , $config [ 'default_skin' ]);
2018-11-06 15:43:32 -04:00
}
CLI :: logging ( 'Sync JSON definition of the Forms with Input Documents information from workspace: ' . pakeColor :: colorize ( $args [ 0 ], 'INFO' ) . " \n " );
$workspaceTools = new WorkspaceTools ( $args [ 0 ]);
$workspaceTools -> syncFormsWithInputDocumentInfo ();
unset ( $_SERVER [ 'REQUEST_URI' ]);
} else {
$workspaces = get_workspaces_from_args ( $args );
foreach ( $workspaces as $workspace ) {
passthru ( PHP_BINARY . ' processmaker sync-forms-with-info-from-input-documents ' .
$workspace -> name );
}
}
}
2019-05-27 16:00:45 -04:00
/**
* Remove the deprecated files
*
* @ return void
* @ see workflow / engine / bin / tasks / cliWorkspaces . php CLI :: taskRun ()
* @ link https :// wiki . processmaker . com / 3.3 / processmaker_command
*/
function remove_deprecated_files ()
{
//The constructor requires an argument, so we send an empty value in order to use the class.
$workspaceTools = new WorkspaceTools ( '' );
$workspaceTools -> removeDeprecatedFiles ();
CLI :: logging ( " <*> The deprecated files has been removed. \n " );
}
2019-06-28 15:20:51 -04:00
/**
* This function review the queries for each workspace or for an specific workspace
*
* @ param array $args
*
* @ return void
*/
function run_check_queries_incompatibilities ( $args )
{
try {
$workspaces = get_workspaces_from_args ( $args );
if ( count ( $args ) === 1 ) {
CLI :: logging ( " > Workspace: " . $workspaces [ 0 ] -> name . PHP_EOL );
check_queries_incompatibilities ( $workspaces [ 0 ] -> name );
} else {
foreach ( $workspaces as $workspace ) {
passthru ( PHP_BINARY . " processmaker check-queries-incompatibilities " . $workspace -> name );
}
}
echo " Done! \n \n " ;
} catch ( Exception $e ) {
G :: outRes ( CLI :: error ( $e -> getMessage ()) . " \n " );
}
}
/**
* Check for the incompatibilities in the queries for the specific workspace
*
* @ param string $wsName
*/
function check_queries_incompatibilities ( $wsName )
{
Bootstrap :: setConstantsRelatedWs ( $wsName );
require_once ( PATH_DB . $wsName . '/db.php' );
System :: initLaravel ();
$query = Process :: query () -> select ( 'PRO_UID' , 'PRO_TITLE' );
$processesToCheck = $query -> get () -> values () -> toArray ();
$obj = new MySQL57 ();
$resTriggers = $obj -> checkIncompatibilityTriggers ( $processesToCheck );
if ( ! empty ( $resTriggers )) {
foreach ( $resTriggers as $trigger ) {
echo " >> The \" " . $trigger [ 'PRO_TITLE' ] . " \" process has a trigger called: \" " . $trigger [ 'TRI_TITLE' ] . " \" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7. " . PHP_EOL ;
}
} else {
echo " >> No MySQL 5.7 incompatibilities in triggers found for this workspace. " . PHP_EOL ;
}
$resDynaforms = $obj -> checkIncompatibilityDynaforms ( $processesToCheck );
if ( ! empty ( $resDynaforms )) {
foreach ( $resDynaforms as $dynaform ) {
echo " >> The \" " . $dynaform [ 'PRO_TITLE' ] . " \" process has a dynaform called: \" " . $dynaform [ 'DYN_TITLE' ] . " \" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7. " . PHP_EOL ;
}
} else {
echo " >> No MySQL 5.7 incompatibilities in dynaforms found for this workspace. " . PHP_EOL ;
}
$resVariables = $obj -> checkIncompatibilityVariables ( $processesToCheck );
if ( ! empty ( $resVariables )) {
foreach ( $resVariables as $variable ) {
echo " >> The \" " . $variable [ 'PRO_TITLE' ] . " \" process has a variable called: \" " . $variable [ 'VAR_NAME' ] . " \" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7. " . PHP_EOL ;
}
} else {
echo " >> No MySQL 5.7 incompatibilities in variables found for this workspace. " . PHP_EOL ;
}
2019-07-04 10:27:28 -04:00
}