From 84c14b18db27b99e18e9d14118a79ad1b39d40c8 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 14 Nov 2018 15:00:10 -0400 Subject: [PATCH 001/100] PMC-40: Action by Email: Email response configuration Adding schema.sql file --- .../engine/classes/model/AbeConfiguration.php | 5 +- .../model/map/AbeConfigurationMapBuilder.php | 4 + .../classes/model/om/BaseAbeConfiguration.php | 194 ++++++++++++++---- .../model/om/BaseAbeConfigurationPeer.php | 28 ++- workflow/engine/config/schema.xml | 13 +- workflow/engine/data/mysql/schema.sql | 2 + 6 files changed, 196 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/model/AbeConfiguration.php b/workflow/engine/classes/model/AbeConfiguration.php index 6b740d85a..6722958cf 100644 --- a/workflow/engine/classes/model/AbeConfiguration.php +++ b/workflow/engine/classes/model/AbeConfiguration.php @@ -26,6 +26,7 @@ class AbeConfiguration extends BaseAbeConfiguration 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', + 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', @@ -33,7 +34,8 @@ class AbeConfiguration extends BaseAbeConfiguration 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', - 'ABE_EMAIL_SERVER_UID' + 'ABE_EMAIL_SERVER_UID', + 'ABE_EMAIL_SERVER_RECEIVER_UID' ]; public function load($abeUid) @@ -136,6 +138,7 @@ class AbeConfiguration extends BaseAbeConfiguration $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_SUBJECT_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CUSTOM_GRID); diff --git a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php index 8652ef90a..c74d98fa0 100644 --- a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php +++ b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php @@ -83,6 +83,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_ACTION_FIELD', 'AbeActionField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_ACTION_BODY_FIELD', 'AbeActionBodyField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_CASE_NOTE_IN_RESPONSE', 'AbeCaseNoteInResponse', 'int', CreoleTypes::INTEGER, false, null); $tMap->addColumn('ABE_FORCE_LOGIN', 'AbeForceLogin', 'int', CreoleTypes::INTEGER, false, null); @@ -99,6 +101,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_EMAIL_SERVER_UID', 'AbeEmailServerUid', 'string', CreoleTypes::VARCHAR, false, 32); + $tMap->addColumn('ABE_EMAIL_SERVER_RECEIVER_UID', 'AbeEmailServerReceiverUid', 'string', CreoleTypes::VARCHAR, false, 32); + } // doBuild() } // AbeConfigurationMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAbeConfiguration.php b/workflow/engine/classes/model/om/BaseAbeConfiguration.php index 7de6b6b1a..a83b0448d 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfiguration.php +++ b/workflow/engine/classes/model/om/BaseAbeConfiguration.php @@ -81,6 +81,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_action_field = ''; + /** + * The value for the abe_action_body_field field. + * @var string + */ + protected $abe_action_body_field = ''; + /** * The value for the abe_case_note_in_response field. * @var int @@ -129,6 +135,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_email_server_uid = ''; + /** + * The value for the abe_email_server_receiver_uid field. + * @var string + */ + protected $abe_email_server_receiver_uid = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -242,6 +254,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_action_field; } + /** + * Get the [abe_action_body_field] column value. + * + * @return string + */ + public function getAbeActionBodyField() + { + + return $this->abe_action_body_field; + } + /** * Get the [abe_case_note_in_response] column value. * @@ -372,6 +395,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_email_server_uid; } + /** + * Get the [abe_email_server_receiver_uid] column value. + * + * @return string + */ + public function getAbeEmailServerReceiverUid() + { + + return $this->abe_email_server_receiver_uid; + } + /** * Set the value of [abe_uid] column. * @@ -570,6 +604,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeActionField() + /** + * Set the value of [abe_action_body_field] column. + * + * @param string $v new value + * @return void + */ + public function setAbeActionBodyField($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_action_body_field !== $v || $v === '') { + $this->abe_action_body_field = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_ACTION_BODY_FIELD; + } + + } // setAbeActionBodyField() + /** * Set the value of [abe_case_note_in_response] column. * @@ -760,6 +816,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeEmailServerUid() + /** + * Set the value of [abe_email_server_receiver_uid] column. + * + * @param string $v new value + * @return void + */ + public function setAbeEmailServerReceiverUid($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_email_server_receiver_uid !== $v || $v === '') { + $this->abe_email_server_receiver_uid = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID; + } + + } // setAbeEmailServerReceiverUid() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -795,28 +873,32 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->abe_action_field = $rs->getString($startcol + 8); - $this->abe_case_note_in_response = $rs->getInt($startcol + 9); + $this->abe_action_body_field = $rs->getString($startcol + 9); - $this->abe_force_login = $rs->getInt($startcol + 10); + $this->abe_case_note_in_response = $rs->getInt($startcol + 10); - $this->abe_create_date = $rs->getTimestamp($startcol + 11, null); + $this->abe_force_login = $rs->getInt($startcol + 11); - $this->abe_update_date = $rs->getTimestamp($startcol + 12, null); + $this->abe_create_date = $rs->getTimestamp($startcol + 12, null); - $this->abe_subject_field = $rs->getString($startcol + 13); + $this->abe_update_date = $rs->getTimestamp($startcol + 13, null); - $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 14); + $this->abe_subject_field = $rs->getString($startcol + 14); - $this->abe_custom_grid = $rs->getString($startcol + 15); + $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 15); - $this->abe_email_server_uid = $rs->getString($startcol + 16); + $this->abe_custom_grid = $rs->getString($startcol + 16); + + $this->abe_email_server_uid = $rs->getString($startcol + 17); + + $this->abe_email_server_receiver_uid = $rs->getString($startcol + 18); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 17; // 17 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 19; // 19 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AbeConfiguration object", $e); @@ -1048,29 +1130,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->getAbeActionField(); break; case 9: - return $this->getAbeCaseNoteInResponse(); + return $this->getAbeActionBodyField(); break; case 10: - return $this->getAbeForceLogin(); + return $this->getAbeCaseNoteInResponse(); break; case 11: - return $this->getAbeCreateDate(); + return $this->getAbeForceLogin(); break; case 12: - return $this->getAbeUpdateDate(); + return $this->getAbeCreateDate(); break; case 13: - return $this->getAbeSubjectField(); + return $this->getAbeUpdateDate(); break; case 14: - return $this->getAbeMailserverOrMailcurrent(); + return $this->getAbeSubjectField(); break; case 15: - return $this->getAbeCustomGrid(); + return $this->getAbeMailserverOrMailcurrent(); break; case 16: + return $this->getAbeCustomGrid(); + break; + case 17: return $this->getAbeEmailServerUid(); break; + case 18: + return $this->getAbeEmailServerReceiverUid(); + break; default: return null; break; @@ -1100,14 +1188,16 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $keys[6] => $this->getDynUid(), $keys[7] => $this->getAbeEmailField(), $keys[8] => $this->getAbeActionField(), - $keys[9] => $this->getAbeCaseNoteInResponse(), - $keys[10] => $this->getAbeForceLogin(), - $keys[11] => $this->getAbeCreateDate(), - $keys[12] => $this->getAbeUpdateDate(), - $keys[13] => $this->getAbeSubjectField(), - $keys[14] => $this->getAbeMailserverOrMailcurrent(), - $keys[15] => $this->getAbeCustomGrid(), - $keys[16] => $this->getAbeEmailServerUid(), + $keys[9] => $this->getAbeActionBodyField(), + $keys[10] => $this->getAbeCaseNoteInResponse(), + $keys[11] => $this->getAbeForceLogin(), + $keys[12] => $this->getAbeCreateDate(), + $keys[13] => $this->getAbeUpdateDate(), + $keys[14] => $this->getAbeSubjectField(), + $keys[15] => $this->getAbeMailserverOrMailcurrent(), + $keys[16] => $this->getAbeCustomGrid(), + $keys[17] => $this->getAbeEmailServerUid(), + $keys[18] => $this->getAbeEmailServerReceiverUid(), ); return $result; } @@ -1167,29 +1257,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->setAbeActionField($value); break; case 9: - $this->setAbeCaseNoteInResponse($value); + $this->setAbeActionBodyField($value); break; case 10: - $this->setAbeForceLogin($value); + $this->setAbeCaseNoteInResponse($value); break; case 11: - $this->setAbeCreateDate($value); + $this->setAbeForceLogin($value); break; case 12: - $this->setAbeUpdateDate($value); + $this->setAbeCreateDate($value); break; case 13: - $this->setAbeSubjectField($value); + $this->setAbeUpdateDate($value); break; case 14: - $this->setAbeMailserverOrMailcurrent($value); + $this->setAbeSubjectField($value); break; case 15: - $this->setAbeCustomGrid($value); + $this->setAbeMailserverOrMailcurrent($value); break; case 16: + $this->setAbeCustomGrid($value); + break; + case 17: $this->setAbeEmailServerUid($value); break; + case 18: + $this->setAbeEmailServerReceiverUid($value); + break; } // switch() } @@ -1250,35 +1346,43 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } if (array_key_exists($keys[9], $arr)) { - $this->setAbeCaseNoteInResponse($arr[$keys[9]]); + $this->setAbeActionBodyField($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setAbeForceLogin($arr[$keys[10]]); + $this->setAbeCaseNoteInResponse($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setAbeCreateDate($arr[$keys[11]]); + $this->setAbeForceLogin($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setAbeUpdateDate($arr[$keys[12]]); + $this->setAbeCreateDate($arr[$keys[12]]); } if (array_key_exists($keys[13], $arr)) { - $this->setAbeSubjectField($arr[$keys[13]]); + $this->setAbeUpdateDate($arr[$keys[13]]); } if (array_key_exists($keys[14], $arr)) { - $this->setAbeMailserverOrMailcurrent($arr[$keys[14]]); + $this->setAbeSubjectField($arr[$keys[14]]); } if (array_key_exists($keys[15], $arr)) { - $this->setAbeCustomGrid($arr[$keys[15]]); + $this->setAbeMailserverOrMailcurrent($arr[$keys[15]]); } if (array_key_exists($keys[16], $arr)) { - $this->setAbeEmailServerUid($arr[$keys[16]]); + $this->setAbeCustomGrid($arr[$keys[16]]); + } + + if (array_key_exists($keys[17], $arr)) { + $this->setAbeEmailServerUid($arr[$keys[17]]); + } + + if (array_key_exists($keys[18], $arr)) { + $this->setAbeEmailServerReceiverUid($arr[$keys[18]]); } } @@ -1328,6 +1432,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_ACTION_FIELD, $this->abe_action_field); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD)) { + $criteria->add(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, $this->abe_action_body_field); + } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE)) { $criteria->add(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, $this->abe_case_note_in_response); } @@ -1360,6 +1468,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, $this->abe_email_server_uid); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID)) { + $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, $this->abe_email_server_receiver_uid); + } + return $criteria; } @@ -1430,6 +1542,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeActionField($this->abe_action_field); + $copyObj->setAbeActionBodyField($this->abe_action_body_field); + $copyObj->setAbeCaseNoteInResponse($this->abe_case_note_in_response); $copyObj->setAbeForceLogin($this->abe_force_login); @@ -1446,6 +1560,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeEmailServerUid($this->abe_email_server_uid); + $copyObj->setAbeEmailServerReceiverUid($this->abe_email_server_receiver_uid); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php index 213759db2..07f5b2bf0 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php +++ b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php @@ -25,7 +25,7 @@ abstract class BaseAbeConfigurationPeer const CLASS_DEFAULT = 'classes.model.AbeConfiguration'; /** The total number of columns. */ - const NUM_COLUMNS = 17; + const NUM_COLUMNS = 19; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -58,6 +58,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_ACTION_FIELD field */ const ABE_ACTION_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_FIELD'; + /** the column name for the ABE_ACTION_BODY_FIELD field */ + const ABE_ACTION_BODY_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_BODY_FIELD'; + /** the column name for the ABE_CASE_NOTE_IN_RESPONSE field */ const ABE_CASE_NOTE_IN_RESPONSE = 'ABE_CONFIGURATION.ABE_CASE_NOTE_IN_RESPONSE'; @@ -82,6 +85,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_EMAIL_SERVER_UID field */ const ABE_EMAIL_SERVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_UID'; + /** the column name for the ABE_EMAIL_SERVER_RECEIVER_UID field */ + const ABE_EMAIL_SERVER_RECEIVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_RECEIVER_UID'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -93,10 +99,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeActionBodyField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', 'AbeEmailServerReceiverUid', ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', 'ABE_EMAIL_SERVER_RECEIVER_UID', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -106,10 +112,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeCaseNoteInResponse' => 9, 'AbeForceLogin' => 10, 'AbeCreateDate' => 11, 'AbeUpdateDate' => 12, 'AbeSubjectField' => 13, 'AbeMailserverOrMailcurrent' => 14, 'AbeCustomGrid' => 15, 'AbeEmailServerUid' => 16, ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 9, AbeConfigurationPeer::ABE_FORCE_LOGIN => 10, AbeConfigurationPeer::ABE_CREATE_DATE => 11, AbeConfigurationPeer::ABE_UPDATE_DATE => 12, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 13, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 14, AbeConfigurationPeer::ABE_CUSTOM_GRID => 15, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 16, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_CASE_NOTE_IN_RESPONSE' => 9, 'ABE_FORCE_LOGIN' => 10, 'ABE_CREATE_DATE' => 11, 'ABE_UPDATE_DATE' => 12, 'ABE_SUBJECT_FIELD' => 13, 'ABE_MAILSERVER_OR_MAILCURRENT' => 14, 'ABE_CUSTOM_GRID' => 15, 'ABE_EMAIL_SERVER_UID' => 16, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeActionBodyField' => 9, 'AbeCaseNoteInResponse' => 10, 'AbeForceLogin' => 11, 'AbeCreateDate' => 12, 'AbeUpdateDate' => 13, 'AbeSubjectField' => 14, 'AbeMailserverOrMailcurrent' => 15, 'AbeCustomGrid' => 16, 'AbeEmailServerUid' => 17, 'AbeEmailServerReceiverUid' => 18, ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD => 9, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 10, AbeConfigurationPeer::ABE_FORCE_LOGIN => 11, AbeConfigurationPeer::ABE_CREATE_DATE => 12, AbeConfigurationPeer::ABE_UPDATE_DATE => 13, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 14, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 15, AbeConfigurationPeer::ABE_CUSTOM_GRID => 16, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 17, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID => 18, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_ACTION_BODY_FIELD' => 9, 'ABE_CASE_NOTE_IN_RESPONSE' => 10, 'ABE_FORCE_LOGIN' => 11, 'ABE_CREATE_DATE' => 12, 'ABE_UPDATE_DATE' => 13, 'ABE_SUBJECT_FIELD' => 14, 'ABE_MAILSERVER_OR_MAILCURRENT' => 15, 'ABE_CUSTOM_GRID' => 16, 'ABE_EMAIL_SERVER_UID' => 17, 'ABE_EMAIL_SERVER_RECEIVER_UID' => 18, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -228,6 +234,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_FORCE_LOGIN); @@ -244,6 +252,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID); + } const COUNT = 'COUNT(ABE_CONFIGURATION.ABE_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 74d40bc8e..ee62f0ff8 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5091,6 +5091,16 @@ + + + + + + + + + + @@ -5138,6 +5148,7 @@ + @@ -5766,7 +5777,7 @@ - + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index a0a1b1d13..18efed744 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2864,6 +2864,7 @@ CREATE TABLE `ABE_CONFIGURATION` `DYN_UID` VARCHAR(32) default '' NOT NULL, `ABE_EMAIL_FIELD` VARCHAR(255) default '' NOT NULL, `ABE_ACTION_FIELD` VARCHAR(255) default '', + `ABE_ACTION_BODY_FIELD` VARCHAR(255) default '', `ABE_CASE_NOTE_IN_RESPONSE` INTEGER default 0, `ABE_FORCE_LOGIN` INTEGER default 0, `ABE_CREATE_DATE` DATETIME NOT NULL, @@ -2872,6 +2873,7 @@ CREATE TABLE `ABE_CONFIGURATION` `ABE_MAILSERVER_OR_MAILCURRENT` INTEGER default 0, `ABE_CUSTOM_GRID` MEDIUMTEXT, `ABE_EMAIL_SERVER_UID` VARCHAR(32) default '', + `ABE_EMAIL_SERVER_RECEIVER_UID` VARCHAR(32) default '', PRIMARY KEY (`ABE_UID`), KEY `indexAbeProcess`(`PRO_UID`), KEY `indexAbeProcessTask`(`PRO_UID`, `TAS_UID`) From 2c7461b4a1964a43fd0bd4dcec497ef5d3541ed7 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 14 Nov 2018 15:00:10 -0400 Subject: [PATCH 002/100] PMC-40: Action by Email: Email response configuration --- config/app.php | 11 +- .../classes/ActionsByEmailCoreClass.php | 1201 +++++++++++++---- workflow/engine/classes/SpoolRun.php | 20 + workflow/engine/classes/WsBase.php | 4 +- .../engine/classes/model/AbeConfiguration.php | 5 +- workflow/engine/classes/model/AppMessage.php | 19 + .../model/map/AbeConfigurationMapBuilder.php | 4 + .../classes/model/om/BaseAbeConfiguration.php | 194 ++- .../model/om/BaseAbeConfigurationPeer.php | 28 +- workflow/engine/config/schema.xml | 13 +- .../translations/english/processmaker.en.po | 12 + workflow/engine/data/mysql/insert.sql | 2 + workflow/engine/data/mysql/schema.sql | 2 + .../ProcessMaker/Util/WsMessageResponse.php | 32 + 14 files changed, 1229 insertions(+), 318 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php diff --git a/config/app.php b/config/app.php index 18c615493..548de0a20 100644 --- a/config/app.php +++ b/config/app.php @@ -12,19 +12,20 @@ return [ 'log' => env('APP_LOG', 'single'), 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), - + 'key' => env('APP_KEY', 'base64:rU28h/tElUn/eiLY0qC24jJq1rakvAFRoRl1DWxj/kM='), + 'cipher' => 'AES-256-CBC', 'providers' => [ - FilesystemServiceProvider::class, CacheServiceProvider::class, - ViewServiceProvider::class, + FilesystemServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, - + Illuminate\Encryption\EncryptionServiceProvider::class, + ViewServiceProvider::class ], - 'aliases' => [ + 'Crypt' => Illuminate\Support\Facades\Crypt::class ], ]; diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 87eac721e..166485a06 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -1,308 +1,985 @@ defineWorkspace(); + $this->defineServicePath(); } /** - * @param $data - * @param $dataAbe + * Set the action by email request + * + * @param array $v + */ + public function setAbeRequest($v) + { + $this->abeRequest = $v; + } + + /** + * Get the action by email request + * + * @return array + */ + public function getAbeRequest() + { + return $this->abeRequest; + } + + /** + * Set the specific task property + * + * @param array $item + * + * @return void + */ + public function addItemAbeRequest(array $item) + { + $this->abeRequest = array_merge($this->abeRequest, $item); + } + + /** + * Get the specific task property + * + * @param string $key + * + * @return string + */ + public function getItemAbeRequest($key) + { + if (array_key_exists($key, $this->getAbeRequest())) { + return $this->abeRequest[$key]; + } else { + return []; + } + } + + /** + * Set the application uid + * + * @param string $v + */ + public function setAppUid($v) + { + $this->appUid = $v; + } + + /** + * Get the application uid + * + * @return string + */ + public function getAppUid() + { + return $this->appUid; + } + + /** + * Set the case number + * + * @param integer $v + */ + public function setAppNumber($v) + { + $this->appNumber = $v; + } + + /** + * Get the case number + * + * @return integer + */ + public function getAppNumber() + { + return $this->appNumber; + } + + /** + * Set the case properties + * + * @param array $v + */ + public function setCaseProperties(array $v) + { + $this->caseProperties = $v; + } + + /** + * Get the case properties + * + * @return array + */ + public function getCaseProperties() + { + return $this->caseProperties; + } + + /** + * Get the specific case property + * + * @param string $key + * + * @return array + */ + public function getCasePropertiesKey($key) + { + if (array_key_exists($key, $this->getCaseProperties())) { + return $this->caseProperties[$key]; + } else { + return []; + } + } + + /** + * Set the email from + * + * @param string $v + */ + public function setEmailFrom($v) + { + $this->emailFrom = $v; + } + + /** + * Get the email from + * + * @return string + */ + public function getEmailFrom() + { + return $this->emailFrom; + } + + /** + * Set the email to + * + * @param string $v + */ + public function setEmailTo($v) + { + $this->emailTo = $v; + + } + + /** + * Get the email to + * + * @return string + */ + public function getEmailTo() + { + return $this->emailTo; + } + + /** + * Set the index + * + * @param integer $v + */ + public function setIndex($v) + { + $this->index = $v; + } + + /** + * Get the index + * + * @return integer + */ + public function getIndex() + { + return $this->index; + } + + /** + * Set prefix + * + * @param array $v + */ + public function setPrefix(array $v) + { + $this->prefix = $v; + } + + /** + * Get prefix + * + * @return array + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * Set the previous user + * + * @param string $v + */ + public function setPreviousUser($v) + { + $this->previousUser = $v; + } + + /** + * Get the previous user + * + * @return string + */ + public function getPreviousUser() + { + return $this->previousUser; + } + + /** + * Set the reply to + * + * @param string $v + */ + public function setReplyTo($v) + { + $this->replyTo = $v; + } + + /** + * Get the reply to + * + * @return string + */ + public function getReplyTo() + { + return $this->replyTo; + } + + /** + * Set the task + * + * @param string $v + */ + public function setTask($v) + { + $this->task = $v; + } + + /** + * Get the task + * + * @return string + */ + public function getTask() + { + return $this->task; + } + + /** + * Set in the task the action by email properties + * + * @param array $v + */ + public function setTaskAbeProperties(array $v) + { + $this->taskAbeProperties = $v; + } + + /** + * Get the task the action by email properties + * + * @return array + */ + public function getTaskAbeProperties() + { + return $this->taskAbeProperties; + } + + /** + * Add a item in the action by email properties + * + * @param array $item + * + * @return void + */ + public function addItemAbeProperties(array $item) + { + $this->taskAbeProperties = array_merge($this->taskAbeProperties, $item); + } + + /** + * Get the specific task property + * + * @param string $key + * + * @return array + */ + public function getItemAbeProperties($key) + { + if (array_key_exists($key, $this->getTaskAbeProperties())) { + return $this->taskAbeProperties[$key]; + } else { + return []; + } + } + + /** + * Set the link + */ + public function defineServicePath() + { + $this->servicePath = System::getServerMainPath() . '/services/ActionsByEmail'; + } + + /** + * Get the link + * + * @return string + */ + public function getServicePath() + { + return $this->servicePath; + } + + /** + * Set the user uid + * + * @param string $v + */ + public function setUser($v) + { + $this->user = $v; + } + + /** + * Get the user uid + * + * @return string + */ + public function getUser() + { + return $this->user; + } + + /** + * Set the subject + * + * @param string $v + */ + public function setSubject($v) + { + $this->subject = $v; + } + + /** + * Get the subject + * + * @return string + */ + public function getSubject() + { + return $this->subject; + } + + /** + * Set the workspace name + */ + public function defineWorkspace() + { + $this->workspace = config("system.workspace"); + } + + /** + * Get the workspace name + * + * @return string + */ + public function getWorkspace() + { + return $this->workspace; + } + + /** + * Get the email server definition + * + * @param string $emailServerKey + * + * @return object + */ + private function getEmailServer($emailServerKey) + { + $emailServer = new EmailServer(); + $emailSetup = (!is_null(EmailServerPeer::retrieveByPK($emailServerKey))) ? + $emailServer->getEmailServer($emailServerKey, true) : + $emailServer->getEmailServerDefault(); + + return $emailSetup; + } + + /** + * Define the properties in the task related the action by email configuration + * + * @return void + */ + private function defineTaskAbeProperties() + { + $actionEmailTable = new AbeConfiguration(); + $properties = $actionEmailTable->getTaskConfiguration($this->getCasePropertiesKey('PRO_UID'), $this->getTask()); + $this->setTaskAbeProperties($properties); + } + + /** + * Define the email from + * + * @param array $emailServerSetup + * + * @return void + */ + private function defineEmailFrom(array $emailServerSetup) + { + $from = ''; + if (!$this->getItemAbeProperties('ABE_MAILSERVER_OR_MAILCURRENT') && !empty($this->getItemAbeProperties('ABE_TYPE'))) { + if (!empty($this->getPreviousUser())) { + $user = new Users(); + $userDetails = $user->loadDetails($this->getPreviousUser()); + $from = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); + } else { + global $RBAC; + $currentUser = $RBAC->aUserInfo['USER_INFO']; + $from = ($currentUser["USR_FIRSTNAME"] . ' ' . $currentUser["USR_LASTNAME"] . ' <' . $currentUser["USR_EMAIL"] . '>'); + } + } + //Define the email from + $emailFrom = G::buildFrom($emailServerSetup, $from); + $this->setEmailFrom($emailFrom); + } + + /** + * Define the email to + * + * @param string $emailField + * @param array $caseData + * + * @return void + */ + private function defineEmailTo($emailField, array $caseData) + { + $emailField = str_replace($this->getPrefix(), '', $emailField); + if ($emailField != '' && isset($caseData[$emailField])) { + $emailTo = trim($caseData[$emailField]); + } else { + $userInstance = new Users(); + $emailTo = $userInstance->getAllInformation($this->getUser())['mail']; + } + + $this->setEmailTo($emailTo); + } + + /** + * Define the reply to + * + * @param string $receiverUid + * + * @return void + */ + private function defineReplyTo($receiverUid) + { + $emailServer = $this->getEmailServer($receiverUid); + $replyTo = $emailServer["MESS_ACCOUNT"]; + + $this->setReplyTo($replyTo); + } + + /** + * Define the subject + * + * @param string $subjectField + * @param array $caseData + * + * @return void + */ + private function defineSubject($subjectField, array $caseData) + { + $subject = G::replaceDataField($subjectField, $caseData); + if (empty($subject)) { + $subject = $this->getCasePropertiesKey('APP_TITLE'); + } + + $this->setSubject($subject); + } + + /** + * Validate and set the fields that we need for the action by email + * + * @param object $data + */ + private function validateAndSetValues($data) + { + try { + if (!is_object($data)) { + throw new Exception('The parameter $data is null.'); + } + // Validate the tas_uid + if (empty($data->TAS_UID)) { + throw new Exception('The parameter $data->TAS_UID is null or empty.'); + } else { + $this->setTask($data->TAS_UID); + } + // Validate the app_uid + if (empty($data->APP_UID)) { + throw new Exception('The parameter $data->APP_UID is null or empty.'); + } else { + $this->setAppUid($data->APP_UID); + } + // Validate the del_index + if (empty($data->DEL_INDEX)) { + throw new Exception('The parameter $data->DEL_INDEX is null or empty.'); + } elseif ($data->DEL_INDEX === 1) { + // Processmaker log + $context = Bootstrap::getDefaultContextLog(); + $context['delIndex'] = $data->DEL_INDEX; + Bootstrap::registerMonolog('ActionByEmail', 250, 'Actions by email does not work in the initial task', $context); + + return; + } else { + $this->setIndex($data->DEL_INDEX); + } + // Validate the usr_uid + if (empty($data->USR_UID)) { + throw new Exception('The parameter $data->USR_UID is null or empty.'); + } else { + $this->setUser($data->USR_UID); + } + // Define the previous user + if (!empty($data->PREVIOUS_USR_UID)) { + $this->setPreviousUser($data->PREVIOUS_USR_UID); + } + } catch (Exception $e) { + $token = strtotime("now"); + PMException::registerErrorLog($e, $token); + G::outRes(G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", [$token])); + die; + } + } + + /** + * Send the action by email + * + * @param object $data + * @param array $dataAbe + * + * @return void * @throws Exception */ - public function sendActionsByEmail($data, $dataAbe) + public function sendActionsByEmail($data, array $dataAbe) { try { // Validations - try { - if (!is_object($data)) { - throw new Exception('The parameter $data is null.'); - } - if (!isset($data->TAS_UID)) { - throw new Exception('The parameter $data->TAS_UID is null.'); - } + self::validateAndSetValues($data); - if (!isset($data->APP_UID)) { - throw new Exception('The parameter $data->APP_UID is null.'); - } - - if (!isset($data->DEL_INDEX)) { - throw new Exception('The parameter $data->DEL_INDEX is null.'); - } - - if (!isset($data->USR_UID)) { - throw new Exception('The parameter $data->USR_UID is null.'); - } - - if ($data->TAS_UID === '') { - throw new Exception('The parameter $data->TAS_UID is empty.'); - } - - if ($data->APP_UID === '') { - throw new Exception('The parameter $data->APP_UID is empty.'); - } - - if ($data->DEL_INDEX === '') { - throw new Exception('The parameter $data->DEL_INDEX is empty.'); - } - - if ($data->DEL_INDEX === 1) { - error_log('The parameter $data->DEL_INDEX is 1, you can not use ActionsByEmail in the initial task', 0); - return; - } - - if ($data->USR_UID === '') { - error_log('The parameter $data->USR_UID is empty, the routed task may be a self-service type, actions by email does not work with self-service task types.', 0); - } - } catch(Exception $e) { - $token = strtotime("now"); - PMException::registerErrorLog($e, $token); - G::outRes( G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", array($token)) ); - die; - } - - $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); - - $emailSetup = (!is_null(\EmailServerPeer::retrieveByPK($dataAbe['ABE_EMAIL_SERVER_UID']))) ? - $emailServer->getEmailServer($dataAbe['ABE_EMAIL_SERVER_UID'], true) : - $emailServer->getEmailServerDefault(); - - if (!empty($emailSetup)) { + $emailServerSetup = $this->getEmailServer($dataAbe['ABE_EMAIL_SERVER_UID']); + if (!empty($emailServerSetup)) { $cases = new Cases(); - $caseFields = $cases->loadCase($data->APP_UID, $data->DEL_INDEX); - $actionEmailTable = new AbeConfiguration(); - $configuration = $actionEmailTable->getTaskConfiguration($caseFields['PRO_UID'], $data->TAS_UID); - $caseFields['APP_DATA']['PRO_ID'] = $configuration['PRO_ID']; - $caseFields['APP_DATA']['TAS_ID'] = $configuration['TAS_ID']; + $caseFields = $cases->loadCase($this->getAppUid(), $this->getIndex()); + $this->setCaseProperties($caseFields); + $this->defineTaskAbeProperties(); + $caseFields['APP_DATA']['PRO_ID'] = $this->getItemAbeProperties('PRO_ID'); + $caseFields['APP_DATA']['TAS_ID'] = $this->getItemAbeProperties('TAS_ID'); + if (!empty($this->getTaskAbeProperties())) { + $this->defineEmailTo($this->getItemAbeProperties('ABE_EMAIL_FIELD'), $caseFields['APP_DATA']); - if (!empty($configuration)) { - $configuration['ABE_EMAIL_FIELD'] = str_replace('@@', '', $configuration['ABE_EMAIL_FIELD']); - if ($configuration['ABE_EMAIL_FIELD'] != '' && isset($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']])) { - $email = trim($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']]); - } else { - $userInstance = new Users(); - $userInfo = $userInstance->getAllInformation($data->USR_UID); - $email = $userInfo['mail']; - } + if (!empty($this->getEmailTo())) { + $this->defineSubject($this->getItemAbeProperties('ABE_SUBJECT_FIELD'), $caseFields['APP_DATA']); - if ($email != '') { - $subject = G::replaceDataField( $configuration['ABE_SUBJECT_FIELD'], $caseFields['APP_DATA'] ); - if($subject == ''){ - $subject = $caseFields['APP_TITLE']; - } + $request = [ + 'ABE_REQ_UID' => '', + 'ABE_UID' => $this->getItemAbeProperties('ABE_UID'), + 'APP_UID' => $this->getAppUid(), + 'DEL_INDEX' => $this->getIndex(), + 'ABE_REQ_SENT_TO' => $this->getEmailTo(), + 'ABE_REQ_SUBJECT' => $this->getSubject(), + 'ABE_REQ_BODY' => '', + 'ABE_REQ_ANSWERED' => 0, + 'ABE_REQ_STATUS' => 'PENDING' + ]; + $this->setAbeRequest($request); + $this->registerRequest(); - $abeRequest = array(); - $abeRequest['ABE_REQ_UID'] = ''; - $abeRequest['ABE_UID'] = $configuration['ABE_UID']; - $abeRequest['APP_UID'] = $data->APP_UID; - $abeRequest['DEL_INDEX'] = $data->DEL_INDEX; - $abeRequest['ABE_REQ_SENT_TO'] = $email; - $abeRequest['ABE_REQ_SUBJECT'] = $subject; - $abeRequest['ABE_REQ_BODY'] = ''; - $abeRequest['ABE_REQ_ANSWERED'] = 0; - $abeRequest['ABE_REQ_STATUS'] = 'PENDING'; - - try { - $abeRequestsInstance = new AbeRequests(); - $abeRequest['ABE_REQ_UID'] = $abeRequestsInstance->createOrUpdate($abeRequest); - } catch (Exception $error) { - throw $error; - } - - if ($configuration['ABE_TYPE'] != '') { + if (!empty($this->getItemAbeProperties('ABE_TYPE'))) { // Email - $_SESSION['CURRENT_DYN_UID'] = $configuration['DYN_UID']; - + $_SESSION['CURRENT_DYN_UID'] = $this->getItemAbeProperties('DYN_UID'); $__ABE__ = ''; - - $link = System::getServerMainPath() . '/services/ActionsByEmail'; - switch ($configuration['ABE_TYPE']) { + switch ($this->getItemAbeProperties('ABE_TYPE')) { case 'CUSTOM': - $customGrid = unserialize($configuration['ABE_CUSTOM_GRID']); - $variableService = new \ProcessMaker\Services\Api\Project\Variable(); - $variables = $variableService->doGetVariables($caseFields['PRO_UID']); - $field = new stdClass(); - $field->label = ''; - $actionField = str_replace(array('@@', '@#', '@=', '@%', '@?', '@$'), '', $configuration['ABE_ACTION_FIELD']); - - $obj = new PmDynaform($configuration['DYN_UID']); - $configuration['CURRENT_DYNAFORM'] = $configuration['DYN_UID']; - $file = $obj->printPmDynaformAbe($configuration); - $__ABE__ .= $file; - $__ABE__ .= '
' . $field->label . '
'; - $index = 1; - $__ABE__ .= '
'; - foreach ($customGrid as $key => $value) { - $__ABE__ .= '' . (($index % 5 == 0) ? '' : ' '); - $index++; - } - $__ABE__ .= '
' . $value['abe_custom_label']; - $__ABE__ .= '
'; + $__ABE__ .= $this->getCustomTemplate(); + break; + case 'RESPONSE': + $this->defineReplyTo($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID']); + $__ABE__ .= $this->getResponseTemplate(); break; case 'LINK': - $__ABE__ .= 'Please complete this form'; + $__ABE__ .= $this->getServicePathTemplate(); break; - // coment case 'FIELD': - $variableService = new \ProcessMaker\Services\Api\Project\Variable(); - $variables = $variableService->doGetVariables($caseFields['PRO_UID']); - $field = new stdClass(); - $field->label = 'Test'; - $field->type = 'dropdown'; - $field->options = array(); - $field->value = ''; - $actionField = str_replace(array('@@','@#','@=','@%','@?','@$'), '', $configuration['ABE_ACTION_FIELD']); - $dynaform = $configuration['DYN_UID']; - $variables = G::json_decode($configuration['DYN_CONTENT'], true); - if(isset($variables['items'][0]['items'])){ - $fields = $variables['items'][0]['items']; - foreach ($fields as $key => $value) { - foreach($value as $var){ - if(isset($var['variable'])){ - if ($var['variable'] == $actionField) { - $field->label = $var['label']; - $field->type = $var['type']; - $values = $var['options']; - foreach ($values as $val){ - $field->options[$val['value']] = $val['value']; - } - } - } - } - } - } - - $obj = new PmDynaform($configuration['DYN_UID']); - $configuration['CURRENT_DYNAFORM'] = $configuration['DYN_UID']; - $file = $obj->printPmDynaformAbe($configuration); - $__ABE__ .= $file; - $__ABE__ .= '' . $field->label . '
'; - switch ($field->type) { - case 'dropdown': - case 'radio': - case 'radiogroup': - $index = 1; - $__ABE__.='
'; - break; - case 'yesno': - $__ABE__ .= ''; - $__ABE__ .= ''; - break; - case 'checkbox': - $__ABE__ .= ''; - $__ABE__ .= ''; - break; - } - $__ABE__ .= '
'; - foreach ($field->options as $optValue => $optName) { - $__ABE__ .= '' . (($index % 5 == 0) ? '' : ' '); - $index++; - } - - $__ABE__.='
' . $optName; - $__ABE__ .= '
' . G::LoadTranslation('ID_YES_VALUE') . '' . G::LoadTranslation('ID_NO_VALUE') . 'CheckUncheck
'; + $__ABE__ .= $this->getFieldTemplate(); break; } - - $__ABE__ = preg_replace('/\/', '' , $__ABE__); - $__ABE__ = preg_replace('/\]*\/>/', '' , $__ABE__); + $__ABE__ = preg_replace('/\/', '', $__ABE__); + $__ABE__ = preg_replace('/\]*\/>/', '', $__ABE__); $__ABE__ = preg_replace('/]*>(.*?)<\/select>/is', "", $__ABE__); - $__ABE__ = preg_replace('/align=\"center\"/', '' , $__ABE__); - $__ABE__ = preg_replace('/class="tableGrid_view" /', 'class="tableGrid_view" width="100%" ', $__ABE__); + $__ABE__ = preg_replace('/align=\"center\"/', '', $__ABE__); + $__ABE__ = preg_replace('/class="tableGrid_view" /', 'class="tableGrid_view" width="100%" ', + $__ABE__); $caseFields['APP_DATA']['__ABE__'] = $__ABE__; - $user = new Users(); - - if (!$configuration['ABE_MAILSERVER_OR_MAILCURRENT'] && $configuration['ABE_TYPE'] !== '') { - if ($data->PREVIOUS_USR_UID !== '') { - $userDetails = $user->loadDetails($data->PREVIOUS_USR_UID); - $emailFrom = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); - } else { - global $RBAC; - $currentUser = $RBAC->aUserInfo['USER_INFO']; - $emailFrom = ($currentUser["USR_FIRSTNAME"] . ' ' . $currentUser["USR_LASTNAME"] . ' <' . $currentUser["USR_EMAIL"] . '>'); - } - } else { - if (isset($emailSetup["MESS_FROM_NAME"]) && isset($emailSetup["MESS_FROM_MAIL"])) { - $emailFrom = ($emailSetup["MESS_FROM_NAME"] . ' <' . $emailSetup["MESS_FROM_MAIL"] . '>'); - } else { - $emailFrom = ((isset($emailSetup["MESS_FROM_NAME"])) ? $emailSetup["MESS_FROM_NAME"] : $emailSetup["MESS_FROM_MAIL"]); - } - } - - $wsBaseInstance = new WsBase(); - $result = $wsBaseInstance->sendMessage( - $data->APP_UID, - $emailFrom, - $email, - '', - '', - $subject, - $configuration['ABE_TEMPLATE'], + $this->defineEmailFrom($emailServerSetup); + $result = $this->abeSendMessage( + $this->getItemAbeProperties('ABE_TEMPLATE'), $caseFields['APP_DATA'], - null, - true, - $data->DEL_INDEX, - $emailSetup, - 0 + $emailServerSetup ); - $abeRequest['ABE_REQ_STATUS'] = ($result->status_code == 0 ? 'SENT' : 'ERROR'); + $request = []; + $request['ABE_REQ_STATUS'] = ($result->status_code == 0 ? 'SENT' : 'ERROR'); - $body = ''; - $messageSent = executeQuery('SELECT `APP_MSG_BODY` FROM `APP_MESSAGE` ORDER BY `APP_MSG_SEND_DATE` DESC LIMIT 1'); - - if (!empty($messageSent) && is_array($messageSent)) { - $body = $messageSent[1]['APP_MSG_BODY']; - } - - $abeRequest['ABE_REQ_BODY'] = $body; - - // Update - try { - $abeRequestsInstance = new AbeRequests(); - $abeRequestsInstance->createOrUpdate($abeRequest); - } catch (Exception $error) { - throw $error; - } + $request['ABE_REQ_BODY'] = empty($result->getAppMessUid()) ? '' : AppMessage::getAppMsgBodyByKey($result->getAppMessUid()); + $this->addItemAbeRequest($request); + $this->registerRequest(); } } + } else { + throw new Exception('Task does not have an action by email configuration.'); } } } catch (Exception $error) { throw $error; } } + + /** + * Get the html template for email response + * + * @return string + */ + private function getResponseTemplate() + { + $noReply = $this->getReplyTo(); + $customGrid = unserialize($this->getItemAbeProperties('ABE_CUSTOM_GRID')); + $field = new stdClass(); + $field->label = ''; + $html = '
' . $field->label . ''; + $html .= '
'; + $index = 1; + foreach ($customGrid as $key => $value) { + // Get the subject + $emailSubject = $this->getSubjectByResponse($value['abe_custom_label']); + $emailBody = $this->getBodyByResponse($value['abe_custom_value']); + // Define the html for the actions + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + $html .= '
'; + $html .= $value['abe_custom_label']; + $html .= '
'; + + return $html; + } + + /** + * Get the subject for response the action by email + * + * @param string $fieldLabel + * + * @return string + */ + private function getSubjectByResponse($fieldLabel) + { + $subject = G::LoadTranslation('ID_CASE') . ' ' . $this->getCasePropertiesKey('APP_TITLE'); + $subject .= $this->delimiter . ' ' . $fieldLabel; + + return urlencode($subject); + } + + /** + * Get the body for response the action by email + * + * @param string $fieldValue + * + * @return string + */ + private function getBodyByResponse($fieldValue) + { + $bodyToCrypt = [ + 'workspace' => $this->getWorkspace(), + 'appUid' => $this->getAppUid(), + 'delIndex' => $this->getIndex(), + 'fieldValue' => $fieldValue, + ]; + $bodyToCrypt = G::json_encode($bodyToCrypt); + + $body = str_repeat(self::BODY_REPLY_LF, 4); + $body .= '/' . str_repeat("=", 24) . self::BODY_REPLY_LF; + $body .= G::LoadTranslation('ID_ABE_EMAIL_RESPONSE_BODY_NOTE') . self::BODY_REPLY_LF; + $body .= '{' . Crypt::encryptString($bodyToCrypt) . '}' . self::BODY_REPLY_LF; + $body .= str_repeat("=", 24) . '/'; + return $body; + } + + /** + * Get the html template for custom actions + * @todo we need to revise this function + * + * @return string + */ + private function getCustomTemplate() + { + $abeRequest = $this->getAbeRequest(); + $customGrid = unserialize($this->getItemAbeProperties('ABE_CUSTOM_GRID')); + $variableService = new Variable(); + $variables = $variableService->doGetVariables($this->getCasePropertiesKey('PRO_UID')); + $field = new stdClass(); + $field->label = ''; + $actionField = str_replace( + $this->getPrefix(), + '', + $this->getItemAbeProperties('ABE_ACTION_FIELD') + ); + + $itemDynUid = $this->getItemAbeProperties('DYN_UID'); + $obj = new PmDynaform($itemDynUid); + $this->addItemAbeProperties(['CURRENT_DYNAFORM' => $itemDynUid]); + $file = $obj->printPmDynaformAbe($this->getTaskAbeProperties()); + $html = $file; + $html .= '
' . $field->label . ''; + $index = 1; + $html .= '
'; + foreach ($customGrid as $key => $value) { + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + $html .= '
getServicePath())) . '?ACTION=' . G::encrypt('processABE', + URL_KEY, true) . '&APP_UID='; + $html .= G::encrypt($this->getAppUid(), URL_KEY, + true) . '&DEL_INDEX=' . G::encrypt($this->getindex(), URL_KEY); + $html .= '&FIELD=' . G::encrypt($actionField, URL_KEY, + true) . '&VALUE=' . G::encrypt($value['abe_custom_value'], URL_KEY, + true); + $html .= '&ABER=' . G::encrypt($abeRequest['ABE_REQ_UID'], URL_KEY, + true) . '" target="_blank" >' . $value['abe_custom_label']; + $html .= '
'; + + return $html; + } + + /** + * Get the html template for link to fill a form + * @todo we need to revise this function + * + * @return string + */ + private function getServicePathTemplate() + { + $abeRequest = $this->getAbeRequest(); + $html = 'Please complete this form'; + + return $html; + } + + /** + * Get the html template for use a field to generate actions links + * @todo we need to revise this function + * + * @return string + */ + private function getFieldTemplate() + { + $abeRequest = $this->getAbeRequest(); + $variableService = new Variable(); + $variables = $variableService->doGetVariables($this->getCasePropertiesKey('PRO_UID')); + $field = new stdClass(); + $field->label = 'Test'; + $field->type = 'dropdown'; + $field->options = []; + $field->value = ''; + $actionField = str_replace( + $this->getPrefix(), + '', + $this->getItemAbeProperties('ABE_ACTION_FIELD') + ); + $dynUid = $this->getItemAbeProperties('DYN_UID'); + $variables = G::json_decode($this->getItemAbeProperties('DYN_CONTENT'), true); + if (isset($variables['items'][0]['items'])) { + $fields = $variables['items'][0]['items']; + foreach ($fields as $key => $value) { + foreach ($value as $var) { + if (isset($var['variable'])) { + if ($var['variable'] == $actionField) { + $field->label = $var['label']; + $field->type = $var['type']; + $values = $var['options']; + foreach ($values as $val) { + $field->options[$val['value']] = $val['value']; + } + } + } + } + } + } + + $obj = new PmDynaform($dynUid); + $this->addItemAbeProperties(['CURRENT_DYNAFORM' => $dynUid]); + $file = $obj->printPmDynaformAbe($this->getTaskAbeProperties()); + $html = $file; + $html .= '' . $field->label . '
'; + switch ($field->type) { + case 'dropdown': + case 'radio': + case 'radiogroup': + $index = 1; + $html .= '
'; + break; + case 'yesno': + $html .= ''; + $html .= ''; + break; + case 'checkbox': + $html .= ''; + $html .= ''; + break; + } + $html .= '
'; + foreach ($field->options as $optValue => $optName) { + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + + $html .= '
' . $optName; + $html .= '
' . G::LoadTranslation('ID_YES_VALUE') . '' . G::LoadTranslation('ID_NO_VALUE') . 'CheckUncheck
'; + + return $html; + } + + /** + * Register the request in the table ABE_REQUEST + * + * @return void + * @throws Exception + */ + private function registerRequest() + { + try { + $requestInstance = new AbeRequests(); + $abeRequest['ABE_REQ_UID'] = $requestInstance->createOrUpdate($this->getAbeRequest()); + $this->setAbeRequest($abeRequest); + } catch (Exception $error) { + throw $error; + } + } + + /** + * Send the message + * + * @param string $template + * @param array $caseData + * @param array $configEmail + * + * @return object + * @throws Exception + */ + private function abeSendMessage($template, array $caseData, array $configEmail) + { + try { + $wsBaseInstance = new WsBase(); + $result = $wsBaseInstance->sendMessage( + $this->getAppUid(), + $this->getEmailFrom(), + $this->getEmailTo(), + '', + '', + $this->getSubject(), + $template, + $caseData, + null, + true, + $this->getIndex(), + $configEmail, + 0 + ); + + return $result; + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index 255aeda04..56bccc4ec 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -50,6 +50,26 @@ class SpoolRun $this->mailEreg = "/^([\w\-_\+\.']+@[\w\-_\.]+\.\w{2,5}+)$/"; } + /** + * Set the $spool_id + * + * @param string + */ + public function setSpoolId($v) + { + $this->spool_id = $v; + } + + /** + * Get the $spool_id + * + * @return string + */ + public function getSpoolId() + { + return $this->spool_id; + } + /** * get all files into spool in a list * diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index 489fdd533..67165343d 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -5,6 +5,7 @@ use ProcessMaker\BusinessModel\EmailServer; use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\System; +use ProcessMaker\Util\WsMessageResponse; class WsBase { @@ -947,7 +948,8 @@ class WsBase $spool->sendMail(); if ($spool->status == 'sent') { - $result = new WsResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to); + $result = new WsMessageResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to); + $result->setAppMessUid($spool->getSpoolId()); } else { $result = new WsResponse(29, $spool->status . ' ' . $spool->error . print_r($setup, 1)); } diff --git a/workflow/engine/classes/model/AbeConfiguration.php b/workflow/engine/classes/model/AbeConfiguration.php index 6b740d85a..6722958cf 100644 --- a/workflow/engine/classes/model/AbeConfiguration.php +++ b/workflow/engine/classes/model/AbeConfiguration.php @@ -26,6 +26,7 @@ class AbeConfiguration extends BaseAbeConfiguration 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', + 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', @@ -33,7 +34,8 @@ class AbeConfiguration extends BaseAbeConfiguration 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', - 'ABE_EMAIL_SERVER_UID' + 'ABE_EMAIL_SERVER_UID', + 'ABE_EMAIL_SERVER_RECEIVER_UID' ]; public function load($abeUid) @@ -136,6 +138,7 @@ class AbeConfiguration extends BaseAbeConfiguration $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_SUBJECT_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CUSTOM_GRID); diff --git a/workflow/engine/classes/model/AppMessage.php b/workflow/engine/classes/model/AppMessage.php index 90f1fc9a4..663ade86c 100644 --- a/workflow/engine/classes/model/AppMessage.php +++ b/workflow/engine/classes/model/AppMessage.php @@ -300,5 +300,24 @@ class AppMessage extends BaseAppMessage return $messages; } + + /** + * Get the APP_MSG_BODY related to the key + * + * @param string $key + * + * @return string + * @throws Exception + */ + public static function getAppMsgBodyByKey($key) + { + try { + $appMessage = AppMessagePeer::retrieveByPk($key); + + return $appMessage->getAppMsgBody(); + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php index 8652ef90a..c74d98fa0 100644 --- a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php +++ b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php @@ -83,6 +83,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_ACTION_FIELD', 'AbeActionField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_ACTION_BODY_FIELD', 'AbeActionBodyField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_CASE_NOTE_IN_RESPONSE', 'AbeCaseNoteInResponse', 'int', CreoleTypes::INTEGER, false, null); $tMap->addColumn('ABE_FORCE_LOGIN', 'AbeForceLogin', 'int', CreoleTypes::INTEGER, false, null); @@ -99,6 +101,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_EMAIL_SERVER_UID', 'AbeEmailServerUid', 'string', CreoleTypes::VARCHAR, false, 32); + $tMap->addColumn('ABE_EMAIL_SERVER_RECEIVER_UID', 'AbeEmailServerReceiverUid', 'string', CreoleTypes::VARCHAR, false, 32); + } // doBuild() } // AbeConfigurationMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAbeConfiguration.php b/workflow/engine/classes/model/om/BaseAbeConfiguration.php index 7de6b6b1a..a83b0448d 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfiguration.php +++ b/workflow/engine/classes/model/om/BaseAbeConfiguration.php @@ -81,6 +81,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_action_field = ''; + /** + * The value for the abe_action_body_field field. + * @var string + */ + protected $abe_action_body_field = ''; + /** * The value for the abe_case_note_in_response field. * @var int @@ -129,6 +135,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_email_server_uid = ''; + /** + * The value for the abe_email_server_receiver_uid field. + * @var string + */ + protected $abe_email_server_receiver_uid = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -242,6 +254,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_action_field; } + /** + * Get the [abe_action_body_field] column value. + * + * @return string + */ + public function getAbeActionBodyField() + { + + return $this->abe_action_body_field; + } + /** * Get the [abe_case_note_in_response] column value. * @@ -372,6 +395,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_email_server_uid; } + /** + * Get the [abe_email_server_receiver_uid] column value. + * + * @return string + */ + public function getAbeEmailServerReceiverUid() + { + + return $this->abe_email_server_receiver_uid; + } + /** * Set the value of [abe_uid] column. * @@ -570,6 +604,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeActionField() + /** + * Set the value of [abe_action_body_field] column. + * + * @param string $v new value + * @return void + */ + public function setAbeActionBodyField($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_action_body_field !== $v || $v === '') { + $this->abe_action_body_field = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_ACTION_BODY_FIELD; + } + + } // setAbeActionBodyField() + /** * Set the value of [abe_case_note_in_response] column. * @@ -760,6 +816,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeEmailServerUid() + /** + * Set the value of [abe_email_server_receiver_uid] column. + * + * @param string $v new value + * @return void + */ + public function setAbeEmailServerReceiverUid($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_email_server_receiver_uid !== $v || $v === '') { + $this->abe_email_server_receiver_uid = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID; + } + + } // setAbeEmailServerReceiverUid() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -795,28 +873,32 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->abe_action_field = $rs->getString($startcol + 8); - $this->abe_case_note_in_response = $rs->getInt($startcol + 9); + $this->abe_action_body_field = $rs->getString($startcol + 9); - $this->abe_force_login = $rs->getInt($startcol + 10); + $this->abe_case_note_in_response = $rs->getInt($startcol + 10); - $this->abe_create_date = $rs->getTimestamp($startcol + 11, null); + $this->abe_force_login = $rs->getInt($startcol + 11); - $this->abe_update_date = $rs->getTimestamp($startcol + 12, null); + $this->abe_create_date = $rs->getTimestamp($startcol + 12, null); - $this->abe_subject_field = $rs->getString($startcol + 13); + $this->abe_update_date = $rs->getTimestamp($startcol + 13, null); - $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 14); + $this->abe_subject_field = $rs->getString($startcol + 14); - $this->abe_custom_grid = $rs->getString($startcol + 15); + $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 15); - $this->abe_email_server_uid = $rs->getString($startcol + 16); + $this->abe_custom_grid = $rs->getString($startcol + 16); + + $this->abe_email_server_uid = $rs->getString($startcol + 17); + + $this->abe_email_server_receiver_uid = $rs->getString($startcol + 18); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 17; // 17 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 19; // 19 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AbeConfiguration object", $e); @@ -1048,29 +1130,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->getAbeActionField(); break; case 9: - return $this->getAbeCaseNoteInResponse(); + return $this->getAbeActionBodyField(); break; case 10: - return $this->getAbeForceLogin(); + return $this->getAbeCaseNoteInResponse(); break; case 11: - return $this->getAbeCreateDate(); + return $this->getAbeForceLogin(); break; case 12: - return $this->getAbeUpdateDate(); + return $this->getAbeCreateDate(); break; case 13: - return $this->getAbeSubjectField(); + return $this->getAbeUpdateDate(); break; case 14: - return $this->getAbeMailserverOrMailcurrent(); + return $this->getAbeSubjectField(); break; case 15: - return $this->getAbeCustomGrid(); + return $this->getAbeMailserverOrMailcurrent(); break; case 16: + return $this->getAbeCustomGrid(); + break; + case 17: return $this->getAbeEmailServerUid(); break; + case 18: + return $this->getAbeEmailServerReceiverUid(); + break; default: return null; break; @@ -1100,14 +1188,16 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $keys[6] => $this->getDynUid(), $keys[7] => $this->getAbeEmailField(), $keys[8] => $this->getAbeActionField(), - $keys[9] => $this->getAbeCaseNoteInResponse(), - $keys[10] => $this->getAbeForceLogin(), - $keys[11] => $this->getAbeCreateDate(), - $keys[12] => $this->getAbeUpdateDate(), - $keys[13] => $this->getAbeSubjectField(), - $keys[14] => $this->getAbeMailserverOrMailcurrent(), - $keys[15] => $this->getAbeCustomGrid(), - $keys[16] => $this->getAbeEmailServerUid(), + $keys[9] => $this->getAbeActionBodyField(), + $keys[10] => $this->getAbeCaseNoteInResponse(), + $keys[11] => $this->getAbeForceLogin(), + $keys[12] => $this->getAbeCreateDate(), + $keys[13] => $this->getAbeUpdateDate(), + $keys[14] => $this->getAbeSubjectField(), + $keys[15] => $this->getAbeMailserverOrMailcurrent(), + $keys[16] => $this->getAbeCustomGrid(), + $keys[17] => $this->getAbeEmailServerUid(), + $keys[18] => $this->getAbeEmailServerReceiverUid(), ); return $result; } @@ -1167,29 +1257,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->setAbeActionField($value); break; case 9: - $this->setAbeCaseNoteInResponse($value); + $this->setAbeActionBodyField($value); break; case 10: - $this->setAbeForceLogin($value); + $this->setAbeCaseNoteInResponse($value); break; case 11: - $this->setAbeCreateDate($value); + $this->setAbeForceLogin($value); break; case 12: - $this->setAbeUpdateDate($value); + $this->setAbeCreateDate($value); break; case 13: - $this->setAbeSubjectField($value); + $this->setAbeUpdateDate($value); break; case 14: - $this->setAbeMailserverOrMailcurrent($value); + $this->setAbeSubjectField($value); break; case 15: - $this->setAbeCustomGrid($value); + $this->setAbeMailserverOrMailcurrent($value); break; case 16: + $this->setAbeCustomGrid($value); + break; + case 17: $this->setAbeEmailServerUid($value); break; + case 18: + $this->setAbeEmailServerReceiverUid($value); + break; } // switch() } @@ -1250,35 +1346,43 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } if (array_key_exists($keys[9], $arr)) { - $this->setAbeCaseNoteInResponse($arr[$keys[9]]); + $this->setAbeActionBodyField($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setAbeForceLogin($arr[$keys[10]]); + $this->setAbeCaseNoteInResponse($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setAbeCreateDate($arr[$keys[11]]); + $this->setAbeForceLogin($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setAbeUpdateDate($arr[$keys[12]]); + $this->setAbeCreateDate($arr[$keys[12]]); } if (array_key_exists($keys[13], $arr)) { - $this->setAbeSubjectField($arr[$keys[13]]); + $this->setAbeUpdateDate($arr[$keys[13]]); } if (array_key_exists($keys[14], $arr)) { - $this->setAbeMailserverOrMailcurrent($arr[$keys[14]]); + $this->setAbeSubjectField($arr[$keys[14]]); } if (array_key_exists($keys[15], $arr)) { - $this->setAbeCustomGrid($arr[$keys[15]]); + $this->setAbeMailserverOrMailcurrent($arr[$keys[15]]); } if (array_key_exists($keys[16], $arr)) { - $this->setAbeEmailServerUid($arr[$keys[16]]); + $this->setAbeCustomGrid($arr[$keys[16]]); + } + + if (array_key_exists($keys[17], $arr)) { + $this->setAbeEmailServerUid($arr[$keys[17]]); + } + + if (array_key_exists($keys[18], $arr)) { + $this->setAbeEmailServerReceiverUid($arr[$keys[18]]); } } @@ -1328,6 +1432,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_ACTION_FIELD, $this->abe_action_field); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD)) { + $criteria->add(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, $this->abe_action_body_field); + } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE)) { $criteria->add(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, $this->abe_case_note_in_response); } @@ -1360,6 +1468,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, $this->abe_email_server_uid); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID)) { + $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, $this->abe_email_server_receiver_uid); + } + return $criteria; } @@ -1430,6 +1542,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeActionField($this->abe_action_field); + $copyObj->setAbeActionBodyField($this->abe_action_body_field); + $copyObj->setAbeCaseNoteInResponse($this->abe_case_note_in_response); $copyObj->setAbeForceLogin($this->abe_force_login); @@ -1446,6 +1560,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeEmailServerUid($this->abe_email_server_uid); + $copyObj->setAbeEmailServerReceiverUid($this->abe_email_server_receiver_uid); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php index 213759db2..07f5b2bf0 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php +++ b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php @@ -25,7 +25,7 @@ abstract class BaseAbeConfigurationPeer const CLASS_DEFAULT = 'classes.model.AbeConfiguration'; /** The total number of columns. */ - const NUM_COLUMNS = 17; + const NUM_COLUMNS = 19; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -58,6 +58,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_ACTION_FIELD field */ const ABE_ACTION_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_FIELD'; + /** the column name for the ABE_ACTION_BODY_FIELD field */ + const ABE_ACTION_BODY_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_BODY_FIELD'; + /** the column name for the ABE_CASE_NOTE_IN_RESPONSE field */ const ABE_CASE_NOTE_IN_RESPONSE = 'ABE_CONFIGURATION.ABE_CASE_NOTE_IN_RESPONSE'; @@ -82,6 +85,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_EMAIL_SERVER_UID field */ const ABE_EMAIL_SERVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_UID'; + /** the column name for the ABE_EMAIL_SERVER_RECEIVER_UID field */ + const ABE_EMAIL_SERVER_RECEIVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_RECEIVER_UID'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -93,10 +99,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeActionBodyField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', 'AbeEmailServerReceiverUid', ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', 'ABE_EMAIL_SERVER_RECEIVER_UID', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -106,10 +112,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeCaseNoteInResponse' => 9, 'AbeForceLogin' => 10, 'AbeCreateDate' => 11, 'AbeUpdateDate' => 12, 'AbeSubjectField' => 13, 'AbeMailserverOrMailcurrent' => 14, 'AbeCustomGrid' => 15, 'AbeEmailServerUid' => 16, ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 9, AbeConfigurationPeer::ABE_FORCE_LOGIN => 10, AbeConfigurationPeer::ABE_CREATE_DATE => 11, AbeConfigurationPeer::ABE_UPDATE_DATE => 12, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 13, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 14, AbeConfigurationPeer::ABE_CUSTOM_GRID => 15, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 16, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_CASE_NOTE_IN_RESPONSE' => 9, 'ABE_FORCE_LOGIN' => 10, 'ABE_CREATE_DATE' => 11, 'ABE_UPDATE_DATE' => 12, 'ABE_SUBJECT_FIELD' => 13, 'ABE_MAILSERVER_OR_MAILCURRENT' => 14, 'ABE_CUSTOM_GRID' => 15, 'ABE_EMAIL_SERVER_UID' => 16, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeActionBodyField' => 9, 'AbeCaseNoteInResponse' => 10, 'AbeForceLogin' => 11, 'AbeCreateDate' => 12, 'AbeUpdateDate' => 13, 'AbeSubjectField' => 14, 'AbeMailserverOrMailcurrent' => 15, 'AbeCustomGrid' => 16, 'AbeEmailServerUid' => 17, 'AbeEmailServerReceiverUid' => 18, ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD => 9, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 10, AbeConfigurationPeer::ABE_FORCE_LOGIN => 11, AbeConfigurationPeer::ABE_CREATE_DATE => 12, AbeConfigurationPeer::ABE_UPDATE_DATE => 13, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 14, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 15, AbeConfigurationPeer::ABE_CUSTOM_GRID => 16, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 17, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID => 18, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_ACTION_BODY_FIELD' => 9, 'ABE_CASE_NOTE_IN_RESPONSE' => 10, 'ABE_FORCE_LOGIN' => 11, 'ABE_CREATE_DATE' => 12, 'ABE_UPDATE_DATE' => 13, 'ABE_SUBJECT_FIELD' => 14, 'ABE_MAILSERVER_OR_MAILCURRENT' => 15, 'ABE_CUSTOM_GRID' => 16, 'ABE_EMAIL_SERVER_UID' => 17, 'ABE_EMAIL_SERVER_RECEIVER_UID' => 18, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -228,6 +234,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_FORCE_LOGIN); @@ -244,6 +252,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID); + } const COUNT = 'COUNT(ABE_CONFIGURATION.ABE_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 2419ba032..75517b680 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5094,6 +5094,16 @@ + + + + + + + + + + @@ -5141,6 +5151,7 @@ + @@ -5769,7 +5780,7 @@
- + diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 57caa88d5..7027ef788 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -1699,6 +1699,12 @@ msgstr "3 days at least" msgid "The answer has been submitted. Thank you." msgstr "The answer has been submitted. Thank you." +# TRANSLATION +# LABEL/ID_ABE_EMAIL_RESPONSE_BODY_NOTE +#: LABEL/ID_ABE_EMAIL_RESPONSE_BODY_NOTE +msgid "Please add your comments above this section. Don't modify or delete this section." +msgstr "Please add your comments above this section. Don't modify or delete this section." + # TRANSLATION # LABEL/ID_ABE_FORM_ALREADY_FILLED #: LABEL/ID_ABE_FORM_ALREADY_FILLED @@ -4235,6 +4241,12 @@ msgstr "Close Editor" msgid "[LABEL/ID_CODE] Code" msgstr "Code" +# TRANSLATION +# LABEL/ID_CODE_CRYPT +#: LABEL/ID_CODE_CRYPT +msgid "Code:" +msgstr "Code:" + # TRANSLATION # LABEL/ID_COLLAPSE_ALL #: LABEL/ID_COLLAPSE_ALL diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index a7cd4f3e4..8277694f0 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57081,6 +57081,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','HTML_FILES','en','You can open only files with the .html extension','2014-01-15') , ( 'LABEL','ID_3DAYSMINIMUM','en','3 days at least','2014-01-15') , ( 'LABEL','ID_ABE_ANSWER_SUBMITTED','en','The answer has been submitted. Thank you.','2017-06-19') , +( 'LABEL','ID_ABE_EMAIL_RESPONSE_BODY_NOTE','en','Please add your comments above this section. Don''t modify or delete this section.','2018-11-16') , ( 'LABEL','ID_ABE_FORM_ALREADY_FILLED','en','The form has already been filled and sent.','2017-06-09') , ( 'LABEL','ID_ABE_INFORMATION_SUBMITTED','en','The information was submitted. Thank you.','2017-06-19') , ( 'LABEL','ID_ABE_RESPONSE_SENT','en','The response has already been sent.','2017-06-19') , @@ -57513,6 +57514,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_CLOSE','en','Close','2014-01-15') , ( 'LABEL','ID_CLOSE_EDITOR','en','Close Editor','2014-01-15') , ( 'LABEL','ID_CODE','en','Code','2014-01-15') , +( 'LABEL','ID_CODE_CRYPT','en','Code:','2018-11-16') , ( 'LABEL','ID_COLLAPSE_ALL','en','Collapse All','2014-01-15') , ( 'LABEL','ID_COLOSA_AND_CERTIFIED_PARTNERS','en','Supplied free of charge with no support, certification, warranty, maintenance nor indemnity by Colosa and its Certified Partners.','2014-10-21') , ( 'LABEL','ID_COLUMNS','en','columns','2014-01-15') , diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index f78a95cd0..30f4f911f 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2865,6 +2865,7 @@ CREATE TABLE `ABE_CONFIGURATION` `DYN_UID` VARCHAR(32) default '' NOT NULL, `ABE_EMAIL_FIELD` VARCHAR(255) default '' NOT NULL, `ABE_ACTION_FIELD` VARCHAR(255) default '', + `ABE_ACTION_BODY_FIELD` VARCHAR(255) default '', `ABE_CASE_NOTE_IN_RESPONSE` INTEGER default 0, `ABE_FORCE_LOGIN` INTEGER default 0, `ABE_CREATE_DATE` DATETIME NOT NULL, @@ -2873,6 +2874,7 @@ CREATE TABLE `ABE_CONFIGURATION` `ABE_MAILSERVER_OR_MAILCURRENT` INTEGER default 0, `ABE_CUSTOM_GRID` MEDIUMTEXT, `ABE_EMAIL_SERVER_UID` VARCHAR(32) default '', + `ABE_EMAIL_SERVER_RECEIVER_UID` VARCHAR(32) default '', PRIMARY KEY (`ABE_UID`), KEY `indexAbeProcess`(`PRO_UID`), KEY `indexAbeProcessTask`(`PRO_UID`, `TAS_UID`) diff --git a/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php b/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php new file mode 100644 index 000000000..ec6a1f92c --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php @@ -0,0 +1,32 @@ +appMessUid; + } + + /** + * Set the appMessUid + * + * @param string $v + * @return void + */ + public function setAppMessUid($v) + { + $this->appMessUid = $v; + } +} + From 656745913d61d6fee0a782411414238a5ee4cad0 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Fri, 23 Nov 2018 14:41:04 -0400 Subject: [PATCH 003/100] PMC-57: Action BY Email: Add new option in Email Server configuration page Code Improvements Code Improvements 1 Code Improvements 2 Fixing port labels Fixing port labels 1 Code improvements 3 Code improvements 4 Code improvements 5 Code improvements 6 Code improvements 7 --- .../model/map/EmailServerMapBuilder.php | 4 + .../classes/model/om/BaseEmailServer.php | 204 +++++++++++--- .../classes/model/om/BaseEmailServerPeer.php | 28 +- workflow/engine/config/schema.xml | 2 + .../translations/english/processmaker.en.po | 24 ++ workflow/engine/data/mysql/insert.sql | 4 + workflow/engine/data/mysql/schema.sql | 2 + .../methods/emailServer/emailServerAjax.php | 28 +- .../BusinessModel/EmailServer.php | 23 +- .../templates/emailServer/emailServer.js | 263 ++++++++++-------- 10 files changed, 407 insertions(+), 175 deletions(-) diff --git a/workflow/engine/classes/model/map/EmailServerMapBuilder.php b/workflow/engine/classes/model/map/EmailServerMapBuilder.php index ab8fd959a..b9e5729a0 100644 --- a/workflow/engine/classes/model/map/EmailServerMapBuilder.php +++ b/workflow/engine/classes/model/map/EmailServerMapBuilder.php @@ -73,6 +73,10 @@ class EmailServerMapBuilder $tMap->addColumn('MESS_PORT', 'MessPort', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('MESS_INCOMING_SERVER', 'MessIncomingServer', 'string', CreoleTypes::VARCHAR, true, 256); + + $tMap->addColumn('MESS_INCOMING_PORT', 'MessIncomingPort', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('MESS_RAUTH', 'MessRauth', 'int', CreoleTypes::INTEGER, true, null); $tMap->addColumn('MESS_ACCOUNT', 'MessAccount', 'string', CreoleTypes::VARCHAR, true, 256); diff --git a/workflow/engine/classes/model/om/BaseEmailServer.php b/workflow/engine/classes/model/om/BaseEmailServer.php index 111488080..82716bab4 100644 --- a/workflow/engine/classes/model/om/BaseEmailServer.php +++ b/workflow/engine/classes/model/om/BaseEmailServer.php @@ -51,6 +51,18 @@ abstract class BaseEmailServer extends BaseObject implements Persistent */ protected $mess_port = 0; + /** + * The value for the mess_incoming_server field. + * @var string + */ + protected $mess_incoming_server = ''; + + /** + * The value for the mess_incoming_port field. + * @var int + */ + protected $mess_incoming_port = 0; + /** * The value for the mess_rauth field. * @var int @@ -163,6 +175,28 @@ abstract class BaseEmailServer extends BaseObject implements Persistent return $this->mess_port; } + /** + * Get the [mess_incoming_server] column value. + * + * @return string + */ + public function getMessIncomingServer() + { + + return $this->mess_incoming_server; + } + + /** + * Get the [mess_incoming_port] column value. + * + * @return int + */ + public function getMessIncomingPort() + { + + return $this->mess_incoming_port; + } + /** * Get the [mess_rauth] column value. * @@ -350,6 +384,50 @@ abstract class BaseEmailServer extends BaseObject implements Persistent } // setMessPort() + /** + * Set the value of [mess_incoming_server] column. + * + * @param string $v new value + * @return void + */ + public function setMessIncomingServer($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->mess_incoming_server !== $v || $v === '') { + $this->mess_incoming_server = $v; + $this->modifiedColumns[] = EmailServerPeer::MESS_INCOMING_SERVER; + } + + } // setMessIncomingServer() + + /** + * Set the value of [mess_incoming_port] column. + * + * @param int $v new value + * @return void + */ + public function setMessIncomingPort($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->mess_incoming_port !== $v || $v === 0) { + $this->mess_incoming_port = $v; + $this->modifiedColumns[] = EmailServerPeer::MESS_INCOMING_PORT; + } + + } // setMessIncomingPort() + /** * Set the value of [mess_rauth] column. * @@ -573,30 +651,34 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->mess_port = $rs->getInt($startcol + 3); - $this->mess_rauth = $rs->getInt($startcol + 4); + $this->mess_incoming_server = $rs->getString($startcol + 4); - $this->mess_account = $rs->getString($startcol + 5); + $this->mess_incoming_port = $rs->getInt($startcol + 5); - $this->mess_password = $rs->getString($startcol + 6); + $this->mess_rauth = $rs->getInt($startcol + 6); - $this->mess_from_mail = $rs->getString($startcol + 7); + $this->mess_account = $rs->getString($startcol + 7); - $this->mess_from_name = $rs->getString($startcol + 8); + $this->mess_password = $rs->getString($startcol + 8); - $this->smtpsecure = $rs->getString($startcol + 9); + $this->mess_from_mail = $rs->getString($startcol + 9); - $this->mess_try_send_inmediatly = $rs->getInt($startcol + 10); + $this->mess_from_name = $rs->getString($startcol + 10); - $this->mail_to = $rs->getString($startcol + 11); + $this->smtpsecure = $rs->getString($startcol + 11); - $this->mess_default = $rs->getInt($startcol + 12); + $this->mess_try_send_inmediatly = $rs->getInt($startcol + 12); + + $this->mail_to = $rs->getString($startcol + 13); + + $this->mess_default = $rs->getInt($startcol + 14); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 13; // 13 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 15; // 15 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating EmailServer object", $e); @@ -813,30 +895,36 @@ abstract class BaseEmailServer extends BaseObject implements Persistent return $this->getMessPort(); break; case 4: - return $this->getMessRauth(); + return $this->getMessIncomingServer(); break; case 5: - return $this->getMessAccount(); + return $this->getMessIncomingPort(); break; case 6: - return $this->getMessPassword(); + return $this->getMessRauth(); break; case 7: - return $this->getMessFromMail(); + return $this->getMessAccount(); break; case 8: - return $this->getMessFromName(); + return $this->getMessPassword(); break; case 9: - return $this->getSmtpsecure(); + return $this->getMessFromMail(); break; case 10: - return $this->getMessTrySendInmediatly(); + return $this->getMessFromName(); break; case 11: - return $this->getMailTo(); + return $this->getSmtpsecure(); break; case 12: + return $this->getMessTrySendInmediatly(); + break; + case 13: + return $this->getMailTo(); + break; + case 14: return $this->getMessDefault(); break; default: @@ -863,15 +951,17 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $keys[1] => $this->getMessEngine(), $keys[2] => $this->getMessServer(), $keys[3] => $this->getMessPort(), - $keys[4] => $this->getMessRauth(), - $keys[5] => $this->getMessAccount(), - $keys[6] => $this->getMessPassword(), - $keys[7] => $this->getMessFromMail(), - $keys[8] => $this->getMessFromName(), - $keys[9] => $this->getSmtpsecure(), - $keys[10] => $this->getMessTrySendInmediatly(), - $keys[11] => $this->getMailTo(), - $keys[12] => $this->getMessDefault(), + $keys[4] => $this->getMessIncomingServer(), + $keys[5] => $this->getMessIncomingPort(), + $keys[6] => $this->getMessRauth(), + $keys[7] => $this->getMessAccount(), + $keys[8] => $this->getMessPassword(), + $keys[9] => $this->getMessFromMail(), + $keys[10] => $this->getMessFromName(), + $keys[11] => $this->getSmtpsecure(), + $keys[12] => $this->getMessTrySendInmediatly(), + $keys[13] => $this->getMailTo(), + $keys[14] => $this->getMessDefault(), ); return $result; } @@ -916,30 +1006,36 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->setMessPort($value); break; case 4: - $this->setMessRauth($value); + $this->setMessIncomingServer($value); break; case 5: - $this->setMessAccount($value); + $this->setMessIncomingPort($value); break; case 6: - $this->setMessPassword($value); + $this->setMessRauth($value); break; case 7: - $this->setMessFromMail($value); + $this->setMessAccount($value); break; case 8: - $this->setMessFromName($value); + $this->setMessPassword($value); break; case 9: - $this->setSmtpsecure($value); + $this->setMessFromMail($value); break; case 10: - $this->setMessTrySendInmediatly($value); + $this->setMessFromName($value); break; case 11: - $this->setMailTo($value); + $this->setSmtpsecure($value); break; case 12: + $this->setMessTrySendInmediatly($value); + break; + case 13: + $this->setMailTo($value); + break; + case 14: $this->setMessDefault($value); break; } // switch() @@ -982,39 +1078,47 @@ abstract class BaseEmailServer extends BaseObject implements Persistent } if (array_key_exists($keys[4], $arr)) { - $this->setMessRauth($arr[$keys[4]]); + $this->setMessIncomingServer($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { - $this->setMessAccount($arr[$keys[5]]); + $this->setMessIncomingPort($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { - $this->setMessPassword($arr[$keys[6]]); + $this->setMessRauth($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { - $this->setMessFromMail($arr[$keys[7]]); + $this->setMessAccount($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { - $this->setMessFromName($arr[$keys[8]]); + $this->setMessPassword($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { - $this->setSmtpsecure($arr[$keys[9]]); + $this->setMessFromMail($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setMessTrySendInmediatly($arr[$keys[10]]); + $this->setMessFromName($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setMailTo($arr[$keys[11]]); + $this->setSmtpsecure($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setMessDefault($arr[$keys[12]]); + $this->setMessTrySendInmediatly($arr[$keys[12]]); + } + + if (array_key_exists($keys[13], $arr)) { + $this->setMailTo($arr[$keys[13]]); + } + + if (array_key_exists($keys[14], $arr)) { + $this->setMessDefault($arr[$keys[14]]); } } @@ -1044,6 +1148,14 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $criteria->add(EmailServerPeer::MESS_PORT, $this->mess_port); } + if ($this->isColumnModified(EmailServerPeer::MESS_INCOMING_SERVER)) { + $criteria->add(EmailServerPeer::MESS_INCOMING_SERVER, $this->mess_incoming_server); + } + + if ($this->isColumnModified(EmailServerPeer::MESS_INCOMING_PORT)) { + $criteria->add(EmailServerPeer::MESS_INCOMING_PORT, $this->mess_incoming_port); + } + if ($this->isColumnModified(EmailServerPeer::MESS_RAUTH)) { $criteria->add(EmailServerPeer::MESS_RAUTH, $this->mess_rauth); } @@ -1140,6 +1252,10 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $copyObj->setMessPort($this->mess_port); + $copyObj->setMessIncomingServer($this->mess_incoming_server); + + $copyObj->setMessIncomingPort($this->mess_incoming_port); + $copyObj->setMessRauth($this->mess_rauth); $copyObj->setMessAccount($this->mess_account); diff --git a/workflow/engine/classes/model/om/BaseEmailServerPeer.php b/workflow/engine/classes/model/om/BaseEmailServerPeer.php index c78d96808..a020a0763 100644 --- a/workflow/engine/classes/model/om/BaseEmailServerPeer.php +++ b/workflow/engine/classes/model/om/BaseEmailServerPeer.php @@ -25,7 +25,7 @@ abstract class BaseEmailServerPeer const CLASS_DEFAULT = 'classes.model.EmailServer'; /** The total number of columns. */ - const NUM_COLUMNS = 13; + const NUM_COLUMNS = 15; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -43,6 +43,12 @@ abstract class BaseEmailServerPeer /** the column name for the MESS_PORT field */ const MESS_PORT = 'EMAIL_SERVER.MESS_PORT'; + /** the column name for the MESS_INCOMING_SERVER field */ + const MESS_INCOMING_SERVER = 'EMAIL_SERVER.MESS_INCOMING_SERVER'; + + /** the column name for the MESS_INCOMING_PORT field */ + const MESS_INCOMING_PORT = 'EMAIL_SERVER.MESS_INCOMING_PORT'; + /** the column name for the MESS_RAUTH field */ const MESS_RAUTH = 'EMAIL_SERVER.MESS_RAUTH'; @@ -81,10 +87,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessIncomingServer', 'MessIncomingPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_INCOMING_SERVER, EmailServerPeer::MESS_INCOMING_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_INCOMING_SERVER', 'MESS_INCOMING_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) ); /** @@ -94,10 +100,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessRauth' => 4, 'MessAccount' => 5, 'MessPassword' => 6, 'MessFromMail' => 7, 'MessFromName' => 8, 'Smtpsecure' => 9, 'MessTrySendInmediatly' => 10, 'MailTo' => 11, 'MessDefault' => 12, ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_RAUTH => 4, EmailServerPeer::MESS_ACCOUNT => 5, EmailServerPeer::MESS_PASSWORD => 6, EmailServerPeer::MESS_FROM_MAIL => 7, EmailServerPeer::MESS_FROM_NAME => 8, EmailServerPeer::SMTPSECURE => 9, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 10, EmailServerPeer::MAIL_TO => 11, EmailServerPeer::MESS_DEFAULT => 12, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_RAUTH' => 4, 'MESS_ACCOUNT' => 5, 'MESS_PASSWORD' => 6, 'MESS_FROM_MAIL' => 7, 'MESS_FROM_NAME' => 8, 'SMTPSECURE' => 9, 'MESS_TRY_SEND_INMEDIATLY' => 10, 'MAIL_TO' => 11, 'MESS_DEFAULT' => 12, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessIncomingServer' => 4, 'MessIncomingPort' => 5, 'MessRauth' => 6, 'MessAccount' => 7, 'MessPassword' => 8, 'MessFromMail' => 9, 'MessFromName' => 10, 'Smtpsecure' => 11, 'MessTrySendInmediatly' => 12, 'MailTo' => 13, 'MessDefault' => 14, ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_INCOMING_SERVER => 4, EmailServerPeer::MESS_INCOMING_PORT => 5, EmailServerPeer::MESS_RAUTH => 6, EmailServerPeer::MESS_ACCOUNT => 7, EmailServerPeer::MESS_PASSWORD => 8, EmailServerPeer::MESS_FROM_MAIL => 9, EmailServerPeer::MESS_FROM_NAME => 10, EmailServerPeer::SMTPSECURE => 11, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 12, EmailServerPeer::MAIL_TO => 13, EmailServerPeer::MESS_DEFAULT => 14, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_INCOMING_SERVER' => 4, 'MESS_INCOMING_PORT' => 5, 'MESS_RAUTH' => 6, 'MESS_ACCOUNT' => 7, 'MESS_PASSWORD' => 8, 'MESS_FROM_MAIL' => 9, 'MESS_FROM_NAME' => 10, 'SMTPSECURE' => 11, 'MESS_TRY_SEND_INMEDIATLY' => 12, 'MAIL_TO' => 13, 'MESS_DEFAULT' => 14, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) ); /** @@ -206,6 +212,10 @@ abstract class BaseEmailServerPeer $criteria->addSelectColumn(EmailServerPeer::MESS_PORT); + $criteria->addSelectColumn(EmailServerPeer::MESS_INCOMING_SERVER); + + $criteria->addSelectColumn(EmailServerPeer::MESS_INCOMING_PORT); + $criteria->addSelectColumn(EmailServerPeer::MESS_RAUTH); $criteria->addSelectColumn(EmailServerPeer::MESS_ACCOUNT); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 75517b680..bac185c02 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -4866,6 +4866,8 @@ + + diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 7027ef788..a3009be9c 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -23477,6 +23477,18 @@ msgstr "Sent By" msgid "[LABEL/ID_SERVER] Server" msgstr "Server" +# TRANSLATION +# LABEL/ID_OUTGOING_SERVER +#: LABEL/ID_OUTGOING_SERVER +msgid "Outgoing Server" +msgstr "Outgoing Server" + +# TRANSLATION +# LABEL/ID_INCOMING_SERVER +#: LABEL/ID_INCOMING_SERVER +msgid "Incoming Server" +msgstr "Incoming Server" + # TRANSLATION # LABEL/ID_SERVER_ADDRESS #: LABEL/ID_SERVER_ADDRESS @@ -27929,6 +27941,18 @@ msgstr "Photo gallery" msgid "Port (default 25)" msgstr "Port (default 25)" +# TRANSLATION +# LABEL/INCOMING_PORT_DEFAULT +#: LABEL/INCOMING_PORT_DEFAULT +msgid "Incoming Port (default 143)" +msgstr "Incoming Port (default 143)" + +# TRANSLATION +# LABEL/OUTGOING_PORT_DEFAULT +#: LABEL/OUTGOING_PORT_DEFAULT +msgid "Outgoing Port (default 25)" +msgstr "Outgoing Port (default 25)" + # TRANSLATION # LABEL/REQUIRE_AUTHENTICATION #: LABEL/REQUIRE_AUTHENTICATION diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 8277694f0..a28d0e496 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -58425,6 +58425,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_INACTIVE','en','Inactive','2014-01-15') , ( 'LABEL','ID_INBOX','en','Inbox','2014-01-15') , ( 'LABEL','ID_INBOX_EMPTY','en','Your Inbox is empty...','2015-05-06') , +( 'LABEL','ID_INCOMING_SERVER','en','Incoming Server','2018-11-23') , ( 'LABEL','ID_INCORRECT_EMAIL','en','Your E-mail address is not valid.','2014-01-15') , ( 'LABEL','ID_INCORRECT_USERNAME_PASSWORD','en','Incorrect username or password','2014-01-15') , ( 'LABEL','ID_INCORRECT_VALUE_ACTION','en','The value for $action is incorrect.','2014-05-29') , @@ -60201,6 +60202,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ORIGIN_TASK','en','Origin Task','2014-01-15') , ( 'LABEL','ID_OTHER','en','Other','2014-01-15') , ( 'LABEL','ID_OUTBOX','en','Outbox','2014-01-15') , +( 'LABEL','ID_OUTGOING_SERVER','en','Outgoing Server','2018-11-23') , ( 'LABEL','ID_OUTPUT_DB','en','Output','2014-10-08') , ( 'LABEL','ID_OUTPUT_DOCUMENT','en','Output Document','2014-01-15') , ( 'LABEL','ID_OUTPUT_DOCUMENTS','en','Output Documents','2014-01-15') , @@ -61462,6 +61464,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','IMPORT_PROCESS_DISABLE','en','Disable the current process and create a new version of the process','2014-01-15') , ( 'LABEL','IMPORT_PROCESS_NEW','en','Create a completely new process without changing the current process','2014-01-15') , ( 'LABEL','IMPORT_PROCESS_OVERWRITING','en','Update the current process, overwriting all tasks and steps','2014-01-15') , +( 'LABEL','INCOMING_PORT_DEFAULT','en','Incoming Port (default 143)','2018-11-23') , ( 'LABEL','INVALID_FILE','en','Invalid file!','2014-01-15') , ( 'LABEL','IS_USER_NAME_DISPLAY_FORMAT','en','User Name Display Format','2014-01-15') , ( 'LABEL','LOGIN','en','Login','2014-01-15') , @@ -61529,6 +61532,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','NEW_SITE_SUCCESS_CONFIRM','en','Do you want open the new site?','2014-01-15') , ( 'LABEL','NEW_SITE_SUCCESS_CONFIRMNOTE','en','Note.- If you open the new site your current session will be closed.','2014-01-15') , ( 'LABEL','OPEN_NEW_WS','en','Open new site','2014-01-15') , +( 'LABEL','OUTGOING_PORT_DEFAULT','en','Outgoing Port (default 25)','2018-11-26') , ( 'LABEL','OUTPUT_CREATE','en','Output document has been created successfully','2014-01-15') , ( 'LABEL','PASSWORD_HISTORY','en','Password history','2014-01-15') , ( 'LABEL','PAUSED','en','Pause','2014-01-15') , diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 30f4f911f..9bd873c33 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2744,6 +2744,8 @@ CREATE TABLE `EMAIL_SERVER` `MESS_ENGINE` VARCHAR(256) default '' NOT NULL, `MESS_SERVER` VARCHAR(256) default '' NOT NULL, `MESS_PORT` INTEGER default 0 NOT NULL, + `MESS_INCOMING_SERVER` VARCHAR(256) default '' NOT NULL, + `MESS_INCOMING_PORT` INTEGER default 0 NOT NULL, `MESS_RAUTH` INTEGER default 0 NOT NULL, `MESS_ACCOUNT` VARCHAR(256) default '' NOT NULL, `MESS_PASSWORD` VARCHAR(256) default '' NOT NULL, diff --git a/workflow/engine/methods/emailServer/emailServerAjax.php b/workflow/engine/methods/emailServer/emailServerAjax.php index 6f3c246e3..59a454f52 100644 --- a/workflow/engine/methods/emailServer/emailServerAjax.php +++ b/workflow/engine/methods/emailServer/emailServerAjax.php @@ -9,6 +9,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -27,6 +29,14 @@ switch ($option) { $reqAuthentication = (int)($_POST["reqAuthentication"]); $password = ($reqAuthentication == 1)? $_POST["password"] : ""; $smtpSecure = $_POST["smtpSecure"]; + } elseif ($cboEmailEngine == "IMAP") { + $server = $_POST["server"]; + $port = (int)($_POST["port"]); + $incomingServer = $_POST["incomingServer"]; + $incomingPort = (int)($_POST["incomingPort"]); + $reqAuthentication = (int)($_POST["reqAuthentication"]); + $password = ($reqAuthentication == 1)? $_POST["password"] : ""; + $smtpSecure = $_POST["smtpSecure"]; } try { @@ -34,6 +44,8 @@ switch ($option) { "MESS_ENGINE" => $cboEmailEngine, "MESS_SERVER" => $server, "MESS_PORT" => $port, + "MESS_INCOMING_SERVER" => $incomingServer, + "MESS_INCOMING_PORT" => $incomingPort, "MESS_RAUTH" => $reqAuthentication, "MESS_ACCOUNT" => $accountFrom, "MESS_PASSWORD" => $password, @@ -63,6 +75,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -81,6 +95,14 @@ switch ($option) { $reqAuthentication = (int)($_POST["reqAuthentication"]); $password = ($reqAuthentication == 1)? $_POST["password"] : ""; $smtpSecure = $_POST["smtpSecure"]; + } elseif ($cboEmailEngine == "IMAP") { + $server = $_POST["server"]; + $port = (int)($_POST["port"]); + $incomingServer = $_POST["incomingServer"]; + $incomingPort = (int)($_POST["incomingPort"]); + $reqAuthentication = (int)($_POST["reqAuthentication"]); + $password = ($reqAuthentication == 1)? $_POST["password"] : ""; + $smtpSecure = $_POST["smtpSecure"]; } try { @@ -88,6 +110,8 @@ switch ($option) { "MESS_ENGINE" => $cboEmailEngine, "MESS_SERVER" => $server, "MESS_PORT" => $port, + "MESS_INCOMING_SERVER" => $incomingServer, + "MESS_INCOMING_PORT" => $incomingPort, "MESS_RAUTH" => $reqAuthentication, "MESS_ACCOUNT" => $accountFrom, "MESS_PASSWORD" => $password, @@ -153,6 +177,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -165,7 +191,7 @@ switch ($option) { $mailTo = ($sendTestMail == 1)? $_POST["mailTo"] : ""; $emailServerDefault = (int)($_POST["emailServerDefault"]); - if ($cboEmailEngine == "PHPMAILER") { + if ($cboEmailEngine == "PHPMAILER" || $cboEmailEngine == "IMAP") { $server = $_POST["server"]; $port = (int)($_POST["port"]); $reqAuthentication = (int)($_POST["reqAuthentication"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index 7516bccd2..56ffd0aa0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -13,9 +13,11 @@ class EmailServer { private $arrayFieldDefinition = array( "MESS_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "emailServerUid"), - "MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL"), "fieldNameAux" => "emailServerEngine"), + "MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL", "IMAP"), "fieldNameAux" => "emailServerEngine"), "MESS_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerServer"), "MESS_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPort"), + "MESS_INCOMING_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerIncomingServer"), + "MESS_INCOMING_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerIncomingPort"), "MESS_RAUTH" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(0, 1), "fieldNameAux" => "emailServerRauth"), "MESS_ACCOUNT" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerUserName"), "MESS_PASSWORD" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPassword"), @@ -51,10 +53,10 @@ class EmailServer throw $e; } } - + /** * Get the default information from the context. - * + * * @global type $RBAC * @return void */ @@ -525,6 +527,7 @@ class EmailServer } break; case "PHPMAILER": + case "IMAP": $numSteps = ($arrayData['MAIL_TO'] != '') ? count($arrayPhpMailerTestName) : count($arrayPhpMailerTestName) - 1; for ($step = 1; $step <= $numSteps; $step++) { @@ -829,6 +832,8 @@ class EmailServer 'engine'=> $arrayData["MESS_ENGINE"], 'server' => $arrayData["MESS_SERVER"], 'port' => $arrayData["MESS_PORT"], + 'incomingServer' => $arrayData["MESS_INCOMING_SERVER"], + 'incomingPort' => $arrayData["MESS_INCOMING_PORT"], 'requireAuthentication' => $arrayData["MESS_RAUTH"], 'account' => $arrayData["MESS_ACCOUNT"], 'senderEmail' => $arrayData["MESS_FROM_MAIL"], @@ -1000,6 +1005,8 @@ class EmailServer 'engine' => $arrayData["MESS_ENGINE"], 'server' => $arrayData["MESS_SERVER"], 'port' => $arrayData["MESS_PORT"], + 'incomingServer' => $arrayData["MESS_INCOMING_SERVER"], + 'incomingPort' => $arrayData["MESS_INCOMING_PORT"], 'requireAuthentication' => $arrayData["MESS_RAUTH"], 'account' => $arrayData["MESS_ACCOUNT"], 'senderEmail' => $arrayData["MESS_FROM_MAIL"], @@ -1086,6 +1093,8 @@ class EmailServer $criteria->addSelectColumn(\EmailServerPeer::MESS_ENGINE); $criteria->addSelectColumn(\EmailServerPeer::MESS_SERVER); $criteria->addSelectColumn(\EmailServerPeer::MESS_PORT); + $criteria->addSelectColumn(\EmailServerPeer::MESS_INCOMING_SERVER); + $criteria->addSelectColumn(\EmailServerPeer::MESS_INCOMING_PORT); $criteria->addSelectColumn(\EmailServerPeer::MESS_RAUTH); $criteria->addSelectColumn(\EmailServerPeer::MESS_ACCOUNT); $criteria->addSelectColumn(\EmailServerPeer::MESS_PASSWORD); @@ -1118,6 +1127,8 @@ class EmailServer $this->getFieldNameByFormatFieldName("MESS_ENGINE") => $record["MESS_ENGINE"], $this->getFieldNameByFormatFieldName("MESS_SERVER") => $record["MESS_SERVER"], $this->getFieldNameByFormatFieldName("MESS_PORT") => $record["MESS_PORT"], + $this->getFieldNameByFormatFieldName("MESS_INCOMING_SERVER") => $record["MESS_INCOMING_SERVER"], + $this->getFieldNameByFormatFieldName("MESS_INCOMING_PORT") => $record["MESS_INCOMING_PORT"], $this->getFieldNameByFormatFieldName("MESS_RAUTH") => $record["MESS_RAUTH"], $this->getFieldNameByFormatFieldName("MESS_ACCOUNT") => $record["MESS_ACCOUNT"], $this->getFieldNameByFormatFieldName("MESS_PASSWORD") => $record["MESS_PASSWORD"], @@ -1163,6 +1174,8 @@ class EmailServer $arrayData["MESS_ENGINE"] = $row["MESS_ENGINE"]; $arrayData["MESS_SERVER"] = $row["MESS_SERVER"]; $arrayData["MESS_PORT"] = (int)($row["MESS_PORT"]); + $arrayData["MESS_INCOMING_SERVER"] = $row["MESS_INCOMING_SERVER"]; + $arrayData["MESS_INCOMING_PORT"] = (int)($row["MESS_INCOMING_PORT"]); $arrayData["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $arrayData["MESS_ACCOUNT"] = $row["MESS_ACCOUNT"]; $arrayData["MESS_PASSWORD"] = $row["MESS_PASSWORD"]; @@ -1219,6 +1232,7 @@ class EmailServer $criteria->add( $criteria->getNewCriterion(\EmailServerPeer::MESS_ENGINE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_SERVER, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( + $criteria->getNewCriterion(\EmailServerPeer::MESS_INCOMING_SERVER,"%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_ACCOUNT, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_FROM_NAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::SMTPSECURE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)) @@ -1243,7 +1257,7 @@ class EmailServer if (!is_null($sortField) && trim($sortField) != "") { $sortField = strtoupper($sortField); - if (in_array($sortField, array("MESS_ENGINE", "MESS_SERVER", "MESS_ACCOUNT", "MESS_FROM_NAME", "SMTPSECURE"))) { + if (in_array($sortField, array("MESS_ENGINE", "MESS_SERVER", "MESS_INCOMING_SERVER", "MESS_ACCOUNT", "MESS_FROM_NAME", "SMTPSECURE"))) { $sortField = \EmailServerPeer::TABLE_NAME . "." . $sortField; } else { $sortField = \EmailServerPeer::MESS_ENGINE; @@ -1316,6 +1330,7 @@ class EmailServer $row = $rsCriteria->getRow(); $row["MESS_PORT"] = (int)($row["MESS_PORT"]); + $row["MESS_INCOMING_PORT"] = (int)($row["MESS_INCOMING_PORT"]); $row["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $row["MESS_TRY_SEND_INMEDIATLY"] = (int)($row["MESS_TRY_SEND_INMEDIATLY"]); $row["MESS_DEFAULT"] = (int)($row["MESS_DEFAULT"]); diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index 91bed9ee9..dfa9e901a 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -48,83 +48,67 @@ emailServer.application = { } /*----------------------------------********---------------------------------*/ + var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); + + if (typeEmailEngine === "PHPMAILER") { + var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); + var smtpSecure = rdoGrpOption.getGroupValue(); + + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + server: Ext.getCmp("txtServer").getValue(), + port: Ext.getCmp("txtPort").getValue(), + reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked) ? 1 : 0, + accountFrom: Ext.getCmp("txtAccountFrom").getValue(), + password: Ext.getCmp("txtPassword").getValue(), + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + smtpSecure: smtpSecure, + sendTestMail: (Ext.getCmp("chkSendTestMail").checked) ? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } else if (typeEmailEngine === "IMAP") { + var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); + var smtpSecure = rdoGrpOption.getGroupValue(); + + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + server: Ext.getCmp("txtServer").getValue(), + port: Ext.getCmp("txtPort").getValue(), + incomingServer: Ext.getCmp("txtIncomingServer").getValue(), + incomingPort: Ext.getCmp("txtIncomingPort").getValue(), + reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked) ? 1 : 0, + accountFrom: Ext.getCmp("txtAccountFrom").getValue(), + password: Ext.getCmp("txtPassword").getValue(), + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + smtpSecure: smtpSecure, + sendTestMail: (Ext.getCmp("chkSendTestMail").checked) ? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } else { + //MAIL + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } + switch (option) { - case "INS": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } - break; case "UPD": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - emailServerUid: emailServerUid, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - emailServerUid: emailServerUid, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } + p.emailServerUid = emailServerUid; break; case "DEL": p = { @@ -132,45 +116,6 @@ emailServer.application = { emailServerUid: emailServerUid }; break; - //case "LST": - // break; - case "TEST": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } - break; } Ext.Ajax.request({ @@ -240,11 +185,16 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = true; Ext.getCmp("txtPort").allowBlank = true; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = true; Ext.getCmp("txtServer").setValue(""); Ext.getCmp("txtPort").setValue(""); + Ext.getCmp("txtIncomingServer").setValue(""); + Ext.getCmp("txtIncomingPort").setValue(""); + Ext.getCmp("chkReqAuthentication").setValue(false); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -272,6 +222,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = false; + Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; break; case "UPD": @@ -286,6 +238,9 @@ emailServer.application = { Ext.getCmp("txtServer").setValue(record.get("MESS_SERVER")); Ext.getCmp("txtPort").setValue((record.get("MESS_PORT") != 0)? record.get("MESS_PORT") : ""); + Ext.getCmp("txtIncomingServer").setValue(record.get("MESS_INCOMING_SERVER")); + Ext.getCmp("txtIncomingPort").setValue((record.get("MESS_INCOMING_PORT") !== 0)? record.get("MESS_INCOMING_PORT") : ""); + Ext.getCmp("chkReqAuthentication").setValue((parseInt(record.get("MESS_RAUTH")) == 1)? true : false); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -323,10 +278,46 @@ emailServer.application = { { Ext.getCmp("frmEmailServer").getForm().clearInvalid(); - if (cboEmailEngine == "PHPMAILER") { + if (cboEmailEngine === "PHPMAILER") { Ext.getCmp("txtServer").setVisible(true); Ext.getCmp("txtPort").setVisible(true); + try { + Ext.getCmp("txtServer").label.update(_("ID_SERVER")); + Ext.getCmp("txtPort").label.update(_("PORT_DEFAULT")); + } catch (err) { + Ext.getCmp("txtServer").fieldLabel = _("ID_SERVER"); + Ext.getCmp("txtPort").fieldLabel = _("PORT_DEFAULT"); + } + + Ext.getCmp("txtIncomingServer").setVisible(false); + Ext.getCmp("txtIncomingPort").setVisible(false); + + Ext.getCmp("chkReqAuthentication").setVisible(true); + + emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); + + Ext.getCmp("txtAccountFrom").setVisible(true); + Ext.getCmp("rdoGrpSmtpSecure").setVisible(true); + + Ext.getCmp("txtServer").allowBlank = false; + Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtAccountFrom").allowBlank = false; + } else if (cboEmailEngine === "IMAP") { + Ext.getCmp("txtServer").setVisible(true); + Ext.getCmp("txtPort").setVisible(true); + + try { + Ext.getCmp("txtServer").label.update(_("ID_OUTGOING_SERVER")); + Ext.getCmp("txtPort").label.update(_("OUTGOING_PORT_DEFAULT")); + } catch (err) { + Ext.getCmp("txtServer").fieldLabel = _("ID_OUTGOING_SERVER"); + Ext.getCmp("txtPort").fieldLabel = _("OUTGOING_PORT_DEFAULT"); + } + + Ext.getCmp("txtIncomingServer").setVisible(true); + Ext.getCmp("txtIncomingPort").setVisible(true); + Ext.getCmp("chkReqAuthentication").setVisible(true); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -342,6 +333,9 @@ emailServer.application = { Ext.getCmp("txtServer").setVisible(false); Ext.getCmp("txtPort").setVisible(false); + Ext.getCmp("txtIncomingServer").setVisible(false); + Ext.getCmp("txtIncomingPort").setVisible(false); + Ext.getCmp("chkReqAuthentication").setVisible(false); emailServerSetPassword(false); @@ -384,7 +378,7 @@ emailServer.application = { FLAGTEST = 1; - if (option == "PHPMAILER") { + if (option === "PHPMAILER" || option === "IMAP") { if (typeof(testData.resolving_name) != "undefined") { if (testData.resolving_name.result) { msg = msg + "" + testData.resolving_name.title + "
"; @@ -492,6 +486,8 @@ emailServer.application = { {name: "MESS_ENGINE", type: "string"}, {name: "MESS_SERVER", type: "string"}, {name: "MESS_PORT", type: "int"}, + {name: "MESS_INCOMING_SERVER", type: "string"}, + {name: "MESS_INCOMING_PORT", type: "int"}, {name: "MESS_RAUTH", type: "int"}, {name: "MESS_ACCOUNT", type: "string"}, {name: "MESS_PASSWORD", type: "string"}, @@ -548,6 +544,7 @@ emailServer.application = { data: [ ["PHPMAILER", "SMTP (PHPMailer)"], + ["IMAP", "SMTP - IMAP (PHPMailer)"], ["MAIL", "Mail (PHP)"] ] }); @@ -597,6 +594,24 @@ emailServer.application = { emptyText: null }); + var txtIncomingServer = new Ext.form.TextField({ + id: "txtIncomingServer", + name: "txtIncomingServer", + + fieldLabel: _("ID_INCOMING_SERVER") //Server + }); + + var txtIncomingPort = new Ext.form.NumberField({ + id: "txtIncomingPort", + name: "txtIncomingPort", + + fieldLabel: _("INCOMING_PORT_DEFAULT"), //Port (default 993) + + anchor: "36%", + maxLength: 3, + emptyText: null + }); + var chkReqAuthentication = new Ext.form.Checkbox({ id: "chkReqAuthentication", name: "chkReqAuthentication", @@ -745,7 +760,7 @@ emailServer.application = { var winData = new Ext.Window({ layout: "fit", width: 550, - height: 388, + height: 450, //title: "", modal: true, resizable: false, @@ -772,6 +787,8 @@ emailServer.application = { cboEmailEngine, txtServer, txtPort, + txtIncomingServer, + txtIncomingPort, chkReqAuthentication, txtAccountFrom, txtPassword, @@ -997,6 +1014,16 @@ emailServer.application = { return (value != 0)? value : "-"; }; + var rendererMessIncomingServer = function (value) + { + return (value !== "")? value : "-"; + }; + + var rendererMessIncomingPort = function (value) + { + return (value !== 0)? value : "-"; + }; + var rendererMessSmtpSecure = function (value) { return (value != "")? value : "-"; @@ -1017,6 +1044,8 @@ emailServer.application = { {id: "MESS_ENGINE", dataIndex: "MESS_ENGINE", hidden: false, header: _("EMAIL_ENGINE"), width: 80, hideable: true, align: "left"}, {id: "MESS_SERVER", dataIndex: "MESS_SERVER", hidden: false, header: _("ID_SERVER"), width: 150, hideable: true, align: "center", renderer: rendererMessServer}, {id: "MESS_PORT", dataIndex: "MESS_PORT", hidden: false, header: _("ID_EMAIL_SERVER_PORT"), width: 50, hideable: true, align: "center", renderer: rendererMessPort}, + {id: "MESS_INCOMING_SERVER", dataIndex: "MESS_INCOMING_SERVER", hidden: true, header: _("ID_INCOMING_SERVER"), width: 150, hideable: true, align: "center", renderer: rendererMessIncomingServer}, + {id: "MESS_INCOMING_PORT", dataIndex: "MESS_INCOMING_PORT", hidden: true, header: _("ID_EMAIL_SERVER_PORT"), width: 50, hideable: true, align: "center", renderer: rendererMessIncomingPort}, {id: "MESS_RAUTH", dataIndex: "MESS_RAUTH", hidden: true, header: _("REQUIRE_AUTHENTICATION"), width: 50, hideable: false, align: "left"}, {id: "MESS_ACCOUNT", dataIndex: "MESS_ACCOUNT", hidden: false, header: _("ID_EMAIL_SERVER_ACCOUNT_FROM"), width: 130, hideable: true, align: "left"}, {id: "MESS_PASSWORD", dataIndex: "MESS_PASSWORD", hidden: true, header: _("ID_PASSWORD"), width: 130, hideable: false, align: "left"}, From ab77c1343272c060622e985134da0419d5b6813b Mon Sep 17 00:00:00 2001 From: Ronald Date: Tue, 20 Nov 2018 15:53:08 -0400 Subject: [PATCH 004/100] PMC-41 Fixing actionsByEmailErrorReply.html error file --- composer.json | 3 +- .../bin/actionsByEmailEmailResponse.php | 2 + workflow/engine/bin/cron_single.php | 7 +- .../translations/english/processmaker.en.po | 116 ++++++- workflow/engine/data/mysql/insert.sql | 11 + .../ActionsByEmail/ResponseReader.php | 308 ++++++++++++++++++ .../Services/Api/ActionsByEmail.php | 5 + .../actionsByEmailErrorReply.html | 20 ++ 8 files changed, 457 insertions(+), 15 deletions(-) create mode 100644 workflow/engine/bin/actionsByEmailEmailResponse.php create mode 100644 workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php create mode 100644 workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html diff --git a/composer.json b/composer.json index 25714d395..dc34bb592 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", - "chumper/zipper": "^1.0" + "chumper/zipper": "^1.0", + "php-imap/php-imap": "^3.0" }, "require-dev": { "fzaninotto/faker": "^1.7", diff --git a/workflow/engine/bin/actionsByEmailEmailResponse.php b/workflow/engine/bin/actionsByEmailEmailResponse.php new file mode 100644 index 000000000..e22f1ad68 --- /dev/null +++ b/workflow/engine/bin/actionsByEmailEmailResponse.php @@ -0,0 +1,2 @@ +actionsByEmailEmailResponse(); + break; } } catch (Exception $e) { $token = strtotime("now"); diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 7027ef788..a859e3847 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: ProcessMaker (Branch 3.3.1)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-10-23 16:48:05\n" +"PO-Revision-Date: 2018-11-23 20:16:26\n" "Last-Translator: \n" "Language-Team: Colosa Developers Team \n" "MIME-Version: 1.0\n" @@ -1705,6 +1705,24 @@ msgstr "The answer has been submitted. Thank you." msgid "Please add your comments above this section. Don't modify or delete this section." msgstr "Please add your comments above this section. Don't modify or delete this section." +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_ANSWER +#: LABEL/ID_ABE_CASE_NOTE_ANSWER +msgid "Answer: {optionLabel}" +msgstr "Answer: {optionLabel}" + +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_COMMENT +#: LABEL/ID_ABE_CASE_NOTE_COMMENT +msgid "Comment: {emailBody}" +msgstr "Comment: {emailBody}" + +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_HEADER +#: LABEL/ID_ABE_CASE_NOTE_HEADER +msgid "{emailAccount} has completed a task from Actions by Email." +msgstr "{emailAccount} has completed a task from Actions by Email." + # TRANSLATION # LABEL/ID_ABE_FORM_ALREADY_FILLED #: LABEL/ID_ABE_FORM_ALREADY_FILLED @@ -1717,6 +1735,54 @@ msgstr "The form has already been filled and sent." msgid "The information was submitted. Thank you." msgstr "The information was submitted. Thank you." +# TRANSLATION +# LABEL/ID_ABE_LOG_ALREADY_ROUTED +#: LABEL/ID_ABE_LOG_ALREADY_ROUTED +msgid "The case was identified correctly but it was already routed." +msgstr "The case was identified correctly but it was already routed." + +# TRANSLATION +# LABEL/ID_ABE_LOG_CANNOT_BE_IDENTIFIED +#: LABEL/ID_ABE_LOG_CANNOT_BE_IDENTIFIED +msgid "The case cannot be identified." +msgstr "The case cannot be identified." + +# TRANSLATION +# LABEL/ID_ABE_LOG_CANNOT_READ +#: LABEL/ID_ABE_LOG_CANNOT_READ +msgid "The application cannot read the email receiver account." +msgstr "The application cannot read the email receiver account." + +# TRANSLATION +# LABEL/ID_ABE_LOG_PROCESSED_OK +#: LABEL/ID_ABE_LOG_PROCESSED_OK +msgid "The answer was processed correctly." +msgstr "The answer was processed correctly." + +# TRANSLATION +# LABEL/ID_ABE_LOG_ROUTING_FAILED +#: LABEL/ID_ABE_LOG_ROUTING_FAILED +msgid "The case was identified correctly but the routing process has failed." +msgstr "The case was identified correctly but the routing process has failed." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_ALREADY_ROUTED +#: LABEL/ID_ABE_RESPONSE_ALREADY_ROUTED +msgid "Your answer cannot be processed because the case was already routed or is no longer assigned to you." +msgstr "Your answer cannot be processed because the case was already routed or is no longer assigned to you." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED +#: LABEL/ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED +msgid "Your answer cannot be processed, please try again and make sure to keep the subject code untouched." +msgstr "Your answer cannot be processed, please try again and make sure to keep the subject code untouched." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_ROUTING_FAILED +#: LABEL/ID_ABE_RESPONSE_ROUTING_FAILED +msgid "Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator." +msgstr "Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator." + # TRANSLATION # LABEL/ID_ABE_RESPONSE_SENT #: LABEL/ID_ABE_RESPONSE_SENT @@ -13625,6 +13691,12 @@ msgstr "Execute a trigger when a case is deleted" msgid "Please press the \"Generate Link\" button." msgstr "Please press the \"Generate Link\" button." +# TRANSLATION +# LABEL/ID_MAFE_660cfca112471f69246e9942f5e8afd1 +#: LABEL/ID_MAFE_660cfca112471f69246e9942f5e8afd1 +msgid "Store email body in" +msgstr "Store email body in" + # TRANSLATION # LABEL/ID_MAFE_66285b36f894a5439af5a98e3e1a36d2 #: LABEL/ID_MAFE_66285b36f894a5439af5a98e3e1a36d2 @@ -14555,6 +14627,12 @@ msgstr "January" msgid "[LABEL/ID_MAFE_86fd9a7abc9f357e7fa206b2d42ec5ba] Destination Path" msgstr "Destination Path" +# TRANSLATION +# LABEL/ID_MAFE_8738321e65db027ee6476c0ab12d8cd5 +#: LABEL/ID_MAFE_8738321e65db027ee6476c0ab12d8cd5 +msgid "Store option in" +msgstr "Store option in" + # TRANSLATION # LABEL/ID_MAFE_87557f11575c0ad78e4e28abedc13b6e #: LABEL/ID_MAFE_87557f11575c0ad78e4e28abedc13b6e @@ -15365,6 +15443,12 @@ msgstr "Properties" msgid "[LABEL/ID_MAFE_9fced129522f128b2445a41fb0b6ef9f] checkbox" msgstr "checkbox" +# TRANSLATION +# LABEL/ID_MAFE_a036226d97d1d0d725d494a1431f322c +#: LABEL/ID_MAFE_a036226d97d1d0d725d494a1431f322c +msgid "Receiver account" +msgstr "Receiver account" + # TRANSLATION # LABEL/ID_MAFE_a05ac4341235111bd2cba5c3c105ba81 #: LABEL/ID_MAFE_a05ac4341235111bd2cba5c3c105ba81 @@ -17915,6 +17999,12 @@ msgstr "Users" msgid "validate" msgstr "validate" +# TRANSLATION +# LABEL/ID_MAFE_fa2b5b7c9bccd35e42cb74042690a091 +#: LABEL/ID_MAFE_fa2b5b7c9bccd35e42cb74042690a091 +msgid "Email response" +msgstr "Email response" + # TRANSLATION # LABEL/ID_MAFE_fa3c608c8fc755543f0d37afd6a42651 #: LABEL/ID_MAFE_fa3c608c8fc755543f0d37afd6a42651 @@ -25949,18 +26039,6 @@ msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini" msgid "The file has not been attached because the extension is not allowed or because the content doesn't correspond." msgstr "The file has not been attached because the extension is not allowed or because the content doesn't correspond." -# TRANSLATION -# LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE -#: LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE -msgid "File size exceeds the allowable limit of {0}" -msgstr "File size exceeds the allowable limit of {0}" - -# TRANSLATION -# LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE -#: LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE -msgid "Invalid file format, please upload a file with one of the following formats {0}" -msgstr "Invalid file format, please upload a file with one of the following formats {0}" - # TRANSLATION # LABEL/ID_UPLOAD_ERR_NO_FILE #: LABEL/ID_UPLOAD_ERR_NO_FILE @@ -26009,6 +26087,18 @@ msgstr "Upload from file" msgid "Upload image" msgstr "Upload image" +# TRANSLATION +# LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE +#: LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE +msgid "File size exceeds the allowable limit of {0}" +msgstr "File size exceeds the allowable limit of {0}" + +# TRANSLATION +# LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE +#: LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE +msgid "Invalid file format, please upload a file with one of the following formats {0}" +msgstr "Invalid file format, please upload a file with one of the following formats {0}" + # TRANSLATION # LABEL/ID_UPLOAD_LANGUAGE #: LABEL/ID_UPLOAD_LANGUAGE diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 8277694f0..b427e25af 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57085,6 +57085,17 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ABE_FORM_ALREADY_FILLED','en','The form has already been filled and sent.','2017-06-09') , ( 'LABEL','ID_ABE_INFORMATION_SUBMITTED','en','The information was submitted. Thank you.','2017-06-19') , ( 'LABEL','ID_ABE_RESPONSE_SENT','en','The response has already been sent.','2017-06-19') , +( 'LABEL','ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED','en','Your answer cannot be processed, please try again and make sure to keep the subject code untouched.','2018-11-20') , +( 'LABEL','ID_ABE_RESPONSE_ALREADY_ROUTED','en','Your answer cannot be processed because the case was already routed or is no longer assigned to you.','2018-11-20') , +( 'LABEL','ID_ABE_RESPONSE_ROUTING_FAILED','en','Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator.','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_ANSWER','en','Answer: {optionLabel}','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_COMMENT','en','Comment: {emailBody}','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_HEADER','en','{emailAccount} has completed a task from Actions by Email.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_CANNOT_READ','en','The application cannot read the email receiver account.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_PROCESSED_OK','en','The answer was processed correctly.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_CANNOT_BE_IDENTIFIED','en','The case cannot be identified.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_ALREADY_ROUTED','en','The case was identified correctly but it was already routed.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_ROUTING_FAILED','en','The case was identified correctly but the routing process has failed.','2018-11-20') , ( 'LABEL','ID_ACCEPT','en','Accept','2014-01-15') , ( 'LABEL','ID_ACCESS_DENIED','en','Access Denied!','2015-12-03') , ( 'LABEL','ID_ACCOUNT','en','Account','2014-01-15') , diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php new file mode 100644 index 000000000..8fdd862d1 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -0,0 +1,308 @@ +messageResponseError; + } + + /** + * @param string $messageResponseError + */ + public function setMessageResponseError($messageResponseError) + { + $this->messageResponseError = $messageResponseError; + } + + /** + * Read the Action by Email listener inbox looking for new messages + */ + public function actionsByEmailEmailResponse() + { + try { + if (PMLicensedFeatures + ::getSingleton() + ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { + require_once(PATH_DB . config("system.workspace") . PATH_SEP . "/db.php"); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); + define('SYS_SKIN', $arraySystemConfiguration['default_skin']); + + $criteriaAbe = new Criteria(); + $criteriaAbe->add(AbeConfigurationPeer::ABE_TYPE, "RESPONSE"); + $resultAbe = AbeConfigurationPeer::doSelectRS($criteriaAbe); + $resultAbe->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($resultAbe->next()) { + $dataAbe = $resultAbe->getRow(); + $this->getAllEmails($dataAbe); + } + } + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + + /** + * Decrypt password of Email Server + * @param array $emailSetup + * @return mixed|string + */ + private function decryptPassword(array $emailSetup) + { + $pass = isset($emailSetup['MESS_PASSWORD']) ? $emailSetup['MESS_PASSWORD'] : ''; + $passDec = G::decrypt($pass, 'EMAILENCRYPT'); + $auxPass = explode('hash:', $passDec); + if (count($auxPass) > 1) { + if (count($auxPass) == 2) { + $pass = $auxPass[1]; + } else { + array_shift($auxPass); + $pass = implode('', $auxPass); + } + } + return $pass; + } + + /** + * Get all Email of server listener + * @param array $dataAbe + */ + public function getAllEmails(array $dataAbe) + { + try { + $emailServer = new EmailServer(); + $emailSetup = (!is_null(EmailServerPeer::retrieveByPK($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID']))) ? + $emailServer->getEmailServer($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID'], true) : + $emailServer->getEmailServerDefault(); + if (empty($emailSetup)) { + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_CANNOT_READ'), 500)); + } + $mailbox = new Mailbox( + '{'. $emailSetup['MESS_INCOMING_SERVER'] . ':' . $emailSetup['MESS_INCOMING_PORT'] . '/imap/ssl/novalidate-cert}INBOX', + $emailSetup['MESS_ACCOUNT'], + $this->decryptPassword($emailSetup) + ); + + // Read all messages into an array + $mailsIds = $mailbox->searchMailbox('ALL'); + if ($mailsIds) { + $mailsInfo = $mailbox->getMailsInfo($mailsIds); + // Get the first message and save its attachment(s) to disk: + foreach ($mailsIds as $key => $mailsId) { + /** @var IncomingMail $mail */ + $mail = $mailbox->getMail($mailsId); + preg_match("/{(.*)}/", $mail->textPlain, $matches); + if ($matches && $mailsInfo[$key]->seen === 0) { + $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); + if (config("system.workspace") === $dataEmail['workspace']) { + $this->case = $dataEmail; + try { + $appDelegate = new AppDelegation(); + $alreadyRouted = $appDelegate->alreadyRouted($this->case["appUid"], $this->case["delIndex"]); + //Verify if the current case is already routed. + if ($alreadyRouted) { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ALREADY_ROUTED')); + throw (new Exception(G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'), 400)); + } + $this->processABE($this->case, $mail, $dataAbe); + Bootstrap::registerMonolog( + $this->channel, + 100, // DEBUG + G::LoadTranslation('ID_ABE_LOG_PROCESSED_OK'), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } catch (Exception $e) { + $this->sendMessageError( + $this->getMessageResponseError() ? $this->getMessageResponseError() : $e->getMessage(), + $this->case, + $mail, + $emailSetup + ); + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + } + } + } + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + + /** + * Derivation of the case with the mail information + * @param array $caseInfo + * @param IncomingMail $mail + * @param array $dataAbe + * @throws Exception + */ + public function processABE(array $caseInfo, IncomingMail $mail, array $dataAbe = []) + { + try { + $actionsByEmail = new ActionsByEmail(); + $actionsByEmail->verifyLogin($caseInfo['appUid'], $caseInfo['delIndex']); + + $case = new Cases(); + $caseFieldsABE = $case->loadCase($caseInfo['appUid'], $caseInfo['delIndex']); + + $actionsByEmailCore = new ActionsByEmailCoreClass(); + $actionField = str_replace( + $actionsByEmailCore->getPrefix(), + '', + $dataAbe['ABE_ACTION_FIELD'] + ); + $dataField = []; + $dataField[$actionField] = $caseInfo['fieldValue']; + $actionBodyField = str_replace( + $actionsByEmailCore->getPrefix(), + '', + $dataAbe['ABE_ACTION_BODY_FIELD'] + ); + $textPlain = $mail->textPlain; + $textPlain = substr($textPlain, 0, strpos($textPlain, "/=")); + $dataField[$actionBodyField] = $textPlain; + $caseFieldsABE['APP_DATA'] = array_merge($caseFieldsABE['APP_DATA'], $dataField); + + ChangeLog::getChangeLog() + ->getUsrIdByUsrUid($caseFieldsABE['CURRENT_USER_UID'], true) + ->setSourceId(ChangeLog::FromABE); + + $caseFieldsABE['CURRENT_DYNAFORM'] = ''; + $caseFieldsABE['USER_UID'] = $caseFieldsABE['CURRENT_USER_UID']; + $caseFieldsABE['OBJECT_TYPE'] = ''; + + $case->updateCase($caseInfo['appUid'], $caseFieldsABE); + + try { + $ws = new WsBase(); + $result = $ws->derivateCase( + $caseFieldsABE['CURRENT_USER_UID'], + $caseInfo['appUid'], + $caseInfo['delIndex'], + true + ); + $code = (is_array($result)) ? $result['status_code'] : $result->status_code; + if ($code != 0) { + throw new Exception( + "An error occurred while the application was being processed\n" . + "Error code: " . $result->status_code . "\nError message: " . $result->message + ); + } + } catch (Exception $e) { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ROUTING_FAILED')); + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_ROUTING_FAILED'), 400)); + } + + //Save Cases Notes + if ($dataAbe['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { + $customGrid = unserialize($dataAbe['ABE_CUSTOM_GRID']); + $fieldLabel = null; + foreach ($customGrid as $key => $value) { + if ($value['abe_custom_value'] == $caseInfo['fieldValue']) { + $fieldLabel = $value['abe_custom_label']; + break; + } + } + $appNotes = new AppNotes(); + $noteText = G::LoadTranslation('ID_ABE_CASE_NOTE_HEADER', ['emailAccount' => $mail->toString]) . "\n\n"; + $noteText .= G::LoadTranslation('ID_ABE_CASE_NOTE_ANSWER', ['optionLabel' => $fieldLabel ? $fieldLabel : $caseInfo['fieldValue']]) . "\n\n"; + $noteText .= G::LoadTranslation('ID_ABE_CASE_NOTE_COMMENT', ['emailBody' => $textPlain]); + $noteContent = addslashes($noteText); + $appNotes->postNewNote($caseInfo['appUid'], $caseFieldsABE['APP_DATA']['USER_LOGGED'], $noteContent, false); + } + } catch (Exception $e) { + if ($e->getCode() == 400) { + throw (new Exception($e->getMessage(), $e->getCode())); + } else { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED')); + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_CANNOT_BE_IDENTIFIED'), 300)); + } + } + } + + /** + * Send an error message to the sender + * @param string $msgError + * @param array $caseInf + * @param IncomingMail $mail + * @param array $emailSetup + * @return \ProcessMaker\Util\Response|string|\WsResponse + */ + public function sendMessageError($msgError, array $caseInf, IncomingMail $mail, array $emailSetup) + { + $wsBase = new WsBase(); + $result = $wsBase->sendMessage( + $caseInf['appUid'], + $mail->toString, + $mail->fromAddress, + '', + '', + $mail->subject, + 'actionsByEmailErrorReply.html', + ['ACTIONS_BY_EMAIL_ERROR_MESSAGE' => $msgError], + null, + true, + $caseInf['delIndex'], + $emailSetup, + 0 + ); + return $result; + } +} diff --git a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php index 339b5bb27..a1646e6ee 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php @@ -154,6 +154,11 @@ class ActionsByEmail extends Api $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmail.html', $path . 'actionsByEmail.html'); } + if (!file_exists($path . 'actionsByEmailErrorReply.html')) { + $data = array('prf_content' => '', 'prf_filename' => 'actionsByEmailErrorReply.html', 'prf_path' => 'templates'); + $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); + @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmailErrorReply.html', $path . 'actionsByEmailErrorReply.html'); + } } $directory = dir($path); diff --git a/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html b/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html new file mode 100644 index 000000000..c8584c420 --- /dev/null +++ b/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html @@ -0,0 +1,20 @@ +
+ + + + + + +
ACTIONS BY EMAIL
+
+
+ @#ACTIONS_BY_EMAIL_ERROR_MESSAGE +
+
+
+ This is an automated email, please do not replay to it. +
+ www.processmaker.com +
+
\ No newline at end of file From ad86c367f6b23bd07cf67ce5601c28258de4cd69 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 27 Nov 2018 15:59:01 -0400 Subject: [PATCH 005/100] PMC-61 --- .../model/map/UsersPropertiesMapBuilder.php | 2 + .../classes/model/om/BaseUsersProperties.php | 60 ++++++++++++++++++- .../model/om/BaseUsersPropertiesPeer.php | 23 ++++--- workflow/engine/config/schema.xml | 1 + workflow/engine/controllers/designer.php | 5 ++ workflow/engine/data/mysql/schema.sql | 1 + .../ProcessMaker/BusinessModel/Process.php | 18 ++++++ .../src/ProcessMaker/Services/Api/Project.php | 5 +- workflow/engine/templates/designer/index.html | 4 +- 9 files changed, 106 insertions(+), 13 deletions(-) diff --git a/workflow/engine/classes/model/map/UsersPropertiesMapBuilder.php b/workflow/engine/classes/model/map/UsersPropertiesMapBuilder.php index 90743a86a..d391036bc 100644 --- a/workflow/engine/classes/model/map/UsersPropertiesMapBuilder.php +++ b/workflow/engine/classes/model/map/UsersPropertiesMapBuilder.php @@ -75,6 +75,8 @@ class UsersPropertiesMapBuilder $tMap->addColumn('USR_SETTING_DESIGNER', 'UsrSettingDesigner', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addColumn('PMDYNAFORM_FIRST_TIME', 'PmdynaformFirstTime', 'string', CreoleTypes::CHAR, false, 1); + } // doBuild() } // UsersPropertiesMapBuilder diff --git a/workflow/engine/classes/model/om/BaseUsersProperties.php b/workflow/engine/classes/model/om/BaseUsersProperties.php index d7da23a8b..eb160481c 100644 --- a/workflow/engine/classes/model/om/BaseUsersProperties.php +++ b/workflow/engine/classes/model/om/BaseUsersProperties.php @@ -57,6 +57,12 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent */ protected $usr_setting_designer; + /** + * The value for the pmdynaform_first_time field. + * @var string + */ + protected $pmdynaform_first_time = '0'; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -147,6 +153,17 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent return $this->usr_setting_designer; } + /** + * Get the [pmdynaform_first_time] column value. + * + * @return string + */ + public function getPmdynaformFirstTime() + { + + return $this->pmdynaform_first_time; + } + /** * Set the value of [usr_uid] column. * @@ -264,6 +281,28 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent } // setUsrSettingDesigner() + /** + * Set the value of [pmdynaform_first_time] column. + * + * @param string $v new value + * @return void + */ + public function setPmdynaformFirstTime($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->pmdynaform_first_time !== $v || $v === '0') { + $this->pmdynaform_first_time = $v; + $this->modifiedColumns[] = UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME; + } + + } // setPmdynaformFirstTime() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -291,12 +330,14 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent $this->usr_setting_designer = $rs->getString($startcol + 4); + $this->pmdynaform_first_time = $rs->getString($startcol + 5); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 5; // 5 = UsersPropertiesPeer::NUM_COLUMNS - UsersPropertiesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 6; // 6 = UsersPropertiesPeer::NUM_COLUMNS - UsersPropertiesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating UsersProperties object", $e); @@ -515,6 +556,9 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent case 4: return $this->getUsrSettingDesigner(); break; + case 5: + return $this->getPmdynaformFirstTime(); + break; default: return null; break; @@ -540,6 +584,7 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent $keys[2] => $this->getUsrLoggedNextTime(), $keys[3] => $this->getUsrPasswordHistory(), $keys[4] => $this->getUsrSettingDesigner(), + $keys[5] => $this->getPmdynaformFirstTime(), ); return $result; } @@ -586,6 +631,9 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent case 4: $this->setUsrSettingDesigner($value); break; + case 5: + $this->setPmdynaformFirstTime($value); + break; } // switch() } @@ -629,6 +677,10 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent $this->setUsrSettingDesigner($arr[$keys[4]]); } + if (array_key_exists($keys[5], $arr)) { + $this->setPmdynaformFirstTime($arr[$keys[5]]); + } + } /** @@ -660,6 +712,10 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent $criteria->add(UsersPropertiesPeer::USR_SETTING_DESIGNER, $this->usr_setting_designer); } + if ($this->isColumnModified(UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME)) { + $criteria->add(UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME, $this->pmdynaform_first_time); + } + return $criteria; } @@ -722,6 +778,8 @@ abstract class BaseUsersProperties extends BaseObject implements Persistent $copyObj->setUsrSettingDesigner($this->usr_setting_designer); + $copyObj->setPmdynaformFirstTime($this->pmdynaform_first_time); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseUsersPropertiesPeer.php b/workflow/engine/classes/model/om/BaseUsersPropertiesPeer.php index 2636ff64a..ffac1caf2 100644 --- a/workflow/engine/classes/model/om/BaseUsersPropertiesPeer.php +++ b/workflow/engine/classes/model/om/BaseUsersPropertiesPeer.php @@ -25,7 +25,7 @@ abstract class BaseUsersPropertiesPeer const CLASS_DEFAULT = 'classes.model.UsersProperties'; /** The total number of columns. */ - const NUM_COLUMNS = 5; + const NUM_COLUMNS = 6; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -46,6 +46,9 @@ abstract class BaseUsersPropertiesPeer /** the column name for the USR_SETTING_DESIGNER field */ const USR_SETTING_DESIGNER = 'USERS_PROPERTIES.USR_SETTING_DESIGNER'; + /** the column name for the PMDYNAFORM_FIRST_TIME field */ + const PMDYNAFORM_FIRST_TIME = 'USERS_PROPERTIES.PMDYNAFORM_FIRST_TIME'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -57,10 +60,10 @@ abstract class BaseUsersPropertiesPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrLastUpdateDate', 'UsrLoggedNextTime', 'UsrPasswordHistory', 'UsrSettingDesigner', ), - BasePeer::TYPE_COLNAME => array (UsersPropertiesPeer::USR_UID, UsersPropertiesPeer::USR_LAST_UPDATE_DATE, UsersPropertiesPeer::USR_LOGGED_NEXT_TIME, UsersPropertiesPeer::USR_PASSWORD_HISTORY, UsersPropertiesPeer::USR_SETTING_DESIGNER, ), - BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_LAST_UPDATE_DATE', 'USR_LOGGED_NEXT_TIME', 'USR_PASSWORD_HISTORY', 'USR_SETTING_DESIGNER', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) + BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrLastUpdateDate', 'UsrLoggedNextTime', 'UsrPasswordHistory', 'UsrSettingDesigner', 'PmdynaformFirstTime', ), + BasePeer::TYPE_COLNAME => array (UsersPropertiesPeer::USR_UID, UsersPropertiesPeer::USR_LAST_UPDATE_DATE, UsersPropertiesPeer::USR_LOGGED_NEXT_TIME, UsersPropertiesPeer::USR_PASSWORD_HISTORY, UsersPropertiesPeer::USR_SETTING_DESIGNER, UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME, ), + BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_LAST_UPDATE_DATE', 'USR_LOGGED_NEXT_TIME', 'USR_PASSWORD_HISTORY', 'USR_SETTING_DESIGNER', 'PMDYNAFORM_FIRST_TIME', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, ) ); /** @@ -70,10 +73,10 @@ abstract class BaseUsersPropertiesPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrLastUpdateDate' => 1, 'UsrLoggedNextTime' => 2, 'UsrPasswordHistory' => 3, 'UsrSettingDesigner' => 4, ), - BasePeer::TYPE_COLNAME => array (UsersPropertiesPeer::USR_UID => 0, UsersPropertiesPeer::USR_LAST_UPDATE_DATE => 1, UsersPropertiesPeer::USR_LOGGED_NEXT_TIME => 2, UsersPropertiesPeer::USR_PASSWORD_HISTORY => 3, UsersPropertiesPeer::USR_SETTING_DESIGNER => 4, ), - BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_LAST_UPDATE_DATE' => 1, 'USR_LOGGED_NEXT_TIME' => 2, 'USR_PASSWORD_HISTORY' => 3, 'USR_SETTING_DESIGNER' => 4, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) + BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrLastUpdateDate' => 1, 'UsrLoggedNextTime' => 2, 'UsrPasswordHistory' => 3, 'UsrSettingDesigner' => 4, 'PmdynaformFirstTime' => 5, ), + BasePeer::TYPE_COLNAME => array (UsersPropertiesPeer::USR_UID => 0, UsersPropertiesPeer::USR_LAST_UPDATE_DATE => 1, UsersPropertiesPeer::USR_LOGGED_NEXT_TIME => 2, UsersPropertiesPeer::USR_PASSWORD_HISTORY => 3, UsersPropertiesPeer::USR_SETTING_DESIGNER => 4, UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME => 5, ), + BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_LAST_UPDATE_DATE' => 1, 'USR_LOGGED_NEXT_TIME' => 2, 'USR_PASSWORD_HISTORY' => 3, 'USR_SETTING_DESIGNER' => 4, 'PMDYNAFORM_FIRST_TIME' => 5, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, ) ); /** @@ -184,6 +187,8 @@ abstract class BaseUsersPropertiesPeer $criteria->addSelectColumn(UsersPropertiesPeer::USR_SETTING_DESIGNER); + $criteria->addSelectColumn(UsersPropertiesPeer::PMDYNAFORM_FIRST_TIME); + } const COUNT = 'COUNT(USERS_PROPERTIES.USR_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 2419ba032..f0020a576 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -2399,6 +2399,7 @@ +
diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index 44772077b..ed889372e 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -30,6 +30,7 @@ class Designer extends Controller */ public function index($httpData) { + global $RBAC; $proUid = isset($httpData->prj_uid) ? $httpData->prj_uid : ''; $appUid = isset($httpData->app_uid) ? $httpData->app_uid : ''; $proReadOnly = isset($httpData->prj_readonly) ? $httpData->prj_readonly : 'false'; @@ -41,6 +42,9 @@ class Designer extends Controller $enterprise = 0; $distribution = 0; + $usrUid = $RBAC->userObj->getUsrUid(); + $userProperties = UsersPropertiesPeer::retrieveByPk($usrUid); + /*----------------------------------********---------------------------------*/ $licensedFeatures = PMLicensedFeatures::getSingleton(); if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { @@ -65,6 +69,7 @@ class Designer extends Controller $this->setVar("SYS_LANG", SYS_LANG); $this->setVar("SYS_SKIN", SYS_SKIN); $this->setVar('HTTP_SERVER_HOSTNAME', System::getHttpServerHostnameRequestsFrontEnd()); + $this->setVar('PMDYNAFORM_FIRST_TIME', $userProperties->getPmdynaformFirstTime()); if ($debug) { if (!file_exists(PATH_HTML . "lib-dev/pmUI/build.cache")) { diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index f78a95cd0..7dc0714dd 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -1115,6 +1115,7 @@ CREATE TABLE `USERS_PROPERTIES` `USR_LOGGED_NEXT_TIME` INTEGER default 0, `USR_PASSWORD_HISTORY` MEDIUMTEXT, `USR_SETTING_DESIGNER` MEDIUMTEXT, + `PMDYNAFORM_FIRST_TIME` CHAR(1) default '0', PRIMARY KEY (`USR_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8'; #----------------------------------------------------------------------------- diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php index 90dc0a288..e7f82eba5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php @@ -8,6 +8,7 @@ use G; use PMmemcached; use ProcessPeer; use ResultSet; +use UsersPropertiesPeer; class Process { @@ -2160,4 +2161,21 @@ class Process return $processes; } + + /** + * Set for the first time the user opened the dynaform editor. + * + * @param string $usrUid + * @param string $seen + */ + public function setIfFirstTimeConsumed($usrUid, $seen) + { + if ($seen === '1') { + $userProperties = UsersPropertiesPeer::retrieveByPk($usrUid); + if ($userProperties) { + $userProperties->setPmDynaformFirstTime('1'); + $userProperties->save(); + } + } + } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index ce382e49a..65c3938da 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -366,8 +366,9 @@ class Project extends Api * * @url GET /:prj_uid/dynaforms * @param string $prj_uid {@min 32}{@max 32} + * @param string $seen */ - public function doGetDynaForms($prj_uid) + public function doGetDynaForms($prj_uid, $seen = '0') { try { $process = new \ProcessMaker\BusinessModel\Process(); @@ -375,7 +376,7 @@ class Project extends Api $process->setArrayFieldNameForException(array("processUid" => "prj_uid")); $response = $process->getDynaForms($prj_uid); - + $process->setIfFirstTimeConsumed($this->getUserId(), $seen); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index a40df5785..d2da471e7 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -1,5 +1,6 @@ + @@ -29,6 +30,7 @@ var SYS_LANG = "{$SYS_LANG}"; var SYS_SKIN = "{$SYS_SKIN}"; var HTTP_SERVER_HOSTNAME = "{$HTTP_SERVER_HOSTNAME}"; + var PMDYNAFORM_FIRST_TIME = "{$PMDYNAFORM_FIRST_TIME}" === "1"; @@ -86,6 +88,7 @@ var SYS_LANG = "{$SYS_LANG}"; var SYS_SKIN = "{$SYS_SKIN}"; var HTTP_SERVER_HOSTNAME = "{$HTTP_SERVER_HOSTNAME}"; + var PMDYNAFORM_FIRST_TIME = "{$PMDYNAFORM_FIRST_TIME}" === "1"; {foreach from=$sourceJs item=pathFile} @@ -94,7 +97,6 @@ {/if} - From 6e50a75f695d5f800f127dc86bb548ce6acc0ec1 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 28 Nov 2018 15:43:46 -0400 Subject: [PATCH 006/100] PMC-79: Email Server does not works --- workflow/engine/templates/emailServer/emailServer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index dfa9e901a..d7976acb9 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -222,8 +222,6 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; - Ext.getCmp("txtIncomingServer").allowBlank = false; - Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; break; case "UPD": @@ -302,6 +300,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = false; } else if (cboEmailEngine === "IMAP") { Ext.getCmp("txtServer").setVisible(true); @@ -327,6 +327,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = false; + Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; } else { //MAIL @@ -345,6 +347,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = true; Ext.getCmp("txtPort").allowBlank = true; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = true; Ext.getCmp("txtPassword").allowBlank = true; } From 039518481cc8b7ea0b9046dba4d5a55c5a4cc5d5 Mon Sep 17 00:00:00 2001 From: ronald Date: Thu, 29 Nov 2018 12:10:35 -0400 Subject: [PATCH 007/100] PMC-82 --- .../classes/ActionsByEmailCoreClass.php | 2 + workflow/engine/classes/SpoolRun.php | 4 +- .../ActionsByEmail/ResponseReader.php | 42 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 166485a06..f1a8ead4e 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -731,11 +731,13 @@ class ActionsByEmailCoreClass extends PMPlugin */ private function getBodyByResponse($fieldValue) { + $abeRequest = $this->getAbeRequest(); $bodyToCrypt = [ 'workspace' => $this->getWorkspace(), 'appUid' => $this->getAppUid(), 'delIndex' => $this->getIndex(), 'fieldValue' => $fieldValue, + 'ABE_REQ_UID' => $abeRequest['ABE_REQ_UID'] ]; $bodyToCrypt = G::json_encode($bodyToCrypt); diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index 56bccc4ec..c736b8b06 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -406,13 +406,14 @@ class SpoolRun switch ($this->config['MESS_ENGINE']) { case 'MAIL': case 'PHPMAILER': - + case 'IMAP': switch ($this->config['MESS_ENGINE']) { case 'MAIL': $oPHPMailer = new PHPMailer(); $oPHPMailer->Mailer = 'mail'; break; + case 'IMAP': case 'PHPMAILER': $oPHPMailer = new PHPMailer(true); $oPHPMailer->Mailer = 'smtp'; @@ -424,6 +425,7 @@ class SpoolRun switch ($this->config['MESS_ENGINE']) { case 'MAIL': break; + case 'IMAP': case 'PHPMAILER': //Posible Options for SMTPSecure are: "", "ssl" or "tls" if (isset($this->config['SMTPSecure']) && preg_match('/^(ssl|tls)$/', $this->config['SMTPSecure'])) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 8fdd862d1..447835910 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -3,6 +3,7 @@ namespace ProcessMaker\BusinessModel\ActionsByEmail; use AbeConfigurationPeer; +use AbeResponses; use ActionsByEmailCoreClass; use AppDelegation; use AppNotes; @@ -220,6 +221,27 @@ class ResponseReader $dataField[$actionBodyField] = $textPlain; $caseFieldsABE['APP_DATA'] = array_merge($caseFieldsABE['APP_DATA'], $dataField); + $dataResponses = []; + $dataResponses['ABE_REQ_UID'] = $caseInfo['ABE_REQ_UID']; + $dataResponses['ABE_RES_CLIENT_IP'] = 'localhost'; + $dataResponses['ABE_RES_DATA'] = serialize($dataField); + $dataResponses['ABE_RES_STATUS'] = 'PENDING'; + $dataResponses['ABE_RES_MESSAGE'] = ''; + + try { + $abeAbeResponsesInstance = new AbeResponses(); + $dataResponses['ABE_RES_UID'] = $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + 300, + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + ChangeLog::getChangeLog() ->getUsrIdByUsrUid($caseFieldsABE['CURRENT_USER_UID'], true) ->setSourceId(ChangeLog::FromABE); @@ -250,6 +272,24 @@ class ResponseReader throw (new Exception(G::LoadTranslation('ID_ABE_LOG_ROUTING_FAILED'), 400)); } + //Update AbeResponses + $dataResponses['ABE_RES_STATUS'] = ($code == 0)? 'SENT' : 'ERROR'; + $dataResponses['ABE_RES_MESSAGE'] = ($code == 0)? '-' : $result->message; + + try { + $abeAbeResponsesInstance = new AbeResponses(); + $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + 300, + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + $dataAbeRequests = loadAbeRequest($caseInfo['ABE_REQ_UID']); //Save Cases Notes if ($dataAbe['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { $customGrid = unserialize($dataAbe['ABE_CUSTOM_GRID']); @@ -267,6 +307,8 @@ class ResponseReader $noteContent = addslashes($noteText); $appNotes->postNewNote($caseInfo['appUid'], $caseFieldsABE['APP_DATA']['USER_LOGGED'], $noteContent, false); } + $dataAbeRequests['ABE_REQ_ANSWERED'] = 1; + $code == 0 ? uploadAbeRequest($dataAbeRequests) : ''; } catch (Exception $e) { if ($e->getCode() == 400) { throw (new Exception($e->getMessage(), $e->getCode())); From be5e82ef91ed5cb68fd1bf97d1dc87a18dcb1d41 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Tue, 8 Jan 2019 11:02:36 -0400 Subject: [PATCH 008/100] PMC-347 --- .../BusinessModel/ActionsByEmail/ResponseReader.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 447835910..4666e861a 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -126,15 +126,14 @@ class ResponseReader ); // Read all messages into an array - $mailsIds = $mailbox->searchMailbox('ALL'); + $mailsIds = $mailbox->searchMailbox('UNSEEN'); if ($mailsIds) { - $mailsInfo = $mailbox->getMailsInfo($mailsIds); // Get the first message and save its attachment(s) to disk: foreach ($mailsIds as $key => $mailsId) { /** @var IncomingMail $mail */ $mail = $mailbox->getMail($mailsId); preg_match("/{(.*)}/", $mail->textPlain, $matches); - if ($matches && $mailsInfo[$key]->seen === 0) { + if ($matches) { $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); if (config("system.workspace") === $dataEmail['workspace']) { $this->case = $dataEmail; From 85e3f83c612b2817c8e576ad85e26bf26dcae6c5 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Tue, 8 Jan 2019 15:34:10 -0400 Subject: [PATCH 009/100] PMC-348 Add marks and register the new classes for avoid this implementation in the community version --- workflow/engine/bin/cron_single.php | 4 ++++ .../BusinessModel/ActionsByEmail/ResponseReader.php | 2 ++ .../engine/src/ProcessMaker/Services/Api/ActionsByEmail.php | 2 ++ workflow/engine/templates/emailServer/emailServer.js | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 5098a3339..64cacd92b 100644 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -1,7 +1,9 @@ actionsByEmailEmailResponse(); break; + /*----------------------------------********---------------------------------*/ } } catch (Exception $e) { $token = strtotime("now"); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 447835910..b7117228d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -30,6 +30,7 @@ use WsBase; */ class ResponseReader { + /*----------------------------------********---------------------------------*/ private $channel = "ActionsByEmail"; private $case = []; private $messageResponseError = null; @@ -347,4 +348,5 @@ class ResponseReader ); return $result; } + /*----------------------------------********---------------------------------*/ } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php index a1646e6ee..63045f2ec 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php @@ -154,11 +154,13 @@ class ActionsByEmail extends Api $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmail.html', $path . 'actionsByEmail.html'); } + /*----------------------------------********---------------------------------*/ if (!file_exists($path . 'actionsByEmailErrorReply.html')) { $data = array('prf_content' => '', 'prf_filename' => 'actionsByEmailErrorReply.html', 'prf_path' => 'templates'); $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmailErrorReply.html', $path . 'actionsByEmailErrorReply.html'); } + /*----------------------------------********---------------------------------*/ } $directory = dir($path); diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index d7976acb9..7341082b6 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -71,6 +71,7 @@ emailServer.application = { emailServerDefault: emailDefault }; } else if (typeEmailEngine === "IMAP") { + /*----------------------------------********---------------------------------*/ var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); var smtpSecure = rdoGrpOption.getGroupValue(); @@ -92,6 +93,7 @@ emailServer.application = { mailTo: Ext.getCmp("txtMailTo").getValue(), emailServerDefault: emailDefault }; + /*----------------------------------********---------------------------------*/ } else { //MAIL p = { @@ -304,6 +306,7 @@ emailServer.application = { Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = false; } else if (cboEmailEngine === "IMAP") { + /*----------------------------------********---------------------------------*/ Ext.getCmp("txtServer").setVisible(true); Ext.getCmp("txtPort").setVisible(true); @@ -330,6 +333,7 @@ emailServer.application = { Ext.getCmp("txtIncomingServer").allowBlank = false; Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; + /*----------------------------------********---------------------------------*/ } else { //MAIL Ext.getCmp("txtServer").setVisible(false); From 914aa2c56e227c5adb75fccf76ea508c240f9a9e Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 25 Jan 2019 10:59:53 -0400 Subject: [PATCH 010/100] add mark for remove options IMAP --- workflow/engine/templates/emailServer/emailServer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index 7341082b6..dc72cd436 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -552,7 +552,9 @@ emailServer.application = { data: [ ["PHPMAILER", "SMTP (PHPMailer)"], + /*----------------------------------********---------------------------------*/ ["IMAP", "SMTP - IMAP (PHPMailer)"], + /*----------------------------------********---------------------------------*/ ["MAIL", "Mail (PHP)"] ] }); From 48e870fab36c85a0bf02437bbfca332a8bf13e8a Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 14 Nov 2018 15:00:10 -0400 Subject: [PATCH 011/100] PMC-40: Action by Email: Email response configuration Adding schema.sql file --- .../engine/classes/model/AbeConfiguration.php | 5 +- .../model/map/AbeConfigurationMapBuilder.php | 4 + .../classes/model/om/BaseAbeConfiguration.php | 194 ++++++++++++++---- .../model/om/BaseAbeConfigurationPeer.php | 28 ++- workflow/engine/config/schema.xml | 13 +- workflow/engine/data/mysql/schema.sql | 2 + 6 files changed, 196 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/model/AbeConfiguration.php b/workflow/engine/classes/model/AbeConfiguration.php index 6b740d85a..6722958cf 100644 --- a/workflow/engine/classes/model/AbeConfiguration.php +++ b/workflow/engine/classes/model/AbeConfiguration.php @@ -26,6 +26,7 @@ class AbeConfiguration extends BaseAbeConfiguration 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', + 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', @@ -33,7 +34,8 @@ class AbeConfiguration extends BaseAbeConfiguration 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', - 'ABE_EMAIL_SERVER_UID' + 'ABE_EMAIL_SERVER_UID', + 'ABE_EMAIL_SERVER_RECEIVER_UID' ]; public function load($abeUid) @@ -136,6 +138,7 @@ class AbeConfiguration extends BaseAbeConfiguration $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_SUBJECT_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CUSTOM_GRID); diff --git a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php index 8652ef90a..c74d98fa0 100644 --- a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php +++ b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php @@ -83,6 +83,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_ACTION_FIELD', 'AbeActionField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_ACTION_BODY_FIELD', 'AbeActionBodyField', 'string', CreoleTypes::VARCHAR, false, 255); + $tMap->addColumn('ABE_CASE_NOTE_IN_RESPONSE', 'AbeCaseNoteInResponse', 'int', CreoleTypes::INTEGER, false, null); $tMap->addColumn('ABE_FORCE_LOGIN', 'AbeForceLogin', 'int', CreoleTypes::INTEGER, false, null); @@ -99,6 +101,8 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_EMAIL_SERVER_UID', 'AbeEmailServerUid', 'string', CreoleTypes::VARCHAR, false, 32); + $tMap->addColumn('ABE_EMAIL_SERVER_RECEIVER_UID', 'AbeEmailServerReceiverUid', 'string', CreoleTypes::VARCHAR, false, 32); + } // doBuild() } // AbeConfigurationMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAbeConfiguration.php b/workflow/engine/classes/model/om/BaseAbeConfiguration.php index 7de6b6b1a..a83b0448d 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfiguration.php +++ b/workflow/engine/classes/model/om/BaseAbeConfiguration.php @@ -81,6 +81,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_action_field = ''; + /** + * The value for the abe_action_body_field field. + * @var string + */ + protected $abe_action_body_field = ''; + /** * The value for the abe_case_note_in_response field. * @var int @@ -129,6 +135,12 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent */ protected $abe_email_server_uid = ''; + /** + * The value for the abe_email_server_receiver_uid field. + * @var string + */ + protected $abe_email_server_receiver_uid = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -242,6 +254,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_action_field; } + /** + * Get the [abe_action_body_field] column value. + * + * @return string + */ + public function getAbeActionBodyField() + { + + return $this->abe_action_body_field; + } + /** * Get the [abe_case_note_in_response] column value. * @@ -372,6 +395,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_email_server_uid; } + /** + * Get the [abe_email_server_receiver_uid] column value. + * + * @return string + */ + public function getAbeEmailServerReceiverUid() + { + + return $this->abe_email_server_receiver_uid; + } + /** * Set the value of [abe_uid] column. * @@ -570,6 +604,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeActionField() + /** + * Set the value of [abe_action_body_field] column. + * + * @param string $v new value + * @return void + */ + public function setAbeActionBodyField($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_action_body_field !== $v || $v === '') { + $this->abe_action_body_field = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_ACTION_BODY_FIELD; + } + + } // setAbeActionBodyField() + /** * Set the value of [abe_case_note_in_response] column. * @@ -760,6 +816,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeEmailServerUid() + /** + * Set the value of [abe_email_server_receiver_uid] column. + * + * @param string $v new value + * @return void + */ + public function setAbeEmailServerReceiverUid($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->abe_email_server_receiver_uid !== $v || $v === '') { + $this->abe_email_server_receiver_uid = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID; + } + + } // setAbeEmailServerReceiverUid() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -795,28 +873,32 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->abe_action_field = $rs->getString($startcol + 8); - $this->abe_case_note_in_response = $rs->getInt($startcol + 9); + $this->abe_action_body_field = $rs->getString($startcol + 9); - $this->abe_force_login = $rs->getInt($startcol + 10); + $this->abe_case_note_in_response = $rs->getInt($startcol + 10); - $this->abe_create_date = $rs->getTimestamp($startcol + 11, null); + $this->abe_force_login = $rs->getInt($startcol + 11); - $this->abe_update_date = $rs->getTimestamp($startcol + 12, null); + $this->abe_create_date = $rs->getTimestamp($startcol + 12, null); - $this->abe_subject_field = $rs->getString($startcol + 13); + $this->abe_update_date = $rs->getTimestamp($startcol + 13, null); - $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 14); + $this->abe_subject_field = $rs->getString($startcol + 14); - $this->abe_custom_grid = $rs->getString($startcol + 15); + $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 15); - $this->abe_email_server_uid = $rs->getString($startcol + 16); + $this->abe_custom_grid = $rs->getString($startcol + 16); + + $this->abe_email_server_uid = $rs->getString($startcol + 17); + + $this->abe_email_server_receiver_uid = $rs->getString($startcol + 18); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 17; // 17 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 19; // 19 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AbeConfiguration object", $e); @@ -1048,29 +1130,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->getAbeActionField(); break; case 9: - return $this->getAbeCaseNoteInResponse(); + return $this->getAbeActionBodyField(); break; case 10: - return $this->getAbeForceLogin(); + return $this->getAbeCaseNoteInResponse(); break; case 11: - return $this->getAbeCreateDate(); + return $this->getAbeForceLogin(); break; case 12: - return $this->getAbeUpdateDate(); + return $this->getAbeCreateDate(); break; case 13: - return $this->getAbeSubjectField(); + return $this->getAbeUpdateDate(); break; case 14: - return $this->getAbeMailserverOrMailcurrent(); + return $this->getAbeSubjectField(); break; case 15: - return $this->getAbeCustomGrid(); + return $this->getAbeMailserverOrMailcurrent(); break; case 16: + return $this->getAbeCustomGrid(); + break; + case 17: return $this->getAbeEmailServerUid(); break; + case 18: + return $this->getAbeEmailServerReceiverUid(); + break; default: return null; break; @@ -1100,14 +1188,16 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $keys[6] => $this->getDynUid(), $keys[7] => $this->getAbeEmailField(), $keys[8] => $this->getAbeActionField(), - $keys[9] => $this->getAbeCaseNoteInResponse(), - $keys[10] => $this->getAbeForceLogin(), - $keys[11] => $this->getAbeCreateDate(), - $keys[12] => $this->getAbeUpdateDate(), - $keys[13] => $this->getAbeSubjectField(), - $keys[14] => $this->getAbeMailserverOrMailcurrent(), - $keys[15] => $this->getAbeCustomGrid(), - $keys[16] => $this->getAbeEmailServerUid(), + $keys[9] => $this->getAbeActionBodyField(), + $keys[10] => $this->getAbeCaseNoteInResponse(), + $keys[11] => $this->getAbeForceLogin(), + $keys[12] => $this->getAbeCreateDate(), + $keys[13] => $this->getAbeUpdateDate(), + $keys[14] => $this->getAbeSubjectField(), + $keys[15] => $this->getAbeMailserverOrMailcurrent(), + $keys[16] => $this->getAbeCustomGrid(), + $keys[17] => $this->getAbeEmailServerUid(), + $keys[18] => $this->getAbeEmailServerReceiverUid(), ); return $result; } @@ -1167,29 +1257,35 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->setAbeActionField($value); break; case 9: - $this->setAbeCaseNoteInResponse($value); + $this->setAbeActionBodyField($value); break; case 10: - $this->setAbeForceLogin($value); + $this->setAbeCaseNoteInResponse($value); break; case 11: - $this->setAbeCreateDate($value); + $this->setAbeForceLogin($value); break; case 12: - $this->setAbeUpdateDate($value); + $this->setAbeCreateDate($value); break; case 13: - $this->setAbeSubjectField($value); + $this->setAbeUpdateDate($value); break; case 14: - $this->setAbeMailserverOrMailcurrent($value); + $this->setAbeSubjectField($value); break; case 15: - $this->setAbeCustomGrid($value); + $this->setAbeMailserverOrMailcurrent($value); break; case 16: + $this->setAbeCustomGrid($value); + break; + case 17: $this->setAbeEmailServerUid($value); break; + case 18: + $this->setAbeEmailServerReceiverUid($value); + break; } // switch() } @@ -1250,35 +1346,43 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } if (array_key_exists($keys[9], $arr)) { - $this->setAbeCaseNoteInResponse($arr[$keys[9]]); + $this->setAbeActionBodyField($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setAbeForceLogin($arr[$keys[10]]); + $this->setAbeCaseNoteInResponse($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setAbeCreateDate($arr[$keys[11]]); + $this->setAbeForceLogin($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setAbeUpdateDate($arr[$keys[12]]); + $this->setAbeCreateDate($arr[$keys[12]]); } if (array_key_exists($keys[13], $arr)) { - $this->setAbeSubjectField($arr[$keys[13]]); + $this->setAbeUpdateDate($arr[$keys[13]]); } if (array_key_exists($keys[14], $arr)) { - $this->setAbeMailserverOrMailcurrent($arr[$keys[14]]); + $this->setAbeSubjectField($arr[$keys[14]]); } if (array_key_exists($keys[15], $arr)) { - $this->setAbeCustomGrid($arr[$keys[15]]); + $this->setAbeMailserverOrMailcurrent($arr[$keys[15]]); } if (array_key_exists($keys[16], $arr)) { - $this->setAbeEmailServerUid($arr[$keys[16]]); + $this->setAbeCustomGrid($arr[$keys[16]]); + } + + if (array_key_exists($keys[17], $arr)) { + $this->setAbeEmailServerUid($arr[$keys[17]]); + } + + if (array_key_exists($keys[18], $arr)) { + $this->setAbeEmailServerReceiverUid($arr[$keys[18]]); } } @@ -1328,6 +1432,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_ACTION_FIELD, $this->abe_action_field); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD)) { + $criteria->add(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, $this->abe_action_body_field); + } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE)) { $criteria->add(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, $this->abe_case_note_in_response); } @@ -1360,6 +1468,10 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, $this->abe_email_server_uid); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID)) { + $criteria->add(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, $this->abe_email_server_receiver_uid); + } + return $criteria; } @@ -1430,6 +1542,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeActionField($this->abe_action_field); + $copyObj->setAbeActionBodyField($this->abe_action_body_field); + $copyObj->setAbeCaseNoteInResponse($this->abe_case_note_in_response); $copyObj->setAbeForceLogin($this->abe_force_login); @@ -1446,6 +1560,8 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeEmailServerUid($this->abe_email_server_uid); + $copyObj->setAbeEmailServerReceiverUid($this->abe_email_server_receiver_uid); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php index 213759db2..07f5b2bf0 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php +++ b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php @@ -25,7 +25,7 @@ abstract class BaseAbeConfigurationPeer const CLASS_DEFAULT = 'classes.model.AbeConfiguration'; /** The total number of columns. */ - const NUM_COLUMNS = 17; + const NUM_COLUMNS = 19; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -58,6 +58,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_ACTION_FIELD field */ const ABE_ACTION_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_FIELD'; + /** the column name for the ABE_ACTION_BODY_FIELD field */ + const ABE_ACTION_BODY_FIELD = 'ABE_CONFIGURATION.ABE_ACTION_BODY_FIELD'; + /** the column name for the ABE_CASE_NOTE_IN_RESPONSE field */ const ABE_CASE_NOTE_IN_RESPONSE = 'ABE_CONFIGURATION.ABE_CASE_NOTE_IN_RESPONSE'; @@ -82,6 +85,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_EMAIL_SERVER_UID field */ const ABE_EMAIL_SERVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_UID'; + /** the column name for the ABE_EMAIL_SERVER_RECEIVER_UID field */ + const ABE_EMAIL_SERVER_RECEIVER_UID = 'ABE_CONFIGURATION.ABE_EMAIL_SERVER_RECEIVER_UID'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -93,10 +99,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeActionBodyField', 'AbeCaseNoteInResponse', 'AbeForceLogin', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', 'AbeCustomGrid', 'AbeEmailServerUid', 'AbeEmailServerReceiverUid', ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_FORCE_LOGIN, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, AbeConfigurationPeer::ABE_CUSTOM_GRID, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_ACTION_BODY_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_FORCE_LOGIN', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', 'ABE_CUSTOM_GRID', 'ABE_EMAIL_SERVER_UID', 'ABE_EMAIL_SERVER_RECEIVER_UID', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -106,10 +112,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeCaseNoteInResponse' => 9, 'AbeForceLogin' => 10, 'AbeCreateDate' => 11, 'AbeUpdateDate' => 12, 'AbeSubjectField' => 13, 'AbeMailserverOrMailcurrent' => 14, 'AbeCustomGrid' => 15, 'AbeEmailServerUid' => 16, ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 9, AbeConfigurationPeer::ABE_FORCE_LOGIN => 10, AbeConfigurationPeer::ABE_CREATE_DATE => 11, AbeConfigurationPeer::ABE_UPDATE_DATE => 12, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 13, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 14, AbeConfigurationPeer::ABE_CUSTOM_GRID => 15, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 16, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_CASE_NOTE_IN_RESPONSE' => 9, 'ABE_FORCE_LOGIN' => 10, 'ABE_CREATE_DATE' => 11, 'ABE_UPDATE_DATE' => 12, 'ABE_SUBJECT_FIELD' => 13, 'ABE_MAILSERVER_OR_MAILCURRENT' => 14, 'ABE_CUSTOM_GRID' => 15, 'ABE_EMAIL_SERVER_UID' => 16, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeActionBodyField' => 9, 'AbeCaseNoteInResponse' => 10, 'AbeForceLogin' => 11, 'AbeCreateDate' => 12, 'AbeUpdateDate' => 13, 'AbeSubjectField' => 14, 'AbeMailserverOrMailcurrent' => 15, 'AbeCustomGrid' => 16, 'AbeEmailServerUid' => 17, 'AbeEmailServerReceiverUid' => 18, ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_ACTION_BODY_FIELD => 9, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 10, AbeConfigurationPeer::ABE_FORCE_LOGIN => 11, AbeConfigurationPeer::ABE_CREATE_DATE => 12, AbeConfigurationPeer::ABE_UPDATE_DATE => 13, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 14, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 15, AbeConfigurationPeer::ABE_CUSTOM_GRID => 16, AbeConfigurationPeer::ABE_EMAIL_SERVER_UID => 17, AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID => 18, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_ACTION_BODY_FIELD' => 9, 'ABE_CASE_NOTE_IN_RESPONSE' => 10, 'ABE_FORCE_LOGIN' => 11, 'ABE_CREATE_DATE' => 12, 'ABE_UPDATE_DATE' => 13, 'ABE_SUBJECT_FIELD' => 14, 'ABE_MAILSERVER_OR_MAILCURRENT' => 15, 'ABE_CUSTOM_GRID' => 16, 'ABE_EMAIL_SERVER_UID' => 17, 'ABE_EMAIL_SERVER_RECEIVER_UID' => 18, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ) ); /** @@ -228,6 +234,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_BODY_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_FORCE_LOGIN); @@ -244,6 +252,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_SERVER_RECEIVER_UID); + } const COUNT = 'COUNT(ABE_CONFIGURATION.ABE_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 2419ba032..75517b680 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5094,6 +5094,16 @@ + + + + + + + + + + @@ -5141,6 +5151,7 @@ + @@ -5769,7 +5780,7 @@
- + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index f78a95cd0..30f4f911f 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2865,6 +2865,7 @@ CREATE TABLE `ABE_CONFIGURATION` `DYN_UID` VARCHAR(32) default '' NOT NULL, `ABE_EMAIL_FIELD` VARCHAR(255) default '' NOT NULL, `ABE_ACTION_FIELD` VARCHAR(255) default '', + `ABE_ACTION_BODY_FIELD` VARCHAR(255) default '', `ABE_CASE_NOTE_IN_RESPONSE` INTEGER default 0, `ABE_FORCE_LOGIN` INTEGER default 0, `ABE_CREATE_DATE` DATETIME NOT NULL, @@ -2873,6 +2874,7 @@ CREATE TABLE `ABE_CONFIGURATION` `ABE_MAILSERVER_OR_MAILCURRENT` INTEGER default 0, `ABE_CUSTOM_GRID` MEDIUMTEXT, `ABE_EMAIL_SERVER_UID` VARCHAR(32) default '', + `ABE_EMAIL_SERVER_RECEIVER_UID` VARCHAR(32) default '', PRIMARY KEY (`ABE_UID`), KEY `indexAbeProcess`(`PRO_UID`), KEY `indexAbeProcessTask`(`PRO_UID`, `TAS_UID`) From ab11f33747d8daab23b45ee81dec3fd7f11c0807 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 14 Nov 2018 15:00:10 -0400 Subject: [PATCH 012/100] PMC-40: Action by Email: Email response configuration --- config/app.php | 11 +- .../classes/ActionsByEmailCoreClass.php | 1201 +++++++++++++---- workflow/engine/classes/SpoolRun.php | 20 + workflow/engine/classes/WsBase.php | 4 +- workflow/engine/classes/model/AppMessage.php | 19 + .../translations/english/processmaker.en.po | 12 + workflow/engine/data/mysql/insert.sql | 2 + .../ProcessMaker/Util/WsMessageResponse.php | 32 + 8 files changed, 1033 insertions(+), 268 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php diff --git a/config/app.php b/config/app.php index 18c615493..548de0a20 100644 --- a/config/app.php +++ b/config/app.php @@ -12,19 +12,20 @@ return [ 'log' => env('APP_LOG', 'single'), 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), - + 'key' => env('APP_KEY', 'base64:rU28h/tElUn/eiLY0qC24jJq1rakvAFRoRl1DWxj/kM='), + 'cipher' => 'AES-256-CBC', 'providers' => [ - FilesystemServiceProvider::class, CacheServiceProvider::class, - ViewServiceProvider::class, + FilesystemServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, - + Illuminate\Encryption\EncryptionServiceProvider::class, + ViewServiceProvider::class ], - 'aliases' => [ + 'Crypt' => Illuminate\Support\Facades\Crypt::class ], ]; diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 87eac721e..166485a06 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -1,308 +1,985 @@ defineWorkspace(); + $this->defineServicePath(); } /** - * @param $data - * @param $dataAbe + * Set the action by email request + * + * @param array $v + */ + public function setAbeRequest($v) + { + $this->abeRequest = $v; + } + + /** + * Get the action by email request + * + * @return array + */ + public function getAbeRequest() + { + return $this->abeRequest; + } + + /** + * Set the specific task property + * + * @param array $item + * + * @return void + */ + public function addItemAbeRequest(array $item) + { + $this->abeRequest = array_merge($this->abeRequest, $item); + } + + /** + * Get the specific task property + * + * @param string $key + * + * @return string + */ + public function getItemAbeRequest($key) + { + if (array_key_exists($key, $this->getAbeRequest())) { + return $this->abeRequest[$key]; + } else { + return []; + } + } + + /** + * Set the application uid + * + * @param string $v + */ + public function setAppUid($v) + { + $this->appUid = $v; + } + + /** + * Get the application uid + * + * @return string + */ + public function getAppUid() + { + return $this->appUid; + } + + /** + * Set the case number + * + * @param integer $v + */ + public function setAppNumber($v) + { + $this->appNumber = $v; + } + + /** + * Get the case number + * + * @return integer + */ + public function getAppNumber() + { + return $this->appNumber; + } + + /** + * Set the case properties + * + * @param array $v + */ + public function setCaseProperties(array $v) + { + $this->caseProperties = $v; + } + + /** + * Get the case properties + * + * @return array + */ + public function getCaseProperties() + { + return $this->caseProperties; + } + + /** + * Get the specific case property + * + * @param string $key + * + * @return array + */ + public function getCasePropertiesKey($key) + { + if (array_key_exists($key, $this->getCaseProperties())) { + return $this->caseProperties[$key]; + } else { + return []; + } + } + + /** + * Set the email from + * + * @param string $v + */ + public function setEmailFrom($v) + { + $this->emailFrom = $v; + } + + /** + * Get the email from + * + * @return string + */ + public function getEmailFrom() + { + return $this->emailFrom; + } + + /** + * Set the email to + * + * @param string $v + */ + public function setEmailTo($v) + { + $this->emailTo = $v; + + } + + /** + * Get the email to + * + * @return string + */ + public function getEmailTo() + { + return $this->emailTo; + } + + /** + * Set the index + * + * @param integer $v + */ + public function setIndex($v) + { + $this->index = $v; + } + + /** + * Get the index + * + * @return integer + */ + public function getIndex() + { + return $this->index; + } + + /** + * Set prefix + * + * @param array $v + */ + public function setPrefix(array $v) + { + $this->prefix = $v; + } + + /** + * Get prefix + * + * @return array + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * Set the previous user + * + * @param string $v + */ + public function setPreviousUser($v) + { + $this->previousUser = $v; + } + + /** + * Get the previous user + * + * @return string + */ + public function getPreviousUser() + { + return $this->previousUser; + } + + /** + * Set the reply to + * + * @param string $v + */ + public function setReplyTo($v) + { + $this->replyTo = $v; + } + + /** + * Get the reply to + * + * @return string + */ + public function getReplyTo() + { + return $this->replyTo; + } + + /** + * Set the task + * + * @param string $v + */ + public function setTask($v) + { + $this->task = $v; + } + + /** + * Get the task + * + * @return string + */ + public function getTask() + { + return $this->task; + } + + /** + * Set in the task the action by email properties + * + * @param array $v + */ + public function setTaskAbeProperties(array $v) + { + $this->taskAbeProperties = $v; + } + + /** + * Get the task the action by email properties + * + * @return array + */ + public function getTaskAbeProperties() + { + return $this->taskAbeProperties; + } + + /** + * Add a item in the action by email properties + * + * @param array $item + * + * @return void + */ + public function addItemAbeProperties(array $item) + { + $this->taskAbeProperties = array_merge($this->taskAbeProperties, $item); + } + + /** + * Get the specific task property + * + * @param string $key + * + * @return array + */ + public function getItemAbeProperties($key) + { + if (array_key_exists($key, $this->getTaskAbeProperties())) { + return $this->taskAbeProperties[$key]; + } else { + return []; + } + } + + /** + * Set the link + */ + public function defineServicePath() + { + $this->servicePath = System::getServerMainPath() . '/services/ActionsByEmail'; + } + + /** + * Get the link + * + * @return string + */ + public function getServicePath() + { + return $this->servicePath; + } + + /** + * Set the user uid + * + * @param string $v + */ + public function setUser($v) + { + $this->user = $v; + } + + /** + * Get the user uid + * + * @return string + */ + public function getUser() + { + return $this->user; + } + + /** + * Set the subject + * + * @param string $v + */ + public function setSubject($v) + { + $this->subject = $v; + } + + /** + * Get the subject + * + * @return string + */ + public function getSubject() + { + return $this->subject; + } + + /** + * Set the workspace name + */ + public function defineWorkspace() + { + $this->workspace = config("system.workspace"); + } + + /** + * Get the workspace name + * + * @return string + */ + public function getWorkspace() + { + return $this->workspace; + } + + /** + * Get the email server definition + * + * @param string $emailServerKey + * + * @return object + */ + private function getEmailServer($emailServerKey) + { + $emailServer = new EmailServer(); + $emailSetup = (!is_null(EmailServerPeer::retrieveByPK($emailServerKey))) ? + $emailServer->getEmailServer($emailServerKey, true) : + $emailServer->getEmailServerDefault(); + + return $emailSetup; + } + + /** + * Define the properties in the task related the action by email configuration + * + * @return void + */ + private function defineTaskAbeProperties() + { + $actionEmailTable = new AbeConfiguration(); + $properties = $actionEmailTable->getTaskConfiguration($this->getCasePropertiesKey('PRO_UID'), $this->getTask()); + $this->setTaskAbeProperties($properties); + } + + /** + * Define the email from + * + * @param array $emailServerSetup + * + * @return void + */ + private function defineEmailFrom(array $emailServerSetup) + { + $from = ''; + if (!$this->getItemAbeProperties('ABE_MAILSERVER_OR_MAILCURRENT') && !empty($this->getItemAbeProperties('ABE_TYPE'))) { + if (!empty($this->getPreviousUser())) { + $user = new Users(); + $userDetails = $user->loadDetails($this->getPreviousUser()); + $from = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); + } else { + global $RBAC; + $currentUser = $RBAC->aUserInfo['USER_INFO']; + $from = ($currentUser["USR_FIRSTNAME"] . ' ' . $currentUser["USR_LASTNAME"] . ' <' . $currentUser["USR_EMAIL"] . '>'); + } + } + //Define the email from + $emailFrom = G::buildFrom($emailServerSetup, $from); + $this->setEmailFrom($emailFrom); + } + + /** + * Define the email to + * + * @param string $emailField + * @param array $caseData + * + * @return void + */ + private function defineEmailTo($emailField, array $caseData) + { + $emailField = str_replace($this->getPrefix(), '', $emailField); + if ($emailField != '' && isset($caseData[$emailField])) { + $emailTo = trim($caseData[$emailField]); + } else { + $userInstance = new Users(); + $emailTo = $userInstance->getAllInformation($this->getUser())['mail']; + } + + $this->setEmailTo($emailTo); + } + + /** + * Define the reply to + * + * @param string $receiverUid + * + * @return void + */ + private function defineReplyTo($receiverUid) + { + $emailServer = $this->getEmailServer($receiverUid); + $replyTo = $emailServer["MESS_ACCOUNT"]; + + $this->setReplyTo($replyTo); + } + + /** + * Define the subject + * + * @param string $subjectField + * @param array $caseData + * + * @return void + */ + private function defineSubject($subjectField, array $caseData) + { + $subject = G::replaceDataField($subjectField, $caseData); + if (empty($subject)) { + $subject = $this->getCasePropertiesKey('APP_TITLE'); + } + + $this->setSubject($subject); + } + + /** + * Validate and set the fields that we need for the action by email + * + * @param object $data + */ + private function validateAndSetValues($data) + { + try { + if (!is_object($data)) { + throw new Exception('The parameter $data is null.'); + } + // Validate the tas_uid + if (empty($data->TAS_UID)) { + throw new Exception('The parameter $data->TAS_UID is null or empty.'); + } else { + $this->setTask($data->TAS_UID); + } + // Validate the app_uid + if (empty($data->APP_UID)) { + throw new Exception('The parameter $data->APP_UID is null or empty.'); + } else { + $this->setAppUid($data->APP_UID); + } + // Validate the del_index + if (empty($data->DEL_INDEX)) { + throw new Exception('The parameter $data->DEL_INDEX is null or empty.'); + } elseif ($data->DEL_INDEX === 1) { + // Processmaker log + $context = Bootstrap::getDefaultContextLog(); + $context['delIndex'] = $data->DEL_INDEX; + Bootstrap::registerMonolog('ActionByEmail', 250, 'Actions by email does not work in the initial task', $context); + + return; + } else { + $this->setIndex($data->DEL_INDEX); + } + // Validate the usr_uid + if (empty($data->USR_UID)) { + throw new Exception('The parameter $data->USR_UID is null or empty.'); + } else { + $this->setUser($data->USR_UID); + } + // Define the previous user + if (!empty($data->PREVIOUS_USR_UID)) { + $this->setPreviousUser($data->PREVIOUS_USR_UID); + } + } catch (Exception $e) { + $token = strtotime("now"); + PMException::registerErrorLog($e, $token); + G::outRes(G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", [$token])); + die; + } + } + + /** + * Send the action by email + * + * @param object $data + * @param array $dataAbe + * + * @return void * @throws Exception */ - public function sendActionsByEmail($data, $dataAbe) + public function sendActionsByEmail($data, array $dataAbe) { try { // Validations - try { - if (!is_object($data)) { - throw new Exception('The parameter $data is null.'); - } - if (!isset($data->TAS_UID)) { - throw new Exception('The parameter $data->TAS_UID is null.'); - } + self::validateAndSetValues($data); - if (!isset($data->APP_UID)) { - throw new Exception('The parameter $data->APP_UID is null.'); - } - - if (!isset($data->DEL_INDEX)) { - throw new Exception('The parameter $data->DEL_INDEX is null.'); - } - - if (!isset($data->USR_UID)) { - throw new Exception('The parameter $data->USR_UID is null.'); - } - - if ($data->TAS_UID === '') { - throw new Exception('The parameter $data->TAS_UID is empty.'); - } - - if ($data->APP_UID === '') { - throw new Exception('The parameter $data->APP_UID is empty.'); - } - - if ($data->DEL_INDEX === '') { - throw new Exception('The parameter $data->DEL_INDEX is empty.'); - } - - if ($data->DEL_INDEX === 1) { - error_log('The parameter $data->DEL_INDEX is 1, you can not use ActionsByEmail in the initial task', 0); - return; - } - - if ($data->USR_UID === '') { - error_log('The parameter $data->USR_UID is empty, the routed task may be a self-service type, actions by email does not work with self-service task types.', 0); - } - } catch(Exception $e) { - $token = strtotime("now"); - PMException::registerErrorLog($e, $token); - G::outRes( G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", array($token)) ); - die; - } - - $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); - - $emailSetup = (!is_null(\EmailServerPeer::retrieveByPK($dataAbe['ABE_EMAIL_SERVER_UID']))) ? - $emailServer->getEmailServer($dataAbe['ABE_EMAIL_SERVER_UID'], true) : - $emailServer->getEmailServerDefault(); - - if (!empty($emailSetup)) { + $emailServerSetup = $this->getEmailServer($dataAbe['ABE_EMAIL_SERVER_UID']); + if (!empty($emailServerSetup)) { $cases = new Cases(); - $caseFields = $cases->loadCase($data->APP_UID, $data->DEL_INDEX); - $actionEmailTable = new AbeConfiguration(); - $configuration = $actionEmailTable->getTaskConfiguration($caseFields['PRO_UID'], $data->TAS_UID); - $caseFields['APP_DATA']['PRO_ID'] = $configuration['PRO_ID']; - $caseFields['APP_DATA']['TAS_ID'] = $configuration['TAS_ID']; + $caseFields = $cases->loadCase($this->getAppUid(), $this->getIndex()); + $this->setCaseProperties($caseFields); + $this->defineTaskAbeProperties(); + $caseFields['APP_DATA']['PRO_ID'] = $this->getItemAbeProperties('PRO_ID'); + $caseFields['APP_DATA']['TAS_ID'] = $this->getItemAbeProperties('TAS_ID'); + if (!empty($this->getTaskAbeProperties())) { + $this->defineEmailTo($this->getItemAbeProperties('ABE_EMAIL_FIELD'), $caseFields['APP_DATA']); - if (!empty($configuration)) { - $configuration['ABE_EMAIL_FIELD'] = str_replace('@@', '', $configuration['ABE_EMAIL_FIELD']); - if ($configuration['ABE_EMAIL_FIELD'] != '' && isset($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']])) { - $email = trim($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']]); - } else { - $userInstance = new Users(); - $userInfo = $userInstance->getAllInformation($data->USR_UID); - $email = $userInfo['mail']; - } + if (!empty($this->getEmailTo())) { + $this->defineSubject($this->getItemAbeProperties('ABE_SUBJECT_FIELD'), $caseFields['APP_DATA']); - if ($email != '') { - $subject = G::replaceDataField( $configuration['ABE_SUBJECT_FIELD'], $caseFields['APP_DATA'] ); - if($subject == ''){ - $subject = $caseFields['APP_TITLE']; - } + $request = [ + 'ABE_REQ_UID' => '', + 'ABE_UID' => $this->getItemAbeProperties('ABE_UID'), + 'APP_UID' => $this->getAppUid(), + 'DEL_INDEX' => $this->getIndex(), + 'ABE_REQ_SENT_TO' => $this->getEmailTo(), + 'ABE_REQ_SUBJECT' => $this->getSubject(), + 'ABE_REQ_BODY' => '', + 'ABE_REQ_ANSWERED' => 0, + 'ABE_REQ_STATUS' => 'PENDING' + ]; + $this->setAbeRequest($request); + $this->registerRequest(); - $abeRequest = array(); - $abeRequest['ABE_REQ_UID'] = ''; - $abeRequest['ABE_UID'] = $configuration['ABE_UID']; - $abeRequest['APP_UID'] = $data->APP_UID; - $abeRequest['DEL_INDEX'] = $data->DEL_INDEX; - $abeRequest['ABE_REQ_SENT_TO'] = $email; - $abeRequest['ABE_REQ_SUBJECT'] = $subject; - $abeRequest['ABE_REQ_BODY'] = ''; - $abeRequest['ABE_REQ_ANSWERED'] = 0; - $abeRequest['ABE_REQ_STATUS'] = 'PENDING'; - - try { - $abeRequestsInstance = new AbeRequests(); - $abeRequest['ABE_REQ_UID'] = $abeRequestsInstance->createOrUpdate($abeRequest); - } catch (Exception $error) { - throw $error; - } - - if ($configuration['ABE_TYPE'] != '') { + if (!empty($this->getItemAbeProperties('ABE_TYPE'))) { // Email - $_SESSION['CURRENT_DYN_UID'] = $configuration['DYN_UID']; - + $_SESSION['CURRENT_DYN_UID'] = $this->getItemAbeProperties('DYN_UID'); $__ABE__ = ''; - - $link = System::getServerMainPath() . '/services/ActionsByEmail'; - switch ($configuration['ABE_TYPE']) { + switch ($this->getItemAbeProperties('ABE_TYPE')) { case 'CUSTOM': - $customGrid = unserialize($configuration['ABE_CUSTOM_GRID']); - $variableService = new \ProcessMaker\Services\Api\Project\Variable(); - $variables = $variableService->doGetVariables($caseFields['PRO_UID']); - $field = new stdClass(); - $field->label = ''; - $actionField = str_replace(array('@@', '@#', '@=', '@%', '@?', '@$'), '', $configuration['ABE_ACTION_FIELD']); - - $obj = new PmDynaform($configuration['DYN_UID']); - $configuration['CURRENT_DYNAFORM'] = $configuration['DYN_UID']; - $file = $obj->printPmDynaformAbe($configuration); - $__ABE__ .= $file; - $__ABE__ .= '
' . $field->label . '
'; - $index = 1; - $__ABE__ .= '
'; - foreach ($customGrid as $key => $value) { - $__ABE__ .= '' . (($index % 5 == 0) ? '' : ' '); - $index++; - } - $__ABE__ .= '
' . $value['abe_custom_label']; - $__ABE__ .= '
'; + $__ABE__ .= $this->getCustomTemplate(); + break; + case 'RESPONSE': + $this->defineReplyTo($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID']); + $__ABE__ .= $this->getResponseTemplate(); break; case 'LINK': - $__ABE__ .= 'Please complete this form'; + $__ABE__ .= $this->getServicePathTemplate(); break; - // coment case 'FIELD': - $variableService = new \ProcessMaker\Services\Api\Project\Variable(); - $variables = $variableService->doGetVariables($caseFields['PRO_UID']); - $field = new stdClass(); - $field->label = 'Test'; - $field->type = 'dropdown'; - $field->options = array(); - $field->value = ''; - $actionField = str_replace(array('@@','@#','@=','@%','@?','@$'), '', $configuration['ABE_ACTION_FIELD']); - $dynaform = $configuration['DYN_UID']; - $variables = G::json_decode($configuration['DYN_CONTENT'], true); - if(isset($variables['items'][0]['items'])){ - $fields = $variables['items'][0]['items']; - foreach ($fields as $key => $value) { - foreach($value as $var){ - if(isset($var['variable'])){ - if ($var['variable'] == $actionField) { - $field->label = $var['label']; - $field->type = $var['type']; - $values = $var['options']; - foreach ($values as $val){ - $field->options[$val['value']] = $val['value']; - } - } - } - } - } - } - - $obj = new PmDynaform($configuration['DYN_UID']); - $configuration['CURRENT_DYNAFORM'] = $configuration['DYN_UID']; - $file = $obj->printPmDynaformAbe($configuration); - $__ABE__ .= $file; - $__ABE__ .= '' . $field->label . '
'; - switch ($field->type) { - case 'dropdown': - case 'radio': - case 'radiogroup': - $index = 1; - $__ABE__.='
'; - break; - case 'yesno': - $__ABE__ .= ''; - $__ABE__ .= ''; - break; - case 'checkbox': - $__ABE__ .= ''; - $__ABE__ .= ''; - break; - } - $__ABE__ .= '
'; - foreach ($field->options as $optValue => $optName) { - $__ABE__ .= '' . (($index % 5 == 0) ? '' : ' '); - $index++; - } - - $__ABE__.='
' . $optName; - $__ABE__ .= '
' . G::LoadTranslation('ID_YES_VALUE') . '' . G::LoadTranslation('ID_NO_VALUE') . 'CheckUncheck
'; + $__ABE__ .= $this->getFieldTemplate(); break; } - - $__ABE__ = preg_replace('/\/', '' , $__ABE__); - $__ABE__ = preg_replace('/\]*\/>/', '' , $__ABE__); + $__ABE__ = preg_replace('/\/', '', $__ABE__); + $__ABE__ = preg_replace('/\]*\/>/', '', $__ABE__); $__ABE__ = preg_replace('/]*>(.*?)<\/select>/is', "", $__ABE__); - $__ABE__ = preg_replace('/align=\"center\"/', '' , $__ABE__); - $__ABE__ = preg_replace('/class="tableGrid_view" /', 'class="tableGrid_view" width="100%" ', $__ABE__); + $__ABE__ = preg_replace('/align=\"center\"/', '', $__ABE__); + $__ABE__ = preg_replace('/class="tableGrid_view" /', 'class="tableGrid_view" width="100%" ', + $__ABE__); $caseFields['APP_DATA']['__ABE__'] = $__ABE__; - $user = new Users(); - - if (!$configuration['ABE_MAILSERVER_OR_MAILCURRENT'] && $configuration['ABE_TYPE'] !== '') { - if ($data->PREVIOUS_USR_UID !== '') { - $userDetails = $user->loadDetails($data->PREVIOUS_USR_UID); - $emailFrom = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); - } else { - global $RBAC; - $currentUser = $RBAC->aUserInfo['USER_INFO']; - $emailFrom = ($currentUser["USR_FIRSTNAME"] . ' ' . $currentUser["USR_LASTNAME"] . ' <' . $currentUser["USR_EMAIL"] . '>'); - } - } else { - if (isset($emailSetup["MESS_FROM_NAME"]) && isset($emailSetup["MESS_FROM_MAIL"])) { - $emailFrom = ($emailSetup["MESS_FROM_NAME"] . ' <' . $emailSetup["MESS_FROM_MAIL"] . '>'); - } else { - $emailFrom = ((isset($emailSetup["MESS_FROM_NAME"])) ? $emailSetup["MESS_FROM_NAME"] : $emailSetup["MESS_FROM_MAIL"]); - } - } - - $wsBaseInstance = new WsBase(); - $result = $wsBaseInstance->sendMessage( - $data->APP_UID, - $emailFrom, - $email, - '', - '', - $subject, - $configuration['ABE_TEMPLATE'], + $this->defineEmailFrom($emailServerSetup); + $result = $this->abeSendMessage( + $this->getItemAbeProperties('ABE_TEMPLATE'), $caseFields['APP_DATA'], - null, - true, - $data->DEL_INDEX, - $emailSetup, - 0 + $emailServerSetup ); - $abeRequest['ABE_REQ_STATUS'] = ($result->status_code == 0 ? 'SENT' : 'ERROR'); + $request = []; + $request['ABE_REQ_STATUS'] = ($result->status_code == 0 ? 'SENT' : 'ERROR'); - $body = ''; - $messageSent = executeQuery('SELECT `APP_MSG_BODY` FROM `APP_MESSAGE` ORDER BY `APP_MSG_SEND_DATE` DESC LIMIT 1'); - - if (!empty($messageSent) && is_array($messageSent)) { - $body = $messageSent[1]['APP_MSG_BODY']; - } - - $abeRequest['ABE_REQ_BODY'] = $body; - - // Update - try { - $abeRequestsInstance = new AbeRequests(); - $abeRequestsInstance->createOrUpdate($abeRequest); - } catch (Exception $error) { - throw $error; - } + $request['ABE_REQ_BODY'] = empty($result->getAppMessUid()) ? '' : AppMessage::getAppMsgBodyByKey($result->getAppMessUid()); + $this->addItemAbeRequest($request); + $this->registerRequest(); } } + } else { + throw new Exception('Task does not have an action by email configuration.'); } } } catch (Exception $error) { throw $error; } } + + /** + * Get the html template for email response + * + * @return string + */ + private function getResponseTemplate() + { + $noReply = $this->getReplyTo(); + $customGrid = unserialize($this->getItemAbeProperties('ABE_CUSTOM_GRID')); + $field = new stdClass(); + $field->label = ''; + $html = '
' . $field->label . ''; + $html .= '
'; + $index = 1; + foreach ($customGrid as $key => $value) { + // Get the subject + $emailSubject = $this->getSubjectByResponse($value['abe_custom_label']); + $emailBody = $this->getBodyByResponse($value['abe_custom_value']); + // Define the html for the actions + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + $html .= '
'; + $html .= $value['abe_custom_label']; + $html .= '
'; + + return $html; + } + + /** + * Get the subject for response the action by email + * + * @param string $fieldLabel + * + * @return string + */ + private function getSubjectByResponse($fieldLabel) + { + $subject = G::LoadTranslation('ID_CASE') . ' ' . $this->getCasePropertiesKey('APP_TITLE'); + $subject .= $this->delimiter . ' ' . $fieldLabel; + + return urlencode($subject); + } + + /** + * Get the body for response the action by email + * + * @param string $fieldValue + * + * @return string + */ + private function getBodyByResponse($fieldValue) + { + $bodyToCrypt = [ + 'workspace' => $this->getWorkspace(), + 'appUid' => $this->getAppUid(), + 'delIndex' => $this->getIndex(), + 'fieldValue' => $fieldValue, + ]; + $bodyToCrypt = G::json_encode($bodyToCrypt); + + $body = str_repeat(self::BODY_REPLY_LF, 4); + $body .= '/' . str_repeat("=", 24) . self::BODY_REPLY_LF; + $body .= G::LoadTranslation('ID_ABE_EMAIL_RESPONSE_BODY_NOTE') . self::BODY_REPLY_LF; + $body .= '{' . Crypt::encryptString($bodyToCrypt) . '}' . self::BODY_REPLY_LF; + $body .= str_repeat("=", 24) . '/'; + return $body; + } + + /** + * Get the html template for custom actions + * @todo we need to revise this function + * + * @return string + */ + private function getCustomTemplate() + { + $abeRequest = $this->getAbeRequest(); + $customGrid = unserialize($this->getItemAbeProperties('ABE_CUSTOM_GRID')); + $variableService = new Variable(); + $variables = $variableService->doGetVariables($this->getCasePropertiesKey('PRO_UID')); + $field = new stdClass(); + $field->label = ''; + $actionField = str_replace( + $this->getPrefix(), + '', + $this->getItemAbeProperties('ABE_ACTION_FIELD') + ); + + $itemDynUid = $this->getItemAbeProperties('DYN_UID'); + $obj = new PmDynaform($itemDynUid); + $this->addItemAbeProperties(['CURRENT_DYNAFORM' => $itemDynUid]); + $file = $obj->printPmDynaformAbe($this->getTaskAbeProperties()); + $html = $file; + $html .= '
' . $field->label . ''; + $index = 1; + $html .= '
'; + foreach ($customGrid as $key => $value) { + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + $html .= '
getServicePath())) . '?ACTION=' . G::encrypt('processABE', + URL_KEY, true) . '&APP_UID='; + $html .= G::encrypt($this->getAppUid(), URL_KEY, + true) . '&DEL_INDEX=' . G::encrypt($this->getindex(), URL_KEY); + $html .= '&FIELD=' . G::encrypt($actionField, URL_KEY, + true) . '&VALUE=' . G::encrypt($value['abe_custom_value'], URL_KEY, + true); + $html .= '&ABER=' . G::encrypt($abeRequest['ABE_REQ_UID'], URL_KEY, + true) . '" target="_blank" >' . $value['abe_custom_label']; + $html .= '
'; + + return $html; + } + + /** + * Get the html template for link to fill a form + * @todo we need to revise this function + * + * @return string + */ + private function getServicePathTemplate() + { + $abeRequest = $this->getAbeRequest(); + $html = 'Please complete this form'; + + return $html; + } + + /** + * Get the html template for use a field to generate actions links + * @todo we need to revise this function + * + * @return string + */ + private function getFieldTemplate() + { + $abeRequest = $this->getAbeRequest(); + $variableService = new Variable(); + $variables = $variableService->doGetVariables($this->getCasePropertiesKey('PRO_UID')); + $field = new stdClass(); + $field->label = 'Test'; + $field->type = 'dropdown'; + $field->options = []; + $field->value = ''; + $actionField = str_replace( + $this->getPrefix(), + '', + $this->getItemAbeProperties('ABE_ACTION_FIELD') + ); + $dynUid = $this->getItemAbeProperties('DYN_UID'); + $variables = G::json_decode($this->getItemAbeProperties('DYN_CONTENT'), true); + if (isset($variables['items'][0]['items'])) { + $fields = $variables['items'][0]['items']; + foreach ($fields as $key => $value) { + foreach ($value as $var) { + if (isset($var['variable'])) { + if ($var['variable'] == $actionField) { + $field->label = $var['label']; + $field->type = $var['type']; + $values = $var['options']; + foreach ($values as $val) { + $field->options[$val['value']] = $val['value']; + } + } + } + } + } + } + + $obj = new PmDynaform($dynUid); + $this->addItemAbeProperties(['CURRENT_DYNAFORM' => $dynUid]); + $file = $obj->printPmDynaformAbe($this->getTaskAbeProperties()); + $html = $file; + $html .= '' . $field->label . '
'; + switch ($field->type) { + case 'dropdown': + case 'radio': + case 'radiogroup': + $index = 1; + $html .= '
'; + break; + case 'yesno': + $html .= ''; + $html .= ''; + break; + case 'checkbox': + $html .= ''; + $html .= ''; + break; + } + $html .= '
'; + foreach ($field->options as $optValue => $optName) { + $html .= '' . (($index % 5 == 0) ? '' : ' '); + $index++; + } + + $html .= '
' . $optName; + $html .= '
' . G::LoadTranslation('ID_YES_VALUE') . '' . G::LoadTranslation('ID_NO_VALUE') . 'CheckUncheck
'; + + return $html; + } + + /** + * Register the request in the table ABE_REQUEST + * + * @return void + * @throws Exception + */ + private function registerRequest() + { + try { + $requestInstance = new AbeRequests(); + $abeRequest['ABE_REQ_UID'] = $requestInstance->createOrUpdate($this->getAbeRequest()); + $this->setAbeRequest($abeRequest); + } catch (Exception $error) { + throw $error; + } + } + + /** + * Send the message + * + * @param string $template + * @param array $caseData + * @param array $configEmail + * + * @return object + * @throws Exception + */ + private function abeSendMessage($template, array $caseData, array $configEmail) + { + try { + $wsBaseInstance = new WsBase(); + $result = $wsBaseInstance->sendMessage( + $this->getAppUid(), + $this->getEmailFrom(), + $this->getEmailTo(), + '', + '', + $this->getSubject(), + $template, + $caseData, + null, + true, + $this->getIndex(), + $configEmail, + 0 + ); + + return $result; + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index 255aeda04..56bccc4ec 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -50,6 +50,26 @@ class SpoolRun $this->mailEreg = "/^([\w\-_\+\.']+@[\w\-_\.]+\.\w{2,5}+)$/"; } + /** + * Set the $spool_id + * + * @param string + */ + public function setSpoolId($v) + { + $this->spool_id = $v; + } + + /** + * Get the $spool_id + * + * @return string + */ + public function getSpoolId() + { + return $this->spool_id; + } + /** * get all files into spool in a list * diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index ae157522c..f6a311c8b 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -5,6 +5,7 @@ use ProcessMaker\BusinessModel\EmailServer; use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\System; +use ProcessMaker\Util\WsMessageResponse; class WsBase { @@ -947,7 +948,8 @@ class WsBase $spool->sendMail(); if ($spool->status == 'sent') { - $result = new WsResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to); + $result = new WsMessageResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to); + $result->setAppMessUid($spool->getSpoolId()); } else { $result = new WsResponse(29, $spool->status . ' ' . $spool->error . print_r($setup, 1)); } diff --git a/workflow/engine/classes/model/AppMessage.php b/workflow/engine/classes/model/AppMessage.php index 90f1fc9a4..663ade86c 100644 --- a/workflow/engine/classes/model/AppMessage.php +++ b/workflow/engine/classes/model/AppMessage.php @@ -300,5 +300,24 @@ class AppMessage extends BaseAppMessage return $messages; } + + /** + * Get the APP_MSG_BODY related to the key + * + * @param string $key + * + * @return string + * @throws Exception + */ + public static function getAppMsgBodyByKey($key) + { + try { + $appMessage = AppMessagePeer::retrieveByPk($key); + + return $appMessage->getAppMsgBody(); + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 57caa88d5..7027ef788 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -1699,6 +1699,12 @@ msgstr "3 days at least" msgid "The answer has been submitted. Thank you." msgstr "The answer has been submitted. Thank you." +# TRANSLATION +# LABEL/ID_ABE_EMAIL_RESPONSE_BODY_NOTE +#: LABEL/ID_ABE_EMAIL_RESPONSE_BODY_NOTE +msgid "Please add your comments above this section. Don't modify or delete this section." +msgstr "Please add your comments above this section. Don't modify or delete this section." + # TRANSLATION # LABEL/ID_ABE_FORM_ALREADY_FILLED #: LABEL/ID_ABE_FORM_ALREADY_FILLED @@ -4235,6 +4241,12 @@ msgstr "Close Editor" msgid "[LABEL/ID_CODE] Code" msgstr "Code" +# TRANSLATION +# LABEL/ID_CODE_CRYPT +#: LABEL/ID_CODE_CRYPT +msgid "Code:" +msgstr "Code:" + # TRANSLATION # LABEL/ID_COLLAPSE_ALL #: LABEL/ID_COLLAPSE_ALL diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index a7cd4f3e4..8277694f0 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57081,6 +57081,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','HTML_FILES','en','You can open only files with the .html extension','2014-01-15') , ( 'LABEL','ID_3DAYSMINIMUM','en','3 days at least','2014-01-15') , ( 'LABEL','ID_ABE_ANSWER_SUBMITTED','en','The answer has been submitted. Thank you.','2017-06-19') , +( 'LABEL','ID_ABE_EMAIL_RESPONSE_BODY_NOTE','en','Please add your comments above this section. Don''t modify or delete this section.','2018-11-16') , ( 'LABEL','ID_ABE_FORM_ALREADY_FILLED','en','The form has already been filled and sent.','2017-06-09') , ( 'LABEL','ID_ABE_INFORMATION_SUBMITTED','en','The information was submitted. Thank you.','2017-06-19') , ( 'LABEL','ID_ABE_RESPONSE_SENT','en','The response has already been sent.','2017-06-19') , @@ -57513,6 +57514,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_CLOSE','en','Close','2014-01-15') , ( 'LABEL','ID_CLOSE_EDITOR','en','Close Editor','2014-01-15') , ( 'LABEL','ID_CODE','en','Code','2014-01-15') , +( 'LABEL','ID_CODE_CRYPT','en','Code:','2018-11-16') , ( 'LABEL','ID_COLLAPSE_ALL','en','Collapse All','2014-01-15') , ( 'LABEL','ID_COLOSA_AND_CERTIFIED_PARTNERS','en','Supplied free of charge with no support, certification, warranty, maintenance nor indemnity by Colosa and its Certified Partners.','2014-10-21') , ( 'LABEL','ID_COLUMNS','en','columns','2014-01-15') , diff --git a/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php b/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php new file mode 100644 index 000000000..ec6a1f92c --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Util/WsMessageResponse.php @@ -0,0 +1,32 @@ +appMessUid; + } + + /** + * Set the appMessUid + * + * @param string $v + * @return void + */ + public function setAppMessUid($v) + { + $this->appMessUid = $v; + } +} + From a741071d9e098e7926bc98b1617d467717fc93e2 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Fri, 23 Nov 2018 14:41:04 -0400 Subject: [PATCH 013/100] PMC-57: Action BY Email: Add new option in Email Server configuration page Code Improvements Code Improvements 1 Code Improvements 2 Fixing port labels Fixing port labels 1 Code improvements 3 Code improvements 4 Code improvements 5 Code improvements 6 Code improvements 7 --- .../model/map/EmailServerMapBuilder.php | 4 + .../classes/model/om/BaseEmailServer.php | 204 +++++++++++--- .../classes/model/om/BaseEmailServerPeer.php | 28 +- workflow/engine/config/schema.xml | 2 + .../translations/english/processmaker.en.po | 24 ++ workflow/engine/data/mysql/insert.sql | 4 + workflow/engine/data/mysql/schema.sql | 2 + .../methods/emailServer/emailServerAjax.php | 28 +- .../BusinessModel/EmailServer.php | 23 +- .../templates/emailServer/emailServer.js | 263 ++++++++++-------- 10 files changed, 407 insertions(+), 175 deletions(-) diff --git a/workflow/engine/classes/model/map/EmailServerMapBuilder.php b/workflow/engine/classes/model/map/EmailServerMapBuilder.php index ab8fd959a..b9e5729a0 100644 --- a/workflow/engine/classes/model/map/EmailServerMapBuilder.php +++ b/workflow/engine/classes/model/map/EmailServerMapBuilder.php @@ -73,6 +73,10 @@ class EmailServerMapBuilder $tMap->addColumn('MESS_PORT', 'MessPort', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('MESS_INCOMING_SERVER', 'MessIncomingServer', 'string', CreoleTypes::VARCHAR, true, 256); + + $tMap->addColumn('MESS_INCOMING_PORT', 'MessIncomingPort', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('MESS_RAUTH', 'MessRauth', 'int', CreoleTypes::INTEGER, true, null); $tMap->addColumn('MESS_ACCOUNT', 'MessAccount', 'string', CreoleTypes::VARCHAR, true, 256); diff --git a/workflow/engine/classes/model/om/BaseEmailServer.php b/workflow/engine/classes/model/om/BaseEmailServer.php index 111488080..82716bab4 100644 --- a/workflow/engine/classes/model/om/BaseEmailServer.php +++ b/workflow/engine/classes/model/om/BaseEmailServer.php @@ -51,6 +51,18 @@ abstract class BaseEmailServer extends BaseObject implements Persistent */ protected $mess_port = 0; + /** + * The value for the mess_incoming_server field. + * @var string + */ + protected $mess_incoming_server = ''; + + /** + * The value for the mess_incoming_port field. + * @var int + */ + protected $mess_incoming_port = 0; + /** * The value for the mess_rauth field. * @var int @@ -163,6 +175,28 @@ abstract class BaseEmailServer extends BaseObject implements Persistent return $this->mess_port; } + /** + * Get the [mess_incoming_server] column value. + * + * @return string + */ + public function getMessIncomingServer() + { + + return $this->mess_incoming_server; + } + + /** + * Get the [mess_incoming_port] column value. + * + * @return int + */ + public function getMessIncomingPort() + { + + return $this->mess_incoming_port; + } + /** * Get the [mess_rauth] column value. * @@ -350,6 +384,50 @@ abstract class BaseEmailServer extends BaseObject implements Persistent } // setMessPort() + /** + * Set the value of [mess_incoming_server] column. + * + * @param string $v new value + * @return void + */ + public function setMessIncomingServer($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->mess_incoming_server !== $v || $v === '') { + $this->mess_incoming_server = $v; + $this->modifiedColumns[] = EmailServerPeer::MESS_INCOMING_SERVER; + } + + } // setMessIncomingServer() + + /** + * Set the value of [mess_incoming_port] column. + * + * @param int $v new value + * @return void + */ + public function setMessIncomingPort($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->mess_incoming_port !== $v || $v === 0) { + $this->mess_incoming_port = $v; + $this->modifiedColumns[] = EmailServerPeer::MESS_INCOMING_PORT; + } + + } // setMessIncomingPort() + /** * Set the value of [mess_rauth] column. * @@ -573,30 +651,34 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->mess_port = $rs->getInt($startcol + 3); - $this->mess_rauth = $rs->getInt($startcol + 4); + $this->mess_incoming_server = $rs->getString($startcol + 4); - $this->mess_account = $rs->getString($startcol + 5); + $this->mess_incoming_port = $rs->getInt($startcol + 5); - $this->mess_password = $rs->getString($startcol + 6); + $this->mess_rauth = $rs->getInt($startcol + 6); - $this->mess_from_mail = $rs->getString($startcol + 7); + $this->mess_account = $rs->getString($startcol + 7); - $this->mess_from_name = $rs->getString($startcol + 8); + $this->mess_password = $rs->getString($startcol + 8); - $this->smtpsecure = $rs->getString($startcol + 9); + $this->mess_from_mail = $rs->getString($startcol + 9); - $this->mess_try_send_inmediatly = $rs->getInt($startcol + 10); + $this->mess_from_name = $rs->getString($startcol + 10); - $this->mail_to = $rs->getString($startcol + 11); + $this->smtpsecure = $rs->getString($startcol + 11); - $this->mess_default = $rs->getInt($startcol + 12); + $this->mess_try_send_inmediatly = $rs->getInt($startcol + 12); + + $this->mail_to = $rs->getString($startcol + 13); + + $this->mess_default = $rs->getInt($startcol + 14); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 13; // 13 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 15; // 15 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating EmailServer object", $e); @@ -813,30 +895,36 @@ abstract class BaseEmailServer extends BaseObject implements Persistent return $this->getMessPort(); break; case 4: - return $this->getMessRauth(); + return $this->getMessIncomingServer(); break; case 5: - return $this->getMessAccount(); + return $this->getMessIncomingPort(); break; case 6: - return $this->getMessPassword(); + return $this->getMessRauth(); break; case 7: - return $this->getMessFromMail(); + return $this->getMessAccount(); break; case 8: - return $this->getMessFromName(); + return $this->getMessPassword(); break; case 9: - return $this->getSmtpsecure(); + return $this->getMessFromMail(); break; case 10: - return $this->getMessTrySendInmediatly(); + return $this->getMessFromName(); break; case 11: - return $this->getMailTo(); + return $this->getSmtpsecure(); break; case 12: + return $this->getMessTrySendInmediatly(); + break; + case 13: + return $this->getMailTo(); + break; + case 14: return $this->getMessDefault(); break; default: @@ -863,15 +951,17 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $keys[1] => $this->getMessEngine(), $keys[2] => $this->getMessServer(), $keys[3] => $this->getMessPort(), - $keys[4] => $this->getMessRauth(), - $keys[5] => $this->getMessAccount(), - $keys[6] => $this->getMessPassword(), - $keys[7] => $this->getMessFromMail(), - $keys[8] => $this->getMessFromName(), - $keys[9] => $this->getSmtpsecure(), - $keys[10] => $this->getMessTrySendInmediatly(), - $keys[11] => $this->getMailTo(), - $keys[12] => $this->getMessDefault(), + $keys[4] => $this->getMessIncomingServer(), + $keys[5] => $this->getMessIncomingPort(), + $keys[6] => $this->getMessRauth(), + $keys[7] => $this->getMessAccount(), + $keys[8] => $this->getMessPassword(), + $keys[9] => $this->getMessFromMail(), + $keys[10] => $this->getMessFromName(), + $keys[11] => $this->getSmtpsecure(), + $keys[12] => $this->getMessTrySendInmediatly(), + $keys[13] => $this->getMailTo(), + $keys[14] => $this->getMessDefault(), ); return $result; } @@ -916,30 +1006,36 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->setMessPort($value); break; case 4: - $this->setMessRauth($value); + $this->setMessIncomingServer($value); break; case 5: - $this->setMessAccount($value); + $this->setMessIncomingPort($value); break; case 6: - $this->setMessPassword($value); + $this->setMessRauth($value); break; case 7: - $this->setMessFromMail($value); + $this->setMessAccount($value); break; case 8: - $this->setMessFromName($value); + $this->setMessPassword($value); break; case 9: - $this->setSmtpsecure($value); + $this->setMessFromMail($value); break; case 10: - $this->setMessTrySendInmediatly($value); + $this->setMessFromName($value); break; case 11: - $this->setMailTo($value); + $this->setSmtpsecure($value); break; case 12: + $this->setMessTrySendInmediatly($value); + break; + case 13: + $this->setMailTo($value); + break; + case 14: $this->setMessDefault($value); break; } // switch() @@ -982,39 +1078,47 @@ abstract class BaseEmailServer extends BaseObject implements Persistent } if (array_key_exists($keys[4], $arr)) { - $this->setMessRauth($arr[$keys[4]]); + $this->setMessIncomingServer($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { - $this->setMessAccount($arr[$keys[5]]); + $this->setMessIncomingPort($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { - $this->setMessPassword($arr[$keys[6]]); + $this->setMessRauth($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { - $this->setMessFromMail($arr[$keys[7]]); + $this->setMessAccount($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { - $this->setMessFromName($arr[$keys[8]]); + $this->setMessPassword($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { - $this->setSmtpsecure($arr[$keys[9]]); + $this->setMessFromMail($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setMessTrySendInmediatly($arr[$keys[10]]); + $this->setMessFromName($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setMailTo($arr[$keys[11]]); + $this->setSmtpsecure($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setMessDefault($arr[$keys[12]]); + $this->setMessTrySendInmediatly($arr[$keys[12]]); + } + + if (array_key_exists($keys[13], $arr)) { + $this->setMailTo($arr[$keys[13]]); + } + + if (array_key_exists($keys[14], $arr)) { + $this->setMessDefault($arr[$keys[14]]); } } @@ -1044,6 +1148,14 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $criteria->add(EmailServerPeer::MESS_PORT, $this->mess_port); } + if ($this->isColumnModified(EmailServerPeer::MESS_INCOMING_SERVER)) { + $criteria->add(EmailServerPeer::MESS_INCOMING_SERVER, $this->mess_incoming_server); + } + + if ($this->isColumnModified(EmailServerPeer::MESS_INCOMING_PORT)) { + $criteria->add(EmailServerPeer::MESS_INCOMING_PORT, $this->mess_incoming_port); + } + if ($this->isColumnModified(EmailServerPeer::MESS_RAUTH)) { $criteria->add(EmailServerPeer::MESS_RAUTH, $this->mess_rauth); } @@ -1140,6 +1252,10 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $copyObj->setMessPort($this->mess_port); + $copyObj->setMessIncomingServer($this->mess_incoming_server); + + $copyObj->setMessIncomingPort($this->mess_incoming_port); + $copyObj->setMessRauth($this->mess_rauth); $copyObj->setMessAccount($this->mess_account); diff --git a/workflow/engine/classes/model/om/BaseEmailServerPeer.php b/workflow/engine/classes/model/om/BaseEmailServerPeer.php index c78d96808..a020a0763 100644 --- a/workflow/engine/classes/model/om/BaseEmailServerPeer.php +++ b/workflow/engine/classes/model/om/BaseEmailServerPeer.php @@ -25,7 +25,7 @@ abstract class BaseEmailServerPeer const CLASS_DEFAULT = 'classes.model.EmailServer'; /** The total number of columns. */ - const NUM_COLUMNS = 13; + const NUM_COLUMNS = 15; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -43,6 +43,12 @@ abstract class BaseEmailServerPeer /** the column name for the MESS_PORT field */ const MESS_PORT = 'EMAIL_SERVER.MESS_PORT'; + /** the column name for the MESS_INCOMING_SERVER field */ + const MESS_INCOMING_SERVER = 'EMAIL_SERVER.MESS_INCOMING_SERVER'; + + /** the column name for the MESS_INCOMING_PORT field */ + const MESS_INCOMING_PORT = 'EMAIL_SERVER.MESS_INCOMING_PORT'; + /** the column name for the MESS_RAUTH field */ const MESS_RAUTH = 'EMAIL_SERVER.MESS_RAUTH'; @@ -81,10 +87,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessIncomingServer', 'MessIncomingPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_INCOMING_SERVER, EmailServerPeer::MESS_INCOMING_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_INCOMING_SERVER', 'MESS_INCOMING_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) ); /** @@ -94,10 +100,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessRauth' => 4, 'MessAccount' => 5, 'MessPassword' => 6, 'MessFromMail' => 7, 'MessFromName' => 8, 'Smtpsecure' => 9, 'MessTrySendInmediatly' => 10, 'MailTo' => 11, 'MessDefault' => 12, ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_RAUTH => 4, EmailServerPeer::MESS_ACCOUNT => 5, EmailServerPeer::MESS_PASSWORD => 6, EmailServerPeer::MESS_FROM_MAIL => 7, EmailServerPeer::MESS_FROM_NAME => 8, EmailServerPeer::SMTPSECURE => 9, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 10, EmailServerPeer::MAIL_TO => 11, EmailServerPeer::MESS_DEFAULT => 12, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_RAUTH' => 4, 'MESS_ACCOUNT' => 5, 'MESS_PASSWORD' => 6, 'MESS_FROM_MAIL' => 7, 'MESS_FROM_NAME' => 8, 'SMTPSECURE' => 9, 'MESS_TRY_SEND_INMEDIATLY' => 10, 'MAIL_TO' => 11, 'MESS_DEFAULT' => 12, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessIncomingServer' => 4, 'MessIncomingPort' => 5, 'MessRauth' => 6, 'MessAccount' => 7, 'MessPassword' => 8, 'MessFromMail' => 9, 'MessFromName' => 10, 'Smtpsecure' => 11, 'MessTrySendInmediatly' => 12, 'MailTo' => 13, 'MessDefault' => 14, ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_INCOMING_SERVER => 4, EmailServerPeer::MESS_INCOMING_PORT => 5, EmailServerPeer::MESS_RAUTH => 6, EmailServerPeer::MESS_ACCOUNT => 7, EmailServerPeer::MESS_PASSWORD => 8, EmailServerPeer::MESS_FROM_MAIL => 9, EmailServerPeer::MESS_FROM_NAME => 10, EmailServerPeer::SMTPSECURE => 11, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 12, EmailServerPeer::MAIL_TO => 13, EmailServerPeer::MESS_DEFAULT => 14, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_INCOMING_SERVER' => 4, 'MESS_INCOMING_PORT' => 5, 'MESS_RAUTH' => 6, 'MESS_ACCOUNT' => 7, 'MESS_PASSWORD' => 8, 'MESS_FROM_MAIL' => 9, 'MESS_FROM_NAME' => 10, 'SMTPSECURE' => 11, 'MESS_TRY_SEND_INMEDIATLY' => 12, 'MAIL_TO' => 13, 'MESS_DEFAULT' => 14, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) ); /** @@ -206,6 +212,10 @@ abstract class BaseEmailServerPeer $criteria->addSelectColumn(EmailServerPeer::MESS_PORT); + $criteria->addSelectColumn(EmailServerPeer::MESS_INCOMING_SERVER); + + $criteria->addSelectColumn(EmailServerPeer::MESS_INCOMING_PORT); + $criteria->addSelectColumn(EmailServerPeer::MESS_RAUTH); $criteria->addSelectColumn(EmailServerPeer::MESS_ACCOUNT); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 75517b680..bac185c02 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -4866,6 +4866,8 @@ + + diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 7027ef788..a3009be9c 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -23477,6 +23477,18 @@ msgstr "Sent By" msgid "[LABEL/ID_SERVER] Server" msgstr "Server" +# TRANSLATION +# LABEL/ID_OUTGOING_SERVER +#: LABEL/ID_OUTGOING_SERVER +msgid "Outgoing Server" +msgstr "Outgoing Server" + +# TRANSLATION +# LABEL/ID_INCOMING_SERVER +#: LABEL/ID_INCOMING_SERVER +msgid "Incoming Server" +msgstr "Incoming Server" + # TRANSLATION # LABEL/ID_SERVER_ADDRESS #: LABEL/ID_SERVER_ADDRESS @@ -27929,6 +27941,18 @@ msgstr "Photo gallery" msgid "Port (default 25)" msgstr "Port (default 25)" +# TRANSLATION +# LABEL/INCOMING_PORT_DEFAULT +#: LABEL/INCOMING_PORT_DEFAULT +msgid "Incoming Port (default 143)" +msgstr "Incoming Port (default 143)" + +# TRANSLATION +# LABEL/OUTGOING_PORT_DEFAULT +#: LABEL/OUTGOING_PORT_DEFAULT +msgid "Outgoing Port (default 25)" +msgstr "Outgoing Port (default 25)" + # TRANSLATION # LABEL/REQUIRE_AUTHENTICATION #: LABEL/REQUIRE_AUTHENTICATION diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 8277694f0..a28d0e496 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -58425,6 +58425,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_INACTIVE','en','Inactive','2014-01-15') , ( 'LABEL','ID_INBOX','en','Inbox','2014-01-15') , ( 'LABEL','ID_INBOX_EMPTY','en','Your Inbox is empty...','2015-05-06') , +( 'LABEL','ID_INCOMING_SERVER','en','Incoming Server','2018-11-23') , ( 'LABEL','ID_INCORRECT_EMAIL','en','Your E-mail address is not valid.','2014-01-15') , ( 'LABEL','ID_INCORRECT_USERNAME_PASSWORD','en','Incorrect username or password','2014-01-15') , ( 'LABEL','ID_INCORRECT_VALUE_ACTION','en','The value for $action is incorrect.','2014-05-29') , @@ -60201,6 +60202,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ORIGIN_TASK','en','Origin Task','2014-01-15') , ( 'LABEL','ID_OTHER','en','Other','2014-01-15') , ( 'LABEL','ID_OUTBOX','en','Outbox','2014-01-15') , +( 'LABEL','ID_OUTGOING_SERVER','en','Outgoing Server','2018-11-23') , ( 'LABEL','ID_OUTPUT_DB','en','Output','2014-10-08') , ( 'LABEL','ID_OUTPUT_DOCUMENT','en','Output Document','2014-01-15') , ( 'LABEL','ID_OUTPUT_DOCUMENTS','en','Output Documents','2014-01-15') , @@ -61462,6 +61464,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','IMPORT_PROCESS_DISABLE','en','Disable the current process and create a new version of the process','2014-01-15') , ( 'LABEL','IMPORT_PROCESS_NEW','en','Create a completely new process without changing the current process','2014-01-15') , ( 'LABEL','IMPORT_PROCESS_OVERWRITING','en','Update the current process, overwriting all tasks and steps','2014-01-15') , +( 'LABEL','INCOMING_PORT_DEFAULT','en','Incoming Port (default 143)','2018-11-23') , ( 'LABEL','INVALID_FILE','en','Invalid file!','2014-01-15') , ( 'LABEL','IS_USER_NAME_DISPLAY_FORMAT','en','User Name Display Format','2014-01-15') , ( 'LABEL','LOGIN','en','Login','2014-01-15') , @@ -61529,6 +61532,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','NEW_SITE_SUCCESS_CONFIRM','en','Do you want open the new site?','2014-01-15') , ( 'LABEL','NEW_SITE_SUCCESS_CONFIRMNOTE','en','Note.- If you open the new site your current session will be closed.','2014-01-15') , ( 'LABEL','OPEN_NEW_WS','en','Open new site','2014-01-15') , +( 'LABEL','OUTGOING_PORT_DEFAULT','en','Outgoing Port (default 25)','2018-11-26') , ( 'LABEL','OUTPUT_CREATE','en','Output document has been created successfully','2014-01-15') , ( 'LABEL','PASSWORD_HISTORY','en','Password history','2014-01-15') , ( 'LABEL','PAUSED','en','Pause','2014-01-15') , diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 30f4f911f..9bd873c33 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2744,6 +2744,8 @@ CREATE TABLE `EMAIL_SERVER` `MESS_ENGINE` VARCHAR(256) default '' NOT NULL, `MESS_SERVER` VARCHAR(256) default '' NOT NULL, `MESS_PORT` INTEGER default 0 NOT NULL, + `MESS_INCOMING_SERVER` VARCHAR(256) default '' NOT NULL, + `MESS_INCOMING_PORT` INTEGER default 0 NOT NULL, `MESS_RAUTH` INTEGER default 0 NOT NULL, `MESS_ACCOUNT` VARCHAR(256) default '' NOT NULL, `MESS_PASSWORD` VARCHAR(256) default '' NOT NULL, diff --git a/workflow/engine/methods/emailServer/emailServerAjax.php b/workflow/engine/methods/emailServer/emailServerAjax.php index 6f3c246e3..59a454f52 100644 --- a/workflow/engine/methods/emailServer/emailServerAjax.php +++ b/workflow/engine/methods/emailServer/emailServerAjax.php @@ -9,6 +9,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -27,6 +29,14 @@ switch ($option) { $reqAuthentication = (int)($_POST["reqAuthentication"]); $password = ($reqAuthentication == 1)? $_POST["password"] : ""; $smtpSecure = $_POST["smtpSecure"]; + } elseif ($cboEmailEngine == "IMAP") { + $server = $_POST["server"]; + $port = (int)($_POST["port"]); + $incomingServer = $_POST["incomingServer"]; + $incomingPort = (int)($_POST["incomingPort"]); + $reqAuthentication = (int)($_POST["reqAuthentication"]); + $password = ($reqAuthentication == 1)? $_POST["password"] : ""; + $smtpSecure = $_POST["smtpSecure"]; } try { @@ -34,6 +44,8 @@ switch ($option) { "MESS_ENGINE" => $cboEmailEngine, "MESS_SERVER" => $server, "MESS_PORT" => $port, + "MESS_INCOMING_SERVER" => $incomingServer, + "MESS_INCOMING_PORT" => $incomingPort, "MESS_RAUTH" => $reqAuthentication, "MESS_ACCOUNT" => $accountFrom, "MESS_PASSWORD" => $password, @@ -63,6 +75,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -81,6 +95,14 @@ switch ($option) { $reqAuthentication = (int)($_POST["reqAuthentication"]); $password = ($reqAuthentication == 1)? $_POST["password"] : ""; $smtpSecure = $_POST["smtpSecure"]; + } elseif ($cboEmailEngine == "IMAP") { + $server = $_POST["server"]; + $port = (int)($_POST["port"]); + $incomingServer = $_POST["incomingServer"]; + $incomingPort = (int)($_POST["incomingPort"]); + $reqAuthentication = (int)($_POST["reqAuthentication"]); + $password = ($reqAuthentication == 1)? $_POST["password"] : ""; + $smtpSecure = $_POST["smtpSecure"]; } try { @@ -88,6 +110,8 @@ switch ($option) { "MESS_ENGINE" => $cboEmailEngine, "MESS_SERVER" => $server, "MESS_PORT" => $port, + "MESS_INCOMING_SERVER" => $incomingServer, + "MESS_INCOMING_PORT" => $incomingPort, "MESS_RAUTH" => $reqAuthentication, "MESS_ACCOUNT" => $accountFrom, "MESS_PASSWORD" => $password, @@ -153,6 +177,8 @@ switch ($option) { $server = ""; $port = ""; + $incomingServer = ""; + $incomingPort = ""; $reqAuthentication = 0; $password = ""; $smtpSecure = ""; @@ -165,7 +191,7 @@ switch ($option) { $mailTo = ($sendTestMail == 1)? $_POST["mailTo"] : ""; $emailServerDefault = (int)($_POST["emailServerDefault"]); - if ($cboEmailEngine == "PHPMAILER") { + if ($cboEmailEngine == "PHPMAILER" || $cboEmailEngine == "IMAP") { $server = $_POST["server"]; $port = (int)($_POST["port"]); $reqAuthentication = (int)($_POST["reqAuthentication"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index 7516bccd2..56ffd0aa0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -13,9 +13,11 @@ class EmailServer { private $arrayFieldDefinition = array( "MESS_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "emailServerUid"), - "MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL"), "fieldNameAux" => "emailServerEngine"), + "MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL", "IMAP"), "fieldNameAux" => "emailServerEngine"), "MESS_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerServer"), "MESS_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPort"), + "MESS_INCOMING_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerIncomingServer"), + "MESS_INCOMING_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerIncomingPort"), "MESS_RAUTH" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(0, 1), "fieldNameAux" => "emailServerRauth"), "MESS_ACCOUNT" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerUserName"), "MESS_PASSWORD" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPassword"), @@ -51,10 +53,10 @@ class EmailServer throw $e; } } - + /** * Get the default information from the context. - * + * * @global type $RBAC * @return void */ @@ -525,6 +527,7 @@ class EmailServer } break; case "PHPMAILER": + case "IMAP": $numSteps = ($arrayData['MAIL_TO'] != '') ? count($arrayPhpMailerTestName) : count($arrayPhpMailerTestName) - 1; for ($step = 1; $step <= $numSteps; $step++) { @@ -829,6 +832,8 @@ class EmailServer 'engine'=> $arrayData["MESS_ENGINE"], 'server' => $arrayData["MESS_SERVER"], 'port' => $arrayData["MESS_PORT"], + 'incomingServer' => $arrayData["MESS_INCOMING_SERVER"], + 'incomingPort' => $arrayData["MESS_INCOMING_PORT"], 'requireAuthentication' => $arrayData["MESS_RAUTH"], 'account' => $arrayData["MESS_ACCOUNT"], 'senderEmail' => $arrayData["MESS_FROM_MAIL"], @@ -1000,6 +1005,8 @@ class EmailServer 'engine' => $arrayData["MESS_ENGINE"], 'server' => $arrayData["MESS_SERVER"], 'port' => $arrayData["MESS_PORT"], + 'incomingServer' => $arrayData["MESS_INCOMING_SERVER"], + 'incomingPort' => $arrayData["MESS_INCOMING_PORT"], 'requireAuthentication' => $arrayData["MESS_RAUTH"], 'account' => $arrayData["MESS_ACCOUNT"], 'senderEmail' => $arrayData["MESS_FROM_MAIL"], @@ -1086,6 +1093,8 @@ class EmailServer $criteria->addSelectColumn(\EmailServerPeer::MESS_ENGINE); $criteria->addSelectColumn(\EmailServerPeer::MESS_SERVER); $criteria->addSelectColumn(\EmailServerPeer::MESS_PORT); + $criteria->addSelectColumn(\EmailServerPeer::MESS_INCOMING_SERVER); + $criteria->addSelectColumn(\EmailServerPeer::MESS_INCOMING_PORT); $criteria->addSelectColumn(\EmailServerPeer::MESS_RAUTH); $criteria->addSelectColumn(\EmailServerPeer::MESS_ACCOUNT); $criteria->addSelectColumn(\EmailServerPeer::MESS_PASSWORD); @@ -1118,6 +1127,8 @@ class EmailServer $this->getFieldNameByFormatFieldName("MESS_ENGINE") => $record["MESS_ENGINE"], $this->getFieldNameByFormatFieldName("MESS_SERVER") => $record["MESS_SERVER"], $this->getFieldNameByFormatFieldName("MESS_PORT") => $record["MESS_PORT"], + $this->getFieldNameByFormatFieldName("MESS_INCOMING_SERVER") => $record["MESS_INCOMING_SERVER"], + $this->getFieldNameByFormatFieldName("MESS_INCOMING_PORT") => $record["MESS_INCOMING_PORT"], $this->getFieldNameByFormatFieldName("MESS_RAUTH") => $record["MESS_RAUTH"], $this->getFieldNameByFormatFieldName("MESS_ACCOUNT") => $record["MESS_ACCOUNT"], $this->getFieldNameByFormatFieldName("MESS_PASSWORD") => $record["MESS_PASSWORD"], @@ -1163,6 +1174,8 @@ class EmailServer $arrayData["MESS_ENGINE"] = $row["MESS_ENGINE"]; $arrayData["MESS_SERVER"] = $row["MESS_SERVER"]; $arrayData["MESS_PORT"] = (int)($row["MESS_PORT"]); + $arrayData["MESS_INCOMING_SERVER"] = $row["MESS_INCOMING_SERVER"]; + $arrayData["MESS_INCOMING_PORT"] = (int)($row["MESS_INCOMING_PORT"]); $arrayData["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $arrayData["MESS_ACCOUNT"] = $row["MESS_ACCOUNT"]; $arrayData["MESS_PASSWORD"] = $row["MESS_PASSWORD"]; @@ -1219,6 +1232,7 @@ class EmailServer $criteria->add( $criteria->getNewCriterion(\EmailServerPeer::MESS_ENGINE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_SERVER, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( + $criteria->getNewCriterion(\EmailServerPeer::MESS_INCOMING_SERVER,"%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_ACCOUNT, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_FROM_NAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::SMTPSECURE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)) @@ -1243,7 +1257,7 @@ class EmailServer if (!is_null($sortField) && trim($sortField) != "") { $sortField = strtoupper($sortField); - if (in_array($sortField, array("MESS_ENGINE", "MESS_SERVER", "MESS_ACCOUNT", "MESS_FROM_NAME", "SMTPSECURE"))) { + if (in_array($sortField, array("MESS_ENGINE", "MESS_SERVER", "MESS_INCOMING_SERVER", "MESS_ACCOUNT", "MESS_FROM_NAME", "SMTPSECURE"))) { $sortField = \EmailServerPeer::TABLE_NAME . "." . $sortField; } else { $sortField = \EmailServerPeer::MESS_ENGINE; @@ -1316,6 +1330,7 @@ class EmailServer $row = $rsCriteria->getRow(); $row["MESS_PORT"] = (int)($row["MESS_PORT"]); + $row["MESS_INCOMING_PORT"] = (int)($row["MESS_INCOMING_PORT"]); $row["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $row["MESS_TRY_SEND_INMEDIATLY"] = (int)($row["MESS_TRY_SEND_INMEDIATLY"]); $row["MESS_DEFAULT"] = (int)($row["MESS_DEFAULT"]); diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index 91bed9ee9..dfa9e901a 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -48,83 +48,67 @@ emailServer.application = { } /*----------------------------------********---------------------------------*/ + var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); + + if (typeEmailEngine === "PHPMAILER") { + var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); + var smtpSecure = rdoGrpOption.getGroupValue(); + + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + server: Ext.getCmp("txtServer").getValue(), + port: Ext.getCmp("txtPort").getValue(), + reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked) ? 1 : 0, + accountFrom: Ext.getCmp("txtAccountFrom").getValue(), + password: Ext.getCmp("txtPassword").getValue(), + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + smtpSecure: smtpSecure, + sendTestMail: (Ext.getCmp("chkSendTestMail").checked) ? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } else if (typeEmailEngine === "IMAP") { + var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); + var smtpSecure = rdoGrpOption.getGroupValue(); + + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + server: Ext.getCmp("txtServer").getValue(), + port: Ext.getCmp("txtPort").getValue(), + incomingServer: Ext.getCmp("txtIncomingServer").getValue(), + incomingPort: Ext.getCmp("txtIncomingPort").getValue(), + reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked) ? 1 : 0, + accountFrom: Ext.getCmp("txtAccountFrom").getValue(), + password: Ext.getCmp("txtPassword").getValue(), + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + smtpSecure: smtpSecure, + sendTestMail: (Ext.getCmp("chkSendTestMail").checked) ? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } else { + //MAIL + p = { + option: option, + + cboEmailEngine: typeEmailEngine, + fromMail: Ext.getCmp("txtFromMail").getValue(), + fromName: Ext.getCmp("txtFromName").getValue(), + sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, + mailTo: Ext.getCmp("txtMailTo").getValue(), + emailServerDefault: emailDefault + }; + } + switch (option) { - case "INS": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } - break; case "UPD": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - emailServerUid: emailServerUid, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - emailServerUid: emailServerUid, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } + p.emailServerUid = emailServerUid; break; case "DEL": p = { @@ -132,45 +116,6 @@ emailServer.application = { emailServerUid: emailServerUid }; break; - //case "LST": - // break; - case "TEST": - var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - - if (typeEmailEngine == "PHPMAILER") { - var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); - var smtpSecure = rdoGrpOption.getGroupValue(); - - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - server: Ext.getCmp("txtServer").getValue(), - port: Ext.getCmp("txtPort").getValue(), - reqAuthentication: (Ext.getCmp("chkReqAuthentication").checked)? 1 : 0, - accountFrom: Ext.getCmp("txtAccountFrom").getValue(), - password: Ext.getCmp("txtPassword").getValue(), - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - smtpSecure: smtpSecure, - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } else { - //MAIL - p = { - option: option, - - cboEmailEngine: typeEmailEngine, - fromMail: Ext.getCmp("txtFromMail").getValue(), - fromName: Ext.getCmp("txtFromName").getValue(), - sendTestMail: (Ext.getCmp("chkSendTestMail").checked)? 1 : 0, - mailTo: Ext.getCmp("txtMailTo").getValue(), - emailServerDefault: emailDefault - }; - } - break; } Ext.Ajax.request({ @@ -240,11 +185,16 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = true; Ext.getCmp("txtPort").allowBlank = true; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = true; Ext.getCmp("txtServer").setValue(""); Ext.getCmp("txtPort").setValue(""); + Ext.getCmp("txtIncomingServer").setValue(""); + Ext.getCmp("txtIncomingPort").setValue(""); + Ext.getCmp("chkReqAuthentication").setValue(false); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -272,6 +222,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = false; + Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; break; case "UPD": @@ -286,6 +238,9 @@ emailServer.application = { Ext.getCmp("txtServer").setValue(record.get("MESS_SERVER")); Ext.getCmp("txtPort").setValue((record.get("MESS_PORT") != 0)? record.get("MESS_PORT") : ""); + Ext.getCmp("txtIncomingServer").setValue(record.get("MESS_INCOMING_SERVER")); + Ext.getCmp("txtIncomingPort").setValue((record.get("MESS_INCOMING_PORT") !== 0)? record.get("MESS_INCOMING_PORT") : ""); + Ext.getCmp("chkReqAuthentication").setValue((parseInt(record.get("MESS_RAUTH")) == 1)? true : false); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -323,10 +278,46 @@ emailServer.application = { { Ext.getCmp("frmEmailServer").getForm().clearInvalid(); - if (cboEmailEngine == "PHPMAILER") { + if (cboEmailEngine === "PHPMAILER") { Ext.getCmp("txtServer").setVisible(true); Ext.getCmp("txtPort").setVisible(true); + try { + Ext.getCmp("txtServer").label.update(_("ID_SERVER")); + Ext.getCmp("txtPort").label.update(_("PORT_DEFAULT")); + } catch (err) { + Ext.getCmp("txtServer").fieldLabel = _("ID_SERVER"); + Ext.getCmp("txtPort").fieldLabel = _("PORT_DEFAULT"); + } + + Ext.getCmp("txtIncomingServer").setVisible(false); + Ext.getCmp("txtIncomingPort").setVisible(false); + + Ext.getCmp("chkReqAuthentication").setVisible(true); + + emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); + + Ext.getCmp("txtAccountFrom").setVisible(true); + Ext.getCmp("rdoGrpSmtpSecure").setVisible(true); + + Ext.getCmp("txtServer").allowBlank = false; + Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtAccountFrom").allowBlank = false; + } else if (cboEmailEngine === "IMAP") { + Ext.getCmp("txtServer").setVisible(true); + Ext.getCmp("txtPort").setVisible(true); + + try { + Ext.getCmp("txtServer").label.update(_("ID_OUTGOING_SERVER")); + Ext.getCmp("txtPort").label.update(_("OUTGOING_PORT_DEFAULT")); + } catch (err) { + Ext.getCmp("txtServer").fieldLabel = _("ID_OUTGOING_SERVER"); + Ext.getCmp("txtPort").fieldLabel = _("OUTGOING_PORT_DEFAULT"); + } + + Ext.getCmp("txtIncomingServer").setVisible(true); + Ext.getCmp("txtIncomingPort").setVisible(true); + Ext.getCmp("chkReqAuthentication").setVisible(true); emailServerSetPassword(Ext.getCmp("chkReqAuthentication").checked); @@ -342,6 +333,9 @@ emailServer.application = { Ext.getCmp("txtServer").setVisible(false); Ext.getCmp("txtPort").setVisible(false); + Ext.getCmp("txtIncomingServer").setVisible(false); + Ext.getCmp("txtIncomingPort").setVisible(false); + Ext.getCmp("chkReqAuthentication").setVisible(false); emailServerSetPassword(false); @@ -384,7 +378,7 @@ emailServer.application = { FLAGTEST = 1; - if (option == "PHPMAILER") { + if (option === "PHPMAILER" || option === "IMAP") { if (typeof(testData.resolving_name) != "undefined") { if (testData.resolving_name.result) { msg = msg + "" + testData.resolving_name.title + "
"; @@ -492,6 +486,8 @@ emailServer.application = { {name: "MESS_ENGINE", type: "string"}, {name: "MESS_SERVER", type: "string"}, {name: "MESS_PORT", type: "int"}, + {name: "MESS_INCOMING_SERVER", type: "string"}, + {name: "MESS_INCOMING_PORT", type: "int"}, {name: "MESS_RAUTH", type: "int"}, {name: "MESS_ACCOUNT", type: "string"}, {name: "MESS_PASSWORD", type: "string"}, @@ -548,6 +544,7 @@ emailServer.application = { data: [ ["PHPMAILER", "SMTP (PHPMailer)"], + ["IMAP", "SMTP - IMAP (PHPMailer)"], ["MAIL", "Mail (PHP)"] ] }); @@ -597,6 +594,24 @@ emailServer.application = { emptyText: null }); + var txtIncomingServer = new Ext.form.TextField({ + id: "txtIncomingServer", + name: "txtIncomingServer", + + fieldLabel: _("ID_INCOMING_SERVER") //Server + }); + + var txtIncomingPort = new Ext.form.NumberField({ + id: "txtIncomingPort", + name: "txtIncomingPort", + + fieldLabel: _("INCOMING_PORT_DEFAULT"), //Port (default 993) + + anchor: "36%", + maxLength: 3, + emptyText: null + }); + var chkReqAuthentication = new Ext.form.Checkbox({ id: "chkReqAuthentication", name: "chkReqAuthentication", @@ -745,7 +760,7 @@ emailServer.application = { var winData = new Ext.Window({ layout: "fit", width: 550, - height: 388, + height: 450, //title: "", modal: true, resizable: false, @@ -772,6 +787,8 @@ emailServer.application = { cboEmailEngine, txtServer, txtPort, + txtIncomingServer, + txtIncomingPort, chkReqAuthentication, txtAccountFrom, txtPassword, @@ -997,6 +1014,16 @@ emailServer.application = { return (value != 0)? value : "-"; }; + var rendererMessIncomingServer = function (value) + { + return (value !== "")? value : "-"; + }; + + var rendererMessIncomingPort = function (value) + { + return (value !== 0)? value : "-"; + }; + var rendererMessSmtpSecure = function (value) { return (value != "")? value : "-"; @@ -1017,6 +1044,8 @@ emailServer.application = { {id: "MESS_ENGINE", dataIndex: "MESS_ENGINE", hidden: false, header: _("EMAIL_ENGINE"), width: 80, hideable: true, align: "left"}, {id: "MESS_SERVER", dataIndex: "MESS_SERVER", hidden: false, header: _("ID_SERVER"), width: 150, hideable: true, align: "center", renderer: rendererMessServer}, {id: "MESS_PORT", dataIndex: "MESS_PORT", hidden: false, header: _("ID_EMAIL_SERVER_PORT"), width: 50, hideable: true, align: "center", renderer: rendererMessPort}, + {id: "MESS_INCOMING_SERVER", dataIndex: "MESS_INCOMING_SERVER", hidden: true, header: _("ID_INCOMING_SERVER"), width: 150, hideable: true, align: "center", renderer: rendererMessIncomingServer}, + {id: "MESS_INCOMING_PORT", dataIndex: "MESS_INCOMING_PORT", hidden: true, header: _("ID_EMAIL_SERVER_PORT"), width: 50, hideable: true, align: "center", renderer: rendererMessIncomingPort}, {id: "MESS_RAUTH", dataIndex: "MESS_RAUTH", hidden: true, header: _("REQUIRE_AUTHENTICATION"), width: 50, hideable: false, align: "left"}, {id: "MESS_ACCOUNT", dataIndex: "MESS_ACCOUNT", hidden: false, header: _("ID_EMAIL_SERVER_ACCOUNT_FROM"), width: 130, hideable: true, align: "left"}, {id: "MESS_PASSWORD", dataIndex: "MESS_PASSWORD", hidden: true, header: _("ID_PASSWORD"), width: 130, hideable: false, align: "left"}, From c3977f94c0fe0200c6bbc1065ff9a55b3befd524 Mon Sep 17 00:00:00 2001 From: Ronald Date: Tue, 20 Nov 2018 15:53:08 -0400 Subject: [PATCH 014/100] PMC-41 Fixing actionsByEmailErrorReply.html error file --- composer.json | 3 +- .../bin/actionsByEmailEmailResponse.php | 2 + workflow/engine/bin/cron_single.php | 7 +- .../translations/english/processmaker.en.po | 116 ++++++- workflow/engine/data/mysql/insert.sql | 11 + .../ActionsByEmail/ResponseReader.php | 308 ++++++++++++++++++ .../Services/Api/ActionsByEmail.php | 5 + .../actionsByEmailErrorReply.html | 20 ++ 8 files changed, 457 insertions(+), 15 deletions(-) create mode 100644 workflow/engine/bin/actionsByEmailEmailResponse.php create mode 100644 workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php create mode 100644 workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html diff --git a/composer.json b/composer.json index 25714d395..dc34bb592 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", - "chumper/zipper": "^1.0" + "chumper/zipper": "^1.0", + "php-imap/php-imap": "^3.0" }, "require-dev": { "fzaninotto/faker": "^1.7", diff --git a/workflow/engine/bin/actionsByEmailEmailResponse.php b/workflow/engine/bin/actionsByEmailEmailResponse.php new file mode 100644 index 000000000..e22f1ad68 --- /dev/null +++ b/workflow/engine/bin/actionsByEmailEmailResponse.php @@ -0,0 +1,2 @@ +actionsByEmailEmailResponse(); + break; } } catch (Exception $e) { $token = strtotime("now"); diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index a3009be9c..2c748fab6 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: ProcessMaker (Branch 3.3.1)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-10-23 16:48:05\n" +"PO-Revision-Date: 2018-11-23 20:16:26\n" "Last-Translator: \n" "Language-Team: Colosa Developers Team \n" "MIME-Version: 1.0\n" @@ -1705,6 +1705,24 @@ msgstr "The answer has been submitted. Thank you." msgid "Please add your comments above this section. Don't modify or delete this section." msgstr "Please add your comments above this section. Don't modify or delete this section." +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_ANSWER +#: LABEL/ID_ABE_CASE_NOTE_ANSWER +msgid "Answer: {optionLabel}" +msgstr "Answer: {optionLabel}" + +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_COMMENT +#: LABEL/ID_ABE_CASE_NOTE_COMMENT +msgid "Comment: {emailBody}" +msgstr "Comment: {emailBody}" + +# TRANSLATION +# LABEL/ID_ABE_CASE_NOTE_HEADER +#: LABEL/ID_ABE_CASE_NOTE_HEADER +msgid "{emailAccount} has completed a task from Actions by Email." +msgstr "{emailAccount} has completed a task from Actions by Email." + # TRANSLATION # LABEL/ID_ABE_FORM_ALREADY_FILLED #: LABEL/ID_ABE_FORM_ALREADY_FILLED @@ -1717,6 +1735,54 @@ msgstr "The form has already been filled and sent." msgid "The information was submitted. Thank you." msgstr "The information was submitted. Thank you." +# TRANSLATION +# LABEL/ID_ABE_LOG_ALREADY_ROUTED +#: LABEL/ID_ABE_LOG_ALREADY_ROUTED +msgid "The case was identified correctly but it was already routed." +msgstr "The case was identified correctly but it was already routed." + +# TRANSLATION +# LABEL/ID_ABE_LOG_CANNOT_BE_IDENTIFIED +#: LABEL/ID_ABE_LOG_CANNOT_BE_IDENTIFIED +msgid "The case cannot be identified." +msgstr "The case cannot be identified." + +# TRANSLATION +# LABEL/ID_ABE_LOG_CANNOT_READ +#: LABEL/ID_ABE_LOG_CANNOT_READ +msgid "The application cannot read the email receiver account." +msgstr "The application cannot read the email receiver account." + +# TRANSLATION +# LABEL/ID_ABE_LOG_PROCESSED_OK +#: LABEL/ID_ABE_LOG_PROCESSED_OK +msgid "The answer was processed correctly." +msgstr "The answer was processed correctly." + +# TRANSLATION +# LABEL/ID_ABE_LOG_ROUTING_FAILED +#: LABEL/ID_ABE_LOG_ROUTING_FAILED +msgid "The case was identified correctly but the routing process has failed." +msgstr "The case was identified correctly but the routing process has failed." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_ALREADY_ROUTED +#: LABEL/ID_ABE_RESPONSE_ALREADY_ROUTED +msgid "Your answer cannot be processed because the case was already routed or is no longer assigned to you." +msgstr "Your answer cannot be processed because the case was already routed or is no longer assigned to you." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED +#: LABEL/ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED +msgid "Your answer cannot be processed, please try again and make sure to keep the subject code untouched." +msgstr "Your answer cannot be processed, please try again and make sure to keep the subject code untouched." + +# TRANSLATION +# LABEL/ID_ABE_RESPONSE_ROUTING_FAILED +#: LABEL/ID_ABE_RESPONSE_ROUTING_FAILED +msgid "Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator." +msgstr "Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator." + # TRANSLATION # LABEL/ID_ABE_RESPONSE_SENT #: LABEL/ID_ABE_RESPONSE_SENT @@ -13625,6 +13691,12 @@ msgstr "Execute a trigger when a case is deleted" msgid "Please press the \"Generate Link\" button." msgstr "Please press the \"Generate Link\" button." +# TRANSLATION +# LABEL/ID_MAFE_660cfca112471f69246e9942f5e8afd1 +#: LABEL/ID_MAFE_660cfca112471f69246e9942f5e8afd1 +msgid "Store email body in" +msgstr "Store email body in" + # TRANSLATION # LABEL/ID_MAFE_66285b36f894a5439af5a98e3e1a36d2 #: LABEL/ID_MAFE_66285b36f894a5439af5a98e3e1a36d2 @@ -14555,6 +14627,12 @@ msgstr "January" msgid "[LABEL/ID_MAFE_86fd9a7abc9f357e7fa206b2d42ec5ba] Destination Path" msgstr "Destination Path" +# TRANSLATION +# LABEL/ID_MAFE_8738321e65db027ee6476c0ab12d8cd5 +#: LABEL/ID_MAFE_8738321e65db027ee6476c0ab12d8cd5 +msgid "Store option in" +msgstr "Store option in" + # TRANSLATION # LABEL/ID_MAFE_87557f11575c0ad78e4e28abedc13b6e #: LABEL/ID_MAFE_87557f11575c0ad78e4e28abedc13b6e @@ -15365,6 +15443,12 @@ msgstr "Properties" msgid "[LABEL/ID_MAFE_9fced129522f128b2445a41fb0b6ef9f] checkbox" msgstr "checkbox" +# TRANSLATION +# LABEL/ID_MAFE_a036226d97d1d0d725d494a1431f322c +#: LABEL/ID_MAFE_a036226d97d1d0d725d494a1431f322c +msgid "Receiver account" +msgstr "Receiver account" + # TRANSLATION # LABEL/ID_MAFE_a05ac4341235111bd2cba5c3c105ba81 #: LABEL/ID_MAFE_a05ac4341235111bd2cba5c3c105ba81 @@ -17915,6 +17999,12 @@ msgstr "Users" msgid "validate" msgstr "validate" +# TRANSLATION +# LABEL/ID_MAFE_fa2b5b7c9bccd35e42cb74042690a091 +#: LABEL/ID_MAFE_fa2b5b7c9bccd35e42cb74042690a091 +msgid "Email response" +msgstr "Email response" + # TRANSLATION # LABEL/ID_MAFE_fa3c608c8fc755543f0d37afd6a42651 #: LABEL/ID_MAFE_fa3c608c8fc755543f0d37afd6a42651 @@ -25961,18 +26051,6 @@ msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini" msgid "The file has not been attached because the extension is not allowed or because the content doesn't correspond." msgstr "The file has not been attached because the extension is not allowed or because the content doesn't correspond." -# TRANSLATION -# LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE -#: LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE -msgid "File size exceeds the allowable limit of {0}" -msgstr "File size exceeds the allowable limit of {0}" - -# TRANSLATION -# LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE -#: LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE -msgid "Invalid file format, please upload a file with one of the following formats {0}" -msgstr "Invalid file format, please upload a file with one of the following formats {0}" - # TRANSLATION # LABEL/ID_UPLOAD_ERR_NO_FILE #: LABEL/ID_UPLOAD_ERR_NO_FILE @@ -26021,6 +26099,18 @@ msgstr "Upload from file" msgid "Upload image" msgstr "Upload image" +# TRANSLATION +# LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE +#: LABEL/ID_UPLOAD_INVALID_DOC_MAX_FILESIZE +msgid "File size exceeds the allowable limit of {0}" +msgstr "File size exceeds the allowable limit of {0}" + +# TRANSLATION +# LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE +#: LABEL/ID_UPLOAD_INVALID_DOC_TYPE_FILE +msgid "Invalid file format, please upload a file with one of the following formats {0}" +msgstr "Invalid file format, please upload a file with one of the following formats {0}" + # TRANSLATION # LABEL/ID_UPLOAD_LANGUAGE #: LABEL/ID_UPLOAD_LANGUAGE diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index a28d0e496..34caa7051 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57085,6 +57085,17 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ABE_FORM_ALREADY_FILLED','en','The form has already been filled and sent.','2017-06-09') , ( 'LABEL','ID_ABE_INFORMATION_SUBMITTED','en','The information was submitted. Thank you.','2017-06-19') , ( 'LABEL','ID_ABE_RESPONSE_SENT','en','The response has already been sent.','2017-06-19') , +( 'LABEL','ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED','en','Your answer cannot be processed, please try again and make sure to keep the subject code untouched.','2018-11-20') , +( 'LABEL','ID_ABE_RESPONSE_ALREADY_ROUTED','en','Your answer cannot be processed because the case was already routed or is no longer assigned to you.','2018-11-20') , +( 'LABEL','ID_ABE_RESPONSE_ROUTING_FAILED','en','Your answer cannot be processed because there is an error in the flow definition, please notify to this issue to the system administrator.','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_ANSWER','en','Answer: {optionLabel}','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_COMMENT','en','Comment: {emailBody}','2018-11-20') , +( 'LABEL','ID_ABE_CASE_NOTE_HEADER','en','{emailAccount} has completed a task from Actions by Email.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_CANNOT_READ','en','The application cannot read the email receiver account.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_PROCESSED_OK','en','The answer was processed correctly.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_CANNOT_BE_IDENTIFIED','en','The case cannot be identified.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_ALREADY_ROUTED','en','The case was identified correctly but it was already routed.','2018-11-20') , +( 'LABEL','ID_ABE_LOG_ROUTING_FAILED','en','The case was identified correctly but the routing process has failed.','2018-11-20') , ( 'LABEL','ID_ACCEPT','en','Accept','2014-01-15') , ( 'LABEL','ID_ACCESS_DENIED','en','Access Denied!','2015-12-03') , ( 'LABEL','ID_ACCOUNT','en','Account','2014-01-15') , diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php new file mode 100644 index 000000000..8fdd862d1 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -0,0 +1,308 @@ +messageResponseError; + } + + /** + * @param string $messageResponseError + */ + public function setMessageResponseError($messageResponseError) + { + $this->messageResponseError = $messageResponseError; + } + + /** + * Read the Action by Email listener inbox looking for new messages + */ + public function actionsByEmailEmailResponse() + { + try { + if (PMLicensedFeatures + ::getSingleton() + ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { + require_once(PATH_DB . config("system.workspace") . PATH_SEP . "/db.php"); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); + define('SYS_SKIN', $arraySystemConfiguration['default_skin']); + + $criteriaAbe = new Criteria(); + $criteriaAbe->add(AbeConfigurationPeer::ABE_TYPE, "RESPONSE"); + $resultAbe = AbeConfigurationPeer::doSelectRS($criteriaAbe); + $resultAbe->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($resultAbe->next()) { + $dataAbe = $resultAbe->getRow(); + $this->getAllEmails($dataAbe); + } + } + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + + /** + * Decrypt password of Email Server + * @param array $emailSetup + * @return mixed|string + */ + private function decryptPassword(array $emailSetup) + { + $pass = isset($emailSetup['MESS_PASSWORD']) ? $emailSetup['MESS_PASSWORD'] : ''; + $passDec = G::decrypt($pass, 'EMAILENCRYPT'); + $auxPass = explode('hash:', $passDec); + if (count($auxPass) > 1) { + if (count($auxPass) == 2) { + $pass = $auxPass[1]; + } else { + array_shift($auxPass); + $pass = implode('', $auxPass); + } + } + return $pass; + } + + /** + * Get all Email of server listener + * @param array $dataAbe + */ + public function getAllEmails(array $dataAbe) + { + try { + $emailServer = new EmailServer(); + $emailSetup = (!is_null(EmailServerPeer::retrieveByPK($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID']))) ? + $emailServer->getEmailServer($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID'], true) : + $emailServer->getEmailServerDefault(); + if (empty($emailSetup)) { + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_CANNOT_READ'), 500)); + } + $mailbox = new Mailbox( + '{'. $emailSetup['MESS_INCOMING_SERVER'] . ':' . $emailSetup['MESS_INCOMING_PORT'] . '/imap/ssl/novalidate-cert}INBOX', + $emailSetup['MESS_ACCOUNT'], + $this->decryptPassword($emailSetup) + ); + + // Read all messages into an array + $mailsIds = $mailbox->searchMailbox('ALL'); + if ($mailsIds) { + $mailsInfo = $mailbox->getMailsInfo($mailsIds); + // Get the first message and save its attachment(s) to disk: + foreach ($mailsIds as $key => $mailsId) { + /** @var IncomingMail $mail */ + $mail = $mailbox->getMail($mailsId); + preg_match("/{(.*)}/", $mail->textPlain, $matches); + if ($matches && $mailsInfo[$key]->seen === 0) { + $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); + if (config("system.workspace") === $dataEmail['workspace']) { + $this->case = $dataEmail; + try { + $appDelegate = new AppDelegation(); + $alreadyRouted = $appDelegate->alreadyRouted($this->case["appUid"], $this->case["delIndex"]); + //Verify if the current case is already routed. + if ($alreadyRouted) { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ALREADY_ROUTED')); + throw (new Exception(G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'), 400)); + } + $this->processABE($this->case, $mail, $dataAbe); + Bootstrap::registerMonolog( + $this->channel, + 100, // DEBUG + G::LoadTranslation('ID_ABE_LOG_PROCESSED_OK'), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } catch (Exception $e) { + $this->sendMessageError( + $this->getMessageResponseError() ? $this->getMessageResponseError() : $e->getMessage(), + $this->case, + $mail, + $emailSetup + ); + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + } + } + } + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + $e->getCode(), + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + } + + /** + * Derivation of the case with the mail information + * @param array $caseInfo + * @param IncomingMail $mail + * @param array $dataAbe + * @throws Exception + */ + public function processABE(array $caseInfo, IncomingMail $mail, array $dataAbe = []) + { + try { + $actionsByEmail = new ActionsByEmail(); + $actionsByEmail->verifyLogin($caseInfo['appUid'], $caseInfo['delIndex']); + + $case = new Cases(); + $caseFieldsABE = $case->loadCase($caseInfo['appUid'], $caseInfo['delIndex']); + + $actionsByEmailCore = new ActionsByEmailCoreClass(); + $actionField = str_replace( + $actionsByEmailCore->getPrefix(), + '', + $dataAbe['ABE_ACTION_FIELD'] + ); + $dataField = []; + $dataField[$actionField] = $caseInfo['fieldValue']; + $actionBodyField = str_replace( + $actionsByEmailCore->getPrefix(), + '', + $dataAbe['ABE_ACTION_BODY_FIELD'] + ); + $textPlain = $mail->textPlain; + $textPlain = substr($textPlain, 0, strpos($textPlain, "/=")); + $dataField[$actionBodyField] = $textPlain; + $caseFieldsABE['APP_DATA'] = array_merge($caseFieldsABE['APP_DATA'], $dataField); + + ChangeLog::getChangeLog() + ->getUsrIdByUsrUid($caseFieldsABE['CURRENT_USER_UID'], true) + ->setSourceId(ChangeLog::FromABE); + + $caseFieldsABE['CURRENT_DYNAFORM'] = ''; + $caseFieldsABE['USER_UID'] = $caseFieldsABE['CURRENT_USER_UID']; + $caseFieldsABE['OBJECT_TYPE'] = ''; + + $case->updateCase($caseInfo['appUid'], $caseFieldsABE); + + try { + $ws = new WsBase(); + $result = $ws->derivateCase( + $caseFieldsABE['CURRENT_USER_UID'], + $caseInfo['appUid'], + $caseInfo['delIndex'], + true + ); + $code = (is_array($result)) ? $result['status_code'] : $result->status_code; + if ($code != 0) { + throw new Exception( + "An error occurred while the application was being processed\n" . + "Error code: " . $result->status_code . "\nError message: " . $result->message + ); + } + } catch (Exception $e) { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ROUTING_FAILED')); + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_ROUTING_FAILED'), 400)); + } + + //Save Cases Notes + if ($dataAbe['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { + $customGrid = unserialize($dataAbe['ABE_CUSTOM_GRID']); + $fieldLabel = null; + foreach ($customGrid as $key => $value) { + if ($value['abe_custom_value'] == $caseInfo['fieldValue']) { + $fieldLabel = $value['abe_custom_label']; + break; + } + } + $appNotes = new AppNotes(); + $noteText = G::LoadTranslation('ID_ABE_CASE_NOTE_HEADER', ['emailAccount' => $mail->toString]) . "\n\n"; + $noteText .= G::LoadTranslation('ID_ABE_CASE_NOTE_ANSWER', ['optionLabel' => $fieldLabel ? $fieldLabel : $caseInfo['fieldValue']]) . "\n\n"; + $noteText .= G::LoadTranslation('ID_ABE_CASE_NOTE_COMMENT', ['emailBody' => $textPlain]); + $noteContent = addslashes($noteText); + $appNotes->postNewNote($caseInfo['appUid'], $caseFieldsABE['APP_DATA']['USER_LOGGED'], $noteContent, false); + } + } catch (Exception $e) { + if ($e->getCode() == 400) { + throw (new Exception($e->getMessage(), $e->getCode())); + } else { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_CANNOT_BE_IDENTIFIED')); + throw (new Exception(G::LoadTranslation('ID_ABE_LOG_CANNOT_BE_IDENTIFIED'), 300)); + } + } + } + + /** + * Send an error message to the sender + * @param string $msgError + * @param array $caseInf + * @param IncomingMail $mail + * @param array $emailSetup + * @return \ProcessMaker\Util\Response|string|\WsResponse + */ + public function sendMessageError($msgError, array $caseInf, IncomingMail $mail, array $emailSetup) + { + $wsBase = new WsBase(); + $result = $wsBase->sendMessage( + $caseInf['appUid'], + $mail->toString, + $mail->fromAddress, + '', + '', + $mail->subject, + 'actionsByEmailErrorReply.html', + ['ACTIONS_BY_EMAIL_ERROR_MESSAGE' => $msgError], + null, + true, + $caseInf['delIndex'], + $emailSetup, + 0 + ); + return $result; + } +} diff --git a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php index 339b5bb27..a1646e6ee 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php @@ -154,6 +154,11 @@ class ActionsByEmail extends Api $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmail.html', $path . 'actionsByEmail.html'); } + if (!file_exists($path . 'actionsByEmailErrorReply.html')) { + $data = array('prf_content' => '', 'prf_filename' => 'actionsByEmailErrorReply.html', 'prf_path' => 'templates'); + $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); + @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmailErrorReply.html', $path . 'actionsByEmailErrorReply.html'); + } } $directory = dir($path); diff --git a/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html b/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html new file mode 100644 index 000000000..c8584c420 --- /dev/null +++ b/workflow/engine/templates/actionsByEmail/actionsByEmailErrorReply.html @@ -0,0 +1,20 @@ + + + + + + + +
ACTIONS BY EMAIL
+
+
+ @#ACTIONS_BY_EMAIL_ERROR_MESSAGE +
+
+
+ This is an automated email, please do not replay to it. +
+ www.processmaker.com +
+
\ No newline at end of file From 46844a38c1ecb21f13f41516331425d15beb1255 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 28 Nov 2018 15:43:46 -0400 Subject: [PATCH 015/100] PMC-79: Email Server does not works --- workflow/engine/templates/emailServer/emailServer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index dfa9e901a..d7976acb9 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -222,8 +222,6 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; - Ext.getCmp("txtIncomingServer").allowBlank = false; - Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; break; case "UPD": @@ -302,6 +300,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = false; } else if (cboEmailEngine === "IMAP") { Ext.getCmp("txtServer").setVisible(true); @@ -327,6 +327,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = false; Ext.getCmp("txtPort").allowBlank = false; + Ext.getCmp("txtIncomingServer").allowBlank = false; + Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; } else { //MAIL @@ -345,6 +347,8 @@ emailServer.application = { Ext.getCmp("txtServer").allowBlank = true; Ext.getCmp("txtPort").allowBlank = true; + Ext.getCmp("txtIncomingServer").allowBlank = true; + Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = true; Ext.getCmp("txtPassword").allowBlank = true; } From 12ad52e0a8688a063b1ee07ab94f8de0a65d8bcf Mon Sep 17 00:00:00 2001 From: ronald Date: Thu, 29 Nov 2018 12:10:35 -0400 Subject: [PATCH 016/100] PMC-82 --- .../classes/ActionsByEmailCoreClass.php | 2 + workflow/engine/classes/SpoolRun.php | 4 +- .../ActionsByEmail/ResponseReader.php | 42 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 166485a06..f1a8ead4e 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -731,11 +731,13 @@ class ActionsByEmailCoreClass extends PMPlugin */ private function getBodyByResponse($fieldValue) { + $abeRequest = $this->getAbeRequest(); $bodyToCrypt = [ 'workspace' => $this->getWorkspace(), 'appUid' => $this->getAppUid(), 'delIndex' => $this->getIndex(), 'fieldValue' => $fieldValue, + 'ABE_REQ_UID' => $abeRequest['ABE_REQ_UID'] ]; $bodyToCrypt = G::json_encode($bodyToCrypt); diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index 56bccc4ec..c736b8b06 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -406,13 +406,14 @@ class SpoolRun switch ($this->config['MESS_ENGINE']) { case 'MAIL': case 'PHPMAILER': - + case 'IMAP': switch ($this->config['MESS_ENGINE']) { case 'MAIL': $oPHPMailer = new PHPMailer(); $oPHPMailer->Mailer = 'mail'; break; + case 'IMAP': case 'PHPMAILER': $oPHPMailer = new PHPMailer(true); $oPHPMailer->Mailer = 'smtp'; @@ -424,6 +425,7 @@ class SpoolRun switch ($this->config['MESS_ENGINE']) { case 'MAIL': break; + case 'IMAP': case 'PHPMAILER': //Posible Options for SMTPSecure are: "", "ssl" or "tls" if (isset($this->config['SMTPSecure']) && preg_match('/^(ssl|tls)$/', $this->config['SMTPSecure'])) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 8fdd862d1..447835910 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -3,6 +3,7 @@ namespace ProcessMaker\BusinessModel\ActionsByEmail; use AbeConfigurationPeer; +use AbeResponses; use ActionsByEmailCoreClass; use AppDelegation; use AppNotes; @@ -220,6 +221,27 @@ class ResponseReader $dataField[$actionBodyField] = $textPlain; $caseFieldsABE['APP_DATA'] = array_merge($caseFieldsABE['APP_DATA'], $dataField); + $dataResponses = []; + $dataResponses['ABE_REQ_UID'] = $caseInfo['ABE_REQ_UID']; + $dataResponses['ABE_RES_CLIENT_IP'] = 'localhost'; + $dataResponses['ABE_RES_DATA'] = serialize($dataField); + $dataResponses['ABE_RES_STATUS'] = 'PENDING'; + $dataResponses['ABE_RES_MESSAGE'] = ''; + + try { + $abeAbeResponsesInstance = new AbeResponses(); + $dataResponses['ABE_RES_UID'] = $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + 300, + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + ChangeLog::getChangeLog() ->getUsrIdByUsrUid($caseFieldsABE['CURRENT_USER_UID'], true) ->setSourceId(ChangeLog::FromABE); @@ -250,6 +272,24 @@ class ResponseReader throw (new Exception(G::LoadTranslation('ID_ABE_LOG_ROUTING_FAILED'), 400)); } + //Update AbeResponses + $dataResponses['ABE_RES_STATUS'] = ($code == 0)? 'SENT' : 'ERROR'; + $dataResponses['ABE_RES_MESSAGE'] = ($code == 0)? '-' : $result->message; + + try { + $abeAbeResponsesInstance = new AbeResponses(); + $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $e) { + Bootstrap::registerMonolog( + $this->channel, + 300, + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } + $dataAbeRequests = loadAbeRequest($caseInfo['ABE_REQ_UID']); //Save Cases Notes if ($dataAbe['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { $customGrid = unserialize($dataAbe['ABE_CUSTOM_GRID']); @@ -267,6 +307,8 @@ class ResponseReader $noteContent = addslashes($noteText); $appNotes->postNewNote($caseInfo['appUid'], $caseFieldsABE['APP_DATA']['USER_LOGGED'], $noteContent, false); } + $dataAbeRequests['ABE_REQ_ANSWERED'] = 1; + $code == 0 ? uploadAbeRequest($dataAbeRequests) : ''; } catch (Exception $e) { if ($e->getCode() == 400) { throw (new Exception($e->getMessage(), $e->getCode())); From 23bd3607619fcba27a5ee65a3262ac9013db4654 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 28 Nov 2018 08:41:32 -0400 Subject: [PATCH 017/100] PMC-75 --- .../translations/english/processmaker.en.po | 6 ++ workflow/engine/data/mysql/insert.sql | 1 + .../BusinessModel/ActionsByEmail.php | 70 ++++++++++--------- 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 2c748fab6..d4cd92303 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -3935,6 +3935,12 @@ msgstr "Case Tracker Properties Saved Successfully" msgid "The case {APP_NUMBER} was reactivated successfully!" msgstr "The case {APP_NUMBER} was reactivated successfully!" +# TRANSLATION +# LABEL/ID_CASE_RESPONSE_NOT_AVAILABLE +#: LABEL/ID_CASE_RESPONSE_NOT_AVAILABLE +msgid "No response available, please review the case information" +msgstr "No response available, please review the case information" + # TRANSLATION # LABEL/ID_CASE_ROUTED_TO #: LABEL/ID_CASE_ROUTED_TO diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 34caa7051..d110898aa 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57463,6 +57463,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ) VALUES ( 'LABEL','ID_CASE_REACTIVATED_SUCCESSFULLY','en','The case {APP_NUMBER} was reactivated successfully!','2014-01-15') , +( 'LABEL','ID_CASE_RESPONSE_NOT_AVAILABLE','en','No response available, please review the case information','2018-03-02') , ( 'LABEL','ID_CASE_ROUTED_TO','en','Case routed to','2017-06-02') , ( 'LABEL','ID_CASE_SCHEDULER','en','Case Scheduler','2014-01-15') , ( 'LABEL','ID_CASE_SCHEDULER_CLASSIC','en','Case Scheduler (classic processes)','2017-10-13') , diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php index 968335963..7764ad001 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php @@ -4,30 +4,26 @@ namespace ProcessMaker\BusinessModel; use AbeConfiguration; use AbeConfigurationPeer; -use AppMessage; use AbeRequests; use AbeRequestsPeer; use AbeResponsesPeer; -use ApplicationPeer; use AppDelegation; use AppDelegationPeer; +use AppMessage; use Criteria; +use DynaformPeer; use EmailServerPeer; use Exception; use G; -use Publisher; -use ProcessMaker\BusinessModel\EmailServer; -use ProcessMaker\Core\System; -use ProcessMaker\Plugins\PluginRegistry; use PmDynaform; use PMLicensedFeatures; -use ProcessPeer; +use ProcessMaker\Core\System; +use ProcessMaker\Plugins\PluginRegistry; +use Publisher; use ResultSet; use SpoolRun; -use Users as ClassUsers; use stdClass; -use UsersPeer; -use TaskPeer; +use Users as ClassUsers; /** * Description of ActionsByEmailService @@ -543,48 +539,54 @@ class ActionsByEmail /** * Get the decision from Actions By Email by BPMN dynaform - * @param array $arrayData + * + * @param array $dataRes * * @return string $message */ public function viewFormBpmn(array $dataRes) { - $_SESSION['CURRENT_DYN_UID'] = trim($dataRes['DYN_UID']); - $configuration['DYN_UID'] = trim($dataRes['DYN_UID']); + $_SESSION['CURRENT_DYN_UID'] = trim($dataRes['DYN_UID']); + $configuration['DYN_UID'] = trim($dataRes['DYN_UID']); $configuration['CURRENT_DYNAFORM'] = trim($dataRes['DYN_UID']); - $configuration['PRO_UID'] = trim($dataRes['PRO_UID']); + $configuration['PRO_UID'] = trim($dataRes['PRO_UID']); $criteriaD = new Criteria(); - $criteriaD->addSelectColumn(\DynaformPeer::DYN_CONTENT); - $criteriaD->addSelectColumn(\DynaformPeer::PRO_UID); - $criteriaD->add(\DynaformPeer::DYN_UID, trim($dataRes['DYN_UID'])); - $resultD = \DynaformPeer::doSelectRS($criteriaD); + $criteriaD->addSelectColumn(DynaformPeer::DYN_CONTENT); + $criteriaD->addSelectColumn(DynaformPeer::PRO_UID); + $criteriaD->add(DynaformPeer::DYN_UID, trim($dataRes['DYN_UID'])); + $resultD = DynaformPeer::doSelectRS($criteriaD); $resultD->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultD->next(); $configuration = $resultD->getRow(); - $field = new \stdClass(); + $field = new stdClass(); + $field->type = ''; + $field->label = ''; + $field->options = []; + $obj = new PmDynaform($configuration); + $message = G::LoadTranslation('ID_CASE_RESPONSE_NOT_AVAILABLE'); if ($dataRes['ABE_RES_DATA'] !== '') { - $value = unserialize($dataRes['ABE_RES_DATA']); - $actionField = str_replace(array('@@','@#','@=','@%','@?','@$'), '', $dataRes['ABE_ACTION_FIELD']); - $variables = G::json_decode($configuration['DYN_CONTENT'], true); + $value = unserialize($dataRes['ABE_RES_DATA']); + $actionField = str_replace(['@@', '@#', '@=', '@%', '@?', '@$'], '', $dataRes['ABE_ACTION_FIELD']); + $variables = G::json_decode($configuration['DYN_CONTENT'], true); if (is_array($value)) { - if(isset($variables['items'][0]['items'])) { + if (isset($variables['items'][0]['items'])) { $fields = $variables['items'][0]['items']; } } else { - if(isset($variables['items'][0]['items'])) { + if (isset($variables['items'][0]['items'])) { $fields = $variables['items'][0]['items']; foreach ($fields as $key => $row) { - foreach($row as $var) { - if(isset($var['variable'])) { + foreach ($row as $var) { + if (isset($var['variable'])) { if ($var['variable'] === $actionField) { $field->label = isset($var['label']) ? $var['label'] : ''; - $field->type = isset($var['type']) ? $var['type'] : ''; + $field->type = isset($var['type']) ? $var['type'] : ''; $values = $var['options']; - foreach ($values as $val){ + foreach ($values as $val) { $field->options[$val['value']] = $val['value']; } } @@ -592,22 +594,22 @@ class ActionsByEmail } } } - $message = ''; + switch ($field->type) { case 'dropdown': case 'radiogroup': case 'radio': - $message .= $field->label . ': '; + $message = $field->label . ': '; $message .= $field->options[$value]; break; case 'yesno': - $message .= $field->label . ': '; - $message .= ($value == 1) ? G::loadTranslation('ID_YES') : G::loadTranslation('ID_NO'); + $message = $field->label . ': '; + $message .= $value == 1 ? G::LoadTranslation('ID_YES') : G::LoadTranslation('ID_NO'); break; case 'checkgroup': case 'checkbox': - $message .= $field->label . ': '; - $message .= ($value == 'On') ? G::loadTranslation('ID_CHECK') : G::loadTranslation('ID_UNCHECK'); + $message = $field->label . ': '; + $message .= $value == 'On' ? G::LoadTranslation('ID_CHECK') : G::LoadTranslation('ID_UNCHECK'); break; } } From a1ce5db16e28cc626f4fef0a3a57d0b78f26a9c7 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 26 Nov 2018 14:18:21 -0400 Subject: [PATCH 018/100] PMC-65 --- workflow/engine/classes/Cases.php | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 125df6d32..00ab4a8b8 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -3545,10 +3545,12 @@ class Cases if ($oPMScript->executedOn() === $oPMScript::AFTER_ROUTING) { $appUid = !empty($fieldsCase['APPLICATION']) ? $fieldsCase['APPLICATION'] : ''; if (!empty($appUid)) { - $lastAppFields = $this->loadCase($appUid)['APP_DATA']; - $fieldsTrigger = array_merge($lastAppFields, $fieldsTrigger); + //Update $fieldsCase with the last appData + $fieldsCase = $this->loadCase($appUid)['APP_DATA']; } } + //Merge the current appData with variables changed + $fieldsCase = array_merge($fieldsCase, $fieldsTrigger); //Register the time execution $this->arrayTriggerExecutionTime[$trigger['TRI_UID']] = $oPMScript->scriptExecutionTime; @@ -3567,16 +3569,9 @@ class Cases ); } /*----------------------------------********---------------------------------*/ - - //The Code Scanner can be interrupt the execution - if (empty($fieldsTrigger)) { - return $fieldsCase; - } - - return $fieldsTrigger; - } else { - return $fieldsCase; } + + return $fieldsCase; } /** From 3993a9c1c3514510f8759bdb6d0b20fafc03f771 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 29 Nov 2018 12:23:57 -0400 Subject: [PATCH 019/100] PMC-71 --- composer.json | 8 +- composer.lock | 852 +++++++++++++++++++++++++++++++------------------- 2 files changed, 542 insertions(+), 318 deletions(-) diff --git a/composer.json b/composer.json index dc34bb592..0d41343b2 100644 --- a/composer.json +++ b/composer.json @@ -31,9 +31,9 @@ "laravel/framework": "5.4.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", - "colosa/pmUI": "release/3.2.4-dev", - "colosa/MichelangeloFE": "release/3.2.4-dev", - "colosa/pmdynaform": "release/3.2.4-dev", + "colosa/pmUI": "release/3.3.1-dev", + "colosa/MichelangeloFE": "release/3.3.1-dev", + "colosa/pmdynaform": "release/3.3.1-dev", "google/apiclient": "1.1.6", "dapphp/securimage": "^3.6", "psr/log": "1.0.0", @@ -52,7 +52,7 @@ }, "require-dev": { "fzaninotto/faker": "^1.7", - "guzzle/guzzle": "~3.1.1", + "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", "lmc/steward": "^2.2", "behat/behat": "^3.3", diff --git a/composer.lock b/composer.lock index 8cf93aa42..527736ee1 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "0a979177bf17fe938d96211e6a03cc21", + "content-hash": "3242f53453d9e9a3d7fdf3a56961ae40", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -29,7 +29,7 @@ "OAuth2": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -111,14 +111,14 @@ }, { "name": "colosa/MichelangeloFE", - "version": "dev-release/3.2.4", + "version": "dev-release/3.3.1", "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "1780c624132004aa13d80882937f61527adafad5" + "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" }, "require": { - "colosa/pmui": "release/3.2.4-dev" + "colosa/pmui": "release/3.3.1-dev" }, "type": "library", "description": "ProcessMaker Michelangelo Front End", @@ -126,15 +126,15 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-05-04T18:33:23+00:00" + "time": "2018-11-29T15:23:08+00:00" }, { "name": "colosa/pmDynaform", - "version": "dev-release/3.2.4", + "version": "dev-release/3.3.1", "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "d22d2d185cac311fb803e0b6891160804091bac1" + "reference": "e4176c9772842904552997702e549035b6ba641d" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,15 +142,15 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-04-23T18:36:59+00:00" + "time": "2018-11-28T17:54:53+00:00" }, { "name": "colosa/pmUI", - "version": "dev-release/3.2.4", + "version": "dev-release/3.3.1", "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "583402fdb1a5da606d02cc25f4a5573c3ff800b2" + "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-04-19T20:17:00+00:00" + "time": "2018-11-16T14:26:15+00:00" }, { "name": "dapphp/securimage", @@ -328,12 +328,12 @@ "source": { "type": "git", "url": "https://github.com/GeSHi/geshi-1.0.git", - "reference": "ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d" + "reference": "5861c58981244ab6ee0dd337f096ff14bf15b1eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d", - "reference": "ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d", + "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/5861c58981244ab6ee0dd337f096ff14bf15b1eb", + "reference": "5861c58981244ab6ee0dd337f096ff14bf15b1eb", "shasum": "" }, "require-dev": { @@ -360,19 +360,19 @@ ], "description": "Generic Syntax Highlighter", "homepage": "http://qbnz.com/highlighter/", - "time": "2018-03-09T20:04:39+00:00" + "time": "2018-10-01T23:49:06+00:00" }, { "name": "google/apiclient", "version": "1.1.6", "source": { "type": "git", - "url": "https://github.com/google/google-api-php-client.git", + "url": "https://github.com/googleapis/google-api-php-client.git", "reference": "a25dc9d5c109ebb02945ba1ff6336cc937c27628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/google-api-php-client/zipball/a25dc9d5c109ebb02945ba1ff6336cc937c27628", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/a25dc9d5c109ebb02945ba1ff6336cc937c27628", "reference": "a25dc9d5c109ebb02945ba1ff6336cc937c27628", "shasum": "" }, @@ -536,28 +536,28 @@ }, { "name": "league/flysystem", - "version": "1.0.45", + "version": "1.0.49", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6" + "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a99f94e63b512d75f851b181afcdf0ee9ebef7e6", - "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", + "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", "shasum": "" }, "require": { + "ext-fileinfo": "*", "php": ">=5.5.9" }, "conflict": { "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "ext-fileinfo": "*", "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^5.7.10" }, "suggest": { "ext-fileinfo": "Required for MimeType", @@ -616,7 +616,7 @@ "sftp", "storage" ], - "time": "2018-05-07T08:44:23+00:00" + "time": "2018-11-23T23:41:29+00:00" }, { "name": "libchart/libchart", @@ -867,16 +867,16 @@ }, { "name": "nesbot/carbon", - "version": "1.27.0", + "version": "1.36.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9" + "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef81c39b67200dcd7401c24363dcac05ac3a4fe9", - "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", "shasum": "" }, "require": { @@ -884,10 +884,20 @@ "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, + "suggest": { + "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", + "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." + }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } + }, "autoload": { "psr-4": { "": "src/" @@ -911,20 +921,20 @@ "datetime", "time" ], - "time": "2018-04-23T09:02:57+00:00" + "time": "2018-11-22T18:23:02+00:00" }, { "name": "paragonie/random_compat", - "version": "v2.0.12", + "version": "v2.0.17", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb" + "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", + "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", "shasum": "" }, "require": { @@ -956,10 +966,11 @@ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ "csprng", + "polyfill", "pseudorandom", "random" ], - "time": "2018-04-04T21:24:14+00:00" + "time": "2018-07-04T16:31:37+00:00" }, { "name": "pdepend/pdepend", @@ -1116,20 +1127,20 @@ }, { "name": "pear/pear-core-minimal", - "version": "v1.10.3", + "version": "v1.10.6", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" + "reference": "052868b244d31f822796e7e9981f62557eb256d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", - "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", + "reference": "052868b244d31f822796e7e9981f62557eb256d4", "shasum": "" }, "require": { - "pear/console_getopt": "~1.4", + "pear/console_getopt": "~1.3", "pear/pear_exception": "~1.0" }, "replace": { @@ -1156,7 +1167,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2017-02-28T16:46:11+00:00" + "time": "2018-08-22T19:28:09+00:00" }, { "name": "pear/pear_exception", @@ -1395,21 +1406,22 @@ }, { "name": "ramsey/uuid", - "version": "3.7.3", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76" + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/44abcdad877d9a46685a3a4d221e3b2c4b87cb76", - "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0", - "php": "^5.4 || ^7.0" + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" @@ -1417,16 +1429,17 @@ "require-dev": { "codeception/aspect-mock": "^1.0 | ~2.0.0", "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", "ircmaxell/random-lib": "^1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", "mockery/mockery": "^0.9.9", "moontoast/math": "^1.1", "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0", + "phpunit/phpunit": "^4.7|^5.0|^6.5", "squizlabs/php_codesniffer": "^2.3" }, "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -1471,7 +1484,7 @@ "identifier", "uuid" ], - "time": "2018-01-20T00:28:24+00:00" + "time": "2018-07-19T23:38:55+00:00" }, { "name": "smarty/smarty", @@ -1526,16 +1539,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.9", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", - "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", "shasum": "" }, "require": { @@ -1576,25 +1589,26 @@ "mail", "mailer" ], - "time": "2018-01-23T07:37:21+00:00" + "time": "2018-07-31T09:26:32+00:00" }, { "name": "symfony/config", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9" + "reference": "8a660daeb65dedbe0b099529f65e61866c055081" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7c2a9d44f4433863e9bca682e7f03609234657f9", - "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9", + "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", + "reference": "8a660daeb65dedbe0b099529f65e61866c055081", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0" + "symfony/filesystem": "~2.8|~3.0|~4.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/dependency-injection": "<3.3", @@ -1639,20 +1653,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/console", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf" + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5b1fdfa8eb93464bcc36c34da39cedffef822cdf", - "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf", + "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", "shasum": "" }, "require": { @@ -1708,20 +1722,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:22:56+00:00" + "time": "2018-11-26T12:48:07+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0" + "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/519a80d7c1d95c6cc0b67f686d15fe27c6910de0", - "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", + "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", "shasum": "" }, "require": { @@ -1747,7 +1761,7 @@ ], "authors": [ { - "name": "Jean-Fran?ois Simon", + "name": "Jean-François Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, { @@ -1761,20 +1775,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/debug", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f" + "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/1b95888cfd996484527cb41e8952d9a5eaf7454f", - "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f", + "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", + "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", "shasum": "" }, "require": { @@ -1817,20 +1831,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-04-30T16:53:52+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3" + "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", - "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", + "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", "shasum": "" }, "require": { @@ -1888,20 +1902,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-04-29T14:04:08+00:00" + "time": "2018-11-20T16:14:23+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8" + "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", + "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", "shasum": "" }, "require": { @@ -1951,24 +1965,25 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-04-06T07:35:25+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { @@ -2000,20 +2015,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-02-22T10:48:49+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/finder", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433" + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/bd14efe8b1fabc4de82bf50dce62f05f9a102433", - "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433", + "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", "shasum": "" }, "require": { @@ -2049,20 +2064,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-04-04T05:07:11+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "edc43b1a50402bb06b5111eb86b275c87a93e373" + "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/edc43b1a50402bb06b5111eb86b275c87a93e373", - "reference": "edc43b1a50402bb06b5111eb86b275c87a93e373", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", "shasum": "" }, "require": { @@ -2103,20 +2118,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:05:13+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "280fcedbcb3dabcc467a9c1734054af61928fe4f" + "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/280fcedbcb3dabcc467a9c1734054af61928fe4f", - "reference": "280fcedbcb3dabcc467a9c1734054af61928fe4f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", + "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", "shasum": "" }, "require": { @@ -2124,11 +2139,12 @@ "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "^3.4.4|^4.0.4" + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", "symfony/var-dumper": "<3.3", "twig/twig": "<1.34|<2.4,>=2" }, @@ -2142,7 +2158,7 @@ "symfony/config": "~2.8|~3.0|~4.0", "symfony/console": "~2.8|~3.0|~4.0", "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.5|^4.0.5", + "symfony/dependency-injection": "^3.4.10|^4.0.10", "symfony/dom-crawler": "~2.8|~3.0|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", @@ -2191,20 +2207,78 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-04-30T19:27:02+00:00" + "time": "2018-11-26T14:04:48+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", + "name": "symfony/polyfill-ctype", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -2216,7 +2290,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2250,30 +2324,30 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.8.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6" + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0", + "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2309,20 +2383,20 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2018-09-21T06:26:08+00:00" }, { "name": "symfony/process", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b" + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4b7d64e852886319e93ddfdecff0d744ab87658b", - "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b", + "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", "shasum": "" }, "require": { @@ -2358,20 +2432,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-04-03T05:22:50+00:00" + "time": "2018-11-20T16:10:26+00:00" }, { "name": "symfony/routing", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9deb375986f5d1f37283d8386716d26985a0f4b6" + "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9deb375986f5d1f37283d8386716d26985a0f4b6", - "reference": "9deb375986f5d1f37283d8386716d26985a0f4b6", + "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", "shasum": "" }, "require": { @@ -2384,7 +2458,6 @@ }, "require-dev": { "doctrine/annotations": "~1.0", - "doctrine/common": "~2.2", "psr/log": "~1.0", "symfony/config": "^3.3.1|~4.0", "symfony/dependency-injection": "~3.3|~4.0", @@ -2436,20 +2509,20 @@ "uri", "url" ], - "time": "2018-04-12T09:01:03+00:00" + "time": "2018-11-26T08:40:22+00:00" }, { "name": "symfony/translation", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c" + "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", - "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", + "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", + "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", "shasum": "" }, "require": { @@ -2504,20 +2577,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:22:56+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73" + "reference": "6867713afe6c50ade2f34ed6435563b065a52145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e6545672d8c9ce70dd472adc2f8b03155a46f73", - "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", + "reference": "6867713afe6c50ade2f34ed6435563b065a52145", "shasum": "" }, "require": { @@ -2573,7 +2646,7 @@ "debug", "dump" ], - "time": "2018-04-26T12:42:15+00:00" + "time": "2018-11-20T16:10:26+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -2624,16 +2697,16 @@ }, { "name": "typo3/class-alias-loader", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/TYPO3/class-alias-loader.git", - "reference": "a9dd295c81ed0b51455644be420ab9210cad688f" + "reference": "4972f9f6c2bad07ab1620b5c9717fa626e9b03b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/a9dd295c81ed0b51455644be420ab9210cad688f", - "reference": "a9dd295c81ed0b51455644be420ab9210cad688f", + "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/4972f9f6c2bad07ab1620b5c9717fa626e9b03b0", + "reference": "4972f9f6c2bad07ab1620b5c9717fa626e9b03b0", "shasum": "" }, "require": { @@ -2646,7 +2719,7 @@ "require-dev": { "composer/composer": "dev-master", "mikey179/vfsstream": "1.4.*@dev", - "phpunit/phpunit": "~4.7.0" + "phpunit/phpunit": "^4.8" }, "type": "composer-plugin", "extra": { @@ -2678,32 +2751,32 @@ "classloader", "composer" ], - "time": "2015-10-06T10:25:44+00:00" + "time": "2018-10-03T12:49:56+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.5-dev" } }, "autoload": { @@ -2713,7 +2786,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause-Attribution" + "BSD-3-Clause" ], "authors": [ { @@ -2728,22 +2801,22 @@ "env", "environment" ], - "time": "2016-09-01T10:05:43+00:00" + "time": "2018-07-29T20:33:41+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.9.5", + "version": "v2.9.6", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89" + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89", - "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89", + "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", "shasum": "" }, "require": { @@ -2785,20 +2858,20 @@ "assertion", "validation" ], - "time": "2018-04-16T11:18:27+00:00" + "time": "2018-06-11T17:15:25+00:00" }, { "name": "behat/behat", - "version": "v3.4.3", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2" + "reference": "e4bce688be0c2029dc1700e46058d86428c63cab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/d60b161bff1b95ec4bb80bb8cb210ccf890314c2", - "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2", + "url": "https://api.github.com/repos/Behat/Behat/zipball/e4bce688be0c2029dc1700e46058d86428c63cab", + "reference": "e4bce688be0c2029dc1700e46058d86428c63cab", "shasum": "" }, "require": { @@ -2808,9 +2881,9 @@ "ext-mbstring": "*", "php": ">=5.3.3", "psr/container": "^1.0", - "symfony/class-loader": "~2.1||~3.0||~4.0", + "symfony/class-loader": "~2.1||~3.0", "symfony/config": "~2.3||~3.0||~4.0", - "symfony/console": "~2.5||~3.0||~4.0", + "symfony/console": "~2.7.40||^2.8.33||~3.3.15||^3.4.3||^4.0.3", "symfony/dependency-injection": "~2.1||~3.0||~4.0", "symfony/event-dispatcher": "~2.1||~3.0||~4.0", "symfony/translation": "~2.3||~3.0||~4.0", @@ -2821,18 +2894,13 @@ "phpunit/phpunit": "^4.8.36|^6.3", "symfony/process": "~2.5|~3.0|~4.0" }, - "suggest": { - "behat/mink-extension": "for integration with Mink testing framework", - "behat/symfony2-extension": "for integration with Symfony2 web framework", - "behat/yii-extension": "for integration with Yii web framework" - }, "bin": [ "bin/behat" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.5.x-dev" } }, "autoload": { @@ -2868,7 +2936,7 @@ "symfony", "testing" ], - "time": "2017-11-27T10:37:56+00:00" + "time": "2018-08-10T18:56:51+00:00" }, { "name": "behat/gherkin", @@ -3224,34 +3292,39 @@ }, { "name": "facebook/webdriver", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "86b5ca2f67173c9d34340845dd690149c886a605" + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/86b5ca2f67173c9d34340845dd690149c886a605", - "reference": "86b5ca2f67173c9d34340845dd690149c886a605", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", "shasum": "" }, "require": { "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", "ext-zip": "*", "php": "^5.6 || ~7.0", "symfony/process": "^2.8 || ^3.1 || ^4.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.0", - "guzzle/guzzle": "^3.4.1", - "php-coveralls/php-coveralls": "^1.0.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", "php-mock/php-mock-phpunit": "^1.1", "phpunit/phpunit": "^5.7", "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", "squizlabs/php_codesniffer": "^2.6", "symfony/var-dumper": "^3.3 || ^4.0" }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, "type": "library", "extra": { "branch-alias": { @@ -3275,7 +3348,7 @@ "selenium", "webdriver" ], - "time": "2017-11-15T11:08:09+00:00" + "time": "2018-05-16T17:37:13+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -3419,16 +3492,16 @@ }, { "name": "fzaninotto/faker", - "version": "v1.7.1", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d" + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d3ed4cc37051c1ca52d22d76b437d14809fc7e0d", - "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", "shasum": "" }, "require": { @@ -3436,7 +3509,7 @@ }, "require-dev": { "ext-intl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", "squizlabs/php_codesniffer": "^1.5" }, "type": "library", @@ -3456,7 +3529,7 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", @@ -3465,7 +3538,7 @@ "faker", "fixtures" ], - "time": "2017-08-15T16:48:10+00:00" + "time": "2018-07-12T10:23:15+00:00" }, { "name": "graphp/algorithms", @@ -3518,70 +3591,47 @@ "time": "2015-03-08T10:12:01+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.1.2", + "name": "guzzlehttp/guzzle", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7901ea7d27373d0cc85eac6f6694e4c2ced90a26" + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7901ea7d27373d0cc85eac6f6694e4c2ced90a26", - "reference": "7901ea7d27373d0cc85eac6f6694e4c2ced90a26", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.2", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "doctrine/common": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "symfony/class-loader": "*", - "zend/zend-cache1": "1.12", - "zend/zend-log1": "1.12", - "zendframework/zend-cache": "2.0.*", - "zendframework/zend-log": "2.0.*" + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "6.3-dev" } }, "autoload": { - "psr-0": { - "Guzzle\\Tests": "tests/", - "Guzzle": "src/" + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -3590,13 +3640,9 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -3607,8 +3653,123 @@ "rest", "web service" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2013-01-28T00:07:40+00:00" + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" }, { "name": "instaclick/php-webdriver", @@ -3671,16 +3832,16 @@ }, { "name": "lmc/steward", - "version": "2.3.3", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/lmc-eu/steward.git", - "reference": "f40db91e7378a373ada4505932d8ba2d8a4ea04a" + "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/f40db91e7378a373ada4505932d8ba2d8a4ea04a", - "reference": "f40db91e7378a373ada4505932d8ba2d8a4ea04a", + "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", + "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", "shasum": "" }, "require": { @@ -3748,7 +3909,7 @@ "testing", "webdriver" ], - "time": "2018-03-12T00:56:44+00:00" + "time": "2018-07-26T22:03:36+00:00" }, { "name": "myclabs/deep-copy", @@ -3866,27 +4027,27 @@ }, { "name": "nette/finder", - "version": "v2.4.1", + "version": "v2.4.2", "source": { "type": "git", "url": "https://github.com/nette/finder.git", - "reference": "4d43a66d072c57d585bf08a3ef68d3587f7e9547" + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/4d43a66d072c57d585bf08a3ef68d3587f7e9547", - "reference": "4d43a66d072c57d585bf08a3ef68d3587f7e9547", + "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", "shasum": "" }, "require": { - "nette/utils": "^2.4 || ~3.0.0", + "nette/utils": "~2.4", "php": ">=5.6.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { - "nette/tester": "^2.0", + "nette/tester": "~2.0", "tracy/tracy": "^2.3" }, "type": "library", @@ -3916,9 +4077,15 @@ "homepage": "https://nette.org/contributors" } ], - "description": "Nette Finder: Files Searching", + "description": "🔍 Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", - "time": "2017-07-10T23:47:08+00:00" + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "time": "2018-06-28T11:49:23+00:00" }, { "name": "nette/reflection", @@ -3986,16 +4153,16 @@ }, { "name": "nette/utils", - "version": "v2.5.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5" + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/183069866dc477fcfbac393ed486aaa6d93d19a5", - "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5", + "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", "shasum": "" }, "require": { @@ -4046,7 +4213,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "? Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", "homepage": "https://nette.org", "keywords": [ "array", @@ -4064,7 +4231,7 @@ "utility", "validation" ], - "time": "2018-05-02T17:16:08+00:00" + "time": "2018-09-18T10:22:16+00:00" }, { "name": "ondram/ci-detector", @@ -4267,16 +4434,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.6", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { @@ -4288,12 +4455,12 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -4326,7 +4493,7 @@ "spy", "stub" ], - "time": "2018-04-18T13:57:24+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4718,6 +4885,56 @@ ], "time": "2017-06-30T09:13:00+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5233,16 +5450,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.2.3", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "4842476c434e375f9d3182ff7b89059583aa8b27" + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4842476c434e375f9d3182ff7b89059583aa8b27", - "reference": "4842476c434e375f9d3182ff7b89059583aa8b27", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", "shasum": "" }, "require": { @@ -5280,20 +5497,20 @@ "phpcs", "standards" ], - "time": "2018-02-20T21:35:23+00:00" + "time": "2018-09-23T23:08:17+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e" + "reference": "420458095cf60025eb0841276717e0da7f75e50e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e", - "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", + "reference": "420458095cf60025eb0841276717e0da7f75e50e", "shasum": "" }, "require": { @@ -5336,20 +5553,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:37:34+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" + "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", - "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", + "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", "shasum": "" }, "require": { @@ -5390,20 +5607,20 @@ "configuration", "options" ], - "time": "2018-01-11T07:56:07+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af" + "reference": "0f43969ab2718de55c1c1158dce046668079788d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/eb17cfa072cab26537ac37e9c4ece6c0361369af", - "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", + "reference": "0f43969ab2718de55c1c1158dce046668079788d", "shasum": "" }, "require": { @@ -5439,24 +5656,25 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-02-17T14:55:25+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.9", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "033cfa61ef06ee0847e056e530201842b6e926c3" + "reference": "291e13d808bec481eab83f301f7bff3e699ef603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/033cfa61ef06ee0847e056e530201842b6e926c3", - "reference": "033cfa61ef06ee0847e056e530201842b6e926c3", + "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", + "reference": "291e13d808bec481eab83f301f7bff3e699ef603", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" @@ -5497,7 +5715,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-04-08T08:21:29+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "webmozart/assert", @@ -5551,55 +5769,61 @@ }, { "name": "wimg/php-compatibility", - "version": "8.1.0", + "version": "9.0.0", "source": { "type": "git", - "url": "https://github.com/wimg/PHPCompatibility.git", - "reference": "4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e" + "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", + "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wimg/PHPCompatibility/zipball/4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e", - "reference": "4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", "shasum": "" }, "require": { "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.2 || ^3.0.2" + "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" }, "conflict": { "squizlabs/php_codesniffer": "2.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0" + "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3" + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." }, "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "PHPCompatibility\\": "PHPCompatibility/" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-or-later" ], "authors": [ + { + "name": "Contributors", + "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" + }, { "name": "Wim Godden", + "homepage": "https://github.com/wimg", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", "role": "lead" } ], - "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP version compatibility.", + "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", "keywords": [ "compatibility", "phpcs", "standards" ], - "time": "2017-12-27T21:58:38+00:00" + "time": "2018-10-07T17:38:02+00:00" } ], "aliases": [], From cfe13968ddf45e0007e5a003149261d2f40eaf50 Mon Sep 17 00:00:00 2001 From: Fabio Guachalla Date: Thu, 6 Dec 2018 08:34:26 -0400 Subject: [PATCH 020/100] PMC-107:Unable to import processes with extension pmx2 (granular) --- config/customMimeTypes.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/customMimeTypes.php b/config/customMimeTypes.php index c78f3e0fa..45d063951 100644 --- a/config/customMimeTypes.php +++ b/config/customMimeTypes.php @@ -1,9 +1,9 @@ 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'pm' => 'text/plain', 'pmt' => 'text/plain', - 'pmx' => 'application/xml', + 'pmx' => ['application/xml', 'text/xml', 'text/html'], + 'pmx2' => ['application/xml', 'text/xml', 'text/html'], 'po' => 'text/x-po', 'pdf' => 'application/pdf', 'png' => 'image/png', From 420e00acca3050d5fdb27a782eb10b7cd5b00909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 10 Dec 2018 13:05:28 -0400 Subject: [PATCH 021/100] PMC-191 --- workflow/engine/classes/Processes.php | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index c81813e60..b826d445f 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -1994,6 +1994,10 @@ class Processes $criteria->add(InputDocumentPeer::INP_DOC_MAX_FILESIZE, $row['INP_DOC_MAX_FILESIZE']); $criteria->add(InputDocumentPeer::INP_DOC_MAX_FILESIZE_UNIT, $row['INP_DOC_MAX_FILESIZE_UNIT']); BasePeer::doInsert($criteria, $con); + + //Insert in CONTENT + $labels = ['INP_DOC_TITLE' => $row['INP_DOC_TITLE'], 'INP_DOC_DESCRIPTION' => $row['INP_DOC_DESCRIPTION']]; + $this->insertToContentTable($con, $labels, $row['INP_DOC_UID'], SYS_LANG); } $con->commit(); } catch (Exception $e) { @@ -2178,6 +2182,13 @@ class Processes $criteria->add(OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS, $row['OUT_DOC_PDF_SECURITY_PERMISSIONS']); $criteria->add(OutputDocumentPeer::OUT_DOC_OPEN_TYPE, $row['OUT_DOC_OPEN_TYPE']); BasePeer::doInsert($criteria, $con); + + //Insert in CONTENT + $labels = ['OUT_DOC_TITLE' => $row['OUT_DOC_TITLE'], + 'OUT_DOC_DESCRIPTION' => $row['OUT_DOC_DESCRIPTION'], + 'OUT_DOC_FILENAME' => $row['OUT_DOC_FILENAME'], + 'OUT_DOC_TEMPLATE' => $row['OUT_DOC_TEMPLATE']]; + $this->insertToContentTable($con, $labels, $row['OUT_DOC_UID'], SYS_LANG); } $con->commit(); } catch (Exception $e) { @@ -3104,6 +3115,10 @@ class Processes $criteria->add(DynaformPeer::DYN_VERSION, $row['DYN_VERSION']); $criteria->add(DynaformPeer::DYN_UPDATE_DATE, $row['DYN_UPDATE_DATE']); BasePeer::doInsert($criteria, $con); + + //Insert in CONTENT + $labels = ['DYN_TITLE' => $row['DYN_TITLE'], 'DYN_DESCRIPTION' => $row['DYN_DESCRIPTION']]; + $this->insertToContentTable($con, $labels, $row['DYN_UID'], SYS_LANG); } $con->commit(); } catch (Exception $e) { @@ -3249,6 +3264,10 @@ class Processes $criteria->add(TriggersPeer::TRI_WEBBOT, $row['TRI_WEBBOT']); $criteria->add(TriggersPeer::TRI_PARAM, $row['TRI_PARAM']); BasePeer::doInsert($criteria, $con); + + //Insert in CONTENT + $labels = ['TRI_TITLE' => $row['TRI_TITLE'], 'TRI_DESCRIPTION' => $row['TRI_DESCRIPTION']]; + $this->insertToContentTable($con, $labels, $row['TRI_UID'], SYS_LANG); } $con->commit(); } catch (Exception $e) { @@ -4050,6 +4069,10 @@ class Processes $criteria->add(GroupwfPeer::GRP_LDAP_DN, $row['GRP_LDAP_DN']); $criteria->add(GroupwfPeer::GRP_UX, $row['GRP_UX']); BasePeer::doInsert($criteria, $con); + + //Insert in CONTENT + $labels = ['GRP_TITLE' => $row['GRP_TITLE']]; + $this->insertToContentTable($con, $labels, $row['GRP_UID'], SYS_LANG); } $con->commit(); } catch (Exception $e) { @@ -6375,4 +6398,38 @@ class Processes $proTitle = substr($proTitle, 0, strlen($proTitle) - $excess); return $proTitle; } + + /** + * Delete, insert and update labels in CONTENT related to a process element + * + * @param object $connection + * @param array $conCategories + * @param string $conId + * @param string $conLang + * @param string $conParent + */ + private function insertToContentTable($connection, array $conCategories, $conId, $conLang, $conParent = '') { + //Prepare to delete labels related in CONTENT + $criteria = new Criteria(ContentPeer::DATABASE_NAME); + $criteria->addSelectColumn('*'); + $criteria->add(ContentPeer::CON_CATEGORY, $conCategories, Criteria::IN); + $criteria->add(ContentPeer::CON_ID, $conId); + $criteria->add(ContentPeer::CON_LANG, $conLang); + $criteria->add(ContentPeer::CON_PARENT, $conParent); + BasePeer::doDelete($criteria, $connection); + + foreach ($conCategories as $conCategory => $conValue) { + //Prepare the insert label in CONTENT + $criteria = new Criteria(ContentPeer::DATABASE_NAME); + $criteria->add(ContentPeer::CON_CATEGORY, $conCategory); + $criteria->add(ContentPeer::CON_ID, $conId); + $criteria->add(ContentPeer::CON_LANG, $conLang); + $criteria->add(ContentPeer::CON_VALUE, $conValue); + $criteria->add(ContentPeer::CON_PARENT, $conParent); + BasePeer::doInsert($criteria, $connection); + + //Updating all related labels in CONTENT + Content::updateEqualValue($conCategory, $conParent, $conId, $conValue); + } + } } From 12d8b41465028a2326e51303e5590fc6c190a398 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 11 Dec 2018 07:48:44 -0400 Subject: [PATCH 022/100] PMC-183 --- workflow/engine/methods/login/authentication.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 7f4770c7e..5058e0950 100644 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -317,12 +317,14 @@ try { } $userPropertyInfo = $userProperty->loadOrCreateIfNotExists($_SESSION['USER_LOGGED'], array('USR_PASSWORD_HISTORY' => serialize(array(G::encryptOld($pwd))))); + //Get the errors in the password $errorInPassword = $userProperty->validatePassword( $_POST['form']['USR_PASSWORD'], $userPropertyInfo['USR_LAST_UPDATE_DATE'], $userPropertyInfo['USR_LOGGED_NEXT_TIME'] ); - + //Get the policies enabled + $policiesInPassword = $userProperty->validatePassword('', date('Y-m-d'), $userPropertyInfo['USR_LOGGED_NEXT_TIME'], true); //Enable change password from GAP if (!isset($enableChangePasswordAfterNextLogin)) { $enableChangePasswordAfterNextLogin = true; @@ -333,14 +335,13 @@ try { define('NO_DISPLAY_USERNAME', 1); } //We will to get the message for the login - $messPassword = []; - $policySection = $userProperty->getMessageValidatePassword($errorInPassword, false); + $messPassword = $policySection = $userProperty->getMessageValidatePassword($policiesInPassword, false); $changePassword = ''; if (array_search('ID_PPP_CHANGE_PASSWORD_AFTER_NEXT_LOGIN', $errorInPassword)) { $changePassword .= G::LoadTranslation('ID_PPP_CHANGE_PASSWORD_AFTER_NEXT_LOGIN') . '

'; } - $messPassword['DESCRIPTION'] = $changePassword . $policySection['DESCRIPTION'] . '
'; + $messPassword['DESCRIPTION'] = $changePassword . $policySection['DESCRIPTION'] . ''; $G_PUBLISH = new Publisher; $version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); $version = isset($version[0]) ? intval($version[0]) : 0; From a8213432ae318e2ae6155d5abc872ee5de954e68 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 13 Dec 2018 14:42:05 -0400 Subject: [PATCH 023/100] PMC-235 --- gulliver/system/class.g.php | 2 +- workflow/engine/controllers/adminProxy.php | 2 +- workflow/engine/controllers/pmTablesProxy.php | 2 +- workflow/engine/methods/appFolder/appFolderAjax.php | 2 +- workflow/engine/methods/enterprise/addonsStoreAction.php | 2 +- workflow/engine/methods/enterprise/pluginsImportFile.php | 2 +- workflow/engine/methods/processes/processes_Import_Ajax.php | 2 +- workflow/engine/methods/processes/processes_doUpload.php | 2 +- workflow/engine/methods/setup/languages_Import.php | 2 +- workflow/engine/methods/setup/pluginsImportFile.php | 2 +- workflow/engine/methods/setup/skin_Ajax.php | 2 +- .../src/ProcessMaker/BusinessModel/Cases/InputDocument.php | 2 +- .../src/ProcessMaker/Validation/ValidationUploadedFiles.php | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 5b63e720e..1ed4a8568 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5490,7 +5490,7 @@ class G public static function verifyInputDocExtension($InpDocAllowedFiles, $fileName, $filesTmpName) { $error = null; - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) use(&$error) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) use(&$error) { $error = new stdclass(); $error->status = false; $error->message = $validator->getMessage(); diff --git a/workflow/engine/controllers/adminProxy.php b/workflow/engine/controllers/adminProxy.php index 4809054bc..26125e591 100644 --- a/workflow/engine/controllers/adminProxy.php +++ b/workflow/engine/controllers/adminProxy.php @@ -1026,7 +1026,7 @@ class adminProxy extends HttpProxyController */ public function uploadImage() { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { echo G::json_encode([ 'success' => true, 'failed' => true, diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 798271ccd..4ef2703b6 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -725,7 +725,7 @@ class pmTablesProxy extends HttpProxyController } try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new ExceptionRestApi($validator->getMessage()); }); $result = new stdClass(); diff --git a/workflow/engine/methods/appFolder/appFolderAjax.php b/workflow/engine/methods/appFolder/appFolderAjax.php index 33072d250..e7ef06ae5 100644 --- a/workflow/engine/methods/appFolder/appFolderAjax.php +++ b/workflow/engine/methods/appFolder/appFolderAjax.php @@ -1446,7 +1446,7 @@ function checkTree($uidOriginFolder, $uidNewFolder) */ function uploadExternalDocument() { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { $response = [ 'error' => $validator->getMessage(), 'message' => $validator->getMessage(), diff --git a/workflow/engine/methods/enterprise/addonsStoreAction.php b/workflow/engine/methods/enterprise/addonsStoreAction.php index 05ff152dd..bd66c230c 100644 --- a/workflow/engine/methods/enterprise/addonsStoreAction.php +++ b/workflow/engine/methods/enterprise/addonsStoreAction.php @@ -18,7 +18,7 @@ function runBgProcessmaker($task, $log) } try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new ExceptionRestApi($validator->getMessage()); }); if (isset($_REQUEST["action"])) { diff --git a/workflow/engine/methods/enterprise/pluginsImportFile.php b/workflow/engine/methods/enterprise/pluginsImportFile.php index 64939795f..627a66672 100644 --- a/workflow/engine/methods/enterprise/pluginsImportFile.php +++ b/workflow/engine/methods/enterprise/pluginsImportFile.php @@ -36,7 +36,7 @@ $response = array(); $status = 1; try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new Exception($validator->getMessage()); }); diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index 0f724bc58..8804289aa 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -25,7 +25,7 @@ use \ProcessMaker\Importer\XmlImporter; use ProcessMaker\Validation\ValidationUploadedFiles; -ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { +ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { echo G::json_encode([ 'status' => 'ERROR', 'success' => true, diff --git a/workflow/engine/methods/processes/processes_doUpload.php b/workflow/engine/methods/processes/processes_doUpload.php index db0077ef9..f8dc3b0d5 100644 --- a/workflow/engine/methods/processes/processes_doUpload.php +++ b/workflow/engine/methods/processes/processes_doUpload.php @@ -27,7 +27,7 @@ if ($RBAC->userCanAccess('PM_FACTORY') == 1) { } } - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { $response = [ 'result' => 0, 'msg' => $validator->getMessage() diff --git a/workflow/engine/methods/setup/languages_Import.php b/workflow/engine/methods/setup/languages_Import.php index 1a1f3fa55..757a692f3 100644 --- a/workflow/engine/methods/setup/languages_Import.php +++ b/workflow/engine/methods/setup/languages_Import.php @@ -26,7 +26,7 @@ if ($access != 1) { $result = new stdClass(); try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new Exception($validator->getMessage()); }); //if the xmlform path is writeable diff --git a/workflow/engine/methods/setup/pluginsImportFile.php b/workflow/engine/methods/setup/pluginsImportFile.php index 8ddce45fa..79a051d5f 100644 --- a/workflow/engine/methods/setup/pluginsImportFile.php +++ b/workflow/engine/methods/setup/pluginsImportFile.php @@ -32,7 +32,7 @@ global $RBAC; $RBAC->requirePermissions('PM_SETUP_ADVANCE'); try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new Exception($validator->getMessage()); }); //load the variables diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index ad47b31bb..36486679e 100644 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -200,7 +200,7 @@ function newSkin ($baseSkin = 'classic') function importSkin () { try { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { throw new Exception($validator->getMessage()); }); if (! isset( $_FILES['uploadedFile'] )) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php index 1b73cb143..a2f76f27c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php @@ -937,7 +937,7 @@ class InputDocument */ public function uploadFileCase($files, $caseInstance, $aData, $userUid, $appUid, $delIndex) { - ValidationUploadedFiles::getValidationUploadedFiles()->dispach(function($validator) { + ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) { G::SendMessageText($validator->getMessage(), "ERROR"); $url = explode("sys" . config("system.workspace"), $_SERVER['HTTP_REFERER']); G::header("location: " . "/sys" . config("system.workspace") . $url[1]); diff --git a/workflow/engine/src/ProcessMaker/Validation/ValidationUploadedFiles.php b/workflow/engine/src/ProcessMaker/Validation/ValidationUploadedFiles.php index 42b11989b..ccd5cc6f1 100644 --- a/workflow/engine/src/ProcessMaker/Validation/ValidationUploadedFiles.php +++ b/workflow/engine/src/ProcessMaker/Validation/ValidationUploadedFiles.php @@ -216,7 +216,7 @@ class ValidationUploadedFiles * @param function $callback * @return $this */ - public function dispach($callback) + public function dispatch($callback) { if (!empty($this->fails[0])) { if (!empty($callback) && is_callable($callback)) { From 633ef25a3e68cbe8ac4a41fc3e0d6b17a23535f5 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 14 Dec 2018 08:12:34 -0400 Subject: [PATCH 024/100] PMC-314 --- workflow/engine/classes/Processes.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index b826d445f..06d9d7606 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -1029,7 +1029,7 @@ class Processes $oData->process['PRO_DYNAFORMS']['PROCESS'] = ''; } - if ($oData->process['PRO_DYNAFORMS']['PROCESS'] != '') { + if (!empty($oData->process['PRO_DYNAFORMS']['PROCESS']) && !empty($map[$oData->process['PRO_DYNAFORMS']['PROCESS']])) { $oData->process['PRO_DYNAFORMS']['PROCESS'] = $map[$oData->process['PRO_DYNAFORMS']['PROCESS']]; } @@ -1996,7 +1996,10 @@ class Processes BasePeer::doInsert($criteria, $con); //Insert in CONTENT - $labels = ['INP_DOC_TITLE' => $row['INP_DOC_TITLE'], 'INP_DOC_DESCRIPTION' => $row['INP_DOC_DESCRIPTION']]; + $labels = [ + 'INP_DOC_TITLE' => $row['INP_DOC_TITLE'], + 'INP_DOC_DESCRIPTION' => !empty($row['INP_DOC_DESCRIPTION']) ? $row['INP_DOC_DESCRIPTION'] : '' + ]; $this->insertToContentTable($con, $labels, $row['INP_DOC_UID'], SYS_LANG); } $con->commit(); @@ -2185,7 +2188,7 @@ class Processes //Insert in CONTENT $labels = ['OUT_DOC_TITLE' => $row['OUT_DOC_TITLE'], - 'OUT_DOC_DESCRIPTION' => $row['OUT_DOC_DESCRIPTION'], + 'OUT_DOC_DESCRIPTION' => !empty($row['OUT_DOC_DESCRIPTION']) ? $row['OUT_DOC_DESCRIPTION'] : '', 'OUT_DOC_FILENAME' => $row['OUT_DOC_FILENAME'], 'OUT_DOC_TEMPLATE' => $row['OUT_DOC_TEMPLATE']]; $this->insertToContentTable($con, $labels, $row['OUT_DOC_UID'], SYS_LANG); @@ -3117,7 +3120,10 @@ class Processes BasePeer::doInsert($criteria, $con); //Insert in CONTENT - $labels = ['DYN_TITLE' => $row['DYN_TITLE'], 'DYN_DESCRIPTION' => $row['DYN_DESCRIPTION']]; + $labels = [ + 'DYN_TITLE' => $row['DYN_TITLE'], + 'DYN_DESCRIPTION' => !empty($row['DYN_DESCRIPTION']) ? $row['DYN_DESCRIPTION'] : '' + ]; $this->insertToContentTable($con, $labels, $row['DYN_UID'], SYS_LANG); } $con->commit(); @@ -3266,7 +3272,10 @@ class Processes BasePeer::doInsert($criteria, $con); //Insert in CONTENT - $labels = ['TRI_TITLE' => $row['TRI_TITLE'], 'TRI_DESCRIPTION' => $row['TRI_DESCRIPTION']]; + $labels = [ + 'TRI_TITLE' => $row['TRI_TITLE'], + 'TRI_DESCRIPTION' => !empty($row['TRI_DESCRIPTION']) ? $row['TRI_DESCRIPTION'] : '' + ]; $this->insertToContentTable($con, $labels, $row['TRI_UID'], SYS_LANG); } $con->commit(); From 6cefe5bdd1a9a20f33e1d250508b1b333c72920f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 13 Dec 2018 16:38:32 -0400 Subject: [PATCH 025/100] PMC-201 --- config/customMimeTypes.php | 470 +++++++++++++++++++++++++++++++++++-- 1 file changed, 451 insertions(+), 19 deletions(-) diff --git a/config/customMimeTypes.php b/config/customMimeTypes.php index 45d063951..540d9d63a 100644 --- a/config/customMimeTypes.php +++ b/config/customMimeTypes.php @@ -5,33 +5,465 @@ * this affects the whole application globally. * * https://www.iana.org/assignments/media-types/media-types.xml + * https://www.sitepoint.com/mime-types-complete-list/ */ return [ - 'dat' => 'text/plain', + '3dm' => 'x-world/x-3dmf', + '3dmf' => 'x-world/x-3dmf', + 'a' => 'application/octet-stream', + 'aab' => 'application/x-authorware-bin', + 'aam' => 'application/x-authorware-map', + 'aas' => 'application/x-authorware-seg', + 'abc' => 'text/vnd.abc', + 'acgi' => 'text/html', + 'afl' => 'video/animaflex', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aim' => 'application/x-aim', + 'aip' => 'text/x-audiosoft-intra', + 'ani' => 'application/x-navi-animation', + 'aos' => 'application/x-nokia-9000-communicator-add-on-software', + 'aps' => 'application/mime', + 'arc' => 'application/octet-stream', + 'arj' => 'application/octet-stream', + 'art' => 'image/x-jg', + 'asf' => 'video/x-ms-asf', + 'asm' => 'text/x-asm', + 'asp' => 'text/asp', + 'asx' => 'video/x-ms-asf-plugin', + 'au' => 'audio/x-au', + 'avi' => 'video/x-msvideo', + 'avs' => 'video/avs-video', + 'bcpio' => 'application/x-bcpio', + 'bin' => 'application/x-macbinary', + 'bm' => 'image/bmp', + 'bmp' => 'image/x-windows-bmp', + 'boo' => 'application/book', + 'book' => 'application/book', + 'boz' => 'application/x-bzip2', + 'bsh' => 'application/x-bsh', + 'bz' => 'application/x-bzip', + 'bz2' => 'application/x-bzip2', + 'c' => 'text/x-c', + 'c++' => 'text/plain', + 'cat' => 'application/vnd.ms-pki.seccat', + 'cc' => 'text/x-c', + 'ccad' => 'application/clariscad', + 'cco' => 'application/x-cocoa', + 'cdf' => 'application/x-netcdf', + 'cer' => 'application/x-x509-ca-cert', + 'cha' => 'application/x-chat', + 'chat' => 'application/x-chat', + 'class' => 'application/x-java-class', + 'com' => 'text/plain', + 'conf' => 'text/plain', + 'cpio' => 'application/x-cpio', + 'cpp' => 'text/x-c', + 'cpt' => 'application/x-cpt', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-user-cert', + 'csh' => 'text/x-script.csh', + 'css' => 'text/css', + 'cxx' => 'text/plain', + 'dcr' => 'application/x-director', + 'deepv' => 'application/x-deepv', + 'def' => 'text/plain', + 'der' => 'application/x-x509-ca-cert', + 'dif' => 'video/x-dv', + 'dir' => 'application/x-director', + 'dl' => 'video/x-dl', 'doc' => ['application/msword', 'text/html'], - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'exe' => ['application/x-msdownload', 'application/x-dosexec'], + 'docx' => 'application/octet-stream', + 'dot' => 'application/msword', + 'dp' => 'application/commonground', + 'drw' => 'application/drafting', + 'dump' => 'application/octet-stream', + 'dv' => 'video/x-dv', + 'dvi' => 'application/x-dvi', + 'dwf' => 'model/vnd.dwf', + 'dwg' => 'image/x-dwg', + 'dxf' => 'image/x-dwg', + 'dxr' => 'application/x-director', + 'el' => 'text/x-script.elisp', + 'elc' => 'application/x-elc', + 'env' => 'application/x-envoy', + 'eps' => 'application/postscript', + 'es' => 'application/x-esrehber', + 'etx' => 'text/x-setext', + 'evy' => 'application/x-envoy', + 'exe' => ['application/x-dosexec', 'application/octet-stream'], + 'f' => 'text/x-fortran', + 'f77' => 'text/x-fortran', + 'f90' => 'text/x-fortran', + 'fdf' => 'application/vnd.fdf', + 'fif' => 'image/fif', + 'fli' => 'video/x-fli', + 'flo' => 'image/florian', + 'flx' => 'text/vnd.fmi.flexstor', + 'fmf' => 'video/x-atomic3d-feature', + 'for' => 'text/x-fortran', + 'fpx' => 'image/vnd.net-fpx', + 'frl' => 'application/freeloader', + 'funk' => 'audio/make', + 'g' => 'text/plain', + 'g3' => 'image/g3fax', 'gif' => 'image/gif', + 'gl' => 'video/x-gl', + 'gsd' => 'audio/x-gsm', + 'gsm' => 'audio/x-gsm', + 'gsp' => 'application/x-gsp', + 'gss' => 'application/x-gss', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'gzip' => 'multipart/x-gzip', + 'h' => 'text/x-h', + 'hdf' => 'application/x-hdf', + 'help' => 'application/x-helpfile', + 'hgl' => 'application/vnd.hp-hpgl', + 'hh' => 'text/x-h', + 'hlb' => 'text/x-script', + 'hlp' => 'application/x-winhelp', + 'hpg' => 'application/vnd.hp-hpgl', + 'hpgl' => 'application/vnd.hp-hpgl', + 'hqx' => 'application/x-mac-binhex40', + 'hta' => 'application/hta', + 'htc' => 'text/x-component', 'htm' => 'text/html', 'html' => 'text/html', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'ppt' => 'application/vnd.ms-office', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'pm' => 'text/plain', + 'htmls' => 'text/html', + 'htt' => 'text/webviewhtml', + 'htx' => 'text/html', + 'ice' => 'x-conference/x-cooltalk', + 'ico' => 'image/x-icon', + 'idc' => 'text/plain', + 'ief' => 'image/ief', + 'iefs' => 'image/ief', + 'iges' => 'model/iges', + 'igs' => 'model/iges', + 'ima' => 'application/x-ima', + 'imap' => 'application/x-httpd-imap', + 'inf' => 'application/inf', + 'ins' => 'application/x-internett-signup', + 'ip' => 'application/x-ip2', + 'isu' => 'video/x-isvideo', + 'it' => 'audio/it', + 'iv' => 'application/x-inventor', + 'ivr' => 'i-world/i-vrml', + 'ivy' => 'application/x-livescreen', + 'jam' => 'audio/x-jam', + 'jav' => 'text/x-java-source', + 'java' => 'text/x-java-source', + 'jcm' => 'application/x-java-commerce', + 'jfif' => 'image/pjpeg', + 'jfif-tbnl' => 'image/jpeg', + 'jpe' => 'image/pjpeg', + 'jpeg' => 'image/pjpeg', + 'jpg' => ['image/pjpeg', 'image/jpeg'], + 'jps' => 'image/x-jps', + 'js' => 'text/ecmascript', + 'jut' => 'image/jutvision', + 'kar' => 'music/x-karaoke', + 'ksh' => 'text/x-script.ksh', + 'la' => 'audio/x-nspaudio', + 'lam' => 'audio/x-liveaudio', + 'latex' => 'application/x-latex', + 'lha' => 'application/x-lha', + 'lhx' => 'application/octet-stream', + 'list' => 'text/plain', + 'lma' => 'audio/x-nspaudio', + 'log' => 'text/plain', + 'lsp' => 'text/x-script.lisp', + 'lst' => 'text/plain', + 'lsx' => 'text/x-la-asf', + 'ltx' => 'application/x-latex', + 'lzh' => 'application/x-lzh', + 'lzx' => 'application/x-lzx', + 'm' => 'text/x-m', + 'm1v' => 'video/mpeg', + 'm2a' => 'audio/mpeg', + 'm2v' => 'video/mpeg', + 'm3u' => 'audio/x-mpequrl', + 'man' => 'application/x-troff-man', + 'map' => 'application/x-navimap', + 'mar' => 'text/plain', + 'mbd' => 'application/mbedlet', + 'mc$' => 'application/x-magic-cap-package-1.0', + 'mcd' => 'application/x-mathcad', + 'mcf' => 'text/mcf', + 'mcp' => 'application/netmc', + 'me' => 'application/x-troff-me', + 'mht' => 'message/rfc822', + 'mhtml' => 'message/rfc822', + 'mid' => 'x-music/x-midi', + 'midi' => 'x-music/x-midi', + 'mif' => 'application/x-mif', + 'mime' => 'www/mime', + 'mjf' => 'audio/x-vnd.audioexplosion.mjuicemediafile', + 'mjpg' => 'video/x-motion-jpeg', + 'mm' => 'application/x-meme', + 'mme' => 'application/base64', + 'mod' => 'audio/x-mod', + 'moov' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'video/x-mpeq2a', + 'mp3' => ['video/x-mpeg', 'audio/mpeg'], + 'mpa' => 'video/mpeg', + 'mpc' => 'application/x-project', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpga' => 'audio/mpeg', + 'mpp' => 'application/vnd.ms-project', + 'mpt' => 'application/x-project', + 'mpv' => 'application/x-project', + 'mpx' => 'application/x-project', + 'mrc' => 'application/marc', + 'ms' => 'application/x-troff-ms', + 'mv' => 'video/x-sgi-movie', + 'my' => 'audio/make', + 'mzz' => 'application/x-vnd.audioexplosion.mzz', + 'nap' => 'image/naplps', + 'naplps' => 'image/naplps', + 'nc' => 'application/x-netcdf', + 'ncm' => 'application/vnd.nokia.Something is wronguration-message', + 'nif' => 'image/x-niff', + 'niff' => 'image/x-niff', + 'nix' => 'application/x-mix-transfer', + 'nsc' => 'application/x-conference', + 'nvd' => 'application/x-navidoc', + 'o' => 'application/octet-stream', + 'oda' => 'application/oda', + 'omc' => 'application/x-omc', + 'omcd' => 'application/x-omcdatamaker', + 'omcr' => 'application/x-omcregerator', + 'p' => 'text/x-pascal', + 'p10' => 'application/x-pkcs10', + 'p12' => 'application/x-pkcs12', + 'p7a' => 'application/x-pkcs7-signature', + 'p7c' => 'application/x-pkcs7-mime', + 'p7m' => 'application/x-pkcs7-mime', + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'part' => 'application/pro_eng', + 'pas' => 'text/pascal', + 'pbm' => 'image/x-portable-bitmap', + 'pcl' => 'application/x-pcl', + 'pct' => 'image/x-pict', + 'pcx' => 'image/x-pcx', + 'pdb' => 'chemical/x-pdb', + 'pdf' => 'application/pdf', + 'pfunk' => 'audio/make.my.funk', + 'pgm' => 'image/x-portable-greymap', + 'php' => 'text/x-php', + 'pic' => 'image/pict', + 'pict' => 'image/pict', + 'pkg' => 'application/x-newton-compatible-pkg', + 'pko' => 'application/vnd.ms-pki.pko', + 'pl' => 'text/x-script.perl', + 'plx' => 'application/x-pixclscript', + 'pm' => 'text/x-script.perl-module', + 'pm4' => 'application/x-pagemaker', + 'pm5' => 'application/x-pagemaker', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'pot' => 'application/vnd.ms-powerpoint', + 'pov' => 'model/x-pov', + 'ppa' => 'application/vnd.ms-powerpoint', + 'ppm' => 'image/x-portable-pixmap', + 'pps' => 'application/vnd.ms-powerpoint', + 'ppt' => ['application/x-mspowerpoint','application/vnd.ms-office'], + 'ppz' => 'application/mspowerpoint', + 'pre' => 'application/x-freelance', + 'prt' => 'application/pro_eng', + 'ps' => 'application/postscript', + 'psd' => 'application/octet-stream', + 'pvu' => 'paleovu/x-pv', + 'pwz' => 'application/vnd.ms-powerpoint', + 'py' => 'text/x-script.phyton', + 'pyc' => 'application/x-bytecode.python', + 'qcp' => 'audio/vnd.qcelp', + 'qd3' => 'x-world/x-3dmf', + 'qd3d' => 'x-world/x-3dmf', + 'qif' => 'image/x-quicktime', + 'qt' => 'video/quicktime', + 'qtc' => 'video/x-qtc', + 'qti' => 'image/x-quicktime', + 'qtif' => 'image/x-quicktime', + 'ra' => 'audio/x-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'ras' => 'image/x-cmu-raster', + 'rast' => 'image/cmu-raster', + 'rexx' => 'text/x-script.rexx', + 'rf' => 'image/vnd.rn-realflash', + 'rgb' => 'image/x-rgb', + 'rm' => 'audio/x-pn-realaudio', + 'rmi' => 'audio/mid', + 'rmm' => 'audio/x-pn-realaudio', + 'rmp' => 'audio/x-pn-realaudio-plugin', + 'rng' => 'application/vnd.nokia.ringing-tone', + 'rnx' => 'application/vnd.rn-realplayer', + 'roff' => 'application/x-troff', + 'rp' => 'image/vnd.rn-realpix', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'rt' => 'text/vnd.rn-realtext', + 'rtf' => 'text/richtext', + 'rtx' => 'text/richtext', + 'rv' => 'video/vnd.rn-realvideo', + 's' => 'text/x-asm', + 's3m' => 'audio/s3m', + 'saveme' => 'application/octet-stream', + 'sbk' => 'application/x-tbook', + 'scm' => 'video/x-scm', + 'sdml' => 'text/plain', + 'sdp' => 'application/x-sdp', + 'sdr' => 'application/sounder', + 'sea' => 'application/x-sea', + 'set' => 'application/set', + 'sgm' => 'text/x-sgml', + 'sgml' => 'text/x-sgml', + 'sh' => 'text/x-script.sh', + 'shar' => 'application/x-shar', + 'shtml' => 'text/x-server-parsed-html', + 'sid' => 'audio/x-psid', + 'sit' => 'application/x-stuffit', + 'skd' => 'application/x-koan', + 'skm' => 'application/x-koan', + 'skp' => 'application/x-koan', + 'skt' => 'application/x-koan', + 'sl' => 'application/x-seelogo', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'snd' => 'audio/x-adpcm', + 'sol' => 'application/solids', + 'spc' => 'text/x-speech', + 'spl' => 'application/futuresplash', + 'spr' => 'application/x-sprite', + 'sprite' => 'application/x-sprite', + 'src' => 'application/x-wais-source', + 'ssi' => 'text/x-server-parsed-html', + 'ssm' => 'application/streamingmedia', + 'sst' => 'application/vnd.ms-pki.certstore', + 'step' => 'application/step', + 'stl' => 'application/x-navistyle', + 'stp' => 'application/step', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 'svf' => 'image/x-dwg', + 'svr' => 'x-world/x-svr', + 'swf' => 'application/x-shockwave-flash', + 't' => 'application/x-troff', + 'talk' => 'text/x-speech', + 'tar' => 'application/x-tar', + 'tbk' => 'application/x-tbook', + 'tcl' => 'text/x-script.tcl', + 'tcsh' => 'text/x-script.tcsh', + 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', + 'texinfo' => 'application/x-texinfo', + 'text' => 'text/plain', + 'tgz' => 'application/x-compressed', + 'tif' => 'image/x-tiff', + 'tiff' => 'image/x-tiff', + 'tr' => 'application/x-troff', + 'tsi' => 'audio/tsp-audio', + 'tsp' => 'audio/tsplayer', + 'tsv' => 'text/tab-separated-values', + 'turbot' => 'image/florian', + 'txt' => 'text/plain', + 'uil' => 'text/x-uil', + 'uni' => 'text/uri-list', + 'unis' => 'text/uri-list', + 'unv' => 'application/i-deas', + 'uri' => 'text/uri-list', + 'uris' => 'text/uri-list', + 'ustar' => 'multipart/x-ustar', + 'uu' => 'text/x-uuencode', + 'uue' => 'text/x-uuencode', + 'vcd' => 'application/x-cdlink', + 'vcs' => 'text/x-vcalendar', + 'vda' => 'application/vda', + 'vdo' => 'video/vdo', + 'vew' => 'application/groupwise', + 'viv' => 'video/vnd.vivo', + 'vivo' => 'video/vnd.vivo', + 'vmd' => 'application/vocaltec-media-desc', + 'vmf' => 'application/vocaltec-media-file', + 'voc' => 'audio/x-voc', + 'vos' => 'video/vosaic', + 'vox' => 'audio/voxware', + 'vqe' => 'audio/x-twinvq-plugin', + 'vqf' => 'audio/x-twinvqv', + 'vql' => 'audio/x-twinvq-plugin', + 'vrml' => 'x-world/x-vrml', + 'vrt' => 'x-world/x-vrt', + 'vsd' => 'application/x-visio', + 'vst' => 'application/x-visio', + 'vsw' => 'application/x-visio', + 'w60' => 'application/wordperfect6.0', + 'w61' => 'application/wordperfect6.1', + 'w6w' => 'application/msword', + 'wav' => 'audio/x-wav', + 'wb1' => 'application/x-qpro', + 'wbmp' => 'image/vnd.wap.wbmp', + 'web' => 'application/vnd.xara', + 'wiz' => 'application/msword', + 'wk1' => 'application/x-123', + 'wmf' => 'windows/metafile', + 'wml' => 'text/vnd.wap.wml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmls' => 'text/vnd.wap.wmlscript', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'wmv' => ['video/x-ms-asf', 'video/x-ms-wmv'], + 'word' => 'application/msword', + 'wp' => 'application/wordperfect', + 'wp5' => 'application/wordperfect6.0', + 'wp6' => 'application/wordperfect', + 'wpd' => 'application/x-wpwin', + 'wq1' => 'application/x-lotus', + 'wri' => 'application/x-wri', + 'wrl' => 'x-world/x-vrml', + 'wrz' => 'x-world/x-vrml', + 'wsc' => 'text/scriplet', + 'wsrc' => 'application/x-wais-source', + 'wtk' => 'application/x-wintalk', + 'xbm' => 'image/xbm', + 'xdr' => 'video/x-amt-demorun', + 'xgz' => 'xgl/drawing', + 'xif' => 'image/vnd.xiff', + 'xl' => 'application/excel', + 'xla' => 'application/x-msexcel', + 'xlb' => 'application/x-excel', + 'xlc' => 'application/x-excel', + 'xld' => 'application/x-excel', + 'xlk' => 'application/x-excel', + 'xll' => 'application/x-excel', + 'xlm' => 'application/x-excel', + 'xls' => ['application/x-msexcel', 'text/plain'], + 'xlsx' => 'application/octet-stream', + 'xlt' => 'application/x-excel', + 'xlv' => 'application/x-excel', + 'xlw' => 'application/x-msexcel', + 'xm' => 'audio/xm', + 'xml' => 'text/xml', + 'xmz' => 'xgl/movie', + 'xpix' => 'application/x-vnd.ls-xpix', + 'xpm' => 'image/xpm', + 'x-png' => 'image/png', + 'xsr' => 'video/x-amt-showrun', + 'xwd' => 'image/x-xwindowdump', + 'xyz' => 'chemical/x-pdb', + 'z' => 'application/x-compressed', + 'zip' => 'multipart/x-zip', + 'zoo' => 'application/octet-stream', + 'zsh' => 'text/x-script.zsh', + //The following are the custom application mime type + 'dat' => 'text/plain', + 'pm' => ['text/plain', 'application/octet-stream'], 'pmt' => 'text/plain', 'pmx' => ['application/xml', 'text/xml', 'text/html'], 'pmx2' => ['application/xml', 'text/xml', 'text/html'], 'po' => 'text/x-po', - 'pdf' => 'application/pdf', - 'png' => 'image/png', - 'php' => 'text/x-php', - 'rar' => 'application/x-rar', - 'txt' => 'text/plain', - 'wmv' => ['video/x-ms-asf', 'video/x-ms-wmv'], - 'xls' => ['application/vnd.ms-excel', 'text/plain'], - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'zip' => 'application/zip', ]; From 345e703e3a90df31e43441ceec25d1453e8fc179 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 14 Dec 2018 17:21:10 -0400 Subject: [PATCH 026/100] PMC-318 --- workflow/engine/classes/Processes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index 06d9d7606..a5b53da32 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -6421,7 +6421,7 @@ class Processes //Prepare to delete labels related in CONTENT $criteria = new Criteria(ContentPeer::DATABASE_NAME); $criteria->addSelectColumn('*'); - $criteria->add(ContentPeer::CON_CATEGORY, $conCategories, Criteria::IN); + $criteria->add(ContentPeer::CON_CATEGORY, array_keys($conCategories), Criteria::IN); $criteria->add(ContentPeer::CON_ID, $conId); $criteria->add(ContentPeer::CON_LANG, $conLang); $criteria->add(ContentPeer::CON_PARENT, $conParent); From f358efd9c2d12f587817785fe75ac77cc7543e8e Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 17 Dec 2018 12:14:33 -0400 Subject: [PATCH 027/100] PMC-319 --- config/customMimeTypes.php | 305 ++++++++++++++++++++++++++++++------- 1 file changed, 251 insertions(+), 54 deletions(-) diff --git a/config/customMimeTypes.php b/config/customMimeTypes.php index 540d9d63a..3c6e90fe6 100644 --- a/config/customMimeTypes.php +++ b/config/customMimeTypes.php @@ -16,7 +16,10 @@ return [ 'aas' => 'application/x-authorware-seg', 'abc' => 'text/vnd.abc', 'acgi' => 'text/html', + 'acutc' => 'application/vnd.acucorp', 'afl' => 'video/animaflex', + 'afm' => 'application/x-font-type1', + 'afp' => 'application/vnd.ibm.modcap', 'ai' => 'application/postscript', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', @@ -33,31 +36,47 @@ return [ 'asm' => 'text/x-asm', 'asp' => 'text/asp', 'asx' => 'video/x-ms-asf-plugin', - 'au' => 'audio/x-au', + 'asx ' => 'video/x-ms-asf', + 'atc' => 'application/vnd.acucorp', + 'au' => ['audio/basic', 'audio/x-au'], 'avi' => 'video/x-msvideo', 'avs' => 'video/avs-video', + 'bat' => 'application/x-msdownload', 'bcpio' => 'application/x-bcpio', 'bin' => 'application/x-macbinary', 'bm' => 'image/bmp', 'bmp' => 'image/x-windows-bmp', 'boo' => 'application/book', - 'book' => 'application/book', + 'book' => ['application/vnd.framemaker', 'application/book'], 'boz' => 'application/x-bzip2', + 'bpk' => 'application/octet-stream', 'bsh' => 'application/x-bsh', 'bz' => 'application/x-bzip', 'bz2' => 'application/x-bzip2', 'c' => 'text/x-c', 'c++' => 'text/plain', + 'c4d' => 'application/vnd.clonk.c4group', + 'c4f' => 'application/vnd.clonk.c4group', + 'c4g' => 'application/vnd.clonk.c4group', + 'c4p' => 'application/vnd.clonk.c4group', + 'c4u' => 'application/vnd.clonk.c4group', + 'cap' => 'application/vnd.tcpdump.pcap', 'cat' => 'application/vnd.ms-pki.seccat', + 'cb7' => 'application/x-cbr', + 'cba' => 'application/x-cbr', + 'cbr' => 'application/x-cbr', + 'cbt' => 'application/x-cbr', + 'cbz' => 'application/x-cbr', 'cc' => 'text/x-c', 'ccad' => 'application/clariscad', 'cco' => 'application/x-cocoa', + 'cct' => 'application/x-director', 'cdf' => 'application/x-netcdf', 'cer' => 'application/x-x509-ca-cert', 'cha' => 'application/x-chat', 'chat' => 'application/x-chat', 'class' => 'application/x-java-class', - 'com' => 'text/plain', + 'com' => ['application/x-msdownload', 'text/plain'], 'conf' => 'text/plain', 'cpio' => 'application/x-cpio', 'cpp' => 'text/x-c', @@ -66,14 +85,26 @@ return [ 'crt' => 'application/x-x509-user-cert', 'csh' => 'text/x-script.csh', 'css' => 'text/css', - 'cxx' => 'text/plain', + 'cst' => 'application/x-director', + 'cxt' => 'application/x-director', + 'cxx' => ['text/x-c', 'text/plain'], + 'dataless' => 'application/vnd.fdsn.seed', 'dcr' => 'application/x-director', 'deepv' => 'application/x-deepv', 'def' => 'text/plain', + 'deploy' => 'application/octet-stream', 'der' => 'application/x-x509-ca-cert', + 'dic' => 'text/x-c', 'dif' => 'video/x-dv', 'dir' => 'application/x-director', + 'dist' => 'application/octet-stream', + 'distz' => 'application/octet-stream', + 'djv' => 'image/vnd.djvu', + 'djvu' => 'image/vnd.djvu', 'dl' => 'video/x-dl', + 'dll' => 'application/x-msdownload', + 'dmp' => 'application/vnd.tcpdump.pcap', + 'dms' => 'application/octet-stream', 'doc' => ['application/msword', 'text/html'], 'docx' => 'application/octet-stream', 'dot' => 'application/msword', @@ -87,10 +118,15 @@ return [ 'dxf' => 'image/x-dwg', 'dxr' => 'application/x-director', 'el' => 'text/x-script.elisp', - 'elc' => 'application/x-elc', + 'elc' => ['application/octet-stream', 'application/x-elc'], + 'emf' => 'application/x-msmetafile', + 'eml' => 'message/rfc822', + 'emz' => 'application/x-msmetafile', 'env' => 'application/x-envoy', 'eps' => 'application/postscript', 'es' => 'application/x-esrehber', + 'es3' => 'application/vnd.eszigno3+xml', + 'et3' => 'application/vnd.eszigno3+xml', 'etx' => 'text/x-setext', 'evy' => 'application/x-envoy', 'exe' => ['application/x-dosexec', 'application/octet-stream'], @@ -98,19 +134,33 @@ return [ 'f77' => 'text/x-fortran', 'f90' => 'text/x-fortran', 'fdf' => 'application/vnd.fdf', + 'fgd' => 'application/x-director', + 'fh' => 'image/x-freehand', + 'fh4' => 'image/x-freehand', + 'fh5' => 'image/x-freehand', + 'fh7' => 'image/x-freehand', + 'fhc' => 'image/x-freehand', 'fif' => 'image/fif', 'fli' => 'video/x-fli', 'flo' => 'image/florian', 'flx' => 'text/vnd.fmi.flexstor', + 'fm' => 'application/vnd.framemaker', 'fmf' => 'video/x-atomic3d-feature', 'for' => 'text/x-fortran', 'fpx' => 'image/vnd.net-fpx', + 'frame' => 'application/vnd.framemaker', 'frl' => 'application/freeloader', 'funk' => 'audio/make', + 'fxp' => 'application/vnd.adobe.fxp', + 'fxpl' => 'application/vnd.adobe.fxp', 'g' => 'text/plain', 'g3' => 'image/g3fax', + 'gex' => 'application/vnd.geometry-explorer', 'gif' => 'image/gif', 'gl' => 'video/x-gl', + 'gqf' => 'application/vnd.grafeq', + 'gqs' => 'application/vnd.grafeq', + 'gre' => 'application/vnd.geometry-explorer', 'gsd' => 'audio/x-gsm', 'gsm' => 'audio/x-gsm', 'gsp' => 'application/x-gsp', @@ -118,11 +168,11 @@ return [ 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', 'gzip' => 'multipart/x-gzip', - 'h' => 'text/x-h', + 'h' => ['text/x-c', 'text/x-h'], 'hdf' => 'application/x-hdf', 'help' => 'application/x-helpfile', 'hgl' => 'application/vnd.hp-hpgl', - 'hh' => 'text/x-h', + 'hh' => ['text/x-c', 'text/x-h'], 'hlb' => 'text/x-script', 'hlp' => 'application/x-winhelp', 'hpg' => 'application/vnd.hp-hpgl', @@ -135,16 +185,22 @@ return [ 'htmls' => 'text/html', 'htt' => 'text/webviewhtml', 'htx' => 'text/html', + 'icc' => 'application/vnd.iccprofile', 'ice' => 'x-conference/x-cooltalk', + 'icm' => 'application/vnd.iccprofile', 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', 'idc' => 'text/plain', 'ief' => 'image/ief', 'iefs' => 'image/ief', + 'ifb' => 'text/calendar', 'iges' => 'model/iges', 'igs' => 'model/iges', 'ima' => 'application/x-ima', 'imap' => 'application/x-httpd-imap', + 'in' => 'text/plain', 'inf' => 'application/inf', + 'inkml' => 'application/inkml+xml', 'ins' => 'application/x-internett-signup', 'ip' => 'application/x-ip2', 'isu' => 'video/x-isvideo', @@ -158,22 +214,35 @@ return [ 'jcm' => 'application/x-java-commerce', 'jfif' => 'image/pjpeg', 'jfif-tbnl' => 'image/jpeg', - 'jpe' => 'image/pjpeg', - 'jpeg' => 'image/pjpeg', + 'jpe' => ['image/jpeg', 'image/pjpeg'], + 'jpeg' => ['image/jpeg', 'image/pjpeg'], 'jpg' => ['image/pjpeg', 'image/jpeg'], + 'jpgm' => 'video/jpm', + 'jpm' => 'video/jpm', 'jps' => 'image/x-jps', 'js' => 'text/ecmascript', 'jut' => 'image/jutvision', - 'kar' => 'music/x-karaoke', + 'kar' => ['audio/midi', 'music/x-karaoke'], + 'kne' => 'application/vnd.kinar', + 'knp' => 'application/vnd.kinar', + 'kpr' => 'application/vnd.kde.kpresenter', + 'kpt' => 'application/vnd.kde.kpresenter', 'ksh' => 'text/x-script.ksh', + 'ktr' => 'application/vnd.kahootz', + 'ktz' => 'application/vnd.kahootz', + 'kwd' => 'application/vnd.kde.kword', + 'kwt' => 'application/vnd.kde.kword', 'la' => 'audio/x-nspaudio', 'lam' => 'audio/x-liveaudio', 'latex' => 'application/x-latex', 'lha' => 'application/x-lha', 'lhx' => 'application/octet-stream', 'list' => 'text/plain', + 'list3820' => 'application/vnd.ibm.modcap', + 'listafp' => 'application/vnd.ibm.modcap', 'lma' => 'audio/x-nspaudio', 'log' => 'text/plain', + 'lrf' => 'application/octet-stream', 'lsp' => 'text/x-script.lisp', 'lst' => 'text/plain', 'lsx' => 'text/x-la-asf', @@ -181,86 +250,124 @@ return [ 'lzh' => 'application/x-lzh', 'lzx' => 'application/x-lzx', 'm' => 'text/x-m', + 'm13' => 'application/x-msmediaview', + 'm14' => 'application/x-msmediaview', 'm1v' => 'video/mpeg', 'm2a' => 'audio/mpeg', 'm2v' => 'video/mpeg', + 'm3a' => 'audio/mpeg', 'm3u' => 'audio/x-mpequrl', - 'man' => 'application/x-troff-man', + 'm4a' => ['audio/mp4', 'audio/x-m4a'], + 'm4u' => 'video/vnd.mpegurl', + 'maker' => 'application/vnd.framemaker', + 'man' => ['text/troff', 'music/x-karaoke'], 'map' => 'application/x-navimap', - 'mar' => 'text/plain', + 'mar' => ['application/octet-stream', 'text/plain'], + 'mb' => 'application/mathematica', 'mbd' => 'application/mbedlet', 'mc$' => 'application/x-magic-cap-package-1.0', 'mcd' => 'application/x-mathcad', 'mcf' => 'text/mcf', 'mcp' => 'application/netmc', - 'me' => 'application/x-troff-me', + 'me' => ['text/troff', 'application/x-troff-me'], + 'mesh' => 'model/mesh', 'mht' => 'message/rfc822', 'mhtml' => 'message/rfc822', - 'mid' => 'x-music/x-midi', - 'midi' => 'x-music/x-midi', + 'mid' => ['audio/midi', 'application/x-troff-me'], + 'midi' => ['audio/midi', 'application/x-troff-me'], 'mif' => 'application/x-mif', - 'mime' => 'www/mime', + 'mime' => ['message/rfc822', 'www/mime'], + 'mj2' => 'video/mj2', 'mjf' => 'audio/x-vnd.audioexplosion.mjuicemediafile', + 'mjp2' => 'video/mj2', 'mjpg' => 'video/x-motion-jpeg', + 'mk3d' => 'video/x-matroska', + 'mks' => 'video/x-matroska', + 'mkv' => 'video/x-matroska', 'mm' => 'application/x-meme', 'mme' => 'application/base64', 'mod' => 'audio/x-mod', 'moov' => 'video/quicktime', 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', - 'mp2' => 'video/x-mpeq2a', + 'mp2' => ['audio/mpeg', 'video/x-mpeq2a'], + 'mp2a' => 'audio/mpeg', 'mp3' => ['video/x-mpeg', 'audio/mpeg'], + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4v' => 'video/mp4', 'mpa' => 'video/mpeg', 'mpc' => 'application/x-project', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', 'mpga' => 'audio/mpeg', 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/x-project', + 'mpt' => ['application/vnd.ms-project', 'application/x-project'], 'mpv' => 'application/x-project', 'mpx' => 'application/x-project', 'mrc' => 'application/marc', - 'ms' => 'application/x-troff-ms', + 'ms' => ['text/troff', 'application/x-troff-ms'], + 'msh' => 'model/mesh', + 'msi' => 'application/x-msdownload', 'mv' => 'video/x-sgi-movie', + 'mvb' => 'application/x-msmediaview', + 'mxml' => 'application/xv+xml', + 'mxu' => 'video/vnd.mpegurl', 'my' => 'audio/make', 'mzz' => 'application/x-vnd.audioexplosion.mzz', 'nap' => 'image/naplps', 'naplps' => 'image/naplps', + 'nb' => 'application/mathematica', 'nc' => 'application/x-netcdf', 'ncm' => 'application/vnd.nokia.Something is wronguration-message', 'nif' => 'image/x-niff', 'niff' => 'image/x-niff', + 'nitf' => 'application/vnd.nitf', 'nix' => 'application/x-mix-transfer', 'nsc' => 'application/x-conference', + 'ntf' => 'application/vnd.nitf', 'nvd' => 'application/x-navidoc', 'o' => 'application/octet-stream', 'oda' => 'application/oda', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', 'omc' => 'application/x-omc', 'omcd' => 'application/x-omcdatamaker', 'omcr' => 'application/x-omcregerator', + 'onepkg' => 'application/onenote', + 'onetmp' => 'application/onenote', + 'onetoc2' => 'application/onenote', + 'oprc' => 'application/vnd.palm', 'p' => 'text/x-pascal', 'p10' => 'application/x-pkcs10', 'p12' => 'application/x-pkcs12', 'p7a' => 'application/x-pkcs7-signature', - 'p7c' => 'application/x-pkcs7-mime', + 'p7b' => 'application/x-pkcs7-certificates', + 'p7c' => ['application/pkcs7-mime', 'application/x-pkcs7-mime'], 'p7m' => 'application/x-pkcs7-mime', 'p7r' => 'application/x-pkcs7-certreqresp', 'p7s' => 'application/pkcs7-signature', 'part' => 'application/pro_eng', 'pas' => 'text/pascal', 'pbm' => 'image/x-portable-bitmap', + 'pcap' => 'application/vnd.tcpdump.pcap', 'pcl' => 'application/x-pcl', 'pct' => 'image/x-pict', 'pcx' => 'image/x-pcx', - 'pdb' => 'chemical/x-pdb', + 'pdb' => ['application/vnd.palm', 'chemical/x-pdb'], 'pdf' => 'application/pdf', + 'pfa' => 'application/x-font-type1', + 'pfb' => 'application/x-font-type1', + 'pfm' => 'application/x-font-type1', 'pfunk' => 'audio/make.my.funk', + 'pfx' => 'application/x-pkcs12', 'pgm' => 'image/x-portable-greymap', 'php' => 'text/x-php', - 'pic' => 'image/pict', + 'pic' => ['image/x-pict', 'image/pict'], 'pict' => 'image/pict', - 'pkg' => 'application/x-newton-compatible-pkg', + 'pkg' => ['application/octet-stream', 'application/x-newton-compatible-pkg'], 'pko' => 'application/vnd.ms-pki.pko', 'pl' => 'text/x-script.perl', 'plx' => 'application/x-pixclscript', @@ -274,8 +381,9 @@ return [ 'ppa' => 'application/vnd.ms-powerpoint', 'ppm' => 'image/x-portable-pixmap', 'pps' => 'application/vnd.ms-powerpoint', - 'ppt' => ['application/x-mspowerpoint','application/vnd.ms-office'], + 'ppt' => ['application/x-mspowerpoint', 'application/vnd.ms-office'], 'ppz' => 'application/mspowerpoint', + 'pqa' => 'application/vnd.palm', 'pre' => 'application/x-freelance', 'prt' => 'application/pro_eng', 'ps' => 'application/postscript', @@ -292,7 +400,13 @@ return [ 'qtc' => 'video/x-qtc', 'qti' => 'image/x-quicktime', 'qtif' => 'image/x-quicktime', - 'ra' => 'audio/x-realaudio', + 'qwd' => 'application/vnd.quark.quarkxpress', + 'qwt' => 'application/vnd.quark.quarkxpress', + 'qxb' => 'application/vnd.quark.quarkxpress', + 'qxd' => 'application/vnd.quark.quarkxpress', + 'qxl' => 'application/vnd.quark.quarkxpress', + 'qxt' => 'application/vnd.quark.quarkxpress', + 'ra' => ['audio/x-pn-realaudio', 'audio/x-realaudio'], 'ram' => 'audio/x-pn-realaudio', 'ras' => 'image/x-cmu-raster', 'rast' => 'image/cmu-raster', @@ -300,12 +414,12 @@ return [ 'rf' => 'image/vnd.rn-realflash', 'rgb' => 'image/x-rgb', 'rm' => 'audio/x-pn-realaudio', - 'rmi' => 'audio/mid', + 'rmi' => ['audio/midi', 'audio/mid'], 'rmm' => 'audio/x-pn-realaudio', 'rmp' => 'audio/x-pn-realaudio-plugin', 'rng' => 'application/vnd.nokia.ringing-tone', 'rnx' => 'application/vnd.rn-realplayer', - 'roff' => 'application/x-troff', + 'roff' => ['text/troff', 'application/x-troff'], 'rp' => 'image/vnd.rn-realpix', 'rpm' => 'audio/x-pn-realaudio-plugin', 'rt' => 'text/vnd.rn-realtext', @@ -317,31 +431,41 @@ return [ 'saveme' => 'application/octet-stream', 'sbk' => 'application/x-tbook', 'scm' => 'video/x-scm', + 'sdkd' => 'application/vnd.solent.sdkm+xml', + 'sdkm' => 'application/vnd.solent.sdkm+xml', 'sdml' => 'text/plain', 'sdp' => 'application/x-sdp', 'sdr' => 'application/sounder', + 'sdw' => 'application/vnd.stardivision.writer', 'sea' => 'application/x-sea', + 'seed' => 'application/vnd.fdsn.seed', 'set' => 'application/set', - 'sgm' => 'text/x-sgml', - 'sgml' => 'text/x-sgml', + 'sgm' => ['text/sgml', 'text/x-sgml'], + 'sgml' => ['text/sgml', 'text/x-sgml'], 'sh' => 'text/x-script.sh', 'shar' => 'application/x-shar', 'shtml' => 'text/x-server-parsed-html', 'sid' => 'audio/x-psid', + 'sig' => 'application/pgp-signature', + 'silo' => 'model/mesh', + 'sis' => 'application/vnd.symbian.install', + 'sisx' => 'application/vnd.symbian.install', 'sit' => 'application/x-stuffit', - 'skd' => 'application/x-koan', - 'skm' => 'application/x-koan', - 'skp' => 'application/x-koan', - 'skt' => 'application/x-koan', + 'skd' => ['application/vnd.koan', 'application/x-koan'], + 'skm' => ['application/vnd.koan', 'application/x-koan'], + 'skp' => ['application/vnd.koan', 'application/x-koan'], + 'skt' => ['application/vnd.koan', 'application/x-koan'], 'sl' => 'application/x-seelogo', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'snd' => 'audio/x-adpcm', + 'smi' => ['application/smil+xml', 'application/smil'], + 'smil' => ['application/smil+xml', 'application/smil'], + 'snd' => 'audio/basic', + 'so' => 'application/octet-stream', 'sol' => 'application/solids', - 'spc' => 'text/x-speech', + 'spc' => ['application/x-pkcs7-certificates', 'text/x-speech'], 'spl' => 'application/futuresplash', 'spr' => 'application/x-sprite', 'sprite' => 'application/x-sprite', + 'spx' => 'audio/ogg', 'src' => 'application/x-wais-source', 'ssi' => 'text/x-server-parsed-html', 'ssm' => 'application/streamingmedia', @@ -349,39 +473,78 @@ return [ 'step' => 'application/step', 'stl' => 'application/x-navistyle', 'stp' => 'application/step', + 'sus' => 'application/vnd.sus-calendar', + 'susp' => 'application/vnd.sus-calendar', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'svf' => 'image/x-dwg', 'svr' => 'x-world/x-svr', + 'swa' => 'application/x-director', 'swf' => 'application/x-shockwave-flash', - 't' => 'application/x-troff', + 't' => ['text/troff', 'application/x-troff'], 'talk' => 'text/x-speech', 'tar' => 'application/x-tar', 'tbk' => 'application/x-tbook', 'tcl' => 'text/x-script.tcl', 'tcsh' => 'text/x-script.tcsh', + 'tei' => 'application/tei+xml', + 'teicorpus' => 'application/tei+xml', 'tex' => 'application/x-tex', 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'text' => 'text/plain', 'tgz' => 'application/x-compressed', - 'tif' => 'image/x-tiff', - 'tiff' => 'image/x-tiff', - 'tr' => 'application/x-troff', + 'tif' => ['image/tiff', 'image/x-tiff'], + 'tiff' => ['image/tiff', 'image/x-tiff'], + 'tr' => ['text/troff', 'application/x-troff'], 'tsi' => 'audio/tsp-audio', 'tsp' => 'audio/tsplayer', 'tsv' => 'text/tab-separated-values', 'turbot' => 'image/florian', + 'twd' => 'application/vnd.simtech-mindmapper', + 'twds' => 'application/vnd.simtech-mindmapper', 'txt' => 'text/plain', + 'u32' => 'application/x-authorware-bin', + 'ufd' => 'application/vnd.ufdl', + 'ufdl' => 'application/vnd.ufdl', 'uil' => 'text/x-uil', 'uni' => 'text/uri-list', 'unis' => 'text/uri-list', 'unv' => 'application/i-deas', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', + 'urls' => 'text/uri-list', 'ustar' => 'multipart/x-ustar', 'uu' => 'text/x-uuencode', 'uue' => 'text/x-uuencode', + 'uva' => 'audio/vnd.dece.audio', + 'uvd' => 'application/vnd.dece.data', + 'uvf' => 'application/vnd.dece.data', + 'uvg' => 'image/vnd.dece.graphic', + 'uvh' => 'video/vnd.dece.hd', + 'uvi' => 'image/vnd.dece.graphic', + 'uvm' => 'video/vnd.dece.mobile', + 'uvp' => 'video/vnd.dece.pd', + 'uvs' => 'video/vnd.dece.sd', + 'uvt' => 'application/vnd.dece.ttml+xml', + 'uvu' => 'video/vnd.uvvu.mp4', + 'uvv' => 'video/vnd.dece.video', + 'uvva' => 'audio/vnd.dece.audio', + 'uvvd' => 'application/vnd.dece.data', + 'uvvf' => 'application/vnd.dece.data', + 'uvvg' => 'image/vnd.dece.graphic', + 'uvvh' => 'video/vnd.dece.hd', + 'uvvi' => 'image/vnd.dece.graphic', + 'uvvm' => 'video/vnd.dece.mobile', + 'uvvp' => 'video/vnd.dece.pd', + 'uvvs' => 'video/vnd.dece.sd', + 'uvvt' => 'application/vnd.dece.ttml+xml', + 'uvvu' => 'video/vnd.uvvu.mp4', + 'uvvv' => 'video/vnd.dece.video', + 'uvvx' => 'application/vnd.dece.unspecified', + 'uvvz' => 'application/vnd.dece.zip', + 'uvx' => 'application/vnd.dece.unspecified', + 'uvz' => 'application/vnd.dece.zip', 'vcd' => 'application/x-cdlink', 'vcs' => 'text/x-vcalendar', 'vda' => 'application/vda', @@ -392,71 +555,105 @@ return [ 'vmd' => 'application/vocaltec-media-desc', 'vmf' => 'application/vocaltec-media-file', 'voc' => 'audio/x-voc', + 'vor' => 'application/vnd.stardivision.writer', 'vos' => 'video/vosaic', - 'vox' => 'audio/voxware', + 'vox' => ['application/x-authorware-bin', 'audio/voxware'], 'vqe' => 'audio/x-twinvq-plugin', 'vqf' => 'audio/x-twinvqv', 'vql' => 'audio/x-twinvq-plugin', - 'vrml' => 'x-world/x-vrml', + 'vrml' => ['model/vrml', 'x-world/x-vrml'], 'vrt' => 'x-world/x-vrt', - 'vsd' => 'application/x-visio', - 'vst' => 'application/x-visio', - 'vsw' => 'application/x-visio', + 'vsd' => ['application/vnd.visio', 'application/x-visio'], + 'vss' => ['application/vnd.visio', 'application/x-visio'], + 'vst' => ['application/vnd.visio', 'application/x-visio'], + 'vsw' => ['application/vnd.visio', 'application/x-visio'], + 'w3d' => 'application/x-director', 'w60' => 'application/wordperfect6.0', 'w61' => 'application/wordperfect6.1', 'w6w' => 'application/msword', 'wav' => 'audio/x-wav', 'wb1' => 'application/x-qpro', 'wbmp' => 'image/vnd.wap.wbmp', + 'wcm' => 'application/vnd.ms-works', + 'wdb' => 'application/vnd.ms-works', 'web' => 'application/vnd.xara', 'wiz' => 'application/msword', 'wk1' => 'application/x-123', - 'wmf' => 'windows/metafile', + 'wks' => 'application/vnd.ms-works', + 'wmf' => ['application/x-msmetafile', 'windows/metafile'], 'wml' => 'text/vnd.wap.wml', 'wmlc' => 'application/vnd.wap.wmlc', 'wmls' => 'text/vnd.wap.wmlscript', 'wmlsc' => 'application/vnd.wap.wmlscriptc', 'wmv' => ['video/x-ms-asf', 'video/x-ms-wmv'], + 'wmz' => 'application/x-msmetafile', 'word' => 'application/msword', 'wp' => 'application/wordperfect', 'wp5' => 'application/wordperfect6.0', 'wp6' => 'application/wordperfect', 'wpd' => 'application/x-wpwin', + 'wps' => 'application/vnd.ms-works', 'wq1' => 'application/x-lotus', 'wri' => 'application/x-wri', - 'wrl' => 'x-world/x-vrml', + 'wrl' => ['model/vrml', 'x-world/x-vrml'], 'wrz' => 'x-world/x-vrml', 'wsc' => 'text/scriplet', 'wsrc' => 'application/x-wais-source', 'wtk' => 'application/x-wintalk', + 'x-png' => 'image/png', + 'x32' => 'application/x-authorware-bin', + 'x3d' => 'model/x3d+xml', + 'x3db' => 'model/x3d+binary', + 'x3dbz' => 'model/x3d+binary', + 'x3dv' => 'model/x3d+vrml', + 'x3dvz' => 'model/x3d+vrml', + 'x3dz' => 'model/x3d+xml', 'xbm' => 'image/xbm', 'xdr' => 'video/x-amt-demorun', 'xgz' => 'xgl/drawing', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xhvml' => 'application/xv+xml', 'xif' => 'image/vnd.xiff', 'xl' => 'application/excel', - 'xla' => 'application/x-msexcel', + 'xla' => ['application/vnd.ms-excel', 'application/x-msexcel'], 'xlb' => 'application/x-excel', - 'xlc' => 'application/x-excel', + 'xlc' => ['application/vnd.ms-excel', 'application/x-excel'], 'xld' => 'application/x-excel', 'xlk' => 'application/x-excel', 'xll' => 'application/x-excel', - 'xlm' => 'application/x-excel', + 'xlm' => ['application/vnd.ms-excel', 'application/x-excel'], 'xls' => ['application/x-msexcel', 'text/plain'], 'xlsx' => 'application/octet-stream', - 'xlt' => 'application/x-excel', + 'xlt' => ['application/vnd.ms-excel', 'application/x-excel'], 'xlv' => 'application/x-excel', - 'xlw' => 'application/x-msexcel', + 'xlw' => ['application/vnd.ms-excel', 'application/x-msexcel'], 'xm' => 'audio/xm', - 'xml' => 'text/xml', + 'xml' => ['application/xml', 'text/xml'], 'xmz' => 'xgl/movie', 'xpix' => 'application/x-vnd.ls-xpix', 'xpm' => 'image/xpm', 'x-png' => 'image/png', + 'xpw' => 'application/vnd.intercon.formnet', + 'xpx' => 'application/vnd.intercon.formnet', + 'xsl' => 'application/xml', 'xsr' => 'video/x-amt-showrun', + 'xvm' => 'application/xv+xml', + 'xvml' => 'application/xv+xml', 'xwd' => 'image/x-xwindowdump', 'xyz' => 'chemical/x-pdb', 'z' => 'application/x-compressed', + 'z1' => 'application/x-zmachine', + 'z2' => 'application/x-zmachine', + 'z3' => 'application/x-zmachine', + 'z4' => 'application/x-zmachine', + 'z5' => 'application/x-zmachine', + 'z6' => 'application/x-zmachine', + 'z7' => 'application/x-zmachine', + 'z8' => 'application/x-zmachine', 'zip' => 'multipart/x-zip', + 'zir' => 'application/vnd.zul', + 'zirz' => 'application/vnd.zul', 'zoo' => 'application/octet-stream', 'zsh' => 'text/x-script.zsh', //The following are the custom application mime type From a782c8842e27fe29c97401a964f8865f435f6c9c Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 17 Dec 2018 16:03:48 -0400 Subject: [PATCH 028/100] PMC-323 --- .../engine/content/translations/english/processmaker.en.po | 4 ++-- workflow/engine/data/mysql/insert.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index d4cd92303..6ea5d71df 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -25328,8 +25328,8 @@ msgstr "Tools" # TRANSLATION # LABEL/ID_TOO_MANY_REQUESTS #: LABEL/ID_TOO_MANY_REQUESTS -msgid "Too many requests" -msgstr "Too many requests" +msgid "Upon configurations, you have reached the maximum number of files to upload." +msgstr "Upon configurations, you have reached the maximum number of files to upload." # TRANSLATION # LABEL/ID_TOP_MARGIN diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index d110898aa..9b02635e1 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -61112,7 +61112,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_TO','en','To','2014-01-15') , ( 'LABEL','ID_TODAY','en','Today','2014-01-15') , ( 'LABEL','ID_TOOLS','en','Tools','2014-01-15') , -( 'LABEL','ID_TOO_MANY_REQUESTS','en','Too many requests','2018-04-25') , +( 'LABEL','ID_TOO_MANY_REQUESTS','en','Upon configurations, you have reached the maximum number of files to upload.','2018-12-17') , ( 'LABEL','ID_TOP_MARGIN','en','Top Margin','2014-01-15') , ( 'LABEL','ID_TOTAL_CASES','en','Total Cases','2014-01-15') , ( 'LABEL','ID_TOTAL_CASES_REASSIGNED','en','Total Cases Reassigned','2014-01-15') , From fa8c3cfbb2a9ed6e6382d4b2dbcae73ab7302c13 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 18 Dec 2018 08:13:57 -0400 Subject: [PATCH 029/100] PMC-176 --- config/customMimeTypes.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/customMimeTypes.php b/config/customMimeTypes.php index 3c6e90fe6..be9e95720 100644 --- a/config/customMimeTypes.php +++ b/config/customMimeTypes.php @@ -221,6 +221,8 @@ return [ 'jpm' => 'video/jpm', 'jps' => 'image/x-jps', 'js' => 'text/ecmascript', + 'json' => ['text/plain', 'text/json', 'text/javascript'], + 'jsonp' => 'application/javascript', 'jut' => 'image/jutvision', 'kar' => ['audio/midi', 'music/x-karaoke'], 'kne' => 'application/vnd.kinar', From 51346c441c51a91aab923f04ba7f7b065c46655d Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 18 Dec 2018 14:20:31 -0400 Subject: [PATCH 030/100] PMC-200 --- workflow/engine/config/mobileios.pem | 148 ++++++++++----------------- 1 file changed, 55 insertions(+), 93 deletions(-) diff --git a/workflow/engine/config/mobileios.pem b/workflow/engine/config/mobileios.pem index bb56d7bda..6a0728eef 100644 --- a/workflow/engine/config/mobileios.pem +++ b/workflow/engine/config/mobileios.pem @@ -1,111 +1,73 @@ ------BEGIN CERTIFICATE----- -MIIGVTCCBT2gAwIBAgIIC2XzArbAqykwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV -BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js -ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3 -aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw -HhcNMTcxMDA0MTM0MzMwWhcNMTgxMTAzMTM0MzMwWjCBqTEtMCsGCgmSJomT8ixk -AQEMHWNvbS5wcm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyMTswOQYDVQQDDDJBcHBs -ZSBQdXNoIFNlcnZpY2VzOiBjb20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlcjET -MBEGA1UECwwKOTQyUVA3UUpFOTEZMBcGA1UECgwQUHJvY2Vzc01ha2VyIEluYzEL -MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwQgZG -uKp6qEd1Uwgh0qmJLEFlMaIPjxkY+mGjbZyZys73oenLHgPwPukm+64oPdxs7UXl -ZifbWYU4rHbQDEkmOC4GyQU5n9s4zgNtgTqCpab3BuODA/1ffm2OullK1SHmS0cG -Cm8WC93SDa9nmF5xIaiUBbfOsZGcjUKM+MTn/5ETWoZEBUqlf5PKPGZ63/99Q/pj -UxNftY3LTE3o37GYATxFX/sIFtB98vB5hcTdt4zfXHzwisAtqQpkuWIGd5nULX5w -JzlAUjq4werqQhg/k/OAw7kL/JP/PDHpgrbCoO9BZTsAD8H21aZDZR1uDSFSa4H/ -2FeWj286U6Uu10XfAgMBAAGjggKQMIICjDAdBgNVHQ4EFgQUZtV15ABNLGW8Kjjp -yUaQl6f5eRowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2 -R1nFUlSjtzCCARwGA1UdIASCARMwggEPMIIBCwYJKoZIhvdjZAUBMIH9MIHDBggr -BgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55 -IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxl -IHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNh -dGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMu -MDUGCCsGAQUFBwIBFilodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1 -dGhvcml0eTAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmFwcGxlLmNvbS93 -d2RyY2EuY3JsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAQ -BgoqhkiG92NkBgMBBAIFADAQBgoqhkiG92NkBgMCBAIFADCBoAYKKoZIhvdjZAYD -BgSBkTCBjgwdY29tLnByb2Nlc3NtYWtlci5Qcm9jZXNzTWFrZXIwBQwDYXBwDCJj -b20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlci52b2lwMAYMBHZvaXAMKmNvbS5w -cm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyLmNvbXBsaWNhdGlvbjAODAxjb21wbGlj -YXRpb24wDQYJKoZIhvcNAQELBQADggEBADLO70r/cMu7M2A1xNu356IBL4vOtGK7 -nKaAxnjt7aZB+qGTz9xzjH0sHKIefAtlTTSzUzcR/9+gprKt4cdmwgV0zWBpO0UU -7Nu0WreMJKKJ1COO26d8WywvaNdWWHH7+lksZBJFiqFcYvECu3CaMoe77PUqKrWy -R/7MhsHtTsMLz/IMATgMU32NTUs3qKElXjHwTOyE2c+n5VYNoDDMUpx//mbZ5K1B -zA12bA2lg5VLXq4yA9p2Xc2JBg647CXcMQdzPphQ/NZaetcfmE0F01FAF3dfhmmX -jbNoPanngYpPEUVR6kt4MpB/3SeBXgU3HPhBIo7vtfIwI0wT+QlB5bw= ------END CERTIFICATE----- Bag Attributes friendlyName: Apple Push Services: com.processmaker.ProcessMaker - localKeyID: 66 D5 75 E4 00 4D 2C 65 BC 2A 38 E9 C9 46 90 97 A7 F9 79 1A + localKeyID: F1 9A 92 AC CD 22 C3 0B 7A 24 A2 EE 2F 93 87 DD 0E 97 F3 FA subject=/UID=com.processmaker.ProcessMaker/CN=Apple Push Services: com.processmaker.ProcessMaker/OU=942QP7QJE9/O=ProcessMaker Inc/C=US issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority -----BEGIN CERTIFICATE----- -MIIGVTCCBT2gAwIBAgIIC2XzArbAqykwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV +MIIGVTCCBT2gAwIBAgIIBHXDf7O3LYgwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3 aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw -HhcNMTcxMDA0MTM0MzMwWhcNMTgxMTAzMTM0MzMwWjCBqTEtMCsGCgmSJomT8ixk +HhcNMTgxMjE4MTcyMzUxWhcNMjAwMTE3MTcyMzUxWjCBqTEtMCsGCgmSJomT8ixk AQEMHWNvbS5wcm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyMTswOQYDVQQDDDJBcHBs ZSBQdXNoIFNlcnZpY2VzOiBjb20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlcjET MBEGA1UECwwKOTQyUVA3UUpFOTEZMBcGA1UECgwQUHJvY2Vzc01ha2VyIEluYzEL -MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwQgZG -uKp6qEd1Uwgh0qmJLEFlMaIPjxkY+mGjbZyZys73oenLHgPwPukm+64oPdxs7UXl -ZifbWYU4rHbQDEkmOC4GyQU5n9s4zgNtgTqCpab3BuODA/1ffm2OullK1SHmS0cG -Cm8WC93SDa9nmF5xIaiUBbfOsZGcjUKM+MTn/5ETWoZEBUqlf5PKPGZ63/99Q/pj -UxNftY3LTE3o37GYATxFX/sIFtB98vB5hcTdt4zfXHzwisAtqQpkuWIGd5nULX5w -JzlAUjq4werqQhg/k/OAw7kL/JP/PDHpgrbCoO9BZTsAD8H21aZDZR1uDSFSa4H/ -2FeWj286U6Uu10XfAgMBAAGjggKQMIICjDAdBgNVHQ4EFgQUZtV15ABNLGW8Kjjp -yUaQl6f5eRowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2 -R1nFUlSjtzCCARwGA1UdIASCARMwggEPMIIBCwYJKoZIhvdjZAUBMIH9MIHDBggr -BgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55 -IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxl -IHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNh -dGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMu -MDUGCCsGAQUFBwIBFilodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1 -dGhvcml0eTAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmFwcGxlLmNvbS93 -d2RyY2EuY3JsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAQ +MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTiJTM +ExiPxHCgYAD5MUlKnx0z8lQfk0///r12hi36bbXeGWceaCyGMEgWgryAmkvyCTde +gMqE8h9mlEMnq11vwPu9KRjJufnIeGZjpz5JdF5kD+XQp9S5epYgBodJyuLQsFi+ +1d9sArsgNx0xZX+B2qh+Q+GO8/r+01JxwSmecSG5SQQgZZzeCp6soGIKMtxkt4Rp +WCAkV0pROnLF18EVwlHGaFCwABoTR8q5mkixaekyWeRfyb6WoOVXAA/l9fbxTXKr +/4yRV6Gw7Jtu5vmULSqVlfXWTbhNf27hE/sYQmdW124j6uT6UvYF+DPen1PwOore +TaKxqjHbpNvPc6OJAgMBAAGjggKQMIICjDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY +MBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MIIBHAYDVR0gBIIBEzCCAQ8wggELBgkq +hkiG92NkBQEwgf0wgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBj +ZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRo +ZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMg +b2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2Ugc3RhdGVtZW50cy4wNQYIKwYBBQUHAgEWKWh0dHA6Ly93d3cuYXBwbGUu +Y29tL2NlcnRpZmljYXRlYXV0aG9yaXR5MBMGA1UdJQQMMAoGCCsGAQUFBwMCMDAG +A1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwuYXBwbGUuY29tL3d3ZHJjYS5jcmww +HQYDVR0OBBYEFPGakqzNIsMLeiSi7i+Th90Ol/P6MA4GA1UdDwEB/wQEAwIHgDAQ BgoqhkiG92NkBgMBBAIFADAQBgoqhkiG92NkBgMCBAIFADCBoAYKKoZIhvdjZAYD BgSBkTCBjgwdY29tLnByb2Nlc3NtYWtlci5Qcm9jZXNzTWFrZXIwBQwDYXBwDCJj b20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlci52b2lwMAYMBHZvaXAMKmNvbS5w cm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyLmNvbXBsaWNhdGlvbjAODAxjb21wbGlj -YXRpb24wDQYJKoZIhvcNAQELBQADggEBADLO70r/cMu7M2A1xNu356IBL4vOtGK7 -nKaAxnjt7aZB+qGTz9xzjH0sHKIefAtlTTSzUzcR/9+gprKt4cdmwgV0zWBpO0UU -7Nu0WreMJKKJ1COO26d8WywvaNdWWHH7+lksZBJFiqFcYvECu3CaMoe77PUqKrWy -R/7MhsHtTsMLz/IMATgMU32NTUs3qKElXjHwTOyE2c+n5VYNoDDMUpx//mbZ5K1B -zA12bA2lg5VLXq4yA9p2Xc2JBg647CXcMQdzPphQ/NZaetcfmE0F01FAF3dfhmmX -jbNoPanngYpPEUVR6kt4MpB/3SeBXgU3HPhBIo7vtfIwI0wT+QlB5bw= +YXRpb24wDQYJKoZIhvcNAQELBQADggEBAHeOD1oHNW5cRUSq52dIpzBxp/9QnK4M +v9YeNempdjI9ajo3gHzA2iJHpy5+JWTkxuE7iUdTP4KfjL/vYPIJvCdESv+o7wre +SfLMlarSx5X+AmCDsQLMVyb3aoiNA4qE16OIpu+UTs7Np90xtL4bsgLLf0wwVLSF +x74NKKEQLgrhjfThnmZ8a4u7CiVhXSGPosqaXyT43WXKyWreDnCW1Pzm+sfSlD43 +yCKglvGJeDvfWb1RfEJpqNWp7duAb/HiD2oIWrdtN+6XYEucQEuRrKfj2XOHS1+r +rmsU8hWBHhGgMYectSe4nXBOCtyOzDTaYIs+TVCt+xnxCq5ItUaxSQo= -----END CERTIFICATE----- Bag Attributes - friendlyName: ProcessMaker Prod Key - localKeyID: 66 D5 75 E4 00 4D 2C 65 BC 2A 38 E9 C9 46 90 97 A7 F9 79 1A + friendlyName: Mauricio Veliz + localKeyID: F1 9A 92 AC CD 22 C3 0B 7A 24 A2 EE 2F 93 87 DD 0E 97 F3 FA Key Attributes: ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,6D70077A389A3A8C - -bziMWwK5LMeP0dIM2wHeO6juXqzmtH/U9FW5GAZuJEKt0zYAyv1DmEJFfyMMZmob -4j+LfvfdZVium6cIEkC+JMPFwW0dSRQNgA6I44E2AT73MTQr6u7pZi/QiQ09CJCQ -JjFJ2Q08ZgHQXrJMy62PeHO+uWOQW6YuI5aNC/K+AdvIwNyzlCj/HNWcf7IeSaeE -urH5/dL1cVSfpeBXMsqfYSAcfTZOXgAb8BRwngi+RSGNQ6SawEl53vm94gDSH3Mi -3tzCsDcw0Gw5Wu1d/755Zzakl48LOqxLzptbOr5QbJK5BeGhE0y3Db+rYNpG3fzw -I3YdZTMhkzaigG4xp/BLyLL2tgGzSIGg8BARMHF/GkXcdKBJyQrweXMkhhoeYxr2 -dzWurOd0Bkw3DJXONE9uPNQb/i33TYmflQMhWJFlHkKhkHlIgAu5cIzTwRNbHCF7 -aRKiHz5uL+/WufgVlw62JZp9JZ1mPsmJINba4BAT9i9zkUnPvxYN/GB5Z2Ttz1nj -ylyGiAtdAZ7l05OWd7I9gEUTce8dsojThIun3QQ1UFCRJUmg38Dp/XxMzWP5IpTb -E2McM90jyN+M8gII2KU6U5uqTXDiMMFiXFa9WlTc4xIkHNQLINDASBgUQr7pIqth -UTvU4YoST6wma9BNYAuGX9ga6uEg94kmVXrUEBZWI13T56bSpw4cyvzSJvNwcH8m -nClVXMIrysoGgQ1Gxs6G2xWTduXysK5E26bY6Gypk9VPMUyo6oVENnY3EQs3Cj/R -W2vyz1t05xPonPxmun2mFTQQvgSbbkfUbuL02tBQXxkWNoo5rCAVuRMFlVjFzIEF -qZ3uiU8ui5Nj1Tc5SAosuoTu53vLp4ynn9A5WVmLXdE1DucCXTumN8teISF69cUU -XYVy2Ch39LxUGumWTSVZNDJBJgSFtiNxCmpwS4jQsNRF9piK/T+t3INSXRcRB9mF -f3DYOrjor6TTu0hEppZosIUfoo7EDgplfMK5x9ZjL8JWSWEqA2U2JoRbe9ucMkGy -wbFTsbyg9NNSdF1jEZUEKWKr7dT3ShPHhut/F9HOi5KvbMAgUf0HnYgUsCTYhZru -UbVf8cWnfYPyVUW3Doa12/uSpqwrHzOduexb1LzO0mukdfyR7UhY/rRv5w4KkTXJ -+zlNncWiSZQiDJq053i8UYhDj0U7+YzmpxE/BUU5HwMcZ8wtl0MDac66Z1YXkqgs -bO2dK71tNQ1D5msmDDP+Cw0W4wLdRiJn8FNF5oBl2QYMyTyclduhrlCMp8VgnMmT -mDrygATrWoaToSiR+Mc6D7rOLyHt+29HMtFx1Lgs3jpgzLQ4nBWBtLN5uxkxTclH -W35sMR2eDYiM7nEO9TJSBlC8lkFiGsv4xYYK8gLEZ2h7OMPrO/9L9CmHk/v3Ts8I -wSt0FiVZNP4JEL0NZ5nSZMnDT0R47CuFkEgf271Um4lNPPRV7mPA0fWkKXt59FeK -LoBZYkGes/QliAUWdY44tVKgg6oIM6IqubsO92Hru5o36Px7ucVoqiNHnSy1lo/v -KAfvW9/40XJ+z1JUTYwreaLoO+Wlk0Irkvv4Fro0KTA8rXDNFm/JL2gkgknEae4i ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTiJTMExiPxHCg +YAD5MUlKnx0z8lQfk0///r12hi36bbXeGWceaCyGMEgWgryAmkvyCTdegMqE8h9m +lEMnq11vwPu9KRjJufnIeGZjpz5JdF5kD+XQp9S5epYgBodJyuLQsFi+1d9sArsg +Nx0xZX+B2qh+Q+GO8/r+01JxwSmecSG5SQQgZZzeCp6soGIKMtxkt4RpWCAkV0pR +OnLF18EVwlHGaFCwABoTR8q5mkixaekyWeRfyb6WoOVXAA/l9fbxTXKr/4yRV6Gw +7Jtu5vmULSqVlfXWTbhNf27hE/sYQmdW124j6uT6UvYF+DPen1PwOoreTaKxqjHb +pNvPc6OJAgMBAAECggEAfYWZjjNyqrUNhA0T5sr5S795S77rbkUy/pxB/xgGJol9 +lwqJ50A303TJAhqYEtP8ZuZTJc/U3Ojz+yHVa6/DZTIl74x4ehPShcP0NgQi8OGN +tWC9pYBBucJlXSGinAY5a06JisxMpMJGGgq6Vvp8nCiNPUe4i+R5N0dcr8XIlYxG +FU+r6rGqmcRGxPp8yQfh5fP1P+9xyjZt1WuUuvF4Y5dTeVmR0z/dZQqlrC0Q5hAD +kAfimf31ViPYaNwhxHTG53aC8GMbRJqTeM/MW3bZ+dVRcW8Yk2Ym/mbDY3cQvi0V +sGOVDHaoJNa8pfQNZ+y+tvJPRYIdbmPG2pGcJeuqAQKBgQDtQiZ8/V4DBmboZyBt +60Rnafue1bSfQssxoOuNtlRosOW28piCfNRftYhCKT3ylKbPVY02ekNisUIJYaZI +8ipCGNGdZD2oOitWVYDDq+A9O28JinsJc5i9ffQQ6dK+Krw5k7Bo4DzytwhJlwXa +8YxvntN7PlzM68wncKL+1jnwSQKBgQDkPjilC/4UiXnGmhFeu6oZ6dz0V7yjdoP0 +ApdHVsOvCyIIl34vBy4Du4iZ/xXzwd+ZwOsTHXf8iU1Ayig5WFNDsr+HRItvNRg+ +FxOSiqLnclJYsJMNtGN7SnlTKyGWGpxzCydaeOq1Yapq8VkcFL9gtZYt911prD0u +THx2vRKZQQKBgF3ZwOfIQZvouGROBuH0IobVwZa+6kflYAMtqH/SE+mlr/iCVhmn +z0pcwJ2LOtnuO13gdY+LJYSwoXKcke5g/J5QuvoLYOheui3YfKrqHjWagP3BLZI7 +i7vJSvY1yAs5VGNiLHIP4YwRItIZT1OgIPE2Xmlt7b+RtpwTTiaIDzshAoGBAMmN +TJYq9e8Ky5eem/ItBHQnuW+oPrOWx8VluFNOAjWEPkSaCtramz6+j012HduIe70Z +yDy0DC3czXSGUGj7X2Pr6Ag6dmr41vSVijog5OQ/Zwpcuy8h+at5Q5Q3BUy5KSjK +U7EoEBOmMEiJ4ifTBoEPOZRT2ZCkgc5tyodMRa1BAoGAKE39g4yX+H+/kXtXqe7d +/lCBWbPTLGxo43HROjcftXvsZi+voYDlDQVfD6d3Ew8rLMWYfZ4hVYtWR4AeE0My +7aeW6JX2hD6kANFOlOCOUApZeL2X9SiCUyXQWb5M+oSmS63IWK9eHamBNqzpY6HU +V2ajfnwBPcbydtbtUcv7D7k= +-----END PRIVATE KEY----- \ No newline at end of file From 21b91db43cd67d83c48f715d6470e26c5bd5dc7c Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Tue, 8 Jan 2019 15:34:10 -0400 Subject: [PATCH 031/100] PMC-348 Add marks and register the new classes for avoid this implementation in the community version --- workflow/engine/bin/cron_single.php | 4 ++++ .../BusinessModel/ActionsByEmail/ResponseReader.php | 2 ++ .../engine/src/ProcessMaker/Services/Api/ActionsByEmail.php | 2 ++ workflow/engine/templates/emailServer/emailServer.js | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 5098a3339..64cacd92b 100644 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -1,7 +1,9 @@ actionsByEmailEmailResponse(); break; + /*----------------------------------********---------------------------------*/ } } catch (Exception $e) { $token = strtotime("now"); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 447835910..b7117228d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -30,6 +30,7 @@ use WsBase; */ class ResponseReader { + /*----------------------------------********---------------------------------*/ private $channel = "ActionsByEmail"; private $case = []; private $messageResponseError = null; @@ -347,4 +348,5 @@ class ResponseReader ); return $result; } + /*----------------------------------********---------------------------------*/ } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php index a1646e6ee..63045f2ec 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/ActionsByEmail.php @@ -154,11 +154,13 @@ class ActionsByEmail extends Api $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmail.html', $path . 'actionsByEmail.html'); } + /*----------------------------------********---------------------------------*/ if (!file_exists($path . 'actionsByEmailErrorReply.html')) { $data = array('prf_content' => '', 'prf_filename' => 'actionsByEmailErrorReply.html', 'prf_path' => 'templates'); $arrayData = $filesManager->addProcessFilesManager($proId, $userUid, $data); @copy(PATH_TPL . 'actionsByEmail' . PATH_SEP . 'actionsByEmailErrorReply.html', $path . 'actionsByEmailErrorReply.html'); } + /*----------------------------------********---------------------------------*/ } $directory = dir($path); diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index d7976acb9..7341082b6 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -71,6 +71,7 @@ emailServer.application = { emailServerDefault: emailDefault }; } else if (typeEmailEngine === "IMAP") { + /*----------------------------------********---------------------------------*/ var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); var smtpSecure = rdoGrpOption.getGroupValue(); @@ -92,6 +93,7 @@ emailServer.application = { mailTo: Ext.getCmp("txtMailTo").getValue(), emailServerDefault: emailDefault }; + /*----------------------------------********---------------------------------*/ } else { //MAIL p = { @@ -304,6 +306,7 @@ emailServer.application = { Ext.getCmp("txtIncomingPort").allowBlank = true; Ext.getCmp("txtAccountFrom").allowBlank = false; } else if (cboEmailEngine === "IMAP") { + /*----------------------------------********---------------------------------*/ Ext.getCmp("txtServer").setVisible(true); Ext.getCmp("txtPort").setVisible(true); @@ -330,6 +333,7 @@ emailServer.application = { Ext.getCmp("txtIncomingServer").allowBlank = false; Ext.getCmp("txtIncomingPort").allowBlank = false; Ext.getCmp("txtAccountFrom").allowBlank = false; + /*----------------------------------********---------------------------------*/ } else { //MAIL Ext.getCmp("txtServer").setVisible(false); From 75a5a4a3600f2a66dfcdd28ac324c8ea68a19554 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 25 Jan 2019 10:59:53 -0400 Subject: [PATCH 032/100] add mark for remove options IMAP --- workflow/engine/templates/emailServer/emailServer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index 7341082b6..dc72cd436 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -552,7 +552,9 @@ emailServer.application = { data: [ ["PHPMAILER", "SMTP (PHPMailer)"], + /*----------------------------------********---------------------------------*/ ["IMAP", "SMTP - IMAP (PHPMailer)"], + /*----------------------------------********---------------------------------*/ ["MAIL", "Mail (PHP)"] ] }); From 6fefd80c86521448c2585893b4327d2a777ff4bb Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Thu, 31 Jan 2019 13:18:48 -0400 Subject: [PATCH 033/100] PMC-446: Action by Email: Update composer-lock file with php-imap dependency --- composer.lock | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/composer.lock b/composer.lock index 527736ee1..de7acb1d9 100644 --- a/composer.lock +++ b/composer.lock @@ -1224,6 +1224,58 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-imap/php-imap", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/barbushin/php-imap.git", + "reference": "d4f8ef4504dfb555857241aa7d1e414a1c229079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barbushin/php-imap/zipball/d4f8ef4504dfb555857241aa7d1e414a1c229079", + "reference": "d4f8ef4504dfb555857241aa7d1e414a1c229079", + "shasum": "" + }, + "require": { + "ext-imap": "*", + "php": ">=5.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpImap\\": "src/PhpImap" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sergey Barbushin", + "email": "barbushin@gmail.com", + "homepage": "http://linkedin.com/in/barbushin" + } + ], + "description": "Manage mailboxes, filter/get/delete emails in PHP (supports IMAP/POP3/NNTP)", + "homepage": "https://github.com/barbushin/php-imap", + "keywords": [ + "imap", + "mail", + "mailbox", + "php", + "pop3", + "receive emails" + ], + "time": "2017-12-22T12:53:34+00:00" + }, { "name": "phpmailer/phpmailer", "version": "v5.2.4", From b56d7a48d1f53c4bcea7c880288ddb8aa20883fd Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Wed, 13 Feb 2019 14:10:51 -0400 Subject: [PATCH 034/100] PMC-450 Variables setup on 'ABE response' does not works with names different when it has two flows. --- .../ActionsByEmail/ResponseReader.php | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 50854be36..70a6fec03 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -20,7 +20,6 @@ use PMLicensedFeatures; use ProcessMaker\BusinessModel\ActionsByEmail; use ProcessMaker\BusinessModel\EmailServer; use ProcessMaker\ChangeLog\ChangeLog; -use ProcessMaker\Core\System; use ResultSet; use WsBase; @@ -57,13 +56,13 @@ class ResponseReader public function actionsByEmailEmailResponse() { try { + if (!extension_loaded('imap')) { + G::outRes(G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", ['php_imap']) . "\n"); + exit; + } if (PMLicensedFeatures ::getSingleton() ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { - require_once(PATH_DB . config("system.workspace") . PATH_SEP . "/db.php"); - $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); - define('SYS_SKIN', $arraySystemConfiguration['default_skin']); - $criteriaAbe = new Criteria(); $criteriaAbe->add(AbeConfigurationPeer::ABE_TYPE, "RESPONSE"); $resultAbe = AbeConfigurationPeer::doSelectRS($criteriaAbe); @@ -76,7 +75,7 @@ class ResponseReader } catch (Exception $e) { Bootstrap::registerMonolog( $this->channel, - $e->getCode(), + $e->getCode() != 0 ? $e->getCode() : 300, $e->getMessage(), $this->case, config("system.workspace"), @@ -117,7 +116,7 @@ class ResponseReader $emailSetup = (!is_null(EmailServerPeer::retrieveByPK($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID']))) ? $emailServer->getEmailServer($dataAbe['ABE_EMAIL_SERVER_RECEIVER_UID'], true) : $emailServer->getEmailServerDefault(); - if (empty($emailSetup)) { + if (empty($emailSetup) || (empty($emailSetup['MESS_INCOMING_SERVER']) && $emailSetup['MESS_INCOMING_PORT'] == 0)) { throw (new Exception(G::LoadTranslation('ID_ABE_LOG_CANNOT_READ'), 500)); } $mailbox = new Mailbox( @@ -130,13 +129,15 @@ class ResponseReader $mailsIds = $mailbox->searchMailbox('UNSEEN'); if ($mailsIds) { // Get the first message and save its attachment(s) to disk: - foreach ($mailsIds as $key => $mailsId) { + foreach ($mailsIds as $key => $mailId) { /** @var IncomingMail $mail */ - $mail = $mailbox->getMail($mailsId); + $mail = $mailbox->getMail($mailId, false); preg_match("/{(.*)}/", $mail->textPlain, $matches); if ($matches) { $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); - if (config("system.workspace") === $dataEmail['workspace']) { + $dataAbeReq = loadAbeRequest($dataEmail['ABE_REQ_UID']); + if (config("system.workspace") === $dataEmail['workspace'] + && (array_key_exists('ABE_UID', $dataAbeReq) && $dataAbeReq['ABE_UID'] == $dataAbe['ABE_UID'])) { $this->case = $dataEmail; try { $appDelegate = new AppDelegation(); @@ -147,6 +148,7 @@ class ResponseReader throw (new Exception(G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'), 400)); } $this->processABE($this->case, $mail, $dataAbe); + $mailbox->markMailAsRead($mailId); Bootstrap::registerMonolog( $this->channel, 100, // DEBUG @@ -164,7 +166,7 @@ class ResponseReader ); Bootstrap::registerMonolog( $this->channel, - $e->getCode(), + $e->getCode() != 0 ? $e->getCode() : 400, $e->getMessage(), $this->case, config("system.workspace"), @@ -178,7 +180,7 @@ class ResponseReader } catch (Exception $e) { Bootstrap::registerMonolog( $this->channel, - $e->getCode(), + $e->getCode() != 0 ? $e->getCode() : 500, $e->getMessage(), $this->case, config("system.workspace"), From d81b77f299add0b351dbeef931facb77b6500ede Mon Sep 17 00:00:00 2001 From: Rodrigo Quelca Date: Wed, 27 Feb 2019 15:22:43 -0400 Subject: [PATCH 035/100] PMC-529: Implement the asynchronous dependent fields in pmDynaform --- workflow/engine/templates/cases/pmdynaform.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflow/engine/templates/cases/pmdynaform.html b/workflow/engine/templates/cases/pmdynaform.html index fd91d6578..94d048711 100644 --- a/workflow/engine/templates/cases/pmdynaform.html +++ b/workflow/engine/templates/cases/pmdynaform.html @@ -11,6 +11,7 @@ + @@ -21,6 +22,7 @@ + From fe1eaeaca80d48bb59e3333f361ef0e63a521b8b Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 1 Mar 2019 11:50:34 -0400 Subject: [PATCH 036/100] PMC-507 --- workflow/engine/classes/ActionsByEmailCoreClass.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 75c0be2de..c4d8e24f8 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -466,8 +466,6 @@ class ActionsByEmailCoreClass extends PMPlugin $from = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); } else { global $RBAC; - $currentUser = $RBAC->aUserInfo['USER_INFO']; - $from = ($currentUser["USR_FIRSTNAME"] . ' ' . $currentUser["USR_LASTNAME"] . ' <' . $currentUser["USR_EMAIL"] . '>'); if ($RBAC != null && is_array($RBAC->aUserInfo['USER_INFO'])) { $currentUser = $RBAC->aUserInfo['USER_INFO']; From c3145df6ff5218c554169da8350aebc3516aad5a Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 13 Mar 2019 09:09:42 -0400 Subject: [PATCH 037/100] PMC-551 --- workflow/engine/classes/PmDynaform.php | 99 ++++++++++++++++--- .../translations/english/processmaker.en.po | 6 ++ workflow/engine/data/mysql/insert.sql | 1 + .../ProcessMaker/BusinessModel/Variable.php | 7 ++ 4 files changed, 99 insertions(+), 14 deletions(-) diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index 4169c3a10..033dfc8ce 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -14,27 +14,65 @@ class PmDynaform { use SuggestTrait; - public static $instance = null; - public $fields = null; - public $record = null; - public $records = null; + private $cache = []; + private $context = []; + private $databaseProviders = null; + private $dataSources = null; + private $lastQueryError = null; + private $propertiesToExclude = []; + private $sysSys = null; public $credentials = null; + public $displayMode = null; + public $fields = null; + public $isRTL = false; public $lang = SYS_LANG; public $langs = null; - public $displayMode = null; public $onPropertyRead = "onPropertyReadFormInstance"; - public $isRTL = false; public $pathRTLCss = ''; + public $record = null; + public $records = null; public $serverConf = null; - private $cache = array(); - private $sysSys = null; - private $context = array(); - private $dataSources = null; - private $databaseProviders = null; - private $propertiesToExclude = array(); - public static $prefixs = array("@@", "@#", "@%", "@?", "@$", "@="); + public static $instance = null; + public static $prefixs = ["@@", "@#", "@%", "@?", "@$", "@="]; - public function __construct($fields = array()) + /** + * Constructor + * + * @param array $fields + * @see workflow/engine/classes/class.pmFunctions.php PMFDynaFormFields() + * @see workflow/engine/classes/class.pmFunctions.php PMFgetLabelOption() + * @see \ConsolidatedCases->processConsolidated() + * @see \WorkspaceTools->syncFormsWithInputDocumentInfo() + * @see workflow/engine/methods/cases/ajaxListener.php Ajax->dynaformViewFromHistory() + * @see workflow/engine/methods/cases/caseConsolidated.php + * @see workflow/engine/methods/cases/cases_SaveData.php + * @see workflow/engine/methods/cases/cases_Step.php + * @see workflow/engine/methods/cases/cases_StepToRevise.php + * @see workflow/engine/methods/cases/casesHistoryDynaformPage_Ajax.php + * @see workflow/engine/methods/cases/pmDynaform.php + * @see workflow/engine/methods/cases/summary.php + * @see workflow/engine/methods/services/ActionsByEmailDataForm.php + * @see workflow/engine/plugins/EnterpriseSearch/display_dynaform.php + * @see workflow/engine/plugins/EnterpriseSearch/dynaform_view1.php + * @see \ProcessMaker\BusinessModel\ActionsByEmail->viewFormBpmn() + * @see \ProcessMaker\BusinessModel\Cases->getCaseVariables() + * @see \ProcessMaker\BusinessModel\Consolidated->getDataGenerate() + * @see \ProcessMaker\BusinessModel\InputDocument->update() + * @see \ProcessMaker\BusinessModel\Light\Tracker->showObjects() + * @see \ProcessMaker\BusinessModel\Variable->delete() + * @see \ProcessMaker\BusinessModel\Variable->executeSqlControl() + * @see \ProcessMaker\BusinessModel\Variable->update() + * @see \ProcessMaker\Core\System\ActionsByEmailCoreClass->sendActionsByEmail() + * @see \ProcessMaker\Services\Api\Light->doGetDynaForm() + * @see \ProcessMaker\Services\Api\Light->doGetDynaformProcessed() + * @see \ProcessMaker\Services\Api\Light->doGetDynaForms() + * @see \ProcessMaker\Services\Api\Light->doGetDynaFormsId() + * @see \ProcessMaker\Services\Api\Project\DynaForm->doDeleteDynaFormLanguage() + * @see \ProcessMaker\Services\Api\Project\DynaForm->doGetDynaFormLanguage() + * @see \ProcessMaker\Services\Api\Project\DynaForm->doGetListDynaFormLanguage() + * @see \ProcessMaker\Services\Api\Project\DynaForm->doPostDynaFormLanguage() + */ + public function __construct($fields = []) { $this->sysSys = (!empty(config("system.workspace"))) ? config("system.workspace") : "Undefined"; $this->context = \Bootstrap::getDefaultContextLog(); @@ -738,6 +776,17 @@ class PmDynaform return $data; } + /** + * Get data from cache query. + * + * @param string $connection + * @param string $sql + * @param string $type + * @param boolean $clearCache + * @return array + * @see \PmDynaform->jsonr() + * @see \PmDynaform->getValuesDependentFields() + */ private function getCacheQueryData($connection, $sql, $type = "", $clearCache = false) { $data = []; @@ -766,6 +815,7 @@ class PmDynaform } catch (Exception $e) { $this->context["action"] = "execute-sql" . $type; $this->context["exception"] = (array) $e; + $this->lastQueryError = $e; \Bootstrap::registerMonolog("sqlExecution", 400, "Sql Execution", @@ -2237,5 +2287,26 @@ class PmDynaform $googleMaps->signature = $config['google_map_signature']; $result = 'var googleMaps = ' . G::json_encode($googleMaps) . ';'; return $result; + } + + /** + * Get last query error. + * + * @return object + * @see ProcessMaker\BusinessModel\Variable->executeSqlControl() + */ + public function getLastQueryError() + { + return $this->lastQueryError; + } + + /** + * Clear last query error. + * + * @see ProcessMaker\BusinessModel\Variable->executeSqlControl() + */ + public function clearLastQueryError() + { + $this->lastQueryError = null; } } diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 8f6edb9b1..808692b8f 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -7469,6 +7469,12 @@ msgstr "There was a problem installing this add-on." msgid "Error in server" msgstr "Error in server" +# TRANSLATION +# LABEL/ID_ERROR_IN_THE_QUERY +#: LABEL/ID_ERROR_IN_THE_QUERY +msgid "Error in the query" +msgstr "Error in the query" + # TRANSLATION # LABEL/ID_ERROR_JS_NOT_AVAILABLE #: LABEL/ID_ERROR_JS_NOT_AVAILABLE diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 176ec2005..0e20f4b99 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -58066,6 +58066,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ERROR_INSERT_LINE','en','Error trying to insert the line','2014-01-15') , ( 'LABEL','ID_ERROR_INSTALLING_ADDON','en','There was a problem installing this add-on.','2014-10-21') , ( 'LABEL','ID_ERROR_IN_SERVER','en','Error in server','2015-09-15') , +( 'LABEL','ID_ERROR_IN_THE_QUERY','en','Error in the query','2019-03-12') , ( 'LABEL','ID_ERROR_JS_NOT_AVAILABLE','en','Your browser doesn''t support JavaScript or it may be disabled. Please use a different browser or enable JavaScript. Dynaforms won''t entirely work because JavaScript is required.','2014-10-21') , ( 'LABEL','ID_ERROR_MESSAGE','en','Error Message','2017-02-22') , ( 'LABEL','ID_ERROR_OBJECT_NOT_EXISTS','en','Error: Object does not exist.','2014-01-15') , diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index 4ebb70939..ac7c5e18b 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -749,6 +749,8 @@ class Variable * * @return array * @throws Exception + * @see ProcessMaker\BusinessModel\Variable->executeSql() + * @see ProcessMaker\BusinessModel\Variable->executeSqlSuggest() */ public function executeSqlControl($proUid, array $params = []) { @@ -809,7 +811,12 @@ class Variable } //Populate control data + $pmDynaform->clearLastQueryError(); $pmDynaform->jsonr($field); + $error = $pmDynaform->getLastQueryError(); + if (!empty($error) && is_object($error)) { + throw new Exception(G::LoadTranslation("ID_ERROR_IN_THE_QUERY")); + } $result = []; if (isset($field->queryOutputData) && is_array($field->queryOutputData)) { foreach ($field->queryOutputData as $item) { From 3d8fdf1443f00d66730c155a3db1538dddf9f475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 13:36:08 -0400 Subject: [PATCH 038/100] PMC-565 --- bootstrap/classaliasmap.php | 1 - workflow/engine/bin/tasks/cliUpgrade.php | 287 +++++++++--------- workflow/engine/bin/tasks/cliWorkspaces.php | 85 +----- workflow/engine/classes/Upgrade.php | 128 -------- workflow/engine/classes/WorkspaceTools.php | 273 ++++++++--------- .../engine/classes/model/AddonsManager.php | 8 +- .../engine/src/ProcessMaker/Core/System.php | 33 -- 7 files changed, 268 insertions(+), 547 deletions(-) delete mode 100644 workflow/engine/classes/Upgrade.php diff --git a/bootstrap/classaliasmap.php b/bootstrap/classaliasmap.php index 62e24f3f0..734997540 100644 --- a/bootstrap/classaliasmap.php +++ b/bootstrap/classaliasmap.php @@ -80,7 +80,6 @@ return array( 'ToolBar' => ToolBar::class, 'Tree' => PmTree::class, 'triggerLibrary' => TriggerLibrary::class, - 'Upgrade' => Upgrade::class, 'workspaceTools' => WorkspaceTools::class, 'wsBase' => WsBase::class, 'wsResponse' => WsResponse::class, diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index a1d181dcf..d09d3adff 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -5,14 +5,16 @@ use ProcessMaker\Core\System; CLI::taskName('upgrade'); CLI::taskDescription("Upgrade workspaces.\n\n This command should be run after upgrading ProcessMaker to a new version so that all workspaces are also upgraded to the\n new version."); - +CLI::taskOpt('child', "Used by the main upgrade thread", 'child', 'child'); CLI::taskOpt('buildACV', 'If this option is enabled, the Cache View is built.', 'ACV', 'buildACV'); CLI::taskOpt('noxml', 'If this option is enabled, the XML files translation is not built.', 'NoXml', 'no-xml'); +CLI::taskOpt('nomafe', 'If this option is enabled, the MAFE files translation is not built.', 'nomafe', 'no-mafe'); /*----------------------------------********---------------------------------*/ CLI::taskOpt('keep_dyn_content', "Include the DYN_CONTENT_HISTORY value. Ex: --keep_dyn_content", 'i', 'keep_dyn_content'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_upgrade"); /*----------------------------------********---------------------------------*/ + CLI::taskName('unify-database'); CLI::taskDescription( << $workspace) { - $oneWorkspace = $workspace->name; + // Initializing variables + $globalStartTime = microtime(true); + $numberOfWorkspaces = count($workspaces); + $countWorkspace = 1; + + if ($printHF) { + // Set upgrade flag + if (count($workspaces) === 1) { + // For the specific workspace send in the command + G::isPMUnderUpdating(1, $workspaces[0]->name); + } else { + // For all workspaces + G::isPMUnderUpdating(1); } + + // Print information when start the upgrade process + CLI::logging('UPGRADE LOG INITIALIZED', PROCESSMAKER_PATH . 'upgrade.log'); + CLI::logging("UPGRADE STARTED\n"); } - $flag = G::isPMUnderUpdating(1, $oneWorkspace); - //start to upgrade - $checksum = System::verifyChecksum(); - if ($checksum === false) { - CLI::logging(CLI::error("checksum.txt not found, integrity check is not possible") . "\n"); - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } else { - if (!empty($checksum['missing'])) { - CLI::logging(CLI::error("The following files were not found in the installation:")."\n"); - foreach ($checksum['missing'] as $missing) { - CLI::logging(" $missing\n"); + + foreach ($workspaces as $workspace) { + if ($mainThread) { + CLI::logging("FOLDERS AND FILES OF THE SYSTEM\n"); + // Upgrade actions for global files + CLI::logging("* Start cleaning compiled folder...\n"); + $start = microtime(true); + if (defined('PATH_C')) { + G::rm_dir(PATH_C); + G::mk_dir(PATH_C, 0777); } - } - if (!empty($checksum['diff'])) { - CLI::logging(CLI::error("The following files have modifications:")."\n"); - foreach ($checksum['diff'] as $diff) { - CLI::logging(" $diff\n"); + CLI::logging("* End cleaning compiled folder...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to remove deprecated files...\n"); + $start = microtime(true); + $workspace->removeDeprecatedFiles(); + CLI::logging("* End to remove deprecated files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking Enterprise folder/files...\n"); + $start = microtime(true); + $workspace->verifyFilesOldEnterprise(); + CLI::logging("* End checking Enterprise folder/files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking framework paths...\n"); + $start = microtime(true); + $workspace->checkFrameworkPaths(); + CLI::logging("* End checking framework paths...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start fixing serialized instance in serverConf.singleton file...\n"); + $start = microtime(true); + $serverConf = ServerConf::getSingleton(); + $serverConf->updateClassNameInFile(); + CLI::logging("* End fixing serialized instance in serverConf.singleton file...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...\n"); + $start = microtime(true); + G::browserCacheFilesSetUid(); + CLI::logging("* End the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to backup patch files...\n"); + $arrayPatch = glob(PATH_TRUNK . 'patch-*'); + if ($arrayPatch) { + foreach ($arrayPatch as $value) { + if (file_exists($value)) { + // Copy patch content + $names = pathinfo($value); + $nameFile = $names['basename']; + + $contentFile = file_get_contents($value); + $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); + CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); + + // Move patch file + $newFile = PATH_DATA . $nameFile; + G::rm_dir($newFile); + copy($value, $newFile); + G::rm_dir($value); + } + } } - } - if (!(empty($checksum['missing']) || empty($checksum['diff']))) { - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } - } - CLI::logging("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - G::mk_dir(PATH_C, 0777); - } + CLI::logging("* End to backup patch files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - $count = count($workspaces); - $first = true; - $errors = false; - $countWorkspace = 0; - $buildCacheView = array_key_exists('buildACV', $args); - $flagUpdateXml = !array_key_exists('noxml', $args); - $optionMigrateHistoryData = [ - /*----------------------------------********---------------------------------*/ - 'keepDynContent' => array_key_exists('keep_dyn_content', $args) - /*----------------------------------********---------------------------------*/ - ]; + CLI::logging("* Start to backup log files...\n"); + $start = microtime(true); + $workspace->backupLogFiles(); + CLI::logging("* End to backup log files... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - foreach ($workspaces as $index => $workspace) { - if (empty(config("system.workspace"))) { - define("SYS_SYS", $workspace->name); - config(["system.workspace" => $workspace->name]); + // The previous actions should be executed only the first time + $mainThread = false; } + if ($numberOfWorkspaces === 1) { + // Displaying information of the current workspace to upgrade + CLI::logging("UPGRADING DATABASE AND FILES OF WORKSPACE '{$workspace->name}' ($countWorkspace/$numberOfWorkspaces)\n"); - if (!defined("PATH_DATA_SITE")) { - define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP); - } + // Build parameters + $arrayOptTranslation = [ + 'updateXml' => $updateXmlForms, + 'updateMafe' => $updateMafe + ]; + $optionMigrateHistoryData = [ + 'keepDynContent' => $keepDynContent + ]; - if (!defined('DB_ADAPTER')) { - define('DB_ADAPTER', 'mysql'); - } - - try { - $countWorkspace++; - CLI::logging("Upgrading workspaces ($countWorkspace/$count): " . CLI::info($workspace->name) . "\n"); - $workspace->upgrade($buildCacheView, $workspace->name, false, 'en', ['updateXml' => $flagUpdateXml, 'updateMafe' => $first], $optionMigrateHistoryData); + // Upgrade database and files from a specific workspace + $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - CLI::logging("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - $errors = true; + } else { + // Build arguments + $args = '--child'; + $args .= $updateXmlForms ? '' : ' --no-xml'; + $args .= $updateMafe ? '' : ' --no-mafe'; + $args .= $keepDynContent ? ' --keep_dyn_content' : ''; + + // Build and execute command in another thread + $command = PHP_BINARY . ' processmaker upgrade ' . $args . ' ' . $workspace->name; + passthru($command); } + + // After the first execution is required set this values to false + $updateXmlForms = false; + $updateMafe = false; + + // Increment workspaces counter + $countWorkspace++; } - //Verify the information of the singleton ServConf by changing the name of the class if is required. - CLI::logging("\nCheck/Fix serialized instance in serverConf.singleton file\n\n"); - $serverConf = ServerConf::getSingleton(); - $serverConf->updateClassNameInFile(); + if ($printHF) { + // Print information when finish the upgrade process + CLI::logging('UPGRADE FINISHED (Completed on ' . (microtime(true) - $globalStartTime) . + ' seconds), ProcessMaker ' . System::getVersion() . ' installed)' . "\n\n"); - // SAVE Upgrades/Patches - $arrayPatch = glob(PATH_TRUNK . 'patch-*'); - - if ($arrayPatch) { - foreach ($arrayPatch as $value) { - if (file_exists($value)) { - // copy content the patch - $names = pathinfo($value); - $nameFile = $names['basename']; - - $contentFile = file_get_contents($value); - $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); - CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); - - // move file of patch - $newFile = PATH_DATA . $nameFile; - G::rm_dir($newFile); - copy($value, $newFile); - G::rm_dir($value); - } - } - } else { - CLI::logging('ProcessMaker ' . System::getVersion(). ' installed', PATH_DATA . 'log/upgrades.log'); + // Delete upgrade flag + G::isPMUnderUpdating(0); } - - //Safe upgrade for JavaScript files - CLI::logging("\nSafe upgrade for files cached by the browser\n\n"); - - G::browserCacheFilesSetUid(); - - //Status - if ($errors) { - CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n"); - CLI::logging(CLI::error("Please check the log above to correct any issues.") . "\n"); - } else { - CLI::logging("Upgrade successful\n"); - } - - //setting flag to false - $flag = G::isPMUnderUpdating(0); } -function listFiles($dir) -{ - $files = array(); - $lista = glob($dir.'/*'); - foreach ($lista as $valor) { - if (is_dir($valor)) { - $inner_files = listFiles($valor); - if (is_array($inner_files)) { - $files = array_merge($files, $inner_files); - } - } - if (is_file($valor)) { - array_push($files, $valor); - } - } - return $files; -} /*----------------------------------********---------------------------------*/ function run_unify_database($args) { diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index b6bb6cba4..c04d45158 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -103,26 +103,6 @@ EOT CLI::taskArg('workspace', true, true); CLI::taskRun("run_plugins_database_upgrade"); -CLI::taskName('workspace-upgrade'); -CLI::taskDescription(<<name); - } - } -} - -/** - * This function is executed only by one workspace, for the command workspace-upgrade - * - * @param array $args, workspace name for to apply the upgrade - * @param array $opts, specify additional arguments for language, flag for buildACV, flag for noxml - * - * @return void - */ -function workspace_upgrade($args, $opts) { - $first = true; - $workspaces = get_workspaces_from_args($args); - $lang = array_key_exists("lang", $opts) ? $opts['lang'] : 'en'; - $buildCacheView = array_key_exists('buildACV', $opts); - $flagUpdateXml = !array_key_exists('noxml', $opts); - - $wsName = $workspaces[key($workspaces)]->name; - Bootstrap::setConstantsRelatedWs($wsName); - //Loop, read all the attributes related to the one workspace - foreach ($workspaces as $workspace) { - try { - $workspace->upgrade( - $buildCacheView, - $workspace->name, - false, - $lang, - ['updateXml' => $flagUpdateXml, 'updateMafe' => $first] - ); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - G::outRes("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - } - } -} - /** * 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 @@ -1181,7 +1098,7 @@ function migrate_content($args, $opts) foreach ($workspaces as $workspace) { print_r('Regenerating content in: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); CLI::logging("-> Regenerating content \n"); - $workspace->migrateContentRun($workspace->name, $lang); + $workspace->migrateContentRun($lang); } $stop = microtime(true); CLI::logging("<*> Optimizing content data Process took " . ($stop - $start) . " seconds.\n"); diff --git a/workflow/engine/classes/Upgrade.php b/workflow/engine/classes/Upgrade.php deleted file mode 100644 index 67fa51dcf..000000000 --- a/workflow/engine/classes/Upgrade.php +++ /dev/null @@ -1,128 +0,0 @@ -addon = $addon; - } - - public function install() - { - - $filter = new InputFilter(); - $start = microtime(1); - $filename = $this->addon->getDownloadFilename(); - $time = microtime(1); - - $archive = new Archive_Tar ($filename); - $time = microtime(1); - $extractDir = dirname($this->addon->getDownloadFilename()) . "/extract"; - $extractDir = $filter->xssFilterHard($extractDir); - $backupDir = dirname($this->addon->getDownloadFilename()) . "/backup"; - $backupDir = $filter->xssFilterHard($backupDir); - if (file_exists($extractDir)) { - G::rm_dir($extractDir); - } - if (file_exists($backupDir)) { - G::rm_dir($backupDir); - } - if (!is_dir($backupDir)) { - mkdir($backupDir); - } - - $time = microtime(1); - echo "Extracting files...\n"; - $archive->extractModify($extractDir, 'processmaker'); - $checksumFile = file_get_contents("$extractDir/checksum.txt"); - $time = microtime(1); - $checksums = array(); - foreach (explode("\n", $checksumFile) as $line) { - $checksums[trim(substr($line, 33))] = substr($line, 0, 32); - } - - $checksum = array(); - $changedFiles = array(); - $time = microtime(1); - $files = $this->ls_dir($extractDir); - - echo "Updating ProcessMaker files...\n"; - $time = microtime(1); - $checksumTime = 0; - foreach ($checksums as $filename => $checksum) { - if (is_dir("$extractDir/$filename")) { - $filename = $filter->xssFilterHard($filename); - print $filename; - continue; - } - $installedFile = PATH_TRUNK . "/$filename"; - if (!file_exists($installedFile)) { - $installedMD5 = ""; - } else { - $time = microtime(1); - $installedMD5 = G::encryptFileOld($installedFile); - $checksumTime += microtime(1) - $time; - } - $archiveMD5 = $checksum; - if (strcasecmp($archiveMD5, $installedMD5) != 0) { - $changedFiles[] = $filename; - if (!is_dir(dirname($backupDir.'/'.$filename))) { - mkdir(dirname($backupDir.'/'.$filename), 0777, true); - } - if (file_exists($installedFile) && is_file($installedFile)) { - copy($installedFile, $backupDir.'/'.$filename); - } - if (!is_dir(dirname($installedFile))) { - mkdir(dirname($installedFile), 0777, true); - } - if (!copy("$extractDir/$filename", $installedFile)) { - throw new Exception("Could not overwrite '$filename'"); - } - } - } - - printf("Updated %d files\n", count($changedFiles)); - printf("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - mkdir(PATH_C, 0777, true); - } - $workspaces = System::listWorkspaces(); - $count = count($workspaces); - $first = true; - $num = 0; - foreach ($workspaces as $index => $workspace) { - try { - $num += 1; - printf("Upgrading workspaces ($num/$count): {$workspace->name}\n"); - $workspace->upgrade(false, config("system.workspace"), false, 'en', ['updateXml' => $first, 'updateMafe' => $first]); - $workspace->close(); - $first = false; - } catch (Exception $e) { - printf("Errors upgrading workspace {$workspace->name}: {$e->getMessage()}\n"); - } - } - } - - private function ls_dir($dir, $basename = null) - { - $files = array(); - if ($basename == null) { - $basename = $dir; - } - foreach (glob("$dir/*") as $filename) { - if (is_dir($filename)) { - $files = array_merge($files, $this->ls_dir($filename, $basename)); - } else { - $files[] = substr($filename, strlen($basename) + 1); - } - } - return $files; - } - -} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3eeb7b9ae..261493b0d 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -218,160 +218,115 @@ class WorkspaceTools /** * Upgrade this workspace to the latest system version * - * @param bool $buildCacheView - * @param string $workSpace + * @param string $workspace * @param bool $onedb * @param string $lang * @param array $arrayOptTranslation + * @param array $optionMigrateHistoryData * * @return void */ - public function upgrade($buildCacheView = false, $workSpace = null, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; } + CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $this->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating database...\n"); $this->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating translations...\n"); $start = microtime(true); - CLI::logging("> Check Intermediate Email Event...\n"); - $this->checkIntermediateEmailEvent(); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify enterprise old...\n"); - $this->verifyFilesOldEnterprise($workSpace); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating translations...\n"); $this->upgradeTranslation($arrayOptTranslation['updateXml'], $arrayOptTranslation['updateMafe']); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Translations Process took $final seconds.\n"); + CLI::logging("* End updating translations...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $this->checkMafeRequirements($workspace, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to update CONTENT table...\n"); + $start = microtime(true); + $this->upgradeContent($workspace); + CLI::logging("* End to update CONTENT table... (Completed on " . (microtime(true) - $start) . " seconds)\n"); $start = microtime(true); - CLI::logging("> Updating Content...\n"); - $this->upgradeContent($workSpace); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Content Process took $final seconds.\n"); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $this->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $this->checkMafeRequirements($workSpace, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Check Mafe Requirements Process took $final seconds.\n"); + $this->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update Files Manager...\n"); $start = microtime(true); - CLI::logging("> Updating Triggers...\n"); - $this->updateTriggers(true, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Triggers Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Backup log files...\n"); - $this->backupLogFiles(); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Backup log files Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $this->migrateContent($workSpace, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); - $this->migratePopulateIndexingACV($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + $this->processFilesUpgrade($workspace); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); $start = microtime(true); - CLI::logging("> Migrate new lists...\n"); - $this->migrateList($workSpace, false, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Migrate new lists Process took $final seconds.\n"); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $this->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + $this->migrateSingleton($workspace); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning expired tokens...\n"); $start = microtime(true); - CLI::logging("> Clean access and refresh tokens...\n"); - $this->cleanTokens($workSpace); - $stop = microtime(true); - CLI::logging("<*> Clean access and refresh tokens took " . ($stop - $start) . " seconds.\n"); + $this->cleanTokens(); + CLI::logging("* End cleaning expired tokens...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to check Intermediate Email Event...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data...\n"); - $this->migrateSelfServiceRecordsRun($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating Self-Service records Process took " . ($stop - $start) . " seconds.\n"); + $this->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); $start = microtime(true); - CLI::logging("> Updating rows in Web Entry table for classic processes...\n"); - $this->updatingWebEntryClassicModel($workSpace); - $stop = microtime(true); - CLI::logging("<*> Updating rows in Web Entry table for classic processes took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Update framework paths...\n"); - $this->updateFrameworkPaths($workSpace); - $stop = microtime(true); - CLI::logging("<*> Update framework paths took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating plugin singleton data...\n"); - $this->migrateSingleton($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating and populating plugin singleton data took " . ($stop - $start) . " seconds.\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); $this->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $this->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); + $this->migrateAppHistoryToAppDataChangeLog(true); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $this->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $this->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); $this->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $this->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); } /** @@ -391,6 +346,9 @@ class WorkspaceTools CLI::logging("<*> Database Upgrade Structure Process took $final seconds.\n"); } + /** + * Update the email events with the current email server + */ public function checkIntermediateEmailEvent() { $oEmailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); @@ -629,9 +587,11 @@ class WorkspaceTools } /** - * Upgrade this workspace Content. + * Upgrade this workspace Content + * * @param string $workspace * @param boolean $executeRegenerateContent + * * @return void */ public function upgradeContent($workspace = null, $executeRegenerateContent = false) @@ -683,7 +643,7 @@ class WorkspaceTools } /** - * Upgrade this workspace translations from all avaliable languages. + * Upgrade the workspace translations from all available languages * * @param bool $flagXml Update XML * @param bool $flagMafe Update MAFE @@ -1055,10 +1015,12 @@ class WorkspaceTools } /** - * Upgrade this workspace database to the latest system schema + * Upgrade the workspace database to the latest system schema * - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool upgradeSchema for more information + * @param bool $onedb Was installed in one DB or not + * @param bool $checkOnly Only check if the upgrade is needed if true + * + * @return bool upgradeSchema */ public function upgradeDatabase($onedb = false, $checkOnly = false) { @@ -2174,6 +2136,9 @@ class WorkspaceTools return $result; } + /** + * Backup the log files + */ public function backupLogFiles() { $config = System::getSystemConfiguration(); @@ -2190,6 +2155,12 @@ class WorkspaceTools } } + /** + * Check if the workspace have the clients used by MAFE registered + * + * @param string $workspace + * @param string $lang + */ public function checkMafeRequirements($workspace, $lang) { $this->initPropel(true); @@ -2266,9 +2237,8 @@ class WorkspaceTools return true; } - public function verifyFilesOldEnterprise($workspace) + public function verifyFilesOldEnterprise() { - $this->initPropel(true); $pathBackup = PATH_DATA . 'backups'; if (!file_exists($pathBackup)) { G::mk_dir($pathBackup, 0777); @@ -2382,12 +2352,12 @@ class WorkspaceTools /** * Migrate all cases to New list * - * @param string $workSpace Workspace * @param bool $flagReinsert Flag that specifies the re-insertion + * @param string $lang * * @return void */ - public function migrateList($workSpace, $flagReinsert = false, $lang = 'en') + public function migrateList($flagReinsert = false, $lang = 'en') { $this->initPropel(true); @@ -3099,19 +3069,21 @@ class WorkspaceTools } /** - * Process-Files upgrade + * Process files upgrade, store the information in the DB + * + * @param string $workspace * * return void */ - public function processFilesUpgrade() + public function processFilesUpgrade($workspace) { try { if (!defined("PATH_DATA_MAILTEMPLATES")) { - define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates" . PATH_SEP); + define("PATH_DATA_MAILTEMPLATES", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "mailTemplates" . PATH_SEP); } if (!defined("PATH_DATA_PUBLIC")) { - define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public" . PATH_SEP); + define("PATH_DATA_PUBLIC", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "public" . PATH_SEP); } $this->initPropel(true); @@ -3624,8 +3596,12 @@ class WorkspaceTools return $response; } - - public function migrateContent($workspace, $lang = SYS_LANG) + /** + * Migrate texts/values from "CONTENT" table to the corresponding object tables + * + * @param string $lang + */ + public function migrateContent($lang = SYS_LANG) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3638,7 +3614,7 @@ class WorkspaceTools $blackList = $oConfig['CFG_VALUE'] == 'true' ? array('Groupwf', 'Process', 'Department', 'Task', 'InputDocument', 'Application') : unserialize($oConfig['CFG_VALUE']); } - $blackList = $this->migrateContentRun($workspace, $lang, $blackList); + $blackList = $this->migrateContentRun($lang, $blackList); $data["CFG_UID"] = 'MIGRATED_CONTENT'; $data["OBJ_UID"] = 'content'; $data["CFG_VALUE"] = serialize($blackList); @@ -3705,13 +3681,14 @@ class WorkspaceTools } /** - * Migration + * Migrate from "CONTENT" table to the corresponding object tables + * + * @param string $lang + * @param array $blackList * - * @param $workspace - * @param mixed|string $lang * @return array */ - public function migrateContentRun($workspace, $lang = SYS_LANG, $blackList = array()) + public function migrateContentRun($lang = SYS_LANG, $blackList = []) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3727,7 +3704,10 @@ class WorkspaceTools return $blackList; } - public function cleanTokens($workspace, $lang = SYS_LANG) + /** + * Clean the expired access and refresh tokens + */ + public function cleanTokens() { $this->initPropel(true); $oCriteria = new Criteria(); @@ -3822,7 +3802,10 @@ class WorkspaceTools } } - public function migrateSelfServiceRecordsRun($workspace) + /** + * Migrate the concatenated strings with UIDs from groups to the table "APP_ASSIGN_SELF_SERVICE_VALUE_GROUP" + */ + public function migrateSelfServiceRecordsRun() { // Initializing $this->initPropel(true); @@ -3869,7 +3852,10 @@ class WorkspaceTools CLI::logging(" Migrating Self-Service by Value Cases Done \n"); } - public function migratePopulateIndexingACV($workspace) + /** + * Populate new fields used for avoiding the use of the "APP_CACHE_VIEW" table + */ + public function migratePopulateIndexingACV() { // Migrating and populating new indexes CLI::logging("-> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW Start \n"); @@ -4134,9 +4120,10 @@ class WorkspaceTools * It populates the WEB_ENTRY table for the classic processes, this procedure * is done to verify the execution of php files generated when the WebEntry * is configured. - * @param type $workSpace + * + * @param bool $force */ - public function updatingWebEntryClassicModel($workSpace, $force = false) + public function updatingWebEntryClassicModel($force = false) { //We obtain from the configuration the list of proUids obtained so that //we do not go through again. @@ -4232,8 +4219,9 @@ class WorkspaceTools /** * Updating triggers - * @param $flagRecreate - * @param $lang + * + * @param bool $flagRecreate + * @param string $lang */ public function updateTriggers($flagRecreate, $lang) { @@ -4242,6 +4230,8 @@ class WorkspaceTools } /** + * Migrate the data of the "plugin.singleton" file to the "PLUGIN_REGISTRY" table + * * @param $workspace */ public function migrateSingleton($workspace) @@ -4287,14 +4277,11 @@ class WorkspaceTools } /** - * Updating framework directory structure + * Check/Create framework's directories * */ - private function updateFrameworkPaths($workSpace = null) + public function checkFrameworkPaths() { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } $paths = [ PATH_DATA . 'framework' => 0770, PATH_DATA . 'framework' . DIRECTORY_SEPARATOR . 'cache' => 0770, diff --git a/workflow/engine/classes/model/AddonsManager.php b/workflow/engine/classes/model/AddonsManager.php index 06d16fedb..10691d3ac 100644 --- a/workflow/engine/classes/model/AddonsManager.php +++ b/workflow/engine/classes/model/AddonsManager.php @@ -385,13 +385,7 @@ class AddonsManager extends BaseAddonsManager $this->setState(); } else { - if ($this->getAddonType() == "core") { - $upgrade = new Upgrade($this); - - $upgrade->install(); - } else { - throw new Exception("Addon type {$this->getAddonType()} not supported."); - } + throw new Exception("Addon type {$this->getAddonType()} not supported."); } } diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 16b21bc78..46b98042e 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -242,39 +242,6 @@ class System return $items; } - /** - * Review the checksum.txt - * - * @return array $result - */ - public static function verifyChecksum() - { - if (!file_exists(PATH_TRUNK . "checksum.txt")) { - return false; - } - $lines = explode("\n", file_get_contents(PATH_TRUNK . "checksum.txt")); - $result = array("diff" => array(), "missing" => array() - ); - foreach ($lines as $line) { - if (empty($line)) { - continue; - } - list ($checksum, $empty, $filename) = explode(" ", $line); - //Skip xmlform because these files always change. - if (strpos($filename, "/xmlform/") !== false) { - continue; - } - if (file_exists(realpath($filename))) { - if (strcmp($checksum, G::encryptFileOld(realpath($filename))) != 0) { - $result['diff'][] = $filename; - } - } else { - $result['missing'][] = $filename; - } - } - return $result; - } - /** * This function checks files to do updated to pm * From 8f9ac0e22370dfdd7e7fdb73e40a94b4fa805d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 16:17:23 -0400 Subject: [PATCH 039/100] PMC-568 --- gulliver/system/class.database_mysql.php | 12 ++++++++++++ workflow/engine/classes/WorkspaceTools.php | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 8191f51db..0bae312f0 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1012,4 +1012,16 @@ class database extends database_base } return $flag; } + + /** + * Generate drop trigger SQL + * + * @param string $triggerName + * + * @return string + */ + public function getDropTrigger($triggerName) + { + return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; + } } diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 261493b0d..3eac6a1d7 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4616,4 +4616,25 @@ class WorkspaceTools } } } + + /** + * Delete the triggers MySQL that causes performance issues in the upgrade process + */ + public function deleteTriggersMySql($triggersToDelete) + { + // Initialize Propel + $this->initPropel(true); + $con = Propel::getConnection('workflow'); + + // Get statement instance + $stmt = $con->createStatement(); + + // Get MySQL DB instance class + $dbInstance = $this->getDatabase(); + + // Remove triggers MySQL + foreach ($triggersToDelete as $triggerName) { + $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); + } + } } From 76a3fbc95b280de96367970738aceb69453c2969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 12:31:29 -0400 Subject: [PATCH 040/100] PMC-569 --- workflow/engine/classes/WorkspaceTools.php | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3eac6a1d7..76a1d15f7 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4637,4 +4637,30 @@ class WorkspaceTools $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); } } + + /** + * Delete indexes of specific tables + * + * @param array $tables + */ + public function deleteIndexes($tables) + { + // Get MySQL DB instance class + $database = $this->getDatabase(); + + foreach ($tables as $table) { + // Get all indexes of the table + $indexes = $database->executeQuery($database->generateTableIndexSQL($table)); + $indexesDeleted = []; + foreach ($indexes as $index) { + if ($index['Key_name'] != 'PRIMARY') { + if (!in_array($index['Key_name'], $indexesDeleted)) { + // Remove index + $database->executeQuery($database->generateDropKeySQL($table, $index['Key_name'])); + $indexesDeleted[] = $index['Key_name']; + } + } + } + } + } } From f3590486c84c46df5fe3b7c8ec710e1689806aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 14:34:05 -0400 Subject: [PATCH 041/100] PMC-574 --- workflow/engine/classes/WorkspaceTools.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 76a1d15f7..596c95eb8 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -247,6 +247,20 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + $start = microtime(true); + $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); + CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', + 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + $start = microtime(true); + $this->deleteIndexes($bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update CONTENT table...\n"); $start = microtime(true); $this->upgradeContent($workspace); From a1c99b4836a41895c1dc804a0750b39f4edbf1ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Wed, 20 Mar 2019 10:58:58 -0400 Subject: [PATCH 042/100] PMC-596 --- gulliver/system/class.database_mysql.php | 71 +++++++++++ workflow/engine/bin/tasks/cliUpgrade.php | 2 +- workflow/engine/classes/WorkspaceTools.php | 142 ++++++++++++--------- 3 files changed, 152 insertions(+), 63 deletions(-) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 0bae312f0..870ba954f 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1024,4 +1024,75 @@ class database extends database_base { return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; } + + /** + * Generate alter table with or without adding the indexes + * + * @param string $tableName + * @param array $columns + * @param array $indexes + * + * @return string + */ + public function generateAddColumnsSql($tableName, $columns, $indexes = []) + { + $indexesAlreadyAdded = []; + $sql = 'ALTER TABLE ' . $this->sQuoteCharacter . $tableName . $this->sQuoteCharacter . ' '; + foreach ($columns as $columnName => $parameters) { + if (isset($parameters['Type']) && isset($parameters['Null'])) { + $sql .= 'ADD COLUMN ' . $this->sQuoteCharacter . $columnName . $this->sQuoteCharacter . ' ' . $parameters['Type']; + if ($parameters['Null'] == 'YES') { + $sql .= ' NULL'; + } else { + $sql .= ' NOT NULL'; + } + } + if (isset($parameters['AutoIncrement']) && $parameters['AutoIncrement']) { + $sql .= ' AUTO_INCREMENT'; + } + if (isset($parameters['PrimaryKey']) && $parameters['PrimaryKey']) { + $sql .= ' PRIMARY KEY'; + $indexesAlreadyAdded[] = $columnName; + } + if (isset($parameters['Unique']) && $parameters['Unique']) { + $sql .= ' UNIQUE'; + } + + // We need to check the property AI + if (isset($parameters['AI'])) { + if ($parameters['AI'] == 1) { + $sql .= ' AUTO_INCREMENT'; + } else { + if ($parameters['Default'] != '') { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + } else { + if (isset($parameters['Default'])) { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + $sql .= ', '; + } + foreach ($indexes as $indexName => $indexColumns) { + $indexType = 'INDEX'; + if ($indexName === 'primaryKey' || $indexName === 'PRIMARY') { + $indexType = 'PRIMARY'; + $indexName = 'KEY'; + // If is primary key is not needed add a new index, the column already was added like primary key + if (count($indexColumns) == 1 && $indexesAlreadyAdded == $indexColumns) { + continue; + } + } + $sql .= 'ADD ' . $indexType . ' ' . $indexName . ' ('; + foreach ($indexColumns as $column) { + $sql .= $this->sQuoteCharacter . $column . $this->sQuoteCharacter . ', '; + } + $sql = substr($sql, 0, -2); + $sql .= '), '; + } + $sql = rtrim($sql, ', '); + + return $sql; + } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index d09d3adff..7fec63fd0 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -160,7 +160,7 @@ function run_upgrade($parameters, $args) ]; // Upgrade database and files from a specific workspace - $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); + $workspace->upgrade($workspace->name, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); } else { // Build arguments diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 596c95eb8..56a31f428 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -226,7 +226,7 @@ class WorkspaceTools * * @return void */ - public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; @@ -234,7 +234,7 @@ class WorkspaceTools CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - $this->upgradeDatabase($onedb); + $this->upgradeDatabase(); CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start updating translations...\n"); @@ -283,13 +283,6 @@ class WorkspaceTools $this->processFilesUpgrade($workspace); CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating to new list tables...\n"); - $start = microtime(true); - $this->migrateList(true, $lang); - CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); $this->migrateSingleton($workspace); @@ -337,6 +330,19 @@ class WorkspaceTools CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($this->dbAdapter); + $this->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); $this->updateTriggers(true, $lang); @@ -1030,22 +1036,17 @@ class WorkspaceTools /** * Upgrade the workspace database to the latest system schema - * - * @param bool $onedb Was installed in one DB or not - * @param bool $checkOnly Only check if the upgrade is needed if true - * - * @return bool upgradeSchema */ - public function upgradeDatabase($onedb = false, $checkOnly = false) + public function upgradeDatabase() { $this->initPropel(true); P11835::$dbAdapter = $this->dbAdapter; P11835::isApplicable(); $systemSchema = System::getSystemSchema($this->dbAdapter); - $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// get the Rbac Schema + $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// Get the RBAC Schema $this->registerSystemTables(array_merge($systemSchema, $systemSchemaRbac)); - $this->upgradeSchema($systemSchema); - $this->upgradeSchema($systemSchemaRbac, false, true, $onedb); // perform Upgrade to Rbac + $this->upgradeSchema($systemSchema, false, false, false); // Without add indexes + $this->upgradeSchema($systemSchemaRbac, false, true); // Perform upgrade to RBAC $this->upgradeData(); $this->checkRbacPermissions();//check or add new permissions $this->checkSequenceNumber(); @@ -1113,10 +1114,7 @@ class WorkspaceTools $arrayData = $emailSever->create2($arrayData); } } - P11835::execute(); - - return true; } private function setFormatRows() @@ -1137,14 +1135,18 @@ class WorkspaceTools } /** - * Upgrade this workspace database from a schema + * Upgrade the workspace database according to the schema * - * @param array $schema the schema information, such as returned from getSystemSchema - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool the changes if checkOnly is true, else return - * true on success + * @param array $schema The schema information, such as returned from getSystemSchema + * @param bool $checkOnly Only return the diff between current database and the schema + * @param bool $rbac Is RBAC database? + * @param bool $includeIndexes Include or no indexes in new tables + * + * @return bool|array + * + * @throws Exception */ - public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $onedb = false) + public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $includeIndexes = true) { $dbInfo = $this->getDBInfo(); @@ -1199,11 +1201,11 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAdd']) . " tables to add\n"); } - foreach ($changes['tablesToAdd'] as $sTable => $aColumns) { - $database->executeQuery($database->generateCreateTableSQL($sTable, $aColumns)); - if (isset($changes['tablesToAdd'][$sTable]['INDEXES'])) { - foreach ($changes['tablesToAdd'][$sTable]['INDEXES'] as $indexName => $aIndex) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $indexName, $aIndex)); + foreach ($changes['tablesToAdd'] as $tableName => $columns) { + $database->executeQuery($database->generateCreateTableSQL($tableName, $columns)); + if (isset($changes['tablesToAdd'][$tableName]['INDEXES']) && $includeIndexes) { + foreach ($changes['tablesToAdd'][$tableName]['INDEXES'] as $indexName => $keys) { + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $keys)); } } } @@ -1212,46 +1214,62 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAlter']) . " tables to alter\n"); } - foreach ($changes['tablesToAlter'] as $sTable => $aActions) { - foreach ($aActions as $sAction => $aAction) { - foreach ($aAction as $sColumn => $vData) { - switch ($sAction) { - case 'DROP': - $database->executeQuery($database->generateDropColumnSQL($sTable, $vData)); - break; - case 'ADD': - if ($database->checkPatchHor1787($sTable, $sColumn, $vData)) { - $database->executeQuery($database->generateCheckAddColumnSQL($sTable, $sColumn, $vData)); - $database->executeQuery($database->deleteAllIndexesIntable($sTable, $sColumn, $vData)); - } - $database->executeQuery($database->generateAddColumnSQL($sTable, $sColumn, $vData)); - break; - case 'CHANGE': - $database->executeQuery($database->generateChangeColumnSQL($sTable, $sColumn, $vData)); - break; + $tablesToAddColumns = []; + + foreach ($changes['tablesToAlter'] as $tableName => $actions) { + foreach ($actions as $action => $actionData) { + if ($action == 'ADD') { + $tablesToAddColumns[$tableName] = $actionData; + + // In a very old schema the primary key for table "LOGIN_LOG" was changed and we need to delete the + // primary index to avoid errors in the database upgrade + // TO DO: The change of a Primary Key in a table should be generic + if ($tableName == 'LOGIN_LOG' && array_key_exists('LOG_ID', $actionData)) { + $database->executeQuery('DROP INDEX `PRIMARY` ON LOGIN_LOG;'); + } + } else { + foreach ($actionData as $columnName => $meta) { + switch ($action) { + case 'DROP': + $database->executeQuery($database->generateDropColumnSQL($tableName, $meta)); + break; + case 'CHANGE': + $database->executeQuery($database->generateChangeColumnSQL($tableName, $columnName, $meta)); + break; + } } } } } - if (!empty($changes['tablesWithNewIndex'])) { - CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " indexes to add\n"); - } - foreach ($changes['tablesWithNewIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($tablesToAddColumns)) { + foreach ($tablesToAddColumns as $tableName => $tableColumn) { + $indexes = []; + if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { + $indexes = $changes['tablesWithNewIndex'][$tableName]; + unset($changes['tablesWithNewIndex'][$tableName]); + } + $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); } } - if (!empty($changes['tablesToAlterIndex'])) { - CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " indexes to alter\n"); - } - foreach ($changes['tablesToAlterIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateDropKeySQL($sTable, $sIndexName)); - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { + $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); } } + + if (!empty($changes['tablesToAlterIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " tables with indexes to alter\n"); + foreach ($changes['tablesToAlterIndex'] as $tableName => $indexes) { + foreach ($indexes as $indexName => $indexFields) { + $database->executeQuery($database->generateDropKeySQL($tableName, $indexName)); + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $indexFields)); + } + } + } + $this->closeDatabase(); return true; } From 4970e71c06782769987492a16f5f62dbf8695ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Apr 2019 14:44:33 -0400 Subject: [PATCH 043/100] PMC-570 --- gulliver/system/class.database_mysql.php | 12 +- workflow/engine/bin/tasks/cliUpgrade.php | 24 +++ workflow/engine/classes/WorkspaceTools.php | 12 ++ .../ProcessMaker/Core/ProcessesManager.php | 98 ++++++++++++ .../src/ProcessMaker/Core/RunProcess.php | 146 ++++++++++++++++++ .../Upgrade/RunProcessUpgradeQuery.php | 61 ++++++++ 6 files changed, 350 insertions(+), 3 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Core/ProcessesManager.php create mode 100644 workflow/engine/src/ProcessMaker/Core/RunProcess.php create mode 100644 workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 870ba954f..53888a4ae 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -519,13 +519,15 @@ class database extends database_base } /** - * execute a sql query + * Execute a sql query * * @param string $query + * @param bool $throwError + * * @return array * @throws Exception */ - public function executeQuery($query) + public function executeQuery($query, $throwError = false) { $this->logQuery($query); @@ -545,7 +547,11 @@ class database extends database_base return $result; } catch (Exception $exception) { $this->logQuery($exception->getMessage()); - return []; + if ($throwError) { + throw $exception; + } else { + return []; + } } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index 7fec63fd0..36aa2e37d 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -36,6 +36,8 @@ CLI::taskArg('workspace'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_unify_database"); /*----------------------------------********---------------------------------*/ +CLI::taskName('upgrade-query'); +CLI::taskRun('runUpgradeQuery'); /** * Execute the upgrade @@ -299,3 +301,25 @@ function run_unify_database($args) $flag = G::isPMUnderUpdating(0); } /*----------------------------------********---------------------------------*/ + +/** + * Execute a query, used internally for upgrade process + * + * @param array $options + */ +function runUpgradeQuery($options) +{ + // Initializing variables + $workspaceName = $options[0]; + $query = base64_decode($options[1]); + $isRbac = (bool)$options[2]; + + // Creating a new instance of the extended class + $workspace = new WorkspaceTools($workspaceName); + + // Execute the query + $workspace->upgradeQuery($query, $isRbac); + + // Terminate without error + exit('success'); +} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 56a31f428..2100b7a3b 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4695,4 +4695,16 @@ class WorkspaceTools } } } + + /** + * Execute a query, used internally for the upgrade process + * + * @param string $query + * @param bool $rbac + */ + public function upgradeQuery($query, $rbac) + { + $database = $this->getDatabase($rbac); + $database->executeQuery($query, true); + } } diff --git a/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php new file mode 100644 index 000000000..bff0c5d96 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php @@ -0,0 +1,98 @@ +processes = $processes; + } + + /** + * Get the list of terminated processes + * + * @return array + */ + public function getTerminated() + { + return $this->terminated; + } + + /** + * Get the list of processes with errors + * + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * Set the sleep time after each statuses revision + * + * @param int $sleepTime + */ + public function setSleepTime($sleepTime) + { + $this->sleepTime = $sleepTime; + } + + /** + * Run the processes + */ + public function run() + { + // Start all processes + foreach ($this->processes as $process) { + $process->run(); + } + + // Manage the processes + $this->manage(); + } + + /** + * Manage all started processes + */ + private function manage() + { + do { + // Check all remaining processes + foreach ($this->processes as $index => $process) { + // If the process has finished, save the info and destroy it + if ($process->getStatus() === RunProcess::TERMINATED || $process->getStatus() === RunProcess::ERROR) { + $processInfo = ['command' => $process->getCommand(), 'rawAnswer' => $process->getRawAnswer()]; + if ($process->getStatus() === RunProcess::TERMINATED) { + // Processes completed successfully + $this->terminated[] = $processInfo; + } else { + // Processes completed with errors + $this->errors[] = $processInfo; + } + + // Destroy the process + unset($this->processes[$index]); + } + } + + // Waiting... + sleep($this->sleepTime); + } while (!empty($this->processes)); + } +} diff --git a/workflow/engine/src/ProcessMaker/Core/RunProcess.php b/workflow/engine/src/ProcessMaker/Core/RunProcess.php new file mode 100644 index 000000000..8f2a0287f --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/RunProcess.php @@ -0,0 +1,146 @@ +command = $command; + } + + /** + * Class destructor, the resource created should be closed + */ + public function __destruct() + { + if (is_resource($this->resource)) { + proc_close($this->resource); + } + } + + /** + * Get the command + * + * @return string + */ + public function getCommand() + { + return $this->command; + } + + /** + * Get the raw response + * + * @return string|null + */ + public function getRawAnswer() + { + return $this->rawAnswer; + } + + /** + * Get the status + * + * @return string + */ + public function getStatus() + { + // If already exist a status return this value + if ($this->status !== null) { + return $this->status; + } + + // If doesn't exists a resource the process is not running + if (!is_resource($this->resource)) { + return self::NOT_RUNNING; + } + + // If the process is running return this value + if ($this->isRunning()) { + return self::RUNNING; + } + + // If the process is not running, parse the response to determine the status + $this->rawAnswer = stream_get_contents($this->pipes[1]); + $this->status = $this->parseAnswer(); + + return $this->status; + } + + /** + * Get the exit code + * + * @return string|null + */ + public function getExitCode() + { + return $this->exitCode; + } + + /** + * Run the command + */ + public function run() + { + $this->resource = proc_open($this->command, $this->descriptors, $this->pipes); + } + + /** + * Process is running? + * + * @return bool + */ + public function isRunning() + { + // Get the process status + $status = proc_get_status($this->resource); + + // If process is not running get the exit code + if ($status['running'] === false) { + $this->exitCode = $status['exitcode']; + } + + return $status['running']; + } + + /** + * Process the raw response and compare with the expected answer in order to determine the status + * + * @return string + */ + public function parseAnswer() + { + return $this->rawAnswer === self::EXPECTED_ANSWER ? self::TERMINATED : self::ERROR; + } +} diff --git a/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php new file mode 100644 index 000000000..e1295c0e4 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php @@ -0,0 +1,61 @@ +workspace = $workspace; + $this->sql = $sql; + $this->isRbac = $isRbac; + + // Build the command and send to the parent class + parent::__construct($this->buildCommand()); + } + + /** + * Override the parent method in order to compare the raw response with the SUCCESS value + * + * @return string + */ + public function parseAnswer() + { + return $this->getRawAnswer() === self::SUCCESS ? parent::TERMINATED : parent::ERROR; + } + + /** + * Build the command to execute a query for the upgrade process + * + * @return string + */ + private function buildCommand() + { + return sprintf(self::CMD, $this->workspace, base64_encode($this->sql), + ($this->isRbac ? self::RBAC : self::NO_RBAC)); + } +} \ No newline at end of file From 57485cf26bd32cb1311c51cac538d1d89f0601b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 11:48:09 -0400 Subject: [PATCH 044/100] PMC-571 --- workflow/engine/classes/WorkspaceTools.php | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index b62a31eba..f004bacb9 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -7,9 +7,11 @@ use ProcessMaker\BusinessModel\Process as BmProcess; use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\Installer; +use ProcessMaker\Core\ProcessesManager; use ProcessMaker\Core\System; use ProcessMaker\Plugins\Adapters\PluginAdapter; use ProcessMaker\Project\Adapter\BpmnWorkflow; +use ProcessMaker\Upgrade\RunProcessUpgradeQuery; use ProcessMaker\Util\FixReferencePath; /** @@ -1243,20 +1245,51 @@ class WorkspaceTools } if (!empty($tablesToAddColumns)) { + $upgradeQueries = []; foreach ($tablesToAddColumns as $tableName => $tableColumn) { $indexes = []; if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { $indexes = $changes['tablesWithNewIndex'][$tableName]; unset($changes['tablesWithNewIndex'][$tableName]); } - $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); + + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, $tableColumn, $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + $upgradeQueries = []; foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { - $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, [], $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } From d9b4de1f32217573956156c719d1293e583c064a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 14:22:52 -0400 Subject: [PATCH 045/100] PMC-572 --- workflow/engine/classes/WorkspaceTools.php | 106 +++++++++++---------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index f004bacb9..75207e566 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -3626,59 +3626,36 @@ class WorkspaceTools } /** - * Migrate this workspace table Content. + * Generate update rows from Content sentence * - * @param $className - * @param $fields - * @param mixed|string $lang - * @throws Exception + * @param string $tableName + * @param array $fields + * @param string $lang + * + * @return string */ - public function migrateContentWorkspace($className, $fields, $lang = SYS_LANG) + public function generateUpdateFromContent($tableName, array $fields, $lang = SYS_LANG) { - try { - $this->initPropel(true); - $fieldUidName = $fields['uid']; - $oCriteria = new Criteria(); - $oCriteria->clearSelectColumns(); - $oCriteria->addAsColumn($fieldUidName, ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_PARENT); - $oCriteria->addSelectColumn(ContentPeer::CON_CATEGORY); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add(ContentPeer::CON_CATEGORY, $fields['fields'], Criteria::IN); - $oCriteria->add(ContentPeer::CON_LANG, $lang); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $methods = $fields['methods']; - while ($oDataset->next()) { - $row = $oDataset->getRow(); - $fieldName = $row['CON_CATEGORY']; - $fieldName = isset($fields['alias']) && isset($fields['alias'][$fieldName]) ? $fields['alias'][$fieldName] : $fieldName; - unset($row['CON_CATEGORY']); - $row[$fieldName] = $row['CON_VALUE']; - unset($row['CON_VALUE']); - $oTable = new $className(); - $that = array($oTable, $methods['exists']); - $params = array($row[$fieldUidName]); - if (isset($row['CON_PARENT']) && $row['CON_PARENT'] != '') { - array_push($params, $row['CON_PARENT']); - $fieldName = isset($fields['alias']) && isset($fields['alias']['CON_PARENT']) ? $fields['alias']['CON_PARENT'] : 'CON_PARENT'; - $row[$fieldName] = $row['CON_PARENT']; - } - unset($row['CON_PARENT']); - if (call_user_func_array($that, $params)) { - if (isset($methods['update'])) { - $fn = $methods['update']; - $fn($row); - } else { - $oTable->update($row); - } - } - } - $classNamePeer = class_exists($className . 'Peer') ? $className . 'Peer' : $fields['peer']; - CLI::logging("|--> Add content data in table " . $classNamePeer::TABLE_NAME . "\n"); - } catch (Exception $e) { - throw ($e); + $sql = "UPDATE " . $tableName . " AS T"; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $sql .= " LEFT JOIN CONTENT " . $tableAlias . " ON ("; + $sql .= $tableAlias . ".CON_CATEGORY = '" . $field . "' AND "; + $sql .= $tableAlias . ".CON_ID = T." . $fields['uid'] . " AND "; + $sql .= $tableAlias . ".CON_LANG = '" . $lang . "')"; } + $sql .= ' SET '; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $fieldName = !empty($fields['alias'][$field]) ? $fields['alias'][$field] : $field; + $sql .= $fieldName . " = " . $tableAlias . ".CON_VALUE, "; + } + $sql = rtrim($sql, ', '); + return $sql; } /** @@ -3688,6 +3665,8 @@ class WorkspaceTools * @param array $blackList * * @return array + * + * @throws Exception */ public function migrateContentRun($lang = SYS_LANG, $blackList = []) { @@ -3695,13 +3674,40 @@ class WorkspaceTools define('MEMCACHED_ENABLED', false); } $content = $this->getListContentMigrateTable(); + $contentQueries = []; foreach ($content as $className => $fields) { if (!in_array($className, $blackList)) { - $this->migrateContentWorkspace($className, $fields, $lang); + // Build class peer name + if (class_exists($className . 'Peer')) { + $classNamePeer = $className . 'Peer'; + } else { + $classNamePeer = $fields['peer']; + } + + // Build the query + $query = $this->generateUpdateFromContent($classNamePeer::TABLE_NAME, $fields, $lang); + + // Instantiate the class to execute the query in background + $contentQueries[] = new RunProcessUpgradeQuery($this->name, $query); + + // Add class to the control array $blackList[] = $className; } } + // Run queries in multiple threads + $processesManager = new ProcessesManager($contentQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + return $blackList; } From 3f0f513c7cdf17db16907757a7c0066fd4f05379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 16:17:21 -0400 Subject: [PATCH 046/100] PMC-573 --- workflow/engine/classes/WorkspaceTools.php | 159 +++++++++++++++------ 1 file changed, 115 insertions(+), 44 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 75207e566..e6469c78a 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2421,6 +2421,13 @@ class WorkspaceTools * @param string $lang * * @return void + * + * @throws Exception + * + * @see \WorkspaceTools->upgrade + * @see \WorkspaceTools->restore + * @see workflow/engine/bin/tasks/cliWorkspaces.php:migrate_new_cases_lists() + * @link https://wiki.processmaker.com/3.3/processmaker_command#migrate-new-cases-lists */ public function migrateList($flagReinsert = false, $lang = 'en') { @@ -2433,7 +2440,7 @@ class WorkspaceTools return; } - $arrayTable1 = ['ListInbox', 'ListMyInbox', 'ListCanceled', 'ListParticipatedLast', 'ListParticipatedHistory', 'ListPaused']; + $arrayTable1 = ['ListCanceled', 'ListMyInbox', 'ListInbox', 'ListParticipatedHistory', 'ListPaused', 'ListParticipatedLast']; $arrayTable2 = ['ListUnassigned', 'ListUnassignedGroup']; $arrayTable = array_merge($arrayTable1, $arrayTable2); @@ -2458,23 +2465,57 @@ class WorkspaceTools } } + $listQueries = []; + if ($flagReinsert || !$flagListAll) { - $this->regenerateListCanceled($lang); - $this->regenerateListMyInbox(); //This list require no translation - $this->regenerateListInbox(); //This list require no translation - $this->regenerateListParticipatedHistory(); //This list require no translation - $this->regenerateListParticipatedLast(); //This list require no translation - $this->regenerateListPaused(); //This list require no translation + // Regenerate lists + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListCanceled($lang)); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListMyInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedHistory()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListPaused()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedLast()); } if ($flagReinsert || !$flagListUnassigned) { - $this->regenerateListUnassigned(); //This list require no translation + // This list always is truncated + $con = Propel::getConnection("workflow"); + $stmt = $con->createStatement(); + $stmt->executeQuery('TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'); + + // Regenerate list + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListUnassigned()); } + // Run queries in multiple threads + $processesManager = new ProcessesManager($listQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + + // This query cannot be launched in parallel, requires that the table already was populated + $this->updateListParticipatedLast(); + $this->listFirstExecution('insert'); $this->listFirstExecution('insert', 'unassigned'); } + /** + * Return query to populate canceled list + * + * @param string $lang + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListCanceled($lang = 'en') { $this->initPropel(true); @@ -2537,12 +2578,17 @@ class WorkspaceTools WHERE ACV.APP_STATUS = \'CANCELLED\' AND ACV.DEL_LAST_INDEX = 1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_CANCELED\n"); + + return $query; } + /** + * Return query to populate my inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListMyInbox() { $this->initPropel(true); @@ -2607,12 +2653,16 @@ class WorkspaceTools ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID WHERE ACV.DEL_INDEX=1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_MY_INBOX\n"); + return $query; } + /** + * Return query to populate inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListInbox() { $this->initPropel(true); @@ -2665,12 +2715,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS USR ON ACV.PREVIOUS_USR_UID = USR.USR_UID WHERE ACV.DEL_THREAD_STATUS = \'OPEN\''; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_INBOX\n"); + + return $query; } + /** + * Return query to populate participated history list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedHistory() { $this->initPropel(true); @@ -2723,12 +2778,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_HISTORY\n"); + + return $query; } + /** + * Return query to populate participated last list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedLast() { $this->initPropel(true); @@ -2804,10 +2864,18 @@ class WorkspaceTools ) ACV LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Inserted data into table LIST_PARTICIPATED_LAST\n"); + + return $query; + } + + /** + * Update participated last list + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListParticipatedLast() + { + $this->initPropel(true); $query = 'UPDATE ' . $this->dbName . '.LIST_PARTICIPATED_LAST LPL, ( SELECT TASK.TAS_TITLE, @@ -2833,18 +2901,19 @@ class WorkspaceTools LPL.DEL_CURRENT_USR_LASTNAME = IFNULL(USERS_VALUES.USR_LASTNAME, \'\'), LPL.DEL_CURRENT_TAS_TITLE = IFNULL(USERS_VALUES.TAS_TITLE, \'\') WHERE LPL.APP_UID = USERS_VALUES.APP_UID'; + + CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_LAST\n"); } /** - * This function overwrite the table LIST_PAUSED - * Get the principal information in the tables appDelay, appDelegation - * For the labels we use the tables user, process, task and application - * @return void + * Return query to populate paused list + * + * @return string + * + * @see \WorkspaceTools->migrateList() */ public function regenerateListPaused() { @@ -2923,17 +2992,22 @@ class WorkspaceTools APP_DELAY.APP_DISABLE_ACTION_USER = "0" AND APP_DELAY.APP_TYPE = "PAUSE" '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PAUSED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ + /** + * Return query to populate unassigned list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListUnassigned() { $this->initPropel(true); - $truncate = 'TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'; + //This executeQuery is very fast than Propel $query = 'INSERT INTO ' . $this->dbName . '.LIST_UNASSIGNED (APP_UID, @@ -2977,11 +3051,8 @@ class WorkspaceTools WHERE ACV.DEL_THREAD_STATUS = \'OPEN\' AND ACV.USR_UID = \'\' '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($truncate); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_UNASSIGNED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ From 8ec6c34ecb4213e832fd8876f74883f13fb674d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 23 Apr 2019 09:42:25 -0400 Subject: [PATCH 047/100] PMC-594 --- .../engine/classes/MultipleFilesBackup.php | 20 +- workflow/engine/classes/WorkspaceTools.php | 245 ++++++++++-------- 2 files changed, 152 insertions(+), 113 deletions(-) diff --git a/workflow/engine/classes/MultipleFilesBackup.php b/workflow/engine/classes/MultipleFilesBackup.php index 8e06e5852..a3ee55cba 100644 --- a/workflow/engine/classes/MultipleFilesBackup.php +++ b/workflow/engine/classes/MultipleFilesBackup.php @@ -94,11 +94,21 @@ class MultipleFilesBackup } } - /* Restore from file(s) commpressed by letsBackup function, into a temporary directory - * @ filename got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. - * @ srcWorkspace contains the workspace to be restored. - * @ dstWorkspace contains the workspace to be overwriting. - * @ overwrite got the option true if the workspace will be overwrite. + /** + * Restore from file(s) compressed by letsBackup function, into a temporary directory + * + * @param string $filename Got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. + * @param string $srcWorkspace Contains the workspace to be restored. + * @param bool $dstWorkspace Contains the workspace to be overwriting. + * @param bool $overwrite Got the option true if the workspace will be overwrite. + * + * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces + * + * @deprecated Method outdated, only run the upgrade of APP_CACHE_VIEW table */ public static function letsRestore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true) { diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index e6469c78a..54dc897c6 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -66,6 +66,23 @@ class WorkspaceTools 'UPDATE LIST_UNASSIGNED_GROUP SET USR_ID=(SELECT USR_ID FROM USERS WHERE USERS.USR_UID=LIST_UNASSIGNED_GROUP.USR_UID)', ); + public static $triggers = [ + 'APP_DELEGATION_UPDATE', + 'APPLICATION_UPDATE', + 'CONTENT_UPDATE' + ]; + public static $bigTables = [ + 'APPLICATION', + 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', + 'APP_CACHE_VIEW', + 'APP_DELEGATION', + 'APP_DELAY', + 'APP_DOCUMENT', + 'APP_HISTORY', + 'APP_MESSAGE', + 'GROUP_USER', + 'LOGIN_LOG' + ]; private $lastContentMigrateTable = false; private $listContentMigrateTable = []; @@ -249,18 +266,16 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); $start = microtime(true); - $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); - CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + $this->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', - 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; - CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); $start = microtime(true); - $this->deleteIndexes($bigTables); - CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + $this->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start to update CONTENT table...\n"); @@ -1855,7 +1870,7 @@ class WorkspaceTools } /** - * restore an archive into a workspace + * Restore a workspace * * Restores any database and files included in the backup, either as a new * workspace, or overwriting a previous one @@ -1866,8 +1881,13 @@ class WorkspaceTools * @param boolean $overwrite if you need overwrite the database * @param string $lang for define the language * @param string $port of database if is empty take 3306 + * @param array $optionMigrateHistoryData * * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces */ public static function restore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true, $lang = 'en', $port = '', $optionMigrateHistoryData = []) { @@ -2035,115 +2055,124 @@ class WorkspaceTools } } - $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $workspace->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating database...\n"); - $workspace->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - } - - $start = microtime(true); - CLI::logging("> Verify files enterprise old...\n"); - $workspace->verifyFilesOldEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify License Enterprise...\n"); - $workspace->verifyLicenseEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $workspace->checkMafeRequirements($workspaceName, $lang); - $stop = microtime(true); - CLI::logging("<*> Check Mafe Requirements Process took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating cache view...\n"); - $workspace->upgradeCacheView(true, true, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating cache view Process took " . ($stop - $start) . " seconds.\n"); - } else { - $workspace->upgradeTriggersOfTables(true, $lang); - } - - if ($pmVersion == '' && strpos(strtoupper($version), 'BRANCH')) { + if (empty($pmVersion) && strpos(strtoupper($version), 'BRANCH')) { $pmVersion = 'dev-version-backup'; } - //Move the labels of content to the corresponding table - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $workspace->migrateContent($workspace->name, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); + if (!empty($pmVersionWorkspaceToRestore) && (version_compare( + $pmVersionWorkspaceToRestore . "", + $pmVersion . "", + "<" + ) || empty($pmVersion)) || $pmVersion == "dev-version-backup" + ) { + // Upgrade the database schema and data + CLI::logging("* Start updating database schema...\n"); + $start = microtime(true); + $workspace->upgradeDatabase(); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Populate the new fields for replace string UID to Interger ID - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for APP_CACHE_VIEW...\n"); - $workspace->migratePopulateIndexingACV($workspace->name); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $workspace->checkMafeRequirements($workspaceName, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Move the data of cases to the corresponding List - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Updating List tables...\n"); - $workspace->migrateList($workspace->name, false, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating List Process took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); + $start = microtime(true); + $workspace->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $workspace->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); + $start = microtime(true); + $workspace->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - //Updating generated class files for PM Tables - passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspace->name); + $start = microtime(true); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $workspace->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); - $workspace->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); + $start = microtime(true); + $workspace->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $workspace->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start to update Files Manager...\n"); + $start = microtime(true); + $workspace->processFilesUpgrade($workspaceName); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start migrating and populating plugin singleton data...\n"); + $start = microtime(true); + $workspace->migrateSingleton($workspaceName); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to check Intermediate Email Event...\n"); + $start = microtime(true); + $workspace->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); + $start = microtime(true); + $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; + $workspace->clearDynContentHistoryData(false, $keepDynContent); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); + $start = microtime(true); + $workspace->migrateAppHistoryToAppDataChangeLog(false); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $workspace->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $workspace->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); + $start = microtime(true); + $workspace->upgradeSelfServiceData(); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($workspace->dbAdapter); + $workspace->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $workspace->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $workspace->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); + } + + CLI::logging("> Start To Verify License Enterprise...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); - $workspace->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + $workspace->verifyLicenseEnterprise($workspaceName); + CLI::logging("* End To Verify License Enterprise...(" . (microtime(true) - $start) . " seconds)\n"); + + // Updating generated class files for PM Tables + passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspaceName); } CLI::logging("Removing temporary files\n"); @@ -2319,7 +2348,7 @@ class WorkspaceTools CLI::logging(" Migrating Enterprise Core version...\n"); if (!file_exists($pathNewFile)) { CLI::logging(" Creating folder in $pathNewFile\n"); - G::mk_dir($newDiretory, 0777); + G::mk_dir($pathNewFile, 0777); } $shared_stat = stat(PATH_DATA); if (file_exists($pathDirectoryEnterprise)) { From 847a0fb74493fab4811ea0546a1933dedd2a6e3f Mon Sep 17 00:00:00 2001 From: Rodrigo Quelca Date: Fri, 17 May 2019 12:22:59 -0400 Subject: [PATCH 048/100] fix bad merge --- workflow/engine/templates/designer/index.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index 815b3023d..8c899c42c 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -30,11 +30,8 @@ var SYS_LANG = "{$SYS_LANG}"; var SYS_SKIN = "{$SYS_SKIN}"; var HTTP_SERVER_HOSTNAME = "{$HTTP_SERVER_HOSTNAME}"; -<<<<<<< HEAD var PMDYNAFORM_FIRST_TIME = "{$PMDYNAFORM_FIRST_TIME}" === "1"; -======= var maxFileSizeInformation = {$maxFileSizeInformation}; ->>>>>>> origin/develop From 9282eeadb50f7fcc2255f8c73fd1c9279934189d Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Thu, 16 May 2019 15:54:07 -0400 Subject: [PATCH 049/100] PMC-791 --- .../engine/classes/PmDynaformTest.php | 267 ++++++++++++++++++ workflow/engine/classes/PmDynaform.php | 30 ++ 2 files changed, 297 insertions(+) diff --git a/tests/unit/workflow/engine/classes/PmDynaformTest.php b/tests/unit/workflow/engine/classes/PmDynaformTest.php index d6c033209..8e1e07be4 100644 --- a/tests/unit/workflow/engine/classes/PmDynaformTest.php +++ b/tests/unit/workflow/engine/classes/PmDynaformTest.php @@ -532,4 +532,271 @@ class PmDynaformTest extends TestCase ] ]; } + + /** + * It tests that the json file is getting the defined values when the grid has one undefined control + * + * @test + */ + public function it_should_add_the_correct_fields_with_a_single_undefined_control() + { + //Creates the PmDynaform object + $pmDynaform = new PmDynaform(); + + //A json that contains the text control data and columns + $jsonData = (object)( + [ + "data" => (object)([ + "1" => [ + ["value" => "textControl1", "label" => "textControl1"], + ["value" => "textControl2", "label" => "textControl2"], + ["value" => "", "label" => ""] + ] + ]), + + "columns" => (object)([ + 0 => (object)([ + "id" => "text0000000001", + "name" => "text0000000001", + ]), + 1 => (object)([ + "id" => "textarea0000000001", + "name" => "textarea0000000001", + ]), + 2 => (object)([ + "id" => "text0000000002", + "name" => "text0000000002", + ]) + ]) + ] + ); + + // An array that contains the variables stored on the App Data + $appData = [ + "1" => [ + "text0000000001" => "", + "text0000000001_label" => "", + "textarea0000000001" => "", + "textarea0000000001_label" => "" + ] + ]; + + //Calls the setDataSchema method + $resultText = $pmDynaform->setDataSchema($jsonData, $appData); + + //This assert the result is null + $this->assertNull($resultText); + + //Assert the 'dataSchema' field was added + $this->assertObjectHasAttribute('dataSchema', $jsonData); + + //It asserts the first control is defined + $this->assertTrue($jsonData->dataSchema['1'][0]['defined']); + + //It asserts the second control is defined + $this->assertTrue($jsonData->dataSchema['1'][1]['defined']); + + //It asserts the second control is undefined + $this->assertFalse($jsonData->dataSchema['1'][2]['defined']); + } + + /** + * It tests that the json file is getting the defined values when the grid has more than one undefined control + * + * @test + */ + public function it_should_add_the_correct_fields_with_more_than_one_undefined_control() + { + //Creates the PmDynaform object + $pmDynaform = new PmDynaform(); + + //A json that contains the text control data and columns + $jsonData = (object)( + [ + "data" => (object)([ + "1" => [ + ["value" => "textControl1", "label" => "textControl1"], + ["value" => "textAreaControl2", "label" => "textAreaControl2"], + ["value" => "dropdowncontrol1", "label" => "dropdowncontrol1"], + ["value" => "", "label" => ""], + ["value" => "", "label" => ""] + ] + ]), + "columns" => (object)([ + 0 => (object)([ + "id" => "text0000000001", + "name" => "text0000000001", + ]), + 1 => (object)([ + "id" => "textarea0000000001", + "name" => "textarea0000000001", + ]), + 2 => (object)([ + "id" => "dropdown0000000001", + "name" => "dropdown0000000001", + ]), + 3 => (object)([ + "id" => "text0000000002", + "name" => "text0000000002", + ]), + 4 => (object)([ + "id" => "text0000000003", + "name" => "text0000000003", + ]) + ]) + ] + ); + + // An array that contains the variables stored on the App Data + $appData = [ + "1" => [ + "text0000000001" => "", + "text0000000001_label" => "", + "textarea0000000001" => "", + "textarea0000000001_label" => "", + "dropdown0000000001" => "", + "dropdown0000000001_label" => "" + ] + ]; + + //Calls the setDataSchema method + $resultText = $pmDynaform->setDataSchema($jsonData, $appData); + + //This assert the result is null + $this->assertNull($resultText); + + //Assert the 'dataSchema' field was added + $this->assertObjectHasAttribute('dataSchema', $jsonData); + + //It asserts the first control is defined + $this->assertTrue($jsonData->dataSchema['1'][0]['defined']); + + //It asserts the second control is defined + $this->assertTrue($jsonData->dataSchema['1'][1]['defined']); + + //It asserts the third control is defined + $this->assertTrue($jsonData->dataSchema['1'][2]['defined']); + + //It asserts the fourth control is undefined + $this->assertFalse($jsonData->dataSchema['1'][3]['defined']); + + //It asserts the fifth control is undefined + $this->assertFalse($jsonData->dataSchema['1'][4]['defined']); + } + + /** + * It tests that the json file is getting the defined and undefined values when the grid has more than one row + * + * @test + */ + public function it_should_add_the_correct_fields_with_more_than_one_rows() + { + //Creates the PmDynaform object + $pmDynaform = new PmDynaform(); + + //A json that contains the text control data and columns + $jsonData = (object)( + [ + "data" => (object)([ + "1" => [ + ["value" => "textControl1", "label" => "textControl1"], + ["value" => "textAreaControl2", "label" => "textAreaControl2"], + ["value" => "dropdowncontrol1", "label" => "dropdowncontrol1"], + ["value" => "", "label" => ""], + ["value" => "", "label" => ""] + ], + "2" => [ + ["value" => "textControl1", "label" => "textControl1"], + ["value" => "textAreaControl2", "label" => "textAreaControl2"], + ["value" => "dropdowncontrol1", "label" => "dropdowncontrol1"], + ["value" => "", "label" => ""], + ["value" => "", "label" => ""] + ], + "3" => [ + ["value" => "textControl1", "label" => "textControl1"], + ["value" => "textAreaControl2", "label" => "textAreaControl2"], + ["value" => "dropdowncontrol1", "label" => "dropdowncontrol1"], + ["value" => "", "label" => ""], + ["value" => "", "label" => ""] + ] + ]), + "columns" => (object)([ + 0 => (object)([ + "id" => "text0000000001", + "name" => "text0000000001", + ]), + 1 => (object)([ + "id" => "textarea0000000001", + "name" => "textarea0000000001", + ]), + 2 => (object)([ + "id" => "dropdown0000000001", + "name" => "dropdown0000000001", + ]), + 3 => (object)([ + "id" => "text0000000002", + "name" => "text0000000002", + ]), + 4 => (object)([ + "id" => "text0000000003", + "name" => "text0000000003", + ]) + ]) + ] + ); + + // An array that contains the variables stored on the App Data + $appData = [ + "1" => [ + "text0000000001" => "", + "text0000000001_label" => "", + "textarea0000000001" => "", + "textarea0000000001_label" => "", + "dropdown0000000001" => "", + "dropdown0000000001_label" => "" + ], + "2" => [ + "text0000000001" => "", + "text0000000001_label" => "", + "textarea0000000001" => "", + "textarea0000000001_label" => "", + "dropdown0000000001" => "", + "dropdown0000000001_label" => "" + ], + "3" => [ + "text0000000001" => "", + "text0000000001_label" => "", + "textarea0000000001" => "", + "textarea0000000001_label" => "", + "dropdown0000000001" => "", + "dropdown0000000001_label" => "" + ] + ]; + + //Calls the setDataSchema method + $resultText = $pmDynaform->setDataSchema($jsonData, $appData); + + //This assert the result is null + $this->assertNull($resultText); + + //Assert the 'dataSchema' field was added + $this->assertObjectHasAttribute('dataSchema', $jsonData); + + foreach ($jsonData->dataSchema as $key => $value) { + //It asserts the first control is defined + $this->assertTrue($jsonData->dataSchema[$key][0]['defined']); + + //It asserts the second control is defined + $this->assertTrue($jsonData->dataSchema[$key][1]['defined']); + + //It asserts the third control is defined + $this->assertTrue($jsonData->dataSchema[$key][2]['defined']); + + //It asserts the fourth control is undefined + $this->assertFalse($jsonData->dataSchema[$key][3]['defined']); + + //It asserts the fifth control is undefined + $this->assertFalse($jsonData->dataSchema[$key][4]['defined']); + } + } } diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index a4b8d5262..7ea9d03df 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -642,6 +642,8 @@ class PmDynaform } $json->rows = count($rows); $json->data = $rows; + + $this->setDataSchema($json, $this->fields["APP_DATA"][$json->name]); } } //languages @@ -2265,4 +2267,32 @@ class PmDynaform } return $message; } + + /** + * This adds a new definition on the json dynaform + * @param json $json + * + * @link https://wiki.processmaker.com/3.0/Grid_Control + * @see workflow/engine/classes/PmDynaform->jsonr + */ + public function setDataSchema($json, $appDataVariables) + { + foreach ($json->data as $key => $value) { + $columnsData = []; + foreach ($json->columns as $keyData => $valueData) { + foreach ($appDataVariables as $keyAppData => $valueAppData) { + if (array_key_exists($valueData->id, $valueAppData) || array_key_exists($valueData->id . "_label", + $valueAppData) || array_key_exists($valueData->name, + $valueAppData) || array_key_exists($valueData->name . "_label", $valueAppData)) { + array_push($columnsData, ["defined" => true]); + break; + } else { + array_push($columnsData, ["defined" => false]); + break; + } + } + } + $json->dataSchema[$key] = $columnsData; + } + } } From 4c116946ad5c8ef73f398e4473a4bfed2f23c373 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 6 Jun 2019 12:16:50 -0400 Subject: [PATCH 050/100] PMC-558 --- workflow/engine/classes/WorkspaceTools.php | 8 -------- workflow/engine/data/mysql/insert.sql | 3 +-- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 2f37b70d2..62a3713a5 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -1074,7 +1074,6 @@ class WorkspaceTools $this->checkRbacPermissions();//check or add new permissions $this->checkSequenceNumber(); $this->migrateIteeToDummytask($this->name); - $this->upgradeConfiguration(); /*----------------------------------********---------------------------------*/ $this->upgradeAuditLog($this->name); /*----------------------------------********---------------------------------*/ @@ -3739,13 +3738,6 @@ class WorkspaceTools CLI::logging($message); } - public function upgradeConfiguration() - { - $conf = new Configurations(); - $conf->aConfig = 'neoclassic'; - $conf->saveConfig('SKIN_CRON', ''); - } - public function upgradeAuditLog($workspace) { $conf = new Configurations(); diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 5a78ecbf5..cfc1dc4d2 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -61616,8 +61616,7 @@ INSERT INTO CONFIGURATION (CFG_UID,OBJ_UID,CFG_VALUE,PRO_UID,USR_UID,APP_UID) VA ('MIGRATED_APP_HISTORY', 'history', 'a:1:{s:7:\"updated\";b:1;}', '', '', ''), ('MIGRATED_CONTENT','content','a:12:{i:0;s:7:"Groupwf";i:1;s:7:"Process";i:2;s:10:"Department";i:3;s:4:"Task";i:4;s:13:"InputDocument";i:5;s:11:"Application";i:6;s:11:"AppDocument";i:7;s:8:"Dynaform";i:8;s:14:"OutputDocument";i:9;s:11:"ReportTable";i:10;s:8:"Triggers";i:11;s:41:"\\ProcessMaker\\BusinessModel\\WebEntryEvent";}','','',''), ('MIGRATED_LIST','list','true','list','list','list'), -('MIGRATED_LIST_UNASSIGNED','list','true','list','list','list'), -('SKIN_CRON','','s:10:\"neoclassic\";','','',''); +('MIGRATED_LIST_UNASSIGNED','list','true','list','list','list'); INSERT INTO CATALOG (CAT_UID,CAT_LABEL_ID,CAT_TYPE,CAT_FLAG,CAT_OBSERVATION,CAT_CREATE_DATE,CAT_UPDATE_DATE) VALUES ('10','ID_BARS','GRAPHIC','','','2015-03-04 00:00:00','2015-03-04 00:00:00'), From af55e4653962d7c9d5634c4ea74290f721ccf86e Mon Sep 17 00:00:00 2001 From: Fabio Guachalla Date: Mon, 17 Jun 2019 14:46:12 -0400 Subject: [PATCH 051/100] PMC-774:[Mantis - 27541] PM_USERS permission removes System and System Information options correction Correction CR --- workflow/engine/menus/setup.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index 1b2c69ad4..03acd845c 100644 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -162,14 +162,16 @@ if ($RBAC->userCanAccess('PM_USERS') === 1) { ); } -if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') === 1 && $RBAC->userCanAccess('PM_USERS') === 1 && $RBAC->userCanAccess - ('PM_SETUP_USERS_AUTHENTICATION_SOURCES') === 1) { +if ($RBAC->userCanAccess('PM_USERS') === 1 && $RBAC->userCanAccess('PM_SETUP_USERS_AUTHENTICATION_SOURCES') === 1) { $G_TMP_MENU->AddIdRawOption( 'AUTHSOURCES', '../authSources/authSources_List', G::LoadTranslation('ID_AUTH_SOURCES'), '', '', 'users' ); $G_TMP_MENU->AddIdRawOption('UX', '../admin/uxList', G::LoadTranslation('ID_USER_EXPERIENCE'), '', '', 'users'); +} + +if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') === 1) { $G_TMP_MENU->AddIdRawOption('SYSTEM', '../admin/system', G::LoadTranslation('ID_SYSTEM'), '', '', 'settings'); $G_TMP_MENU->AddIdRawOption( 'INFORMATION', '../setup/systemInfo?option=processInfo', From 21fd974d41e6650d4aec0a9107bff8a4d2a4f599 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 25 Jun 2019 08:17:57 -0400 Subject: [PATCH 052/100] PMC-878 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.4 to v5.5.0) --- app/Console/Kernel.php | 3 +- composer.json | 13 +- composer.lock | 1531 +++++++++++++++++++--------- thirdparty/pake/pakeYaml.class.php | 2 +- 4 files changed, 1074 insertions(+), 475 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5012ffaf8..c4f873ff5 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,7 +13,6 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - Commands\PMTranslationsPlugins::class ]; /** @@ -34,6 +33,6 @@ class Kernel extends ConsoleKernel */ protected function commands() { - + $this->load(__DIR__ . '/Commands'); } } diff --git a/composer.json b/composer.json index 144aaa1ba..c5aee9a92 100644 --- a/composer.json +++ b/composer.json @@ -27,8 +27,8 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=5.6", - "laravel/framework": "5.4.*", + "php": ">=7.1", + "laravel/framework": "5.5.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -43,7 +43,7 @@ "phpmailer/phpmailer": "5.2.27", "pear/archive_tar": "1.4.*", "pear/console_getopt": "1.4.*", - "TYPO3/class-alias-loader": "^1.0", + "typo3/class-alias-loader": "^1.0", "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", @@ -55,6 +55,7 @@ "fzaninotto/faker": "^1.7", "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", + "filp/whoops": "~2.0", "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", @@ -101,7 +102,11 @@ }, "scripts": { "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", - "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility" + "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ] }, "extra": { "typo3/class-alias-loader": { diff --git a/composer.lock b/composer.lock index c56712f71..af6b03908 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", + "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" + "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-11-29T15:23:08+00:00" + "time": "2018-12-18T17:10:59+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "e4176c9772842904552997702e549035b6ba641d" + "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-11-28T17:54:53+00:00" + "time": "2018-12-10T15:33:17+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" + "reference": "4449e02225bc1d351907ceee79b2411b428df517" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-11-16T14:26:15+00:00" + "time": "2018-12-18T17:11:02+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,20 +307,137 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.1", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.9", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2019-06-23T10:14:27+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -353,7 +470,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "geshi/geshi", @@ -427,7 +544,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -527,40 +644,86 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v5.4.36", + "name": "kylekatarnls/update-helper", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "^2.0.x-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-06-05T08:34:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.5.45", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.6", + "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", + "league/flysystem": "^1.0.8", + "monolog/monolog": "~1.12", "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", + "nesbot/carbon": "^1.26.0", + "php": ">=7.0", + "psr/container": "~1.0", + "psr/simple-cache": "^1.0", "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "~3.2", - "symfony/debug": "~3.2", - "symfony/finder": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/process": "~3.2", - "symfony/routing": "~3.2", - "symfony/var-dumper": "~3.2", + "swiftmailer/swiftmailer": "~6.0", + "symfony/console": "~3.3", + "symfony/debug": "~3.3", + "symfony/finder": "~3.3", + "symfony/http-foundation": "~3.3", + "symfony/http-kernel": "~3.3", + "symfony/process": "~3.3", + "symfony/routing": "~3.3", + "symfony/var-dumper": "~3.3", "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, @@ -577,7 +740,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -594,38 +756,43 @@ "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "tightenco/collect": "<5.5.33" }, "require-dev": { "aws/aws-sdk-php": "~3.0", "doctrine/dbal": "~2.5", - "mockery/mockery": "~0.9.4", + "filp/whoops": "^2.1.4", + "mockery/mockery": "~1.0", + "orchestra/testbench-core": "3.5.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.7", - "predis/predis": "~1.0", - "symfony/css-selector": "~3.2", - "symfony/dom-crawler": "~3.2" + "phpunit/phpunit": "~6.0", + "predis/predis": "^1.1.1", + "symfony/css-selector": "~3.3", + "symfony/dom-crawler": "~3.3" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -653,7 +820,7 @@ "framework", "laravel" ], - "time": "2017-08-30T09:26:16+00:00" + "time": "2019-01-28T20:53:19+00:00" }, { "name": "laravel/tinker", @@ -720,16 +887,16 @@ }, { "name": "league/flysystem", - "version": "1.0.49", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -800,7 +967,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "libchart/libchart", @@ -828,7 +995,7 @@ ], "authors": [ { - "name": "Jean-Marc Trémeaux", + "name": "Jean-Marc Tr??meaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -854,12 +1021,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8" + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", "shasum": "" }, "require": { @@ -1051,31 +1218,34 @@ }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.38.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1105,7 +1275,7 @@ "datetime", "time" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2019-06-03T15:41:40+00:00" }, { "name": "nikic/php-parser", @@ -1160,33 +1330,29 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.17", + "version": "v9.99.99", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^7" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1205,7 +1371,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { "name": "pdepend/pdepend", @@ -1249,16 +1415,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.3", + "version": "1.4.7", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", "shasum": "" }, "require": { @@ -1269,8 +1435,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "bz2 compression support.", - "ext-xz": "lzma2 compression support.", + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1305,26 +1471,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class", + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2017-06-11T17:28:11+00:00" + "time": "2019-04-08T13:15:55+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -1358,24 +1524,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20T20:28:12+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.6", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "052868b244d31f822796e7e9981f62557eb256d4" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", - "reference": "052868b244d31f822796e7e9981f62557eb256d4", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1402,7 +1568,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2018-08-22T19:28:09+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", @@ -1478,27 +1644,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1534,7 +1700,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2017-11-04T09:26:05+00:00" + "time": "2018-11-15T22:32:31+00:00" }, { "name": "psr/container", @@ -1623,6 +1789,54 @@ ], "time": "2012-12-21T11:40:51+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -1872,29 +2086,37 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1922,36 +2144,36 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081" + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081", + "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -1959,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -1986,20 +2208,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", "shasum": "" }, "require": { @@ -2011,6 +2233,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -2020,7 +2245,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -2055,29 +2280,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-05-09T08:42:51+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2108,20 +2333,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", "shasum": "" }, "require": { @@ -2164,38 +2389,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-18T13:32:47+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2208,7 +2435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2235,20 +2462,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:23+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", "shasum": "" }, "require": { @@ -2298,20 +2525,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-04-02T08:51:52+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", "shasum": "" }, "require": { @@ -2348,20 +2575,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-02-04T21:34:32+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", "shasum": "" }, "require": { @@ -2397,20 +2624,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-24T12:25:55+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", "shasum": "" }, "require": { @@ -2451,26 +2678,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-27T05:50:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/debug": "^3.3.3|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/polyfill-ctype": "~1.8" @@ -2540,20 +2767,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:04:48+00:00" + "time": "2019-05-28T09:24:42+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "reference": "82ebae02209c21113908c229e9883c419720738a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -2565,7 +2792,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2598,20 +2825,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "symfony/polyfill-iconv", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-03-04T13:44:35+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { @@ -2623,7 +2971,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2657,20 +3005,20 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { @@ -2680,7 +3028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2716,20 +3064,75 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.19", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", "shasum": "" }, "require": { @@ -2765,20 +3168,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-22T12:54:11+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", "shasum": "" }, "require": { @@ -2801,7 +3204,6 @@ "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -2842,37 +3244,103 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-05-18T16:36:47+00:00" }, { - "name": "symfony/translation", - "version": "v3.4.19", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2883,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2910,20 +3378,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.4.19", + "name": "symfony/translation-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", "shasum": "" }, "require": { @@ -2979,7 +3504,7 @@ "debug", "dump" ], - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-01T09:52:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3088,20 +3613,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -3109,7 +3635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3134,22 +3660,22 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.9.6", + "version": "v2.9.9", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", "shasum": "" }, "require": { @@ -3191,7 +3717,7 @@ "assertion", "validation" ], - "time": "2018-06-11T17:15:25+00:00" + "time": "2019-05-28T15:27:37+00:00" }, { "name": "behat/behat", @@ -3273,16 +3799,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -3290,8 +3816,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3328,34 +3854,35 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^3.3|^4.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -3386,7 +3913,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-05-14T09:56:49+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -3571,32 +4098,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3616,25 +4145,25 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -3681,7 +4210,67 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "filp/whoops", + "version": "2.1.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8 || ^5.0", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "whoops", + "zf2" + ], + "time": "2017-02-18T14:22:27+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -3906,7 +4495,7 @@ ], "authors": [ { - "name": "Christian Lück", + "name": "Christian Lück", "email": "christian@lueck.tv" } ], @@ -4041,32 +4630,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -4096,13 +4686,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "instaclick/php-webdriver", @@ -4246,25 +4837,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -4287,33 +4881,33 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-04-07T13:18:21+00:00" }, { "name": "nette/caching", - "version": "v2.5.8", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", + "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", "shasum": "" }, "require": { - "nette/finder": "^2.2 || ~3.0.0", + "nette/finder": "^2.4 || ~3.0.0", "nette/utils": "^2.4 || ~3.0.0", - "php": ">=5.6.0" + "php": ">=7.1" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "latte/latte": "^2.4", - "nette/di": "^2.4 || ~3.0.0", + "nette/di": "^v3.0.0-beta2", "nette/tester": "^2.0", "tracy/tracy": "^2.4" }, @@ -4321,6 +4915,69 @@ "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "time": "2019-02-05T21:28:16+00:00" + }, + { + "name": "nette/finder", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", "extra": { "branch-alias": { "dev-master": "2.5-dev" @@ -4347,70 +5004,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "? Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2018-03-21T11:04:32+00:00" - }, - { - "name": "nette/finder", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", - "shasum": "" - }, - "require": { - "nette/utils": "~2.4", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "description": "? Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", @@ -4418,7 +5012,7 @@ "iterator", "nette" ], - "time": "2018-06-28T11:49:23+00:00" + "time": "2019-02-28T18:13:25+00:00" }, { "name": "nette/reflection", @@ -4486,23 +5080,20 @@ }, { "name": "nette/utils", - "version": "v2.5.3", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + "reference": "bd961f49b211997202bda1d0fbc410905be370d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4", "shasum": "" }, "require": { - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" + "php": ">=7.1" }, "require-dev": { "nette/tester": "~2.0", @@ -4511,7 +5102,7 @@ "suggest": { "ext-gd": "to use Image", "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", "ext-xml": "to use Strings::length() etc. when mbstring is not available" @@ -4519,15 +5110,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" - ], - "files": [ - "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4564,7 +5152,7 @@ "utility", "validation" ], - "time": "2018-09-18T10:22:16+00:00" + "time": "2019-03-22T01:00:30+00:00" }, { "name": "ondram/ci-detector", @@ -4599,7 +5187,7 @@ ], "authors": [ { - "name": "OndÅ™ej Machulda", + "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], @@ -4675,29 +5263,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4716,7 +5310,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4767,16 +5361,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4797,8 +5391,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4826,7 +5420,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5030,29 +5624,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5075,7 +5669,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5784,16 +6378,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -5826,25 +6420,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "420458095cf60025eb0841276717e0da7f75e50e" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", - "reference": "420458095cf60025eb0841276717e0da7f75e50e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -5887,20 +6481,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", "shasum": "" }, "require": { @@ -5941,20 +6535,20 @@ "configuration", "options" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-04-10T16:00:48+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0f43969ab2718de55c1c1158dce046668079788d" + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", - "reference": "0f43969ab2718de55c1c1158dce046668079788d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", "shasum": "" }, "require": { @@ -5990,20 +6584,20 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { @@ -6049,24 +6643,25 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-03-25T07:48:46+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6099,20 +6694,20 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.0.0", + "version": "9.1.1", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", "shasum": "" }, "require": { @@ -6158,7 +6753,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-10-07T17:38:02+00:00" + "time": "2018-12-30T23:16:27+00:00" } ], "aliases": [], @@ -6173,7 +6768,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.1" }, "platform-dev": [] } diff --git a/thirdparty/pake/pakeYaml.class.php b/thirdparty/pake/pakeYaml.class.php index 55c4fa30b..3c50bfddf 100644 --- a/thirdparty/pake/pakeYaml.class.php +++ b/thirdparty/pake/pakeYaml.class.php @@ -80,7 +80,7 @@ * @access public * @return void */ - public function pakeYAMLNode() { + public function __construct() { $this->id = uniqid(''); } } From 8c1bad32d7f93cd899a34093b03b9738364ff593 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 25 Jun 2019 15:53:38 -0400 Subject: [PATCH 053/100] PMC-897 --- gulliver/system/class.g.php | 307 +++++++++++++++++++++++++++++++++++- 1 file changed, 302 insertions(+), 5 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 60207b1be..7994e8d88 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5060,11 +5060,308 @@ class G public static function reservedWordsSql() { //Reserved words SQL - $reservedWordsSql = array("ACCESSIBLE","ACTION","ADD","ALL","ALTER","ANALYZE","AND","ANY","AS","ASC","ASENSITIVE","AUTHORIZATION","BACKUP","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BIT","BLOB","BOTH","BREAK","BROWSE","BULK","BY","CALL","CASCADE","CASE","CHANGE","CHAR","CHARACTER","CHECK","CHECKPOINT","CLOSE","CLUSTERED","COALESCE","COLLATE","COLUMN","COMMIT","COMPUTE","CONDITION","CONSTRAINT","CONTAINS","CONTAINSTABLE","CONTINUE","CONVERT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATABASES","DATE","DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE","DAY_SECOND","DBCC","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DELAYED","DELETE","DENY","DESC","DESCRIBE","DETERMINISTIC","DISK","DISTINCT","DISTINCTROW", - "DISTRIBUTED","DIV","DOUBLE","DROP","DUAL","DUMMY","DUMP","EACH","ELSE","ELSEIF","ENCLOSED","END","ENUM","ERRLVL","ESCAPE","ESCAPED","EXCEPT","EXEC","EXECUTE","EXISTS","EXIT","EXPLAIN","FALSE","FETCH","FILE","FILLFACTOR","FLOAT","FLOAT4","FLOAT8","FOR","FORCE","FOREIGN","FREETEXT","FREETEXTTABLE","FROM","FULL","FULLTEXT","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HAVING","HIGH_PRIORITY","HOLDLOCK","HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND","IDENTITY","IDENTITYCOL","IDENTITY_INSERT","IF","IGNORE","IGNORE_SERVER_IDS","IN","INDEX","INFILE","INNER","INOUT","INSENSITIVE","INSERT","INT","INT1","INT2","INT3","INT4","INT8","INTEGER","INTERSECT","INTERVAL","INTO","IS","ITERATE","JOIN","KEY","KEYS","KILL","LEADING","LEAVE","LEFT","LIKE","LIMIT","LINEAR","LINENO","LINES", - "LOAD","LOCALTIME","LOCALTIMESTAMP","LOCK","LONG","LONGBLOB","LONGTEXT","LOOP","LOW_PRIORITY","MASTER_HEARTBEAT_PERIOD","MASTER_SSL_VERIFY_SERVER_CERT","MATCH","MAXVALUE","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND","MINUTE_SECOND","MOD","MODIFIES","NATIONAL","NATURAL","NO","NOCHECK","NONCLUSTERED","NOT","NO_WRITE_TO_BINLOG","NULL","NULLIF","NUMERIC","OF","OFF","OFFSETS","ON","OPEN","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","OPTIMIZE","OPTION","OPTIONALLY","OR","ORDER","OUT","OUTER","OUTFILE","OVER","PERCENT","PLAN","PRECISION","PRIMARY","PRINT","PROC","PROCEDURE","PUBLIC","PURGE","RAISERROR","RANGE","READ","READS","READTEXT","READ_WRITE","REAL","RECONFIGURE","REFERENCES","REGEXP","RELEASE","RENAME","REPEAT","REPLACE", - "REPLICATION","REQUIRE","RESIGNAL","RESTORE","RESTRICT","RETURN","REVOKE","RIGHT","RLIKE","ROLLBACK","ROWCOUNT","ROWGUIDCOL","RULE","SAVE","SCHEMA","SCHEMAS","SECOND_MICROSECOND","SELECT","SENSITIVE","SEPARATOR","SESSION_USER","SET","SETUSER","SHOW","SHUTDOWN","SIGNAL","SLOW","SMALLINT","SOME","SPATIAL","SPECIFIC","SQL","SQLEXCEPTION","SQLSTATE","SQLWARNING","SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT","SSL","STARTING","STATISTICS","STRAIGHT_JOIN","SYSTEM_USER","TABLE","TERMINATED","TEXT","TEXTSIZE","THEN","TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","TO","TOP","TRAILING","TRAN","TRANSACTION","TRIGGER","TRUE","TRUNCATE","TSEQUAL","UNDO","UNION","UNIQUE","UNLOCK","UNSIGNED","UPDATE","UPDATETEXT","USAGE","USE","USER","USING","UTC_DATE","UTC_TIME", - "UTC_TIMESTAMP","VALUES","VARBINARY","VARCHAR","VARCHARACTER","VARYING","VIEW","WAITFOR","WHEN","WHERE","WHILE","WITH","WRITE","WRITETEXT","XOR","YEAR_MONTH","ZEROFILL"); + $reservedWordsSql = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + return $reservedWordsSql; } From 150b6d9ab5d709741cb860d382a7103082a6935c Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 12:25:53 -0400 Subject: [PATCH 054/100] PMC-880 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.5.42 to v5.6.0) --- app/Logging/CustomizeFormatter.php | 22 + bootstrap/app.php | 11 - composer.json | 3 +- composer.lock | 1584 ++++++++-------------------- config/app.php | 2 - config/logging.php | 85 ++ 6 files changed, 544 insertions(+), 1163 deletions(-) create mode 100644 app/Logging/CustomizeFormatter.php create mode 100644 config/logging.php diff --git a/app/Logging/CustomizeFormatter.php b/app/Logging/CustomizeFormatter.php new file mode 100644 index 000000000..f9846ac5f --- /dev/null +++ b/app/Logging/CustomizeFormatter.php @@ -0,0 +1,22 @@ +getHandlers() as $handler) { + $handler->setFormatter(new LineFormatter(null, null, true, true)); + } + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index a5e730432..e1cbf9613 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -50,17 +50,6 @@ $app->singleton( Handler::class ); -$app->configureMonologUsing(function ($monolog) use ($app) { - $monolog->pushHandler( - (new RotatingFileHandler( - // Set the log path - $app->storagePath() . '/logs/processmaker.log', - // Set the number of daily files you want to keep - $app->make('config')->get('app.log_max_files', 5) - ))->setFormatter(new LineFormatter(null, null, true, true)) - ); -}); - /* |-------------------------------------------------------------------------- | Return The Application diff --git a/composer.json b/composer.json index c5aee9a92..c5520ae40 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.5.*", + "laravel/framework": "5.6.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -56,7 +56,6 @@ "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", "filp/whoops": "~2.0", - "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", "squizlabs/php_codesniffer": "^2.2 || ^3.0.2", diff --git a/composer.lock b/composer.lock index af6b03908..03459229e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", + "content-hash": "d081c4d39988f562487dbfe81bb9e856", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -369,6 +369,60 @@ ], "time": "2019-06-08T11:03:04+00:00" }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, { "name": "egulias/email-validator", "version": "2.1.9", @@ -690,43 +744,46 @@ }, { "name": "laravel/framework", - "version": "v5.5.45", + "version": "v5.6.39", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + "reference": "37bb306f516669ab4f888c16003f694313ab299e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", + "reference": "37bb306f516669ab4f888c16003f694313ab299e", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", + "dragonmantank/cron-expression": "~2.0", "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "^1.26.0", - "php": ">=7.0", + "nesbot/carbon": "1.25.*", + "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "~3.0", + "ramsey/uuid": "^3.7", "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~3.3", - "symfony/debug": "~3.3", - "symfony/finder": "~3.3", - "symfony/http-foundation": "~3.3", - "symfony/http-kernel": "~3.3", - "symfony/process": "~3.3", - "symfony/routing": "~3.3", - "symfony/var-dumper": "~3.3", - "tijsverkoyen/css-to-inline-styles": "~2.2", + "symfony/console": "~4.0", + "symfony/debug": "~4.0", + "symfony/finder": "~4.0", + "symfony/http-foundation": "~4.0", + "symfony/http-kernel": "~4.0", + "symfony/process": "~4.0", + "symfony/routing": "~4.0", + "symfony/var-dumper": "~4.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", "vlucas/phpdotenv": "~2.2" }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -755,44 +812,46 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", + "doctrine/dbal": "~2.6", "filp/whoops": "^2.1.4", + "league/flysystem-cached-adapter": "~1.0", "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.6.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~6.0", + "phpunit/phpunit": "~7.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~3.3", - "symfony/dom-crawler": "~3.3" + "symfony/css-selector": "~4.0", + "symfony/dom-crawler": "~4.0" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -820,7 +879,7 @@ "framework", "laravel" ], - "time": "2019-01-28T20:53:19+00:00" + "time": "2018-10-04T14:50:41+00:00" }, { "name": "laravel/tinker", @@ -1172,62 +1231,18 @@ ], "time": "2016-04-12T18:29:35+00:00" }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" - }, { "name": "nesbot/carbon", - "version": "1.38.4", + "version": "1.25.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", "shasum": "" }, "require": { @@ -1245,16 +1260,11 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - } + "update-helper": "Carbon\\Upgrade" }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1275,7 +1285,7 @@ "datetime", "time" ], - "time": "2019-06-03T15:41:40+00:00" + "time": "2019-06-03T17:56:44+00:00" }, { "name": "nikic/php-parser", @@ -2212,25 +2222,27 @@ }, { "name": "symfony/console", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, "provide": { @@ -2238,11 +2250,12 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { "psr/log": "For using the console logger", @@ -2253,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2280,29 +2293,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-05-09T08:42:51+00:00" + "time": "2019-06-05T13:25:51+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2333,36 +2346,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/debug", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/http-kernel": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2389,7 +2402,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-18T13:32:47+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/dependency-injection", @@ -2466,30 +2479,37 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2498,7 +2518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2525,30 +2545,88 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-04-02T08:51:52+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.28", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "shasum": "" + }, + "require": { + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2575,29 +2653,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-02-04T21:34:32+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { "name": "symfony/finder", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2624,34 +2702,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-24T12:25:55+00:00" + "time": "2019-05-26T20:47:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2678,34 +2757,37 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-05-27T05:50:24+00:00" + "time": "2019-06-06T10:05:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -2713,34 +2795,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2767,7 +2849,66 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-05-28T09:24:42+00:00" + "time": "2019-06-06T13:23:34+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-06-04T09:22:54+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3007,65 +3148,6 @@ ], "time": "2019-02-06T07:57:58+00:00" }, - { - "name": "symfony/polyfill-php70", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "bc4858fb611bda58719124ca079baff854149c89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", - "reference": "bc4858fb611bda58719124ca079baff854149c89", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2019-02-06T07:57:58+00:00" - }, { "name": "symfony/polyfill-php72", "version": "v1.11.0", @@ -3122,26 +3204,84 @@ "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.28", + "name": "symfony/polyfill-php73", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" } }, "autoload": { @@ -3168,37 +3308,37 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-22T12:54:11+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/routing", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3211,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3244,7 +3384,7 @@ "uri", "url" ], - "time": "2019-05-18T16:36:47+00:00" + "time": "2019-06-05T09:16:20+00:00" }, { "name": "symfony/service-contracts", @@ -3439,38 +3579,45 @@ }, { "name": "symfony/var-dumper", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-intl": "To show region name in time zone dump", - "ext-symfony_debug": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3504,7 +3651,7 @@ "debug", "dump" ], - "time": "2019-05-01T09:52:10+00:00" + "time": "2019-06-05T02:08:12+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3664,61 +3811,6 @@ } ], "packages-dev": [ - { - "name": "beberlei/assert", - "version": "v2.9.9", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2019-05-28T15:27:37+00:00" - }, { "name": "behat/behat", "version": "v3.5.0", @@ -3858,31 +3950,30 @@ }, { "name": "behat/mink", - "version": "dev-master", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "^2.7|^3.0|^4.0" + "symfony/css-selector": "~2.1|~3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3|^4.0" + "symfony/phpunit-bridge": "~2.7|~3.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", - "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" }, "type": "library", "extra": { @@ -3913,7 +4004,7 @@ "testing", "web" ], - "time": "2019-05-14T09:56:49+00:00" + "time": "2016-03-05T08:26:18+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -4020,51 +4111,6 @@ ], "time": "2017-04-04T11:38:05+00:00" }, - { - "name": "clue/graph", - "version": "v0.9.0", - "source": { - "type": "git", - "url": "https://github.com/clue/graph.git", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", - "graphp/graphviz": "GraphViz graph drawing / DOT output" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fhaculty\\Graph\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A mathematical graph/network library written in PHP", - "homepage": "https://github.com/clue/graph", - "keywords": [ - "edge", - "graph", - "mathematical", - "network", - "vertex" - ], - "time": "2015-03-07T18:11:31+00:00" - }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -4152,66 +4198,6 @@ ], "time": "2019-03-17T17:37:11+00:00" }, - { - "name": "facebook/webdriver", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2019-06-13T08:02:18+00:00" - }, { "name": "filp/whoops", "version": "2.1.6", @@ -4272,146 +4258,6 @@ ], "time": "2017-02-18T14:22:27+00:00" }, - { - "name": "florianwolters/component-core-stringutils", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Offers operations on the data type string as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", - "keywords": [ - "helper", - "language", - "string", - "wrapper" - ], - "time": "2013-07-01T10:24:07+00:00" - }, - { - "name": "florianwolters/component-util-reflection", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": ">=0.2-beta", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Provides operations for the PHP Reflection API as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", - "keywords": [ - "reflection", - "utility" - ], - "time": "2013-03-19T16:42:41+00:00" - }, - { - "name": "florianwolters/component-util-singleton", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": "0.3.*", - "florianwolters/component-util-reflection": "0.2.*", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": [ - "src/php", - "src/tests/unit-tests/php", - "src/tests/mocks/php" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", - "keywords": [ - "creation", - "pattern", - "singleton", - "utility" - ], - "time": "2013-06-29T12:35:22+00:00" - }, { "name": "fzaninotto/faker", "version": "v1.8.0", @@ -4462,56 +4308,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "graphp/algorithms", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/graphp/algorithms.git", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", - "shasum": "" - }, - "require": { - "clue/graph": "~0.9.0|~0.8.0", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Graphp\\Algorithms\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "Common mathematical graph algorithms", - "homepage": "https://github.com/graphp/algorithms", - "keywords": [ - "Graph algorithms", - "dijkstra", - "kruskal", - "minimum spanning tree", - "moore-bellman-ford", - "prim", - "shortest path" - ], - "time": "2015-03-08T10:12:01+00:00" - }, { "name": "guzzlehttp/guzzle", "version": "6.3.3", @@ -4754,87 +4550,6 @@ ], "time": "2017-06-30T04:02:48+00:00" }, - { - "name": "lmc/steward", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/lmc-eu/steward.git", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "shasum": "" - }, - "require": { - "beberlei/assert": "^2.7", - "clue/graph": "~0.9.0", - "doctrine/inflector": "~1.0", - "ext-curl": "*", - "ext-zip": "*", - "facebook/webdriver": "^1.4.0", - "florianwolters/component-util-singleton": "0.3.2", - "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.4.2", - "ondram/ci-detector": "^2.1", - "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7.11", - "symfony/console": "^3.3.0", - "symfony/event-dispatcher": "~3.0", - "symfony/filesystem": "~3.0", - "symfony/finder": "~3.0", - "symfony/options-resolver": "^3.2", - "symfony/process": "^3.2.0", - "symfony/stopwatch": "^3.0", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "~1.0", - "squizlabs/php_codesniffer": "^2.4.1", - "symfony/var-dumper": "^3.2" - }, - "suggest": { - "ext-posix": "For colored output", - "ext-xdebug": "For remote tests debugging" - }, - "bin": [ - "bin/steward", - "bin/steward.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Lmc\\Steward\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "LMC s.r.o.", - "homepage": "https://github.com/lmc-eu" - } - ], - "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", - "keywords": [ - "phpunit", - "selenium", - "testing", - "webdriver" - ], - "time": "2018-07-26T22:03:36+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.9.1", @@ -4883,330 +4598,6 @@ ], "time": "2019-04-07T13:18:21+00:00" }, - { - "name": "nette/caching", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", - "shasum": "" - }, - "require": { - "nette/finder": "^2.4 || ~3.0.0", - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^v3.0.0-beta2", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2019-02-05T21:28:16+00:00" - }, - { - "name": "nette/finder", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "? Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "time": "2019-02-28T18:13:25+00:00" - }, - { - "name": "nette/reflection", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "^2.2 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "^2.4 || ^3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Reflection: docblock annotations parser and common reflection classes", - "homepage": "https://nette.org", - "keywords": [ - "annotation", - "nette", - "reflection" - ], - "time": "2017-07-11T19:28:57+00:00" - }, - { - "name": "nette/utils", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "time": "2019-03-22T01:00:30+00:00" - }, - { - "name": "ondram/ci-detector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12", - "phpunit/phpunit": "^5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect current continuous integration server and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "adapter", - "appveyor", - "bamboo", - "continuous integration", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "time": "2017-05-26T16:39:57+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", @@ -6483,125 +5874,22 @@ "homepage": "https://symfony.com", "time": "2019-01-16T09:39:14+00:00" }, - { - "name": "symfony/options-resolver", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2019-04-10T16:00:48+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" - }, { "name": "symfony/yaml", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6616,7 +5904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6643,7 +5931,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-25T07:48:46+00:00" + "time": "2019-04-06T14:04:46+00:00" }, { "name": "webmozart/assert", diff --git a/config/app.php b/config/app.php index 651ebfc6a..d6a80bd28 100644 --- a/config/app.php +++ b/config/app.php @@ -9,8 +9,6 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), - 'log' => env('APP_LOG', 'single'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'timezone' => 'UTC', 'providers' => [ diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000..e8863a3f8 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,85 @@ + env('APP_LOG', env('LOG_CHANNEL', 'daily')), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/processmaker.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'tap' => [ + App\Logging\CustomizeFormatter::class + ], + 'path' => storage_path('logs/processmaker.log'), + 'level' => env('APP_LOG_LEVEL', 'debug'), + 'days' => $app->make('config')->get('app.log_max_files', 5), + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + ], + +]; \ No newline at end of file From e36a3844218fe779fa662b5283e75cb53bcc7557 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 13:56:49 -0400 Subject: [PATCH 055/100] PMC-882 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.6.30 to v5.7) --- composer.json | 2 +- composer.lock | 1280 +++++++++++++++++++++++++++++++++++------------- config/app.php | 1 + 3 files changed, 929 insertions(+), 354 deletions(-) diff --git a/composer.json b/composer.json index c5520ae40..989da13b4 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.6.*", + "laravel/framework": "5.7.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", diff --git a/composer.lock b/composer.lock index 03459229e..aa753f4cb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "d081c4d39988f562487dbfe81bb9e856", + "content-hash": "f548a9edab2774eff09bb261eb05c6d0", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -609,6 +609,189 @@ ], "time": "2015-10-16T22:11:08+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -744,42 +927,45 @@ }, { "name": "laravel/framework", - "version": "v5.6.39", + "version": "v5.7.28", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "37bb306f516669ab4f888c16003f694313ab299e" + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", - "reference": "37bb306f516669ab4f888c16003f694313ab299e", + "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "dragonmantank/cron-expression": "~2.0", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "nesbot/carbon": "1.25.*", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", "php": "^7.1.3", - "psr/container": "~1.0", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~4.0", - "symfony/debug": "~4.0", - "symfony/finder": "~4.0", - "symfony/http-foundation": "~4.0", - "symfony/http-kernel": "~4.0", - "symfony/process": "~4.0", - "symfony/routing": "~4.0", - "symfony/var-dumper": "~4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "~2.2" + "vlucas/phpdotenv": "^2.2" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -815,43 +1001,47 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.6", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "league/flysystem-cached-adapter": "~1.0", - "mockery/mockery": "~1.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.6.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~7.0", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", "predis/predis": "^1.1.1", - "symfony/css-selector": "~4.0", - "symfony/dom-crawler": "~4.0" + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -879,7 +1069,121 @@ "framework", "laravel" ], - "time": "2018-10-04T14:50:41+00:00" + "time": "2019-02-26T15:41:34+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" }, { "name": "laravel/tinker", @@ -944,6 +1248,61 @@ ], "time": "2018-10-12T19:39:35+00:00" }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, { "name": "league/flysystem", "version": "1.0.53", @@ -1233,16 +1592,16 @@ }, { "name": "nesbot/carbon", - "version": "1.25.3", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { @@ -1260,11 +1619,16 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade" + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1285,7 +1649,55 @@ "datetime", "time" ], - "time": "2019-06-03T17:56:44+00:00" + "time": "2019-06-11T09:07:59+00:00" + }, + { + "name": "nexmo/client", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/php-parser", @@ -1338,6 +1750,67 @@ ], "time": "2018-02-28T20:30:58+00:00" }, + { + "name": "opis/closure", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "f846725591203098246276b2e7b9e8b7814c4965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", + "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-05-31T20:04:32+00:00" + }, { "name": "paragonie/random_compat", "version": "v9.99.99", @@ -1635,6 +2108,172 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "phpmailer/phpmailer", "version": "v5.2.27", @@ -1761,6 +2400,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -2158,16 +2899,16 @@ }, { "name": "symfony/config", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", "shasum": "" }, "require": { @@ -2218,20 +2959,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-08T06:33:08+00:00" }, { "name": "symfony/console", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", "shasum": "" }, "require": { @@ -2293,11 +3034,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2350,16 +3091,16 @@ }, { "name": "symfony/debug", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", "shasum": "" }, "require": { @@ -2402,20 +3143,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-19T15:27:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" + "reference": "b851928be349c065197fdc0832f78d85139e3903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", + "reference": "b851928be349c065197fdc0832f78d85139e3903", "shasum": "" }, "require": { @@ -2475,20 +3216,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-15T04:08:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", "shasum": "" }, "require": { @@ -2545,7 +3286,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2607,16 +3348,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", "shasum": "" }, "require": { @@ -2653,20 +3394,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", "shasum": "" }, "require": { @@ -2702,20 +3443,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", "shasum": "" }, "require": { @@ -2757,20 +3498,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "time": "2019-06-26T09:25:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", "shasum": "" }, "require": { @@ -2849,11 +3590,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "time": "2019-06-26T14:26:16+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -3263,7 +4004,7 @@ }, { "name": "symfony/process", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -3312,16 +4053,16 @@ }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", "shasum": "" }, "require": { @@ -3384,7 +4125,7 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "time": "2019-06-26T13:54:39+00:00" }, { "name": "symfony/service-contracts", @@ -3446,16 +4187,16 @@ }, { "name": "symfony/translation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", "shasum": "" }, "require": { @@ -3518,7 +4259,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/translation-contracts", @@ -3579,16 +4320,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", "shasum": "" }, "require": { @@ -3651,7 +4392,7 @@ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "time": "2019-06-17T17:37:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3808,6 +4549,72 @@ "environment" ], "time": "2019-01-29T11:11:52+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2019-04-29T21:11:00+00:00" } ], "packages-dev": [ @@ -4308,189 +5115,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -5204,56 +5828,6 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5820,7 +6394,7 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -5876,7 +6450,7 @@ }, { "name": "symfony/yaml", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/config/app.php b/config/app.php index d6a80bd28..f031ca9ac 100644 --- a/config/app.php +++ b/config/app.php @@ -20,6 +20,7 @@ return [ Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, ], 'aliases' => [ From 6de0b830a9f696ba3a775c88d1f54a250ea00542 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 28 Jun 2019 14:24:59 -0400 Subject: [PATCH 056/100] PMC-913 All existing Unit Tests are running correctly? --- phpunit.xml | 2 +- tests/Feature/DBQueryTest.php | 55 +++++++++++------ tests/WorkflowTestCase.php | 29 ++++++--- tests/bootstrap.php | 23 ++++++-- .../engine/classes/ReportTablesTest.php | 4 +- .../ProcessMaker/BusinessModel/GroupTest.php | 7 --- .../BusinessModel/LanguageTest.php | 43 ++++++++++---- .../ProcessMaker/BusinessModel/SkinsTest.php | 20 +++---- .../BusinessModel/WebEntryEventTest.php | 59 ++++++++++++++----- workflow/engine/classes/model/Process.php | 8 ++- 10 files changed, 166 insertions(+), 84 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 5ec9092ee..a5a5f121f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -15,7 +15,7 @@ ./tests/workflow/engine/src/ - ./tests/Unit + ./tests/unit ./tests/Performance/ diff --git a/tests/Feature/DBQueryTest.php b/tests/Feature/DBQueryTest.php index f851feafb..1af3c613d 100644 --- a/tests/Feature/DBQueryTest.php +++ b/tests/Feature/DBQueryTest.php @@ -1,43 +1,56 @@ assertCount(1, $results); // Note, we check index 1 because results from executeQuery are 1 indexed, not 0 indexed. - $this->assertArraySubset([ + $expected = [ 'USR_UID' => '00000000000000000000000000000001', 'USR_USERNAME' => 'admin' - ], $results[1]); + ]; + $this->assertArraySubset($expected, $results[1]); } + /** + * Verify the existence of the admin user. + * @test + */ public function testDBFacadeQuery() { - $record = DB::table('USERS')->where([ - 'USR_UID' => '00000000000000000000000000000001' - ])->first(); + $record = DB::table('USERS')->where('USR_UID', '=', '00000000000000000000000000000001')->first(); $this->assertEquals('admin', $record->USR_USERNAME); } + /** + * Verify the execution of a SQL statement common to an MySQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMySQLDatabase() { // Our test external database is created in our tests/bootstrap.php file @@ -45,12 +58,12 @@ class DBQueryTest extends TestCase $process = factory(Process::class)->create(); // Let's create an external DB to ourselves $externalDB = factory(DbSource::class)->create([ - 'DBS_SERVER' => 'localhost', + 'DBS_SERVER' => config('database.connections.testexternal.host'), 'DBS_PORT' => '3306', - 'DBS_USERNAME' => env('DB_USERNAME'), + 'DBS_USERNAME' => config('database.connections.testexternal.username'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('DB_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('DB_PASSWORD'), config('database.connections.testexternal.database')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => config('database.connections.testexternal.database'), 'PRO_UID' => $process->PRO_UID ]); @@ -65,9 +78,13 @@ class DBQueryTest extends TestCase $this->assertEquals('testvalue', $results[1]['value']); } + /** + * Verify the execution of a SQL statement common to an MSSQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMSSqlDatabase() { - if(!env('RUN_MSSQL_TESTS')) { + if (!env('RUN_MSSQL_TESTS')) { $this->markTestSkipped('MSSQL Related Test Skipped'); } // Our test external database is created in our tests/bootstrap.php file @@ -80,8 +97,8 @@ class DBQueryTest extends TestCase 'DBS_TYPE' => 'mssql', 'DBS_USERNAME' => env('MSSQL_USERNAME'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('MSSQL_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('MSSQL_PASSWORD'), env('MSSQL_DATABASE')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => env('MSSQL_DATABASE'), 'PRO_UID' => $process->PRO_UID ]); // Now set our process ID @@ -94,4 +111,4 @@ class DBQueryTest extends TestCase $this->assertCount(1, $results); $this->assertEquals('testvalue', $results[1]['value']); } -} \ No newline at end of file +} diff --git a/tests/WorkflowTestCase.php b/tests/WorkflowTestCase.php index 6e7969149..a2b90118d 100644 --- a/tests/WorkflowTestCase.php +++ b/tests/WorkflowTestCase.php @@ -1,26 +1,37 @@ host = env("DB_HOST"); + $this->user = env("DB_USERNAME"); + $this->password = env("DB_PASSWORD"); + $this->database = env("DB_DATABASE"); //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); - $pdo0->query('CREATE DATABASE '.DB_NAME); - $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, - DB_PASS); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); + $pdo0->query('CREATE DATABASE '.$this->database); + $pdo = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->user, + $this->password); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); $pdo->exec(file_get_contents(PATH_CORE.'data/mysql/schema.sql')); $pdo->exec(file_get_contents(PATH_RBAC_CORE.'data/mysql/schema.sql')); @@ -39,8 +50,8 @@ class WorkflowTestCase extends TestCase protected function dropDB() { //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 895c470da..fa0608493 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -35,6 +35,11 @@ define('PMTABLE_KEY', 'pmtable'); define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); +define('DB_ADAPTER', 'mysql'); +define('PATH_RBAC_HOME', PATH_TRUNK . '/rbac/'); +define('PATH_RBAC', PATH_RBAC_HOME . 'engine/classes/'); +define("PATH_CUSTOM_SKINS", PATH_DATA . "skins/"); +define("PATH_TPL", PATH_CORE . "templates/"); //timezone $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; @@ -53,11 +58,22 @@ ini_set('date.timezone', TIME_ZONE); //Set Time Zone date_default_timezone_set(TIME_ZONE); config(['app.timezone' => TIME_ZONE]); +//configuration values +config([ + "system.workspace" => SYS_SYS +]); +define("PATH_DATA_SITE", PATH_DATA . "sites/" . config("system.workspace") . "/"); +define("PATH_DYNAFORM", PATH_DATA_SITE . "xmlForms/"); +define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/"); +define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/"); + +G::defineConstants(); + // Setup our testexternal database config(['database.connections.testexternal' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), - 'database' => env('DB_DATABASE', 'testexternal'), + 'database' => 'testexternal', 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', 'password'), 'unix_socket' => env('DB_SOCKET', ''), @@ -68,11 +84,6 @@ config(['database.connections.testexternal' => [ 'engine' => null ]]); -//configuration values -config([ - "system.workspace" => SYS_SYS -]); - // Now, drop all test tables and repopulate with schema Schema::connection('testexternal')->dropIfExists('test'); diff --git a/tests/unit/workflow/engine/classes/ReportTablesTest.php b/tests/unit/workflow/engine/classes/ReportTablesTest.php index c48ed8191..2dc0b4f3d 100644 --- a/tests/unit/workflow/engine/classes/ReportTablesTest.php +++ b/tests/unit/workflow/engine/classes/ReportTablesTest.php @@ -9,13 +9,13 @@ use ProcessMaker\Model\Task; use ProcessMaker\Model\User; use Tests\TestCase; -class PmDynaformTest extends TestCase +class ReportTablesTest extends TestCase { use DatabaseTransactions; /** - * Constructor of the class. + * Sets up the unit tests. */ protected function setUp() { diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php index d502ce5a1..38311b826 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php @@ -37,13 +37,6 @@ class GroupTest extends TestCase */ protected function setUp() { - parent::setUp(); - - //Move section - global $RBAC; - $RBAC->initRBAC(); - $RBAC->loadUserRolePermission($RBAC->sSystem, '00000000000000000000000000000001'); - $this->setInstanceGroup(new Group()); } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 625a06a72..4e6bb14f9 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -1,11 +1,15 @@ setupDB(); + $this->getBaseUri(); $this->object = new Language; - $this->translationEnv = PATH_DATA."META-INF".PATH_SEP."translations.env"; + $this->translationEnv = PATH_DATA . "META-INF" . PATH_SEP . "translations.env"; file_exists($this->translationEnv) ? unlink($this->translationEnv) : false; } /** - * Tears down the unit tests. + * Get base uri for rest applications. + * @return string */ - protected function tearDown() + private function getBaseUri() { - $this->dropDB(); + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; } /** @@ -54,14 +75,14 @@ class LanguageTest extends \WorkflowTestCase */ public function testGetLanguageListInstalled() { - $this->installLanguage('es', __DIR__.'/processmaker.es.po'); + $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); $this->assertCount(2, $list); $this->assertEquals('en', $list[0]['LANG_ID']); $this->assertEquals('English', $list[0]['LANG_NAME']); $this->assertEquals('es-ES', $list[1]['LANG_ID']); $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); - $this->uninstallLanguage('es', __DIR__.'/processmaker.es.po'); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); $this->assertCount(1, $list2); } @@ -74,7 +95,7 @@ class LanguageTest extends \WorkflowTestCase */ private function installLanguage($lanId, $filename) { - copy($filename, PATH_CORE.'content/translations/'.basename($filename)); + copy($filename, PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(1); $language->save(); @@ -89,7 +110,7 @@ class LanguageTest extends \WorkflowTestCase */ private function uninstallLanguage($lanId, $filename) { - unlink(PATH_CORE.'content/translations/'.basename($filename)); + unlink(PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(0); $language->save(); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php index 2e95aa342..d4fb18758 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php @@ -2,10 +2,13 @@ namespace ProcessMaker\BusinessModel; +use G; +use Tests\TestCase; + /** * Skins Tests */ -class SkinsTest extends \WorkflowTestCase +class SkinsTest extends TestCase { /** * @var Skins @@ -17,9 +20,7 @@ class SkinsTest extends \WorkflowTestCase */ protected function setUp() { - $this->cleanShared(); - $this->setupDB(); - $this->object = new Skins; + $this->object = new Skins(); } /** @@ -27,8 +28,8 @@ class SkinsTest extends \WorkflowTestCase */ protected function tearDown() { - $this->cleanShared(); - $this->dropDB(); + G::rm_dir(PATH_DATA . 'skins'); + mkdir(PATH_DATA . 'skins'); } /** @@ -61,12 +62,7 @@ class SkinsTest extends \WorkflowTestCase { $this->object->createSkin('test', 'test'); $this->object->createSkin( - 'test2', - 'test2', - 'Second skin', - 'ProcessMaker Team', - 'current', - 'neoclassic' + 'test2', 'test2', 'Second skin', 'ProcessMaker Team', 'current', 'neoclassic' ); $skins = $this->object->getSkins(); $this->assertCount(4, $skins); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php index a4f025cad..6d1e55623 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php @@ -1,13 +1,17 @@ markTestIncomplete(); + + $this->getBaseUri(); $this->setupDB(); - $this->processUid = $this->import(__DIR__.'/WebEntryEventTest.pmx'); - $this->processUid2 = $this->import(__DIR__.'/WebEntryEventTest2.pmx'); - $this->object = new WebEntryEvent; - $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', - 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); - $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', - 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); - $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', - 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); - $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', - 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); - $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', - 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); + $this->processUid = $this->import(__DIR__ . '/WebEntryEventTest.pmx'); + $this->processUid2 = $this->import(__DIR__ . '/WebEntryEventTest2.pmx'); + $this->object = new WebEntryEvent(); + $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); + $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); + $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); + $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); + $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); } /** @@ -47,10 +50,34 @@ class WebEntryEventTest extends \WorkflowTestCase */ protected function tearDown() { - $this->dropDB(); $this->clearTranslations(); } + /** + * Get base uri for rest applications. + * @return string + */ + private function getBaseUri() + { + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; + } + /** * @covers ProcessMaker\BusinessModel\WebEntryEvent::getWebEntryEvents * @category HOR-3207:5 diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index 69c59feec..5c97dc6a8 100644 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -746,7 +746,13 @@ class Process extends BaseProcess return $aProcesses; } - public function getCasesCountForProcess($pro_uid) + /** + * This returns the number of cases for the process. + * @param string $pro_uid + * @return integer + * @see ProcessMaker\Project\Bpmn::canRemove() + */ + public static function getCasesCountForProcess($pro_uid) { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS TOTAL_CASES'); From 3805b1c2c07f42f31dad9271d0adb8a58fc2dd47 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 15 Jan 2018 14:41:21 -0400 Subject: [PATCH 057/100] HOR-4216 --- workflow/engine/classes/PmDynaform.php | 64 +++++++++++--- .../BusinessModel/DynaForm/SuggestTrait.php | 88 +++++++++++++++++-- .../ProcessMaker/BusinessModel/Variable.php | 3 + 3 files changed, 140 insertions(+), 15 deletions(-) diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index a4b8d5262..c3e4932c7 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -280,16 +280,7 @@ class PmDynaform } } if ($value === "suggest" && isset($json->queryField) && $json->queryField == true) { - $json->queryOutputData = array(); - foreach ($json->optionsSql as $option) { - if ($json->queryFilter !== '') { - if (stripos($option->label, $json->queryFilter) !== false) { - $json->queryOutputData[] = $option; - } - } else { - $json->queryOutputData[] = $option; - } - } + $this->searchResultInDataSource($json); } } } @@ -685,6 +676,59 @@ class PmDynaform } } + /** + * This function will be search in the dataSource and will be add the new row in the queryOutputData property + * + * @param object $json + * + * @return void + */ + private function searchResultInDataSource($json) + { + $json->queryOutputData = []; + foreach ($json->optionsSql as $option) { + //We will to check the limit parameter + if (count($json->queryOutputData) < $json->queryLimit) { + //Searching by filter parameter + if ($json->queryFilter !== '') { + if (stripos($option->label, $json->queryFilter) !== false) { + $json->queryOutputData[] = $option; + } + } elseif (isset($json->querySearch) && is_array($json->querySearch) && !empty($json->querySearch)) { + //Searching by query parameter + $dataSearch = $json->querySearch; + $valueAdded = false; + //The match has priority + //We will to search match in the dataSource + if (isset($dataSearch['match'])) { + $value = isset($dataSearch['match']['value']) ? $dataSearch['match']['value'] : ''; + $label = isset($dataSearch['match']['text']) ? $dataSearch['match']['text'] : ''; + if (!empty($value) && $option->value === $value) { + $valueAdded = true; + $json->queryOutputData[] = $option; + } + if (!empty($label) && $option->label === $label && !$valueAdded) { + $json->queryOutputData[] = $option; + } + } elseif (isset($dataSearch['term'])) { + //We will to search term in the dataSource + $value = isset($dataSearch['term']['value']) ? $dataSearch['term']['value'] : ''; + $label = isset($dataSearch['term']['text']) ? $dataSearch['term']['text'] : ''; + if (!empty($value) && stripos($option->value, $value) !== false) { + $valueAdded = true; + $json->queryOutputData[] = $option; + } + if (!empty($label) && stripos($option->label, $label) !== false && !$valueAdded) { + $json->queryOutputData[] = $option; + } + } + } else { + $json->queryOutputData[] = $option; + } + } + } + } + private function getValuesDependentFields($json) { if (!isset($this->record["DYN_CONTENT"])) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm/SuggestTrait.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm/SuggestTrait.php index 0fca7fb69..bce94ea09 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm/SuggestTrait.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm/SuggestTrait.php @@ -54,13 +54,71 @@ trait SuggestTrait $where = $isWhere ? "WHERE " . $col . "='" . $dv . "'" : $where . " AND " . $col . "='" . $dv . "'"; } } - if (isset($json->queryField) && isset($dt[0]["base_expr"])) { - $col = isset($dt[1]["base_expr"]) ? $dt[1]["base_expr"] : $dt[0]["base_expr"]; - $qf = str_replace("'", "''", $json->queryFilter); - $where = $isWhere ? "WHERE " . $col . " LIKE '%" . $qf . "%'" : $where . " AND " . $col . " LIKE '%" . $qf . "%'"; + if (isset($json->querySearch) && is_array($json->querySearch) && !empty($json->querySearch)) { + $dataSearch = $json->querySearch; + $sqlWildcard = ""; + //We will to search term in the query + if (isset($dataSearch['term'])) { + $value = isset($dataSearch['term']['value']) ? $dataSearch['term']['value'] : ''; + $label = isset($dataSearch['term']['text']) ? $dataSearch['term']['text'] : ''; + $sqlWildcard = "%"; + } + //The match has priority + //We will to search match in the query + if (isset($dataSearch['match'])) { + $value = isset($dataSearch['match']['value']) ? $dataSearch['match']['value'] : ''; + $label = isset($dataSearch['match']['text']) ? $dataSearch['match']['text'] : ''; + $sqlWildcard = ""; + } + if (!empty($value) && !empty($label)){ + //We need to search in the firstColumn and secondColumn + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL1 LIKE 'querySearch' OR COL2 LIKE 'querySearch' + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL1 LIKE '%querySearch%' OR COL2 LIKE '%querySearch%' + $col1 = $dt[0]["base_expr"]; + $col2 = isset($dt[1]["base_expr"]) ? $dt[1]["base_expr"] : $dt[0]["base_expr"]; + $qfValue = str_replace("'", "''", $value); + $qfLabel = str_replace("'", "''", $label); + $search = $col1 . " LIKE '" . $sqlWildcard . $qfValue . $sqlWildcard . "' OR " . $col2 . " LIKE '" . $sqlWildcard . $qfLabel . $sqlWildcard . "'"; + $where = $isWhere ? "WHERE " . $search : $where . " AND (" . $search . ")"; + } else { + $valueOrLabel = ''; + $column = $dt[0]["base_expr"]; + if (!empty($value)) { + //We need to search in the firstColumn + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL1 LIKE 'querySearch' + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL1 LIKE '%querySearch%' + $valueOrLabel = $value; + } + if (!empty($label)) { + //We need to search in the secondColumn + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL2 LIKE 'querySearch' + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL2 LIKE '%querySearch%' + $column = isset($dt[1]["base_expr"]) ? $dt[1]["base_expr"] : $column; + $valueOrLabel = $label; + } + $where = $this->buildWhere( + $column, + $valueOrLabel, + $sqlWildcard, + $isWhere, + $where + ); + } + } else { + //If the property querySearch does not exist we need to search in the secondColumn + //Ex: SELECT COL1, COL2 FROM TABLE WHERE COL2 LIKE '%queryFilter%' + if (isset($json->queryField) && isset($dt[0]["base_expr"])) { + $where = $this->buildWhere( + isset($dt[1]["base_expr"]) ? $dt[1]["base_expr"] : $dt[0]["base_expr"], + $json->queryFilter, + "%", + $isWhere, + $where + ); + } } - if ($optionsLimit > 0) { + if ($optionsLimit >= 0) { $this->addSuggestLimit($json, $select, $limit, $where); } else { $this->addSuggestWhere($json, $parsed, $select, $where, $having); @@ -69,6 +127,26 @@ trait SuggestTrait ); } + /** + * This function will be define the WHERE clause + * + * @param string $col, name of column + * @param string $value, value to search in the column + * @param string $sqlWildcard, if we to search term or correct match + * @param boolean $isWhere, if the we need to concat other condition + * @param string $where, initial where to add the concat + * + * @return string + * + */ + private function buildWhere($col, $value, $sqlWildcard = "", $isWhere = false, $where = "") + { + $qf = str_replace("'", "''", $value); + $searchValue = $col . " LIKE '" . $sqlWildcard . $qf . $sqlWildcard; + $where = ($isWhere) ? "WHERE " . $searchValue . "'" : $where . " AND " . $searchValue . "'"; + return $where; + } + /** * Add the limit sentence to the suggest query. * diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index 4ebb70939..efaae639e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -758,6 +758,7 @@ class Variable $dynUid = $params["dyn_uid"]; $fieldId = $params["field_id"]; $filter = isset($params["filter"]) ? $params["filter"] : ""; + $query = isset($params["query"]) ? $params["query"] : []; $start = isset($params["start"]) ? $params["start"] : 0; $limit = isset($params["limit"]) ? $params["limit"] : 10; $appUid = empty($params["app_uid"]) ? null : $params["app_uid"]; @@ -767,6 +768,7 @@ class Variable unset($params["app_uid"]); unset($params["del_index"]); unset($params["filter"]); + unset($params["query"]); unset($params["start"]); unset($params["limit"]); @@ -799,6 +801,7 @@ class Variable $field->queryFilter = $filter; $field->queryStart = $start; $field->queryLimit = $limit; + $field->querySearch = $query; //Grids only access the global variables of 'ProcessMaker', other variables are removed. //The property 'columnWidth' is only present in the controls of a grid, //in the current change there is no specific property that indicates From 046a5ef0ff9060949b1100da66f23c663d710942 Mon Sep 17 00:00:00 2001 From: Fabio Guachalla Date: Wed, 28 Nov 2018 16:02:25 -0400 Subject: [PATCH 058/100] PMC-73: Suggest field improvements CR correction --- workflow/engine/src/ProcessMaker/BusinessModel/Variable.php | 2 +- workflow/engine/templates/cases/pmdynaform.html | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index efaae639e..c55213b3f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -799,9 +799,9 @@ class Variable $field->queryField = true; $field->queryInputData = $params; $field->queryFilter = $filter; + $field->querySearch = $query; $field->queryStart = $start; $field->queryLimit = $limit; - $field->querySearch = $query; //Grids only access the global variables of 'ProcessMaker', other variables are removed. //The property 'columnWidth' is only present in the controls of a grid, //in the current change there is no specific property that indicates diff --git a/workflow/engine/templates/cases/pmdynaform.html b/workflow/engine/templates/cases/pmdynaform.html index fd91d6578..ef6044340 100644 --- a/workflow/engine/templates/cases/pmdynaform.html +++ b/workflow/engine/templates/cases/pmdynaform.html @@ -11,10 +11,13 @@ + + + From 2e8f252b55ff2a9e879da1e910d6916519f37a88 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Mon, 1 Jul 2019 09:07:33 -0400 Subject: [PATCH 059/100] PMC-911 Add unit tests for the feature. --- tests/unit/app/CustomizeFormatterTest.php | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/unit/app/CustomizeFormatterTest.php diff --git a/tests/unit/app/CustomizeFormatterTest.php b/tests/unit/app/CustomizeFormatterTest.php new file mode 100644 index 000000000..8a742e750 --- /dev/null +++ b/tests/unit/app/CustomizeFormatterTest.php @@ -0,0 +1,72 @@ +cleanDirectory(self::$directory); + } + + /** + * This is done after the last test. + */ + public static function tearDownAfterClass() + { + $file = new Filesystem(); + $file->cleanDirectory(self::$directory); + } + + /** + * Return all of the log levels defined in the RFC 5424 specification. + * @return array + */ + public function levelProviders() + { + return [ + ['emergency', 'production.EMERGENCY'], + ['alert', 'production.ALERT'], + ['critical', 'production.CRITICAL'], + ['error', 'production.ERROR'], + ['warning', 'production.WARNING'], + ['notice', 'production.NOTICE'], + ['info', 'production.INFO'], + ['debug', 'production.DEBUG'], + ]; + } + + /** + * This check the creation of a record with the emergency level. + * @test + * @dataProvider levelProviders + */ + public function it_should_create_log_file_levels($level, $message) + { + Log::{$level}($level); + $files = File::allFiles(self::$directory); + $this->assertCount(1, $files); + + $string = File::get($files[0]); + $this->assertRegExp("/{$message}/", $string); + } +} From efc38c940057d024551b33abf89f234fd149b89b Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 25 Jun 2019 08:17:57 -0400 Subject: [PATCH 060/100] PMC-878 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.4 to v5.5.0) --- app/Console/Kernel.php | 3 +- composer.json | 13 +- composer.lock | 1531 +++++++++++++++++++--------- thirdparty/pake/pakeYaml.class.php | 2 +- 4 files changed, 1074 insertions(+), 475 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5012ffaf8..c4f873ff5 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,7 +13,6 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - Commands\PMTranslationsPlugins::class ]; /** @@ -34,6 +33,6 @@ class Kernel extends ConsoleKernel */ protected function commands() { - + $this->load(__DIR__ . '/Commands'); } } diff --git a/composer.json b/composer.json index 144aaa1ba..c5aee9a92 100644 --- a/composer.json +++ b/composer.json @@ -27,8 +27,8 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=5.6", - "laravel/framework": "5.4.*", + "php": ">=7.1", + "laravel/framework": "5.5.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -43,7 +43,7 @@ "phpmailer/phpmailer": "5.2.27", "pear/archive_tar": "1.4.*", "pear/console_getopt": "1.4.*", - "TYPO3/class-alias-loader": "^1.0", + "typo3/class-alias-loader": "^1.0", "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", @@ -55,6 +55,7 @@ "fzaninotto/faker": "^1.7", "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", + "filp/whoops": "~2.0", "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", @@ -101,7 +102,11 @@ }, "scripts": { "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", - "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility" + "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ] }, "extra": { "typo3/class-alias-loader": { diff --git a/composer.lock b/composer.lock index c56712f71..af6b03908 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", + "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" + "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-11-29T15:23:08+00:00" + "time": "2018-12-18T17:10:59+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "e4176c9772842904552997702e549035b6ba641d" + "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-11-28T17:54:53+00:00" + "time": "2018-12-10T15:33:17+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" + "reference": "4449e02225bc1d351907ceee79b2411b428df517" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-11-16T14:26:15+00:00" + "time": "2018-12-18T17:11:02+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,20 +307,137 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.1", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.9", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2019-06-23T10:14:27+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -353,7 +470,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "geshi/geshi", @@ -427,7 +544,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -527,40 +644,86 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v5.4.36", + "name": "kylekatarnls/update-helper", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "^2.0.x-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-06-05T08:34:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.5.45", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.6", + "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", + "league/flysystem": "^1.0.8", + "monolog/monolog": "~1.12", "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", + "nesbot/carbon": "^1.26.0", + "php": ">=7.0", + "psr/container": "~1.0", + "psr/simple-cache": "^1.0", "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "~3.2", - "symfony/debug": "~3.2", - "symfony/finder": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/process": "~3.2", - "symfony/routing": "~3.2", - "symfony/var-dumper": "~3.2", + "swiftmailer/swiftmailer": "~6.0", + "symfony/console": "~3.3", + "symfony/debug": "~3.3", + "symfony/finder": "~3.3", + "symfony/http-foundation": "~3.3", + "symfony/http-kernel": "~3.3", + "symfony/process": "~3.3", + "symfony/routing": "~3.3", + "symfony/var-dumper": "~3.3", "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, @@ -577,7 +740,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -594,38 +756,43 @@ "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "tightenco/collect": "<5.5.33" }, "require-dev": { "aws/aws-sdk-php": "~3.0", "doctrine/dbal": "~2.5", - "mockery/mockery": "~0.9.4", + "filp/whoops": "^2.1.4", + "mockery/mockery": "~1.0", + "orchestra/testbench-core": "3.5.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.7", - "predis/predis": "~1.0", - "symfony/css-selector": "~3.2", - "symfony/dom-crawler": "~3.2" + "phpunit/phpunit": "~6.0", + "predis/predis": "^1.1.1", + "symfony/css-selector": "~3.3", + "symfony/dom-crawler": "~3.3" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -653,7 +820,7 @@ "framework", "laravel" ], - "time": "2017-08-30T09:26:16+00:00" + "time": "2019-01-28T20:53:19+00:00" }, { "name": "laravel/tinker", @@ -720,16 +887,16 @@ }, { "name": "league/flysystem", - "version": "1.0.49", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -800,7 +967,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "libchart/libchart", @@ -828,7 +995,7 @@ ], "authors": [ { - "name": "Jean-Marc Trémeaux", + "name": "Jean-Marc Tr??meaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -854,12 +1021,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8" + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", "shasum": "" }, "require": { @@ -1051,31 +1218,34 @@ }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.38.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1105,7 +1275,7 @@ "datetime", "time" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2019-06-03T15:41:40+00:00" }, { "name": "nikic/php-parser", @@ -1160,33 +1330,29 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.17", + "version": "v9.99.99", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^7" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1205,7 +1371,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { "name": "pdepend/pdepend", @@ -1249,16 +1415,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.3", + "version": "1.4.7", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", "shasum": "" }, "require": { @@ -1269,8 +1435,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "bz2 compression support.", - "ext-xz": "lzma2 compression support.", + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1305,26 +1471,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class", + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2017-06-11T17:28:11+00:00" + "time": "2019-04-08T13:15:55+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -1358,24 +1524,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20T20:28:12+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.6", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "052868b244d31f822796e7e9981f62557eb256d4" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", - "reference": "052868b244d31f822796e7e9981f62557eb256d4", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1402,7 +1568,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2018-08-22T19:28:09+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", @@ -1478,27 +1644,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1534,7 +1700,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2017-11-04T09:26:05+00:00" + "time": "2018-11-15T22:32:31+00:00" }, { "name": "psr/container", @@ -1623,6 +1789,54 @@ ], "time": "2012-12-21T11:40:51+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -1872,29 +2086,37 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1922,36 +2144,36 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081" + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081", + "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -1959,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -1986,20 +2208,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", "shasum": "" }, "require": { @@ -2011,6 +2233,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -2020,7 +2245,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -2055,29 +2280,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-05-09T08:42:51+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2108,20 +2333,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", "shasum": "" }, "require": { @@ -2164,38 +2389,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-18T13:32:47+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2208,7 +2435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2235,20 +2462,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:23+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", "shasum": "" }, "require": { @@ -2298,20 +2525,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-04-02T08:51:52+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", "shasum": "" }, "require": { @@ -2348,20 +2575,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-02-04T21:34:32+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", "shasum": "" }, "require": { @@ -2397,20 +2624,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-24T12:25:55+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", "shasum": "" }, "require": { @@ -2451,26 +2678,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-27T05:50:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/debug": "^3.3.3|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/polyfill-ctype": "~1.8" @@ -2540,20 +2767,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:04:48+00:00" + "time": "2019-05-28T09:24:42+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "reference": "82ebae02209c21113908c229e9883c419720738a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -2565,7 +2792,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2598,20 +2825,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "symfony/polyfill-iconv", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-03-04T13:44:35+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { @@ -2623,7 +2971,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2657,20 +3005,20 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { @@ -2680,7 +3028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2716,20 +3064,75 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.19", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", "shasum": "" }, "require": { @@ -2765,20 +3168,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-22T12:54:11+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", "shasum": "" }, "require": { @@ -2801,7 +3204,6 @@ "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -2842,37 +3244,103 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-05-18T16:36:47+00:00" }, { - "name": "symfony/translation", - "version": "v3.4.19", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2883,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2910,20 +3378,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.4.19", + "name": "symfony/translation-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", "shasum": "" }, "require": { @@ -2979,7 +3504,7 @@ "debug", "dump" ], - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-01T09:52:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3088,20 +3613,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -3109,7 +3635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3134,22 +3660,22 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.9.6", + "version": "v2.9.9", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", "shasum": "" }, "require": { @@ -3191,7 +3717,7 @@ "assertion", "validation" ], - "time": "2018-06-11T17:15:25+00:00" + "time": "2019-05-28T15:27:37+00:00" }, { "name": "behat/behat", @@ -3273,16 +3799,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -3290,8 +3816,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3328,34 +3854,35 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^3.3|^4.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -3386,7 +3913,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-05-14T09:56:49+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -3571,32 +4098,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3616,25 +4145,25 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -3681,7 +4210,67 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "filp/whoops", + "version": "2.1.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8 || ^5.0", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "whoops", + "zf2" + ], + "time": "2017-02-18T14:22:27+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -3906,7 +4495,7 @@ ], "authors": [ { - "name": "Christian Lück", + "name": "Christian Lück", "email": "christian@lueck.tv" } ], @@ -4041,32 +4630,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -4096,13 +4686,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "instaclick/php-webdriver", @@ -4246,25 +4837,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -4287,33 +4881,33 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-04-07T13:18:21+00:00" }, { "name": "nette/caching", - "version": "v2.5.8", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", + "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", "shasum": "" }, "require": { - "nette/finder": "^2.2 || ~3.0.0", + "nette/finder": "^2.4 || ~3.0.0", "nette/utils": "^2.4 || ~3.0.0", - "php": ">=5.6.0" + "php": ">=7.1" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "latte/latte": "^2.4", - "nette/di": "^2.4 || ~3.0.0", + "nette/di": "^v3.0.0-beta2", "nette/tester": "^2.0", "tracy/tracy": "^2.4" }, @@ -4321,6 +4915,69 @@ "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "time": "2019-02-05T21:28:16+00:00" + }, + { + "name": "nette/finder", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", "extra": { "branch-alias": { "dev-master": "2.5-dev" @@ -4347,70 +5004,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "? Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2018-03-21T11:04:32+00:00" - }, - { - "name": "nette/finder", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", - "shasum": "" - }, - "require": { - "nette/utils": "~2.4", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "description": "? Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", @@ -4418,7 +5012,7 @@ "iterator", "nette" ], - "time": "2018-06-28T11:49:23+00:00" + "time": "2019-02-28T18:13:25+00:00" }, { "name": "nette/reflection", @@ -4486,23 +5080,20 @@ }, { "name": "nette/utils", - "version": "v2.5.3", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + "reference": "bd961f49b211997202bda1d0fbc410905be370d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4", "shasum": "" }, "require": { - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" + "php": ">=7.1" }, "require-dev": { "nette/tester": "~2.0", @@ -4511,7 +5102,7 @@ "suggest": { "ext-gd": "to use Image", "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", "ext-xml": "to use Strings::length() etc. when mbstring is not available" @@ -4519,15 +5110,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" - ], - "files": [ - "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4564,7 +5152,7 @@ "utility", "validation" ], - "time": "2018-09-18T10:22:16+00:00" + "time": "2019-03-22T01:00:30+00:00" }, { "name": "ondram/ci-detector", @@ -4599,7 +5187,7 @@ ], "authors": [ { - "name": "OndÅ™ej Machulda", + "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], @@ -4675,29 +5263,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4716,7 +5310,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4767,16 +5361,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4797,8 +5391,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4826,7 +5420,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5030,29 +5624,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5075,7 +5669,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5784,16 +6378,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -5826,25 +6420,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "420458095cf60025eb0841276717e0da7f75e50e" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", - "reference": "420458095cf60025eb0841276717e0da7f75e50e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -5887,20 +6481,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", "shasum": "" }, "require": { @@ -5941,20 +6535,20 @@ "configuration", "options" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-04-10T16:00:48+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0f43969ab2718de55c1c1158dce046668079788d" + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", - "reference": "0f43969ab2718de55c1c1158dce046668079788d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", "shasum": "" }, "require": { @@ -5990,20 +6584,20 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { @@ -6049,24 +6643,25 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-03-25T07:48:46+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6099,20 +6694,20 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.0.0", + "version": "9.1.1", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", "shasum": "" }, "require": { @@ -6158,7 +6753,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-10-07T17:38:02+00:00" + "time": "2018-12-30T23:16:27+00:00" } ], "aliases": [], @@ -6173,7 +6768,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.1" }, "platform-dev": [] } diff --git a/thirdparty/pake/pakeYaml.class.php b/thirdparty/pake/pakeYaml.class.php index 55c4fa30b..3c50bfddf 100644 --- a/thirdparty/pake/pakeYaml.class.php +++ b/thirdparty/pake/pakeYaml.class.php @@ -80,7 +80,7 @@ * @access public * @return void */ - public function pakeYAMLNode() { + public function __construct() { $this->id = uniqid(''); } } From 9953c196c966e2b0372a3ad9d53649d0b0dc0013 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 12:25:53 -0400 Subject: [PATCH 061/100] PMC-880 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.5.42 to v5.6.0) --- app/Logging/CustomizeFormatter.php | 22 + bootstrap/app.php | 11 - composer.json | 3 +- composer.lock | 1584 ++++++++-------------------- config/app.php | 2 - config/logging.php | 85 ++ 6 files changed, 544 insertions(+), 1163 deletions(-) create mode 100644 app/Logging/CustomizeFormatter.php create mode 100644 config/logging.php diff --git a/app/Logging/CustomizeFormatter.php b/app/Logging/CustomizeFormatter.php new file mode 100644 index 000000000..f9846ac5f --- /dev/null +++ b/app/Logging/CustomizeFormatter.php @@ -0,0 +1,22 @@ +getHandlers() as $handler) { + $handler->setFormatter(new LineFormatter(null, null, true, true)); + } + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index a5e730432..e1cbf9613 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -50,17 +50,6 @@ $app->singleton( Handler::class ); -$app->configureMonologUsing(function ($monolog) use ($app) { - $monolog->pushHandler( - (new RotatingFileHandler( - // Set the log path - $app->storagePath() . '/logs/processmaker.log', - // Set the number of daily files you want to keep - $app->make('config')->get('app.log_max_files', 5) - ))->setFormatter(new LineFormatter(null, null, true, true)) - ); -}); - /* |-------------------------------------------------------------------------- | Return The Application diff --git a/composer.json b/composer.json index c5aee9a92..c5520ae40 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.5.*", + "laravel/framework": "5.6.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -56,7 +56,6 @@ "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", "filp/whoops": "~2.0", - "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", "squizlabs/php_codesniffer": "^2.2 || ^3.0.2", diff --git a/composer.lock b/composer.lock index af6b03908..03459229e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", + "content-hash": "d081c4d39988f562487dbfe81bb9e856", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -369,6 +369,60 @@ ], "time": "2019-06-08T11:03:04+00:00" }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, { "name": "egulias/email-validator", "version": "2.1.9", @@ -690,43 +744,46 @@ }, { "name": "laravel/framework", - "version": "v5.5.45", + "version": "v5.6.39", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + "reference": "37bb306f516669ab4f888c16003f694313ab299e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", + "reference": "37bb306f516669ab4f888c16003f694313ab299e", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", + "dragonmantank/cron-expression": "~2.0", "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "^1.26.0", - "php": ">=7.0", + "nesbot/carbon": "1.25.*", + "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "~3.0", + "ramsey/uuid": "^3.7", "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~3.3", - "symfony/debug": "~3.3", - "symfony/finder": "~3.3", - "symfony/http-foundation": "~3.3", - "symfony/http-kernel": "~3.3", - "symfony/process": "~3.3", - "symfony/routing": "~3.3", - "symfony/var-dumper": "~3.3", - "tijsverkoyen/css-to-inline-styles": "~2.2", + "symfony/console": "~4.0", + "symfony/debug": "~4.0", + "symfony/finder": "~4.0", + "symfony/http-foundation": "~4.0", + "symfony/http-kernel": "~4.0", + "symfony/process": "~4.0", + "symfony/routing": "~4.0", + "symfony/var-dumper": "~4.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", "vlucas/phpdotenv": "~2.2" }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -755,44 +812,46 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", + "doctrine/dbal": "~2.6", "filp/whoops": "^2.1.4", + "league/flysystem-cached-adapter": "~1.0", "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.6.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~6.0", + "phpunit/phpunit": "~7.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~3.3", - "symfony/dom-crawler": "~3.3" + "symfony/css-selector": "~4.0", + "symfony/dom-crawler": "~4.0" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -820,7 +879,7 @@ "framework", "laravel" ], - "time": "2019-01-28T20:53:19+00:00" + "time": "2018-10-04T14:50:41+00:00" }, { "name": "laravel/tinker", @@ -1172,62 +1231,18 @@ ], "time": "2016-04-12T18:29:35+00:00" }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" - }, { "name": "nesbot/carbon", - "version": "1.38.4", + "version": "1.25.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", "shasum": "" }, "require": { @@ -1245,16 +1260,11 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - } + "update-helper": "Carbon\\Upgrade" }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1275,7 +1285,7 @@ "datetime", "time" ], - "time": "2019-06-03T15:41:40+00:00" + "time": "2019-06-03T17:56:44+00:00" }, { "name": "nikic/php-parser", @@ -2212,25 +2222,27 @@ }, { "name": "symfony/console", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, "provide": { @@ -2238,11 +2250,12 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { "psr/log": "For using the console logger", @@ -2253,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2280,29 +2293,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-05-09T08:42:51+00:00" + "time": "2019-06-05T13:25:51+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2333,36 +2346,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/debug", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/http-kernel": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2389,7 +2402,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-18T13:32:47+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/dependency-injection", @@ -2466,30 +2479,37 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2498,7 +2518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2525,30 +2545,88 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-04-02T08:51:52+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.28", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "shasum": "" + }, + "require": { + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2575,29 +2653,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-02-04T21:34:32+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { "name": "symfony/finder", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2624,34 +2702,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-24T12:25:55+00:00" + "time": "2019-05-26T20:47:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2678,34 +2757,37 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-05-27T05:50:24+00:00" + "time": "2019-06-06T10:05:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -2713,34 +2795,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2767,7 +2849,66 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-05-28T09:24:42+00:00" + "time": "2019-06-06T13:23:34+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-06-04T09:22:54+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3007,65 +3148,6 @@ ], "time": "2019-02-06T07:57:58+00:00" }, - { - "name": "symfony/polyfill-php70", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "bc4858fb611bda58719124ca079baff854149c89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", - "reference": "bc4858fb611bda58719124ca079baff854149c89", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2019-02-06T07:57:58+00:00" - }, { "name": "symfony/polyfill-php72", "version": "v1.11.0", @@ -3122,26 +3204,84 @@ "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.28", + "name": "symfony/polyfill-php73", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" } }, "autoload": { @@ -3168,37 +3308,37 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-22T12:54:11+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/routing", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3211,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3244,7 +3384,7 @@ "uri", "url" ], - "time": "2019-05-18T16:36:47+00:00" + "time": "2019-06-05T09:16:20+00:00" }, { "name": "symfony/service-contracts", @@ -3439,38 +3579,45 @@ }, { "name": "symfony/var-dumper", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-intl": "To show region name in time zone dump", - "ext-symfony_debug": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3504,7 +3651,7 @@ "debug", "dump" ], - "time": "2019-05-01T09:52:10+00:00" + "time": "2019-06-05T02:08:12+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3664,61 +3811,6 @@ } ], "packages-dev": [ - { - "name": "beberlei/assert", - "version": "v2.9.9", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2019-05-28T15:27:37+00:00" - }, { "name": "behat/behat", "version": "v3.5.0", @@ -3858,31 +3950,30 @@ }, { "name": "behat/mink", - "version": "dev-master", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "^2.7|^3.0|^4.0" + "symfony/css-selector": "~2.1|~3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3|^4.0" + "symfony/phpunit-bridge": "~2.7|~3.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", - "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" }, "type": "library", "extra": { @@ -3913,7 +4004,7 @@ "testing", "web" ], - "time": "2019-05-14T09:56:49+00:00" + "time": "2016-03-05T08:26:18+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -4020,51 +4111,6 @@ ], "time": "2017-04-04T11:38:05+00:00" }, - { - "name": "clue/graph", - "version": "v0.9.0", - "source": { - "type": "git", - "url": "https://github.com/clue/graph.git", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", - "graphp/graphviz": "GraphViz graph drawing / DOT output" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fhaculty\\Graph\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A mathematical graph/network library written in PHP", - "homepage": "https://github.com/clue/graph", - "keywords": [ - "edge", - "graph", - "mathematical", - "network", - "vertex" - ], - "time": "2015-03-07T18:11:31+00:00" - }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -4152,66 +4198,6 @@ ], "time": "2019-03-17T17:37:11+00:00" }, - { - "name": "facebook/webdriver", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2019-06-13T08:02:18+00:00" - }, { "name": "filp/whoops", "version": "2.1.6", @@ -4272,146 +4258,6 @@ ], "time": "2017-02-18T14:22:27+00:00" }, - { - "name": "florianwolters/component-core-stringutils", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Offers operations on the data type string as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", - "keywords": [ - "helper", - "language", - "string", - "wrapper" - ], - "time": "2013-07-01T10:24:07+00:00" - }, - { - "name": "florianwolters/component-util-reflection", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": ">=0.2-beta", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Provides operations for the PHP Reflection API as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", - "keywords": [ - "reflection", - "utility" - ], - "time": "2013-03-19T16:42:41+00:00" - }, - { - "name": "florianwolters/component-util-singleton", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": "0.3.*", - "florianwolters/component-util-reflection": "0.2.*", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": [ - "src/php", - "src/tests/unit-tests/php", - "src/tests/mocks/php" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", - "keywords": [ - "creation", - "pattern", - "singleton", - "utility" - ], - "time": "2013-06-29T12:35:22+00:00" - }, { "name": "fzaninotto/faker", "version": "v1.8.0", @@ -4462,56 +4308,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "graphp/algorithms", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/graphp/algorithms.git", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", - "shasum": "" - }, - "require": { - "clue/graph": "~0.9.0|~0.8.0", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Graphp\\Algorithms\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "Common mathematical graph algorithms", - "homepage": "https://github.com/graphp/algorithms", - "keywords": [ - "Graph algorithms", - "dijkstra", - "kruskal", - "minimum spanning tree", - "moore-bellman-ford", - "prim", - "shortest path" - ], - "time": "2015-03-08T10:12:01+00:00" - }, { "name": "guzzlehttp/guzzle", "version": "6.3.3", @@ -4754,87 +4550,6 @@ ], "time": "2017-06-30T04:02:48+00:00" }, - { - "name": "lmc/steward", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/lmc-eu/steward.git", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "shasum": "" - }, - "require": { - "beberlei/assert": "^2.7", - "clue/graph": "~0.9.0", - "doctrine/inflector": "~1.0", - "ext-curl": "*", - "ext-zip": "*", - "facebook/webdriver": "^1.4.0", - "florianwolters/component-util-singleton": "0.3.2", - "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.4.2", - "ondram/ci-detector": "^2.1", - "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7.11", - "symfony/console": "^3.3.0", - "symfony/event-dispatcher": "~3.0", - "symfony/filesystem": "~3.0", - "symfony/finder": "~3.0", - "symfony/options-resolver": "^3.2", - "symfony/process": "^3.2.0", - "symfony/stopwatch": "^3.0", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "~1.0", - "squizlabs/php_codesniffer": "^2.4.1", - "symfony/var-dumper": "^3.2" - }, - "suggest": { - "ext-posix": "For colored output", - "ext-xdebug": "For remote tests debugging" - }, - "bin": [ - "bin/steward", - "bin/steward.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Lmc\\Steward\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "LMC s.r.o.", - "homepage": "https://github.com/lmc-eu" - } - ], - "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", - "keywords": [ - "phpunit", - "selenium", - "testing", - "webdriver" - ], - "time": "2018-07-26T22:03:36+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.9.1", @@ -4883,330 +4598,6 @@ ], "time": "2019-04-07T13:18:21+00:00" }, - { - "name": "nette/caching", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", - "shasum": "" - }, - "require": { - "nette/finder": "^2.4 || ~3.0.0", - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^v3.0.0-beta2", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2019-02-05T21:28:16+00:00" - }, - { - "name": "nette/finder", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "? Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "time": "2019-02-28T18:13:25+00:00" - }, - { - "name": "nette/reflection", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "^2.2 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "^2.4 || ^3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Reflection: docblock annotations parser and common reflection classes", - "homepage": "https://nette.org", - "keywords": [ - "annotation", - "nette", - "reflection" - ], - "time": "2017-07-11T19:28:57+00:00" - }, - { - "name": "nette/utils", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "time": "2019-03-22T01:00:30+00:00" - }, - { - "name": "ondram/ci-detector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12", - "phpunit/phpunit": "^5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect current continuous integration server and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "adapter", - "appveyor", - "bamboo", - "continuous integration", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "time": "2017-05-26T16:39:57+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", @@ -6483,125 +5874,22 @@ "homepage": "https://symfony.com", "time": "2019-01-16T09:39:14+00:00" }, - { - "name": "symfony/options-resolver", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2019-04-10T16:00:48+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" - }, { "name": "symfony/yaml", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6616,7 +5904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6643,7 +5931,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-25T07:48:46+00:00" + "time": "2019-04-06T14:04:46+00:00" }, { "name": "webmozart/assert", diff --git a/config/app.php b/config/app.php index 651ebfc6a..d6a80bd28 100644 --- a/config/app.php +++ b/config/app.php @@ -9,8 +9,6 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), - 'log' => env('APP_LOG', 'single'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'timezone' => 'UTC', 'providers' => [ diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000..e8863a3f8 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,85 @@ + env('APP_LOG', env('LOG_CHANNEL', 'daily')), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/processmaker.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'tap' => [ + App\Logging\CustomizeFormatter::class + ], + 'path' => storage_path('logs/processmaker.log'), + 'level' => env('APP_LOG_LEVEL', 'debug'), + 'days' => $app->make('config')->get('app.log_max_files', 5), + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + ], + +]; \ No newline at end of file From 2d87cec8dd316ddc8c47569f3803dac9aa1f789d Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 13:56:49 -0400 Subject: [PATCH 062/100] PMC-882 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.6.30 to v5.7) --- composer.json | 2 +- composer.lock | 1280 +++++++++++++++++++++++++++++++++++------------- config/app.php | 1 + 3 files changed, 929 insertions(+), 354 deletions(-) diff --git a/composer.json b/composer.json index c5520ae40..989da13b4 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.6.*", + "laravel/framework": "5.7.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", diff --git a/composer.lock b/composer.lock index 03459229e..aa753f4cb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "d081c4d39988f562487dbfe81bb9e856", + "content-hash": "f548a9edab2774eff09bb261eb05c6d0", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -609,6 +609,189 @@ ], "time": "2015-10-16T22:11:08+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -744,42 +927,45 @@ }, { "name": "laravel/framework", - "version": "v5.6.39", + "version": "v5.7.28", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "37bb306f516669ab4f888c16003f694313ab299e" + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", - "reference": "37bb306f516669ab4f888c16003f694313ab299e", + "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "dragonmantank/cron-expression": "~2.0", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "nesbot/carbon": "1.25.*", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", "php": "^7.1.3", - "psr/container": "~1.0", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~4.0", - "symfony/debug": "~4.0", - "symfony/finder": "~4.0", - "symfony/http-foundation": "~4.0", - "symfony/http-kernel": "~4.0", - "symfony/process": "~4.0", - "symfony/routing": "~4.0", - "symfony/var-dumper": "~4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "~2.2" + "vlucas/phpdotenv": "^2.2" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -815,43 +1001,47 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.6", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "league/flysystem-cached-adapter": "~1.0", - "mockery/mockery": "~1.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.6.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~7.0", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", "predis/predis": "^1.1.1", - "symfony/css-selector": "~4.0", - "symfony/dom-crawler": "~4.0" + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -879,7 +1069,121 @@ "framework", "laravel" ], - "time": "2018-10-04T14:50:41+00:00" + "time": "2019-02-26T15:41:34+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" }, { "name": "laravel/tinker", @@ -944,6 +1248,61 @@ ], "time": "2018-10-12T19:39:35+00:00" }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, { "name": "league/flysystem", "version": "1.0.53", @@ -1233,16 +1592,16 @@ }, { "name": "nesbot/carbon", - "version": "1.25.3", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { @@ -1260,11 +1619,16 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade" + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1285,7 +1649,55 @@ "datetime", "time" ], - "time": "2019-06-03T17:56:44+00:00" + "time": "2019-06-11T09:07:59+00:00" + }, + { + "name": "nexmo/client", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/php-parser", @@ -1338,6 +1750,67 @@ ], "time": "2018-02-28T20:30:58+00:00" }, + { + "name": "opis/closure", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "f846725591203098246276b2e7b9e8b7814c4965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", + "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-05-31T20:04:32+00:00" + }, { "name": "paragonie/random_compat", "version": "v9.99.99", @@ -1635,6 +2108,172 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "phpmailer/phpmailer", "version": "v5.2.27", @@ -1761,6 +2400,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -2158,16 +2899,16 @@ }, { "name": "symfony/config", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", "shasum": "" }, "require": { @@ -2218,20 +2959,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-08T06:33:08+00:00" }, { "name": "symfony/console", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", "shasum": "" }, "require": { @@ -2293,11 +3034,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2350,16 +3091,16 @@ }, { "name": "symfony/debug", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", "shasum": "" }, "require": { @@ -2402,20 +3143,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-19T15:27:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" + "reference": "b851928be349c065197fdc0832f78d85139e3903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", + "reference": "b851928be349c065197fdc0832f78d85139e3903", "shasum": "" }, "require": { @@ -2475,20 +3216,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-15T04:08:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", "shasum": "" }, "require": { @@ -2545,7 +3286,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2607,16 +3348,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", "shasum": "" }, "require": { @@ -2653,20 +3394,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", "shasum": "" }, "require": { @@ -2702,20 +3443,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", "shasum": "" }, "require": { @@ -2757,20 +3498,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "time": "2019-06-26T09:25:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", "shasum": "" }, "require": { @@ -2849,11 +3590,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "time": "2019-06-26T14:26:16+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -3263,7 +4004,7 @@ }, { "name": "symfony/process", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -3312,16 +4053,16 @@ }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", "shasum": "" }, "require": { @@ -3384,7 +4125,7 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "time": "2019-06-26T13:54:39+00:00" }, { "name": "symfony/service-contracts", @@ -3446,16 +4187,16 @@ }, { "name": "symfony/translation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", "shasum": "" }, "require": { @@ -3518,7 +4259,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/translation-contracts", @@ -3579,16 +4320,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", "shasum": "" }, "require": { @@ -3651,7 +4392,7 @@ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "time": "2019-06-17T17:37:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3808,6 +4549,72 @@ "environment" ], "time": "2019-01-29T11:11:52+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2019-04-29T21:11:00+00:00" } ], "packages-dev": [ @@ -4308,189 +5115,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -5204,56 +5828,6 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5820,7 +6394,7 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -5876,7 +6450,7 @@ }, { "name": "symfony/yaml", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/config/app.php b/config/app.php index d6a80bd28..f031ca9ac 100644 --- a/config/app.php +++ b/config/app.php @@ -20,6 +20,7 @@ return [ Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, ], 'aliases' => [ From 725a949769b9772295e79d70f25cb5bb26e4b807 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 25 Jun 2019 15:53:38 -0400 Subject: [PATCH 063/100] PMC-897 --- gulliver/system/class.g.php | 307 +++++++++++++++++++++++++++++++++++- 1 file changed, 302 insertions(+), 5 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 7df1fd296..0aceb2881 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5060,11 +5060,308 @@ class G public static function reservedWordsSql() { //Reserved words SQL - $reservedWordsSql = array("ACCESSIBLE","ACTION","ADD","ALL","ALTER","ANALYZE","AND","ANY","AS","ASC","ASENSITIVE","AUTHORIZATION","BACKUP","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BIT","BLOB","BOTH","BREAK","BROWSE","BULK","BY","CALL","CASCADE","CASE","CHANGE","CHAR","CHARACTER","CHECK","CHECKPOINT","CLOSE","CLUSTERED","COALESCE","COLLATE","COLUMN","COMMIT","COMPUTE","CONDITION","CONSTRAINT","CONTAINS","CONTAINSTABLE","CONTINUE","CONVERT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATABASES","DATE","DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE","DAY_SECOND","DBCC","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DELAYED","DELETE","DENY","DESC","DESCRIBE","DETERMINISTIC","DISK","DISTINCT","DISTINCTROW", - "DISTRIBUTED","DIV","DOUBLE","DROP","DUAL","DUMMY","DUMP","EACH","ELSE","ELSEIF","ENCLOSED","END","ENUM","ERRLVL","ESCAPE","ESCAPED","EXCEPT","EXEC","EXECUTE","EXISTS","EXIT","EXPLAIN","FALSE","FETCH","FILE","FILLFACTOR","FLOAT","FLOAT4","FLOAT8","FOR","FORCE","FOREIGN","FREETEXT","FREETEXTTABLE","FROM","FULL","FULLTEXT","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HAVING","HIGH_PRIORITY","HOLDLOCK","HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND","IDENTITY","IDENTITYCOL","IDENTITY_INSERT","IF","IGNORE","IGNORE_SERVER_IDS","IN","INDEX","INFILE","INNER","INOUT","INSENSITIVE","INSERT","INT","INT1","INT2","INT3","INT4","INT8","INTEGER","INTERSECT","INTERVAL","INTO","IS","ITERATE","JOIN","KEY","KEYS","KILL","LEADING","LEAVE","LEFT","LIKE","LIMIT","LINEAR","LINENO","LINES", - "LOAD","LOCALTIME","LOCALTIMESTAMP","LOCK","LONG","LONGBLOB","LONGTEXT","LOOP","LOW_PRIORITY","MASTER_HEARTBEAT_PERIOD","MASTER_SSL_VERIFY_SERVER_CERT","MATCH","MAXVALUE","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND","MINUTE_SECOND","MOD","MODIFIES","NATIONAL","NATURAL","NO","NOCHECK","NONCLUSTERED","NOT","NO_WRITE_TO_BINLOG","NULL","NULLIF","NUMERIC","OF","OFF","OFFSETS","ON","OPEN","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","OPTIMIZE","OPTION","OPTIONALLY","OR","ORDER","OUT","OUTER","OUTFILE","OVER","PERCENT","PLAN","PRECISION","PRIMARY","PRINT","PROC","PROCEDURE","PUBLIC","PURGE","RAISERROR","RANGE","READ","READS","READTEXT","READ_WRITE","REAL","RECONFIGURE","REFERENCES","REGEXP","RELEASE","RENAME","REPEAT","REPLACE", - "REPLICATION","REQUIRE","RESIGNAL","RESTORE","RESTRICT","RETURN","REVOKE","RIGHT","RLIKE","ROLLBACK","ROWCOUNT","ROWGUIDCOL","RULE","SAVE","SCHEMA","SCHEMAS","SECOND_MICROSECOND","SELECT","SENSITIVE","SEPARATOR","SESSION_USER","SET","SETUSER","SHOW","SHUTDOWN","SIGNAL","SLOW","SMALLINT","SOME","SPATIAL","SPECIFIC","SQL","SQLEXCEPTION","SQLSTATE","SQLWARNING","SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT","SSL","STARTING","STATISTICS","STRAIGHT_JOIN","SYSTEM_USER","TABLE","TERMINATED","TEXT","TEXTSIZE","THEN","TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","TO","TOP","TRAILING","TRAN","TRANSACTION","TRIGGER","TRUE","TRUNCATE","TSEQUAL","UNDO","UNION","UNIQUE","UNLOCK","UNSIGNED","UPDATE","UPDATETEXT","USAGE","USE","USER","USING","UTC_DATE","UTC_TIME", - "UTC_TIMESTAMP","VALUES","VARBINARY","VARCHAR","VARCHARACTER","VARYING","VIEW","WAITFOR","WHEN","WHERE","WHILE","WITH","WRITE","WRITETEXT","XOR","YEAR_MONTH","ZEROFILL"); + $reservedWordsSql = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + return $reservedWordsSql; } From 43cc784eded3821225927606e4d3f510daf4ae29 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Fri, 28 Jun 2019 15:20:51 -0400 Subject: [PATCH 064/100] PMC-898 --- workflow/engine/bin/tasks/cliWorkspaces.php | 90 ++++++++++++++ .../engine/src/ProcessMaker/Core/System.php | 17 +++ .../src/ProcessMaker/Model/Dynaform.php | 12 ++ .../ProcessMaker/Model/ProcessVariables.php | 27 +++++ .../src/ProcessMaker/Model/Triggers.php | 27 +++++ .../src/ProcessMaker/Validation/MySQL57.php | 110 ++++++++++++++++++ 6 files changed, 283 insertions(+) create mode 100644 workflow/engine/src/ProcessMaker/Model/ProcessVariables.php create mode 100644 workflow/engine/src/ProcessMaker/Model/Triggers.php create mode 100644 workflow/engine/src/ProcessMaker/Validation/MySQL57.php diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 7455ee574..13df97e38 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -1,5 +1,8 @@ removeDeprecatedFiles(); CLI::logging("<*> The deprecated files has been removed. \n"); } + +/** + * 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; + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index e0e469a32..36e3061ed 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -9,6 +9,7 @@ use Faker; use G; use GzipFile; use Illuminate\Database\QueryException; +use Illuminate\Foundation\Http\Kernel; use Illuminate\Support\Facades\DB; use InputFilter; use InstallerModule; @@ -1629,5 +1630,21 @@ class System { return !empty(self::getServerHostname()) ? self::getServerHostname() : 'processmaker.com'; } + + /** + * Initialize laravel database configuration + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + */ + public static function initLaravel() + { + config(['database.connections.workflow.host' => DB_HOST]); + config(['database.connections.workflow.database' => DB_NAME]); + config(['database.connections.workflow.username' => DB_USER]); + config(['database.connections.workflow.password' => DB_PASS]); + + app()->useStoragePath(realpath(PATH_DATA)); + app()->make(Kernel::class)->bootstrap(); + restore_error_handler(); + } } // end System class diff --git a/workflow/engine/src/ProcessMaker/Model/Dynaform.php b/workflow/engine/src/ProcessMaker/Model/Dynaform.php index 4d270b2dc..1147c6e5d 100644 --- a/workflow/engine/src/ProcessMaker/Model/Dynaform.php +++ b/workflow/engine/src/ProcessMaker/Model/Dynaform.php @@ -61,4 +61,16 @@ class Dynaform extends Model ->where('DYNAFORM.DYN_UID', '!=', $dynUid) ->get(); } + + /** + * Scope a query to filter an specific process + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $columns + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeProcess($query, string $proUID) + { + return $query->where('PRO_UID', $proUID); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php b/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php new file mode 100644 index 000000000..9170390a7 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php @@ -0,0 +1,27 @@ +where('PRJ_UID', $proUID); + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Model/Triggers.php b/workflow/engine/src/ProcessMaker/Model/Triggers.php new file mode 100644 index 000000000..88947dee8 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/Triggers.php @@ -0,0 +1,27 @@ +where('PRO_UID', $proUID); + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Validation/MySQL57.php b/workflow/engine/src/ProcessMaker/Validation/MySQL57.php new file mode 100644 index 000000000..a6a2f3be0 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Validation/MySQL57.php @@ -0,0 +1,110 @@ +check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityTriggers($processes) + { + $result = []; + + foreach ($processes as $process) { + $triggerQuery = Triggers::query()->select(); + //Call the scope method to filter by process + $triggerQuery->process($process['PRO_UID']); + $triggers = $triggerQuery->get()->values()->toArray(); + foreach ($triggers as $trigger) { + $resultIncompatibility = $this->analyzeQuery($trigger['TRI_WEBBOT']); + if ($resultIncompatibility) { + $aux = array_merge($process, $trigger); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Checks the queries inside dynaforms that could have possible incompatibilities with MySQL 5.7 + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityDynaforms($processes) + { + $result = []; + + foreach ($processes as $process) { + $dynaformQuery = Dynaform::query()->select(); + //Call the scope method to filter by process + $dynaformQuery->process($process['PRO_UID']); + $dynaforms = $dynaformQuery->get()->values()->toArray(); + foreach ($dynaforms as $dynaform) { + $resultIncompatibility = $this->analyzeQuery($dynaform['DYN_CONTENT']); + if ($resultIncompatibility) { + $aux = array_merge($process, $dynaform); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Checks the queries inside variables that could have possible incompatibilities with MySQL 5.7 + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityVariables($processes) + { + $result = []; + + foreach ($processes as $process) { + $variablesQuery = ProcessVariables::query()->select(); + //Call the scope method to filter by process + $variablesQuery->process($process['PRO_UID']); + $variables = $variablesQuery->get()->values()->toArray(); + foreach ($variables as $variable) { + $resultIncompatibility = $this->analyzeQuery($variable['VAR_SQL']); + if ($resultIncompatibility) { + $aux = array_merge($process, $variable); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Analyze the query using the regular expression + * + * @param string $query + * @return bool + */ + public function analyzeQuery($query) + { + preg_match_all($this::REGEX, $query, $matches, PREG_SET_ORDER, 0); + + return !empty($matches); + } +} \ No newline at end of file From ad220584a0585263b101a54dda5142c39c27cdef Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Thu, 16 May 2019 15:54:07 -0400 Subject: [PATCH 065/100] Fix conflicts in cherry pick --- workflow/engine/classes/PmDynaform.php | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index 033dfc8ce..ebd0ab8e3 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -682,6 +682,8 @@ class PmDynaform } $json->rows = count($rows); $json->data = $rows; + + $this->setDataSchema($json, $this->fields["APP_DATA"][$json->name]); } } //languages @@ -2309,4 +2311,32 @@ class PmDynaform { $this->lastQueryError = null; } + + /** + * This adds a new definition on the json dynaform + * @param json $json + * + * @link https://wiki.processmaker.com/3.0/Grid_Control + * @see workflow/engine/classes/PmDynaform->jsonr + */ + public function setDataSchema($json, $appDataVariables) + { + foreach ($json->data as $key => $value) { + $columnsData = []; + foreach ($json->columns as $keyData => $valueData) { + foreach ($appDataVariables as $keyAppData => $valueAppData) { + if (array_key_exists($valueData->id, $valueAppData) || array_key_exists($valueData->id . "_label", + $valueAppData) || array_key_exists($valueData->name, + $valueAppData) || array_key_exists($valueData->name . "_label", $valueAppData)) { + array_push($columnsData, ["defined" => true]); + break; + } else { + array_push($columnsData, ["defined" => false]); + break; + } + } + } + $json->dataSchema[$key] = $columnsData; + } + } } From c99216e41e0c822072405268b2f244017440f5d3 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Mon, 1 Jul 2019 12:47:43 -0400 Subject: [PATCH 066/100] PMC-910 --- .../factories/ProcessVariablesFactory.php | 21 ++ database/factories/TriggerFactory.php | 16 + tests/unit/gulliver/system/gTest.php | 353 ++++++++++++++++++ .../engine/bin/tasks/CliWorkspacesTest.php | 137 +++++++ .../src/ProcessMaker/Core/SystemTest.php | 38 ++ .../src/ProcessMaker/Model/DynaformTest.php | 50 +++ .../Model/ProcessVariablesTest.php | 51 +++ .../src/ProcessMaker/Model/TriggersTest.php | 77 ++++ .../ProcessMaker/Validation/MySQL57Test.php | 219 +++++++++++ 9 files changed, 962 insertions(+) create mode 100644 database/factories/ProcessVariablesFactory.php create mode 100644 database/factories/TriggerFactory.php create mode 100755 tests/unit/gulliver/system/gTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php diff --git a/database/factories/ProcessVariablesFactory.php b/database/factories/ProcessVariablesFactory.php new file mode 100644 index 000000000..6892de0b9 --- /dev/null +++ b/database/factories/ProcessVariablesFactory.php @@ -0,0 +1,21 @@ +define(ProcessVariables::class, function (Faker $faker) { + return [ + 'VAR_UID' => G::generateUniqueID(), + 'PRJ_UID' => G::generateUniqueID(), + 'VAR_NAME' => $faker->word, + 'VAR_FIELD_TYPE' => G::generateUniqueID(), + 'VAR_FIELD_SIZE' => 10, + 'VAR_LABEL' => 'string', + 'VAR_DBCONNECTION' => 'workflow', + 'VAR_SQL' => '', + 'VAR_NULL' => 0, + 'VAR_DEFAULT' => '', + 'VAR_ACCEPTED_VALUES' => '', + 'INP_DOC_UID' => '' + ]; +}); \ No newline at end of file diff --git a/database/factories/TriggerFactory.php b/database/factories/TriggerFactory.php new file mode 100644 index 000000000..e0b9adfe6 --- /dev/null +++ b/database/factories/TriggerFactory.php @@ -0,0 +1,16 @@ +define(Triggers::class, function (Faker $faker) { + return [ + 'TRI_UID' => G::generateUniqueID(), + 'TRI_TITLE' => $faker->sentence(5), + 'TRI_DESCRIPTION' => $faker->text, + 'PRO_UID' => G::generateUniqueID(), + 'TRI_TYPE' => 'SCRIPT', + 'TRI_WEBBOT' => $faker->text, + 'TRI_PARAM' => '', + ]; +}); \ No newline at end of file diff --git a/tests/unit/gulliver/system/gTest.php b/tests/unit/gulliver/system/gTest.php new file mode 100755 index 000000000..eec38b7e3 --- /dev/null +++ b/tests/unit/gulliver/system/gTest.php @@ -0,0 +1,353 @@ +assertContains($word, $res); + } + } + + /** + * It tests that all the reserved words in MySQL 5.6 and MySQL 5.7 are present + * + * @test + */ + public function it_should_match_all_reserved_words_in_mysql_57() + { + $res = G::reservedWordsSql(); + $words = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + foreach ($words as $word) { + //This assert the array contains all the reserved words in MySQL 5.6 and MySQL 5.7 + $this->assertContains($word, $res); + } + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php index 061f78549..cedb86d6c 100644 --- a/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php +++ b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php @@ -2,10 +2,17 @@ namespace Tests\unit\workflow\engine\bin\tasks; +use Illuminate\Foundation\Testing\DatabaseTransactions; +use ProcessMaker\Model\Dynaform; +use ProcessMaker\Model\Process; +use ProcessMaker\Model\ProcessVariables; +use ProcessMaker\Model\Triggers; use Tests\TestCase; class CliWorkspacesTest extends TestCase { + use DatabaseTransactions; + /** * Test that the deprecated files are removed successfully * @@ -134,4 +141,134 @@ class CliWorkspacesTest extends TestCase return $permissions; } + + /** + * Test the queries incompatibilities in dynaforms + * @test + */ + public function it_should_test_the_incompatibilities_in_the_dynaforms_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 2)->create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","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":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","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":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","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":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + $dynaform = factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","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":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","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":""}]}]}' + ] + ); + + check_queries_incompatibilities('workflow'); + + $result = ob_get_contents(); + + // This assert that the message contains the second process name + $this->assertRegExp('/'.$process[1]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the second dynaform with the UNION query + $this->assertRegExp('/'.$dynaform['DYN_TITLE'].'/',$result); + } + + /** + * Test the queries incompatibilities in variables + * @test + */ + public function it_should_test_the_incompatibilities_in_the_variables_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 2)->create(); + + $variables = factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + check_queries_incompatibilities('workflow'); + + $result = ob_get_contents(); + + // This assert that the message contains the first process name + $this->assertRegExp('/'.$process[0]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the first dynaform with the UNION query + $this->assertRegExp('/'.$variables['VAR_TITLE'].'/',$result); + } + + /** + * Test the queries incompatibilities in triggers + * @test + */ + public function it_should_test_the_incompatibilities_in_the_triggers_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 3)->create(); + $trigger = factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + check_queries_incompatibilities('workflow'); + $result = ob_get_contents(); + + // This assert that the message contains the first process name + $this->assertRegExp('/'.$process[0]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the first trigger with the UNION query + $this->assertRegExp('/'.$trigger['TRI_TITLE'].'/',$result); + } } \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php new file mode 100644 index 000000000..e27d5b9dc --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php @@ -0,0 +1,38 @@ +initLaravel(); + + // Assert that the configurations were set successfully + $this->assertEquals(DB_HOST, config('database.connections.workflow.host')); + $this->assertEquals(DB_NAME, config('database.connections.workflow.database')); + $this->assertEquals(DB_USER, config('database.connections.workflow.username')); + $this->assertEquals(DB_PASS, config('database.connections.workflow.password')); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php new file mode 100644 index 000000000..154ff9b96 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php @@ -0,0 +1,50 @@ +create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","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":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","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":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","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":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","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":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","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":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","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":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","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":""}]}]}' + ] + ); + + $dynaformQuery = Dynaform::query()->select(); + $dynaformQuery->process($process[0]['PRO_UID']); + $result = $dynaformQuery->get()->values()->toArray(); + + // Assert there is a dynaform for the specific process + $this->assertCount(1, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[0]['PRO_UID'], $result[0]['PRO_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php new file mode 100644 index 000000000..b5da806a9 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php @@ -0,0 +1,51 @@ +create(); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + $variablesQuery = ProcessVariables::query()->select(); + $variablesQuery->process($process[0]['PRO_UID']); + $result = $variablesQuery->get()->values()->toArray(); + + // Assert there are two process variables for the specific process + $this->assertCount(2, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[0]['PRO_UID'], $result[0]['PRJ_UID']); + $this->assertEquals($process[0]['PRO_UID'], $result[1]['PRJ_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php new file mode 100644 index 000000000..36b4239d9 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php @@ -0,0 +1,77 @@ +create(); + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery();' + ] + ); + + $triggerQuery = Triggers::query()->select(); + $triggerQuery->process($process[2]['PRO_UID']); + $result = $triggerQuery->get()->values()->toArray(); + + // Assert there are two triggers for the specific process + $this->assertCount(2, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[2]['PRO_UID'], $result[0]['PRO_UID']); + $this->assertEquals($process[2]['PRO_UID'], $result[1]['PRO_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php b/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php new file mode 100644 index 000000000..cd0a35877 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php @@ -0,0 +1,219 @@ +create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","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":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","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":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","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":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","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":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","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":""}]}]}' + ] + ); + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityDynaforms($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query inside a dynaform + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION queries inside a dynaform, is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[1]['PRO_UID']); + } + + /** + * Test the MySQL 5.7 incompatibilities in variables + * + * @test + */ + public function it_should_test_incompatibilities_with_variables() + { + $process = factory(Process::class, 2)->create(); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS', + ] + ); + + $variables = factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '', + ] + ); + + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityVariables($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query in a variable + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION query in a variable, is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[0]['PRO_UID']); + + // This asserts that the result does not contain a variable that does not have a UNION query + $this->assertNotEquals($result[0]['VAR_UID'], $variables['VAR_UID']); + } + + /** + * Test the MySQL 5.7 incompatibilities in triggers + * + * @test + */ + public function it_should_test_incompatibilities_with_triggers() + { + $process = factory(Process::class, 3)->create(); + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[2]['PRO_UID'], + "PRO_TITLE" => $process[2]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityTriggers($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION queries is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[0]['PRO_UID']); + } + + /** + * Test the query analyzer method + * + * @test + */ + public function it_should_test_the_query_analyzer() + { + $query = ""; + + $object = new MySQL57(); + $result = $object->analyzeQuery($query); + + // This asserts that there is not a UNION query + $this->assertFalse($result); + + $query = "select * from USERS UNION select '1241412515'"; + $result = $object->analyzeQuery($query); + + // This asserts that there is a UNION query + $this->assertTrue($result); + + $query = "select * from USERS LEFT JOIN TASKS ON 'USERS.USR_UID = TASKS.USR_UID '"; + $result = $object->analyzeQuery($query); + + // This asserts that there is not a UNION query + $this->assertFalse($result); + } +} \ No newline at end of file From f80324f519825ba2e31f0bf1a96f28887509e6b7 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 3 Jul 2019 18:03:59 -0400 Subject: [PATCH 067/100] PMC-913 All existing Unit Tests are running correctly --- .../BusinessModel/LanguageTest.php | 27 ++++++++++++------- .../src/ProcessMaker/Model/DelegationTest.php | 8 +++--- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 4e6bb14f9..6d2bf9bd8 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -62,9 +62,11 @@ class LanguageTest extends TestCase public function testGetLanguageList() { $list = $this->object->getLanguageList(); - $this->assertCount(1, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); + $expected = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($expected, $list); } /** @@ -77,14 +79,21 @@ class LanguageTest extends TestCase { $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); - $this->assertCount(2, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); - $this->assertEquals('es-ES', $list[1]['LANG_ID']); - $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); + $english = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($english, $list); + + $spanish = [ + 'LANG_ID' => 'es-ES', + 'LANG_NAME' => 'Spanish (Spain)', + ]; + $this->assertContains($spanish, $list); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); - $this->assertCount(1, $list2); + $this->assertContains($english, $list2); } /** diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index 3f56c0379..d2e21d8a6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -220,10 +220,10 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 1 and the user points to our user - $results = Delegation::search($user->id); + $results = Delegation::search($user->USR_ID); $this->assertCount(1, $results['data']); $this->assertEquals('testcaseuser', $results['data'][0]['USRCR_USR_USERNAME']); } @@ -644,7 +644,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); $user = factory(User::class)->create([ 'USR_USERNAME' => 'paul', @@ -654,7 +654,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 2 and the ordering ascending return Gary $results = Delegation::search(null, 0, 25, null, null, null, 'ASC', 'APP_CURRENT_USER'); From f2e45cb2daf21b41e077d2438e80be6d01ca4d56 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 4 Jul 2019 09:18:28 -0400 Subject: [PATCH 068/100] PMC-913 All existing Unit Tests are running correctly --- .../BusinessModel/LanguageTest.php | 27 ++++++++++++------- .../src/ProcessMaker/Model/DelegationTest.php | 8 +++--- .../ProcessMaker/Services/Api/LightTest.php | 6 +++++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 4e6bb14f9..6d2bf9bd8 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -62,9 +62,11 @@ class LanguageTest extends TestCase public function testGetLanguageList() { $list = $this->object->getLanguageList(); - $this->assertCount(1, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); + $expected = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($expected, $list); } /** @@ -77,14 +79,21 @@ class LanguageTest extends TestCase { $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); - $this->assertCount(2, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); - $this->assertEquals('es-ES', $list[1]['LANG_ID']); - $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); + $english = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($english, $list); + + $spanish = [ + 'LANG_ID' => 'es-ES', + 'LANG_NAME' => 'Spanish (Spain)', + ]; + $this->assertContains($spanish, $list); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); - $this->assertCount(1, $list2); + $this->assertContains($english, $list2); } /** diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index 3f56c0379..d2e21d8a6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -220,10 +220,10 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 1 and the user points to our user - $results = Delegation::search($user->id); + $results = Delegation::search($user->USR_ID); $this->assertCount(1, $results['data']); $this->assertEquals('testcaseuser', $results['data'][0]['USRCR_USR_USERNAME']); } @@ -644,7 +644,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); $user = factory(User::class)->create([ 'USR_USERNAME' => 'paul', @@ -654,7 +654,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 2 and the ordering ascending return Gary $results = Delegation::search(null, 0, 25, null, null, null, 'ASC', 'APP_CURRENT_USER'); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php index c24d476cc..b3c343a9b 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php @@ -16,6 +16,12 @@ use ProcessMaker\Model\User; use ProcessMaker\Util\DateTime; use Tests\TestCase; +/** + * To do: This only works if the test database is the same where ProcessMaker is + * installed, improvements must be made so that the method "Installer::create_site()" + * can create the connection file (/processmaker/shared/sites/{workspace}/db.php) + * to different instances of MySql. + */ class LightTest extends TestCase { private $http; From b29170b87bf6534f5c3d784514a7e3cb0d847cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 13:36:08 -0400 Subject: [PATCH 069/100] PMC-565 --- bootstrap/classaliasmap.php | 1 - workflow/engine/bin/tasks/cliUpgrade.php | 287 +++++++++--------- workflow/engine/bin/tasks/cliWorkspaces.php | 85 +----- workflow/engine/classes/Upgrade.php | 128 -------- workflow/engine/classes/WorkspaceTools.php | 273 ++++++++--------- .../engine/classes/model/AddonsManager.php | 8 +- .../engine/src/ProcessMaker/Core/System.php | 33 -- 7 files changed, 268 insertions(+), 547 deletions(-) delete mode 100644 workflow/engine/classes/Upgrade.php diff --git a/bootstrap/classaliasmap.php b/bootstrap/classaliasmap.php index 62e24f3f0..734997540 100644 --- a/bootstrap/classaliasmap.php +++ b/bootstrap/classaliasmap.php @@ -80,7 +80,6 @@ return array( 'ToolBar' => ToolBar::class, 'Tree' => PmTree::class, 'triggerLibrary' => TriggerLibrary::class, - 'Upgrade' => Upgrade::class, 'workspaceTools' => WorkspaceTools::class, 'wsBase' => WsBase::class, 'wsResponse' => WsResponse::class, diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index a1d181dcf..d09d3adff 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -5,14 +5,16 @@ use ProcessMaker\Core\System; CLI::taskName('upgrade'); CLI::taskDescription("Upgrade workspaces.\n\n This command should be run after upgrading ProcessMaker to a new version so that all workspaces are also upgraded to the\n new version."); - +CLI::taskOpt('child', "Used by the main upgrade thread", 'child', 'child'); CLI::taskOpt('buildACV', 'If this option is enabled, the Cache View is built.', 'ACV', 'buildACV'); CLI::taskOpt('noxml', 'If this option is enabled, the XML files translation is not built.', 'NoXml', 'no-xml'); +CLI::taskOpt('nomafe', 'If this option is enabled, the MAFE files translation is not built.', 'nomafe', 'no-mafe'); /*----------------------------------********---------------------------------*/ CLI::taskOpt('keep_dyn_content', "Include the DYN_CONTENT_HISTORY value. Ex: --keep_dyn_content", 'i', 'keep_dyn_content'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_upgrade"); /*----------------------------------********---------------------------------*/ + CLI::taskName('unify-database'); CLI::taskDescription( << $workspace) { - $oneWorkspace = $workspace->name; + // Initializing variables + $globalStartTime = microtime(true); + $numberOfWorkspaces = count($workspaces); + $countWorkspace = 1; + + if ($printHF) { + // Set upgrade flag + if (count($workspaces) === 1) { + // For the specific workspace send in the command + G::isPMUnderUpdating(1, $workspaces[0]->name); + } else { + // For all workspaces + G::isPMUnderUpdating(1); } + + // Print information when start the upgrade process + CLI::logging('UPGRADE LOG INITIALIZED', PROCESSMAKER_PATH . 'upgrade.log'); + CLI::logging("UPGRADE STARTED\n"); } - $flag = G::isPMUnderUpdating(1, $oneWorkspace); - //start to upgrade - $checksum = System::verifyChecksum(); - if ($checksum === false) { - CLI::logging(CLI::error("checksum.txt not found, integrity check is not possible") . "\n"); - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } else { - if (!empty($checksum['missing'])) { - CLI::logging(CLI::error("The following files were not found in the installation:")."\n"); - foreach ($checksum['missing'] as $missing) { - CLI::logging(" $missing\n"); + + foreach ($workspaces as $workspace) { + if ($mainThread) { + CLI::logging("FOLDERS AND FILES OF THE SYSTEM\n"); + // Upgrade actions for global files + CLI::logging("* Start cleaning compiled folder...\n"); + $start = microtime(true); + if (defined('PATH_C')) { + G::rm_dir(PATH_C); + G::mk_dir(PATH_C, 0777); } - } - if (!empty($checksum['diff'])) { - CLI::logging(CLI::error("The following files have modifications:")."\n"); - foreach ($checksum['diff'] as $diff) { - CLI::logging(" $diff\n"); + CLI::logging("* End cleaning compiled folder...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to remove deprecated files...\n"); + $start = microtime(true); + $workspace->removeDeprecatedFiles(); + CLI::logging("* End to remove deprecated files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking Enterprise folder/files...\n"); + $start = microtime(true); + $workspace->verifyFilesOldEnterprise(); + CLI::logging("* End checking Enterprise folder/files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking framework paths...\n"); + $start = microtime(true); + $workspace->checkFrameworkPaths(); + CLI::logging("* End checking framework paths...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start fixing serialized instance in serverConf.singleton file...\n"); + $start = microtime(true); + $serverConf = ServerConf::getSingleton(); + $serverConf->updateClassNameInFile(); + CLI::logging("* End fixing serialized instance in serverConf.singleton file...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...\n"); + $start = microtime(true); + G::browserCacheFilesSetUid(); + CLI::logging("* End the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to backup patch files...\n"); + $arrayPatch = glob(PATH_TRUNK . 'patch-*'); + if ($arrayPatch) { + foreach ($arrayPatch as $value) { + if (file_exists($value)) { + // Copy patch content + $names = pathinfo($value); + $nameFile = $names['basename']; + + $contentFile = file_get_contents($value); + $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); + CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); + + // Move patch file + $newFile = PATH_DATA . $nameFile; + G::rm_dir($newFile); + copy($value, $newFile); + G::rm_dir($value); + } + } } - } - if (!(empty($checksum['missing']) || empty($checksum['diff']))) { - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } - } - CLI::logging("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - G::mk_dir(PATH_C, 0777); - } + CLI::logging("* End to backup patch files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - $count = count($workspaces); - $first = true; - $errors = false; - $countWorkspace = 0; - $buildCacheView = array_key_exists('buildACV', $args); - $flagUpdateXml = !array_key_exists('noxml', $args); - $optionMigrateHistoryData = [ - /*----------------------------------********---------------------------------*/ - 'keepDynContent' => array_key_exists('keep_dyn_content', $args) - /*----------------------------------********---------------------------------*/ - ]; + CLI::logging("* Start to backup log files...\n"); + $start = microtime(true); + $workspace->backupLogFiles(); + CLI::logging("* End to backup log files... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - foreach ($workspaces as $index => $workspace) { - if (empty(config("system.workspace"))) { - define("SYS_SYS", $workspace->name); - config(["system.workspace" => $workspace->name]); + // The previous actions should be executed only the first time + $mainThread = false; } + if ($numberOfWorkspaces === 1) { + // Displaying information of the current workspace to upgrade + CLI::logging("UPGRADING DATABASE AND FILES OF WORKSPACE '{$workspace->name}' ($countWorkspace/$numberOfWorkspaces)\n"); - if (!defined("PATH_DATA_SITE")) { - define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP); - } + // Build parameters + $arrayOptTranslation = [ + 'updateXml' => $updateXmlForms, + 'updateMafe' => $updateMafe + ]; + $optionMigrateHistoryData = [ + 'keepDynContent' => $keepDynContent + ]; - if (!defined('DB_ADAPTER')) { - define('DB_ADAPTER', 'mysql'); - } - - try { - $countWorkspace++; - CLI::logging("Upgrading workspaces ($countWorkspace/$count): " . CLI::info($workspace->name) . "\n"); - $workspace->upgrade($buildCacheView, $workspace->name, false, 'en', ['updateXml' => $flagUpdateXml, 'updateMafe' => $first], $optionMigrateHistoryData); + // Upgrade database and files from a specific workspace + $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - CLI::logging("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - $errors = true; + } else { + // Build arguments + $args = '--child'; + $args .= $updateXmlForms ? '' : ' --no-xml'; + $args .= $updateMafe ? '' : ' --no-mafe'; + $args .= $keepDynContent ? ' --keep_dyn_content' : ''; + + // Build and execute command in another thread + $command = PHP_BINARY . ' processmaker upgrade ' . $args . ' ' . $workspace->name; + passthru($command); } + + // After the first execution is required set this values to false + $updateXmlForms = false; + $updateMafe = false; + + // Increment workspaces counter + $countWorkspace++; } - //Verify the information of the singleton ServConf by changing the name of the class if is required. - CLI::logging("\nCheck/Fix serialized instance in serverConf.singleton file\n\n"); - $serverConf = ServerConf::getSingleton(); - $serverConf->updateClassNameInFile(); + if ($printHF) { + // Print information when finish the upgrade process + CLI::logging('UPGRADE FINISHED (Completed on ' . (microtime(true) - $globalStartTime) . + ' seconds), ProcessMaker ' . System::getVersion() . ' installed)' . "\n\n"); - // SAVE Upgrades/Patches - $arrayPatch = glob(PATH_TRUNK . 'patch-*'); - - if ($arrayPatch) { - foreach ($arrayPatch as $value) { - if (file_exists($value)) { - // copy content the patch - $names = pathinfo($value); - $nameFile = $names['basename']; - - $contentFile = file_get_contents($value); - $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); - CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); - - // move file of patch - $newFile = PATH_DATA . $nameFile; - G::rm_dir($newFile); - copy($value, $newFile); - G::rm_dir($value); - } - } - } else { - CLI::logging('ProcessMaker ' . System::getVersion(). ' installed', PATH_DATA . 'log/upgrades.log'); + // Delete upgrade flag + G::isPMUnderUpdating(0); } - - //Safe upgrade for JavaScript files - CLI::logging("\nSafe upgrade for files cached by the browser\n\n"); - - G::browserCacheFilesSetUid(); - - //Status - if ($errors) { - CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n"); - CLI::logging(CLI::error("Please check the log above to correct any issues.") . "\n"); - } else { - CLI::logging("Upgrade successful\n"); - } - - //setting flag to false - $flag = G::isPMUnderUpdating(0); } -function listFiles($dir) -{ - $files = array(); - $lista = glob($dir.'/*'); - foreach ($lista as $valor) { - if (is_dir($valor)) { - $inner_files = listFiles($valor); - if (is_array($inner_files)) { - $files = array_merge($files, $inner_files); - } - } - if (is_file($valor)) { - array_push($files, $valor); - } - } - return $files; -} /*----------------------------------********---------------------------------*/ function run_unify_database($args) { diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 13df97e38..518d9d5a5 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -106,26 +106,6 @@ EOT CLI::taskArg('workspace', true, true); CLI::taskRun("run_plugins_database_upgrade"); -CLI::taskName('workspace-upgrade'); -CLI::taskDescription(<<name); - } - } -} - -/** - * This function is executed only by one workspace, for the command workspace-upgrade - * - * @param array $args, workspace name for to apply the upgrade - * @param array $opts, specify additional arguments for language, flag for buildACV, flag for noxml - * - * @return void - */ -function workspace_upgrade($args, $opts) { - $first = true; - $workspaces = get_workspaces_from_args($args); - $lang = array_key_exists("lang", $opts) ? $opts['lang'] : 'en'; - $buildCacheView = array_key_exists('buildACV', $opts); - $flagUpdateXml = !array_key_exists('noxml', $opts); - - $wsName = $workspaces[key($workspaces)]->name; - Bootstrap::setConstantsRelatedWs($wsName); - //Loop, read all the attributes related to the one workspace - foreach ($workspaces as $workspace) { - try { - $workspace->upgrade( - $buildCacheView, - $workspace->name, - false, - $lang, - ['updateXml' => $flagUpdateXml, 'updateMafe' => $first] - ); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - G::outRes("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - } - } -} - /** * 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 @@ -1210,7 +1127,7 @@ function migrate_content($args, $opts) foreach ($workspaces as $workspace) { print_r('Regenerating content in: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); CLI::logging("-> Regenerating content \n"); - $workspace->migrateContentRun($workspace->name, $lang); + $workspace->migrateContentRun($lang); } $stop = microtime(true); CLI::logging("<*> Optimizing content data Process took " . ($stop - $start) . " seconds.\n"); diff --git a/workflow/engine/classes/Upgrade.php b/workflow/engine/classes/Upgrade.php deleted file mode 100644 index 67fa51dcf..000000000 --- a/workflow/engine/classes/Upgrade.php +++ /dev/null @@ -1,128 +0,0 @@ -addon = $addon; - } - - public function install() - { - - $filter = new InputFilter(); - $start = microtime(1); - $filename = $this->addon->getDownloadFilename(); - $time = microtime(1); - - $archive = new Archive_Tar ($filename); - $time = microtime(1); - $extractDir = dirname($this->addon->getDownloadFilename()) . "/extract"; - $extractDir = $filter->xssFilterHard($extractDir); - $backupDir = dirname($this->addon->getDownloadFilename()) . "/backup"; - $backupDir = $filter->xssFilterHard($backupDir); - if (file_exists($extractDir)) { - G::rm_dir($extractDir); - } - if (file_exists($backupDir)) { - G::rm_dir($backupDir); - } - if (!is_dir($backupDir)) { - mkdir($backupDir); - } - - $time = microtime(1); - echo "Extracting files...\n"; - $archive->extractModify($extractDir, 'processmaker'); - $checksumFile = file_get_contents("$extractDir/checksum.txt"); - $time = microtime(1); - $checksums = array(); - foreach (explode("\n", $checksumFile) as $line) { - $checksums[trim(substr($line, 33))] = substr($line, 0, 32); - } - - $checksum = array(); - $changedFiles = array(); - $time = microtime(1); - $files = $this->ls_dir($extractDir); - - echo "Updating ProcessMaker files...\n"; - $time = microtime(1); - $checksumTime = 0; - foreach ($checksums as $filename => $checksum) { - if (is_dir("$extractDir/$filename")) { - $filename = $filter->xssFilterHard($filename); - print $filename; - continue; - } - $installedFile = PATH_TRUNK . "/$filename"; - if (!file_exists($installedFile)) { - $installedMD5 = ""; - } else { - $time = microtime(1); - $installedMD5 = G::encryptFileOld($installedFile); - $checksumTime += microtime(1) - $time; - } - $archiveMD5 = $checksum; - if (strcasecmp($archiveMD5, $installedMD5) != 0) { - $changedFiles[] = $filename; - if (!is_dir(dirname($backupDir.'/'.$filename))) { - mkdir(dirname($backupDir.'/'.$filename), 0777, true); - } - if (file_exists($installedFile) && is_file($installedFile)) { - copy($installedFile, $backupDir.'/'.$filename); - } - if (!is_dir(dirname($installedFile))) { - mkdir(dirname($installedFile), 0777, true); - } - if (!copy("$extractDir/$filename", $installedFile)) { - throw new Exception("Could not overwrite '$filename'"); - } - } - } - - printf("Updated %d files\n", count($changedFiles)); - printf("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - mkdir(PATH_C, 0777, true); - } - $workspaces = System::listWorkspaces(); - $count = count($workspaces); - $first = true; - $num = 0; - foreach ($workspaces as $index => $workspace) { - try { - $num += 1; - printf("Upgrading workspaces ($num/$count): {$workspace->name}\n"); - $workspace->upgrade(false, config("system.workspace"), false, 'en', ['updateXml' => $first, 'updateMafe' => $first]); - $workspace->close(); - $first = false; - } catch (Exception $e) { - printf("Errors upgrading workspace {$workspace->name}: {$e->getMessage()}\n"); - } - } - } - - private function ls_dir($dir, $basename = null) - { - $files = array(); - if ($basename == null) { - $basename = $dir; - } - foreach (glob("$dir/*") as $filename) { - if (is_dir($filename)) { - $files = array_merge($files, $this->ls_dir($filename, $basename)); - } else { - $files[] = substr($filename, strlen($basename) + 1); - } - } - return $files; - } - -} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 62a3713a5..cdd9e075e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -218,160 +218,115 @@ class WorkspaceTools /** * Upgrade this workspace to the latest system version * - * @param bool $buildCacheView - * @param string $workSpace + * @param string $workspace * @param bool $onedb * @param string $lang * @param array $arrayOptTranslation + * @param array $optionMigrateHistoryData * * @return void */ - public function upgrade($buildCacheView = false, $workSpace = null, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; } + CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $this->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating database...\n"); $this->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating translations...\n"); $start = microtime(true); - CLI::logging("> Check Intermediate Email Event...\n"); - $this->checkIntermediateEmailEvent(); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify enterprise old...\n"); - $this->verifyFilesOldEnterprise($workSpace); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating translations...\n"); $this->upgradeTranslation($arrayOptTranslation['updateXml'], $arrayOptTranslation['updateMafe']); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Translations Process took $final seconds.\n"); + CLI::logging("* End updating translations...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $this->checkMafeRequirements($workspace, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to update CONTENT table...\n"); + $start = microtime(true); + $this->upgradeContent($workspace); + CLI::logging("* End to update CONTENT table... (Completed on " . (microtime(true) - $start) . " seconds)\n"); $start = microtime(true); - CLI::logging("> Updating Content...\n"); - $this->upgradeContent($workSpace); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Content Process took $final seconds.\n"); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $this->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $this->checkMafeRequirements($workSpace, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Check Mafe Requirements Process took $final seconds.\n"); + $this->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update Files Manager...\n"); $start = microtime(true); - CLI::logging("> Updating Triggers...\n"); - $this->updateTriggers(true, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Triggers Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Backup log files...\n"); - $this->backupLogFiles(); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Backup log files Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $this->migrateContent($workSpace, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); - $this->migratePopulateIndexingACV($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + $this->processFilesUpgrade($workspace); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); $start = microtime(true); - CLI::logging("> Migrate new lists...\n"); - $this->migrateList($workSpace, false, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Migrate new lists Process took $final seconds.\n"); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $this->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + $this->migrateSingleton($workspace); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning expired tokens...\n"); $start = microtime(true); - CLI::logging("> Clean access and refresh tokens...\n"); - $this->cleanTokens($workSpace); - $stop = microtime(true); - CLI::logging("<*> Clean access and refresh tokens took " . ($stop - $start) . " seconds.\n"); + $this->cleanTokens(); + CLI::logging("* End cleaning expired tokens...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to check Intermediate Email Event...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data...\n"); - $this->migrateSelfServiceRecordsRun($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating Self-Service records Process took " . ($stop - $start) . " seconds.\n"); + $this->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); $start = microtime(true); - CLI::logging("> Updating rows in Web Entry table for classic processes...\n"); - $this->updatingWebEntryClassicModel($workSpace); - $stop = microtime(true); - CLI::logging("<*> Updating rows in Web Entry table for classic processes took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Update framework paths...\n"); - $this->updateFrameworkPaths($workSpace); - $stop = microtime(true); - CLI::logging("<*> Update framework paths took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating plugin singleton data...\n"); - $this->migrateSingleton($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating and populating plugin singleton data took " . ($stop - $start) . " seconds.\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); $this->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $this->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); + $this->migrateAppHistoryToAppDataChangeLog(true); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $this->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $this->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); $this->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $this->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); } /** @@ -391,6 +346,9 @@ class WorkspaceTools CLI::logging("<*> Database Upgrade Structure Process took $final seconds.\n"); } + /** + * Update the email events with the current email server + */ public function checkIntermediateEmailEvent() { $oEmailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); @@ -629,9 +587,11 @@ class WorkspaceTools } /** - * Upgrade this workspace Content. + * Upgrade this workspace Content + * * @param string $workspace * @param boolean $executeRegenerateContent + * * @return void */ public function upgradeContent($workspace = null, $executeRegenerateContent = false) @@ -683,7 +643,7 @@ class WorkspaceTools } /** - * Upgrade this workspace translations from all avaliable languages. + * Upgrade the workspace translations from all available languages * * @param bool $flagXml Update XML * @param bool $flagMafe Update MAFE @@ -1055,10 +1015,12 @@ class WorkspaceTools } /** - * Upgrade this workspace database to the latest system schema + * Upgrade the workspace database to the latest system schema * - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool upgradeSchema for more information + * @param bool $onedb Was installed in one DB or not + * @param bool $checkOnly Only check if the upgrade is needed if true + * + * @return bool upgradeSchema */ public function upgradeDatabase($onedb = false, $checkOnly = false) { @@ -2173,6 +2135,9 @@ class WorkspaceTools return $result; } + /** + * Backup the log files + */ public function backupLogFiles() { $config = System::getSystemConfiguration(); @@ -2189,6 +2154,12 @@ class WorkspaceTools } } + /** + * Check if the workspace have the clients used by MAFE registered + * + * @param string $workspace + * @param string $lang + */ public function checkMafeRequirements($workspace, $lang) { $this->initPropel(true); @@ -2265,9 +2236,8 @@ class WorkspaceTools return true; } - public function verifyFilesOldEnterprise($workspace) + public function verifyFilesOldEnterprise() { - $this->initPropel(true); $pathBackup = PATH_DATA . 'backups'; if (!file_exists($pathBackup)) { G::mk_dir($pathBackup, 0777); @@ -2381,12 +2351,12 @@ class WorkspaceTools /** * Migrate all cases to New list * - * @param string $workSpace Workspace * @param bool $flagReinsert Flag that specifies the re-insertion + * @param string $lang * * @return void */ - public function migrateList($workSpace, $flagReinsert = false, $lang = 'en') + public function migrateList($flagReinsert = false, $lang = 'en') { $this->initPropel(true); @@ -3034,19 +3004,21 @@ class WorkspaceTools } /** - * Process-Files upgrade + * Process files upgrade, store the information in the DB + * + * @param string $workspace * * return void */ - public function processFilesUpgrade() + public function processFilesUpgrade($workspace) { try { if (!defined("PATH_DATA_MAILTEMPLATES")) { - define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates" . PATH_SEP); + define("PATH_DATA_MAILTEMPLATES", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "mailTemplates" . PATH_SEP); } if (!defined("PATH_DATA_PUBLIC")) { - define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public" . PATH_SEP); + define("PATH_DATA_PUBLIC", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "public" . PATH_SEP); } $this->initPropel(true); @@ -3559,8 +3531,12 @@ class WorkspaceTools return $response; } - - public function migrateContent($workspace, $lang = SYS_LANG) + /** + * Migrate texts/values from "CONTENT" table to the corresponding object tables + * + * @param string $lang + */ + public function migrateContent($lang = SYS_LANG) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3573,7 +3549,7 @@ class WorkspaceTools $blackList = $oConfig['CFG_VALUE'] == 'true' ? array('Groupwf', 'Process', 'Department', 'Task', 'InputDocument', 'Application') : unserialize($oConfig['CFG_VALUE']); } - $blackList = $this->migrateContentRun($workspace, $lang, $blackList); + $blackList = $this->migrateContentRun($lang, $blackList); $data["CFG_UID"] = 'MIGRATED_CONTENT'; $data["OBJ_UID"] = 'content'; $data["CFG_VALUE"] = serialize($blackList); @@ -3640,13 +3616,14 @@ class WorkspaceTools } /** - * Migration + * Migrate from "CONTENT" table to the corresponding object tables + * + * @param string $lang + * @param array $blackList * - * @param $workspace - * @param mixed|string $lang * @return array */ - public function migrateContentRun($workspace, $lang = SYS_LANG, $blackList = array()) + public function migrateContentRun($lang = SYS_LANG, $blackList = []) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3662,7 +3639,10 @@ class WorkspaceTools return $blackList; } - public function cleanTokens($workspace, $lang = SYS_LANG) + /** + * Clean the expired access and refresh tokens + */ + public function cleanTokens() { $this->initPropel(true); $oCriteria = new Criteria(); @@ -3750,7 +3730,10 @@ class WorkspaceTools } } - public function migrateSelfServiceRecordsRun($workspace) + /** + * Migrate the concatenated strings with UIDs from groups to the table "APP_ASSIGN_SELF_SERVICE_VALUE_GROUP" + */ + public function migrateSelfServiceRecordsRun() { // Initializing $this->initPropel(true); @@ -3797,7 +3780,10 @@ class WorkspaceTools CLI::logging(" Migrating Self-Service by Value Cases Done \n"); } - public function migratePopulateIndexingACV($workspace) + /** + * Populate new fields used for avoiding the use of the "APP_CACHE_VIEW" table + */ + public function migratePopulateIndexingACV() { // Migrating and populating new indexes CLI::logging("-> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW Start \n"); @@ -4062,9 +4048,10 @@ class WorkspaceTools * It populates the WEB_ENTRY table for the classic processes, this procedure * is done to verify the execution of php files generated when the WebEntry * is configured. - * @param type $workSpace + * + * @param bool $force */ - public function updatingWebEntryClassicModel($workSpace, $force = false) + public function updatingWebEntryClassicModel($force = false) { //We obtain from the configuration the list of proUids obtained so that //we do not go through again. @@ -4160,8 +4147,9 @@ class WorkspaceTools /** * Updating triggers - * @param $flagRecreate - * @param $lang + * + * @param bool $flagRecreate + * @param string $lang */ public function updateTriggers($flagRecreate, $lang) { @@ -4170,6 +4158,8 @@ class WorkspaceTools } /** + * Migrate the data of the "plugin.singleton" file to the "PLUGIN_REGISTRY" table + * * @param $workspace */ public function migrateSingleton($workspace) @@ -4215,14 +4205,11 @@ class WorkspaceTools } /** - * Updating framework directory structure + * Check/Create framework's directories * */ - private function updateFrameworkPaths($workSpace = null) + public function checkFrameworkPaths() { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } $paths = [ PATH_DATA . 'framework' => 0770, PATH_DATA . 'framework' . DIRECTORY_SEPARATOR . 'cache' => 0770, diff --git a/workflow/engine/classes/model/AddonsManager.php b/workflow/engine/classes/model/AddonsManager.php index 06d16fedb..10691d3ac 100644 --- a/workflow/engine/classes/model/AddonsManager.php +++ b/workflow/engine/classes/model/AddonsManager.php @@ -385,13 +385,7 @@ class AddonsManager extends BaseAddonsManager $this->setState(); } else { - if ($this->getAddonType() == "core") { - $upgrade = new Upgrade($this); - - $upgrade->install(); - } else { - throw new Exception("Addon type {$this->getAddonType()} not supported."); - } + throw new Exception("Addon type {$this->getAddonType()} not supported."); } } diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 36e3061ed..15e957e7d 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -243,39 +243,6 @@ class System return $items; } - /** - * Review the checksum.txt - * - * @return array $result - */ - public static function verifyChecksum() - { - if (!file_exists(PATH_TRUNK . "checksum.txt")) { - return false; - } - $lines = explode("\n", file_get_contents(PATH_TRUNK . "checksum.txt")); - $result = array("diff" => array(), "missing" => array() - ); - foreach ($lines as $line) { - if (empty($line)) { - continue; - } - list ($checksum, $empty, $filename) = explode(" ", $line); - //Skip xmlform because these files always change. - if (strpos($filename, "/xmlform/") !== false) { - continue; - } - if (file_exists(realpath($filename))) { - if (strcmp($checksum, G::encryptFileOld(realpath($filename))) != 0) { - $result['diff'][] = $filename; - } - } else { - $result['missing'][] = $filename; - } - } - return $result; - } - /** * This function checks files to do updated to pm * From a720cd7608154970e2e9d16b48a690afb9aac97c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 16:17:23 -0400 Subject: [PATCH 070/100] PMC-568 --- gulliver/system/class.database_mysql.php | 12 ++++++++++++ workflow/engine/classes/WorkspaceTools.php | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 8191f51db..0bae312f0 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1012,4 +1012,16 @@ class database extends database_base } return $flag; } + + /** + * Generate drop trigger SQL + * + * @param string $triggerName + * + * @return string + */ + public function getDropTrigger($triggerName) + { + return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; + } } diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index cdd9e075e..bb16c28b9 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4544,4 +4544,25 @@ class WorkspaceTools } } } + + /** + * Delete the triggers MySQL that causes performance issues in the upgrade process + */ + public function deleteTriggersMySql($triggersToDelete) + { + // Initialize Propel + $this->initPropel(true); + $con = Propel::getConnection('workflow'); + + // Get statement instance + $stmt = $con->createStatement(); + + // Get MySQL DB instance class + $dbInstance = $this->getDatabase(); + + // Remove triggers MySQL + foreach ($triggersToDelete as $triggerName) { + $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); + } + } } From 36f9746e82336994637014ed74c2f778ffc406d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 12:31:29 -0400 Subject: [PATCH 071/100] PMC-569 --- workflow/engine/classes/WorkspaceTools.php | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index bb16c28b9..c1e210b4e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4565,4 +4565,30 @@ class WorkspaceTools $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); } } + + /** + * Delete indexes of specific tables + * + * @param array $tables + */ + public function deleteIndexes($tables) + { + // Get MySQL DB instance class + $database = $this->getDatabase(); + + foreach ($tables as $table) { + // Get all indexes of the table + $indexes = $database->executeQuery($database->generateTableIndexSQL($table)); + $indexesDeleted = []; + foreach ($indexes as $index) { + if ($index['Key_name'] != 'PRIMARY') { + if (!in_array($index['Key_name'], $indexesDeleted)) { + // Remove index + $database->executeQuery($database->generateDropKeySQL($table, $index['Key_name'])); + $indexesDeleted[] = $index['Key_name']; + } + } + } + } + } } From c109be86906d8a5094215f7aa26e09facf3763e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 14:34:05 -0400 Subject: [PATCH 072/100] PMC-574 --- workflow/engine/classes/WorkspaceTools.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index c1e210b4e..615a9a2e2 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -247,6 +247,20 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + $start = microtime(true); + $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); + CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', + 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + $start = microtime(true); + $this->deleteIndexes($bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update CONTENT table...\n"); $start = microtime(true); $this->upgradeContent($workspace); From ce9eed77591954113a11e26ef22f0122154652b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Wed, 20 Mar 2019 10:58:58 -0400 Subject: [PATCH 073/100] PMC-596 --- gulliver/system/class.database_mysql.php | 71 +++++++++++ workflow/engine/bin/tasks/cliUpgrade.php | 2 +- workflow/engine/classes/WorkspaceTools.php | 142 ++++++++++++--------- 3 files changed, 152 insertions(+), 63 deletions(-) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 0bae312f0..870ba954f 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1024,4 +1024,75 @@ class database extends database_base { return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; } + + /** + * Generate alter table with or without adding the indexes + * + * @param string $tableName + * @param array $columns + * @param array $indexes + * + * @return string + */ + public function generateAddColumnsSql($tableName, $columns, $indexes = []) + { + $indexesAlreadyAdded = []; + $sql = 'ALTER TABLE ' . $this->sQuoteCharacter . $tableName . $this->sQuoteCharacter . ' '; + foreach ($columns as $columnName => $parameters) { + if (isset($parameters['Type']) && isset($parameters['Null'])) { + $sql .= 'ADD COLUMN ' . $this->sQuoteCharacter . $columnName . $this->sQuoteCharacter . ' ' . $parameters['Type']; + if ($parameters['Null'] == 'YES') { + $sql .= ' NULL'; + } else { + $sql .= ' NOT NULL'; + } + } + if (isset($parameters['AutoIncrement']) && $parameters['AutoIncrement']) { + $sql .= ' AUTO_INCREMENT'; + } + if (isset($parameters['PrimaryKey']) && $parameters['PrimaryKey']) { + $sql .= ' PRIMARY KEY'; + $indexesAlreadyAdded[] = $columnName; + } + if (isset($parameters['Unique']) && $parameters['Unique']) { + $sql .= ' UNIQUE'; + } + + // We need to check the property AI + if (isset($parameters['AI'])) { + if ($parameters['AI'] == 1) { + $sql .= ' AUTO_INCREMENT'; + } else { + if ($parameters['Default'] != '') { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + } else { + if (isset($parameters['Default'])) { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + $sql .= ', '; + } + foreach ($indexes as $indexName => $indexColumns) { + $indexType = 'INDEX'; + if ($indexName === 'primaryKey' || $indexName === 'PRIMARY') { + $indexType = 'PRIMARY'; + $indexName = 'KEY'; + // If is primary key is not needed add a new index, the column already was added like primary key + if (count($indexColumns) == 1 && $indexesAlreadyAdded == $indexColumns) { + continue; + } + } + $sql .= 'ADD ' . $indexType . ' ' . $indexName . ' ('; + foreach ($indexColumns as $column) { + $sql .= $this->sQuoteCharacter . $column . $this->sQuoteCharacter . ', '; + } + $sql = substr($sql, 0, -2); + $sql .= '), '; + } + $sql = rtrim($sql, ', '); + + return $sql; + } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index d09d3adff..7fec63fd0 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -160,7 +160,7 @@ function run_upgrade($parameters, $args) ]; // Upgrade database and files from a specific workspace - $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); + $workspace->upgrade($workspace->name, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); } else { // Build arguments diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 615a9a2e2..3c70f78b0 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -226,7 +226,7 @@ class WorkspaceTools * * @return void */ - public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; @@ -234,7 +234,7 @@ class WorkspaceTools CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - $this->upgradeDatabase($onedb); + $this->upgradeDatabase(); CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start updating translations...\n"); @@ -283,13 +283,6 @@ class WorkspaceTools $this->processFilesUpgrade($workspace); CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating to new list tables...\n"); - $start = microtime(true); - $this->migrateList(true, $lang); - CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); $this->migrateSingleton($workspace); @@ -337,6 +330,19 @@ class WorkspaceTools CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($this->dbAdapter); + $this->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); $this->updateTriggers(true, $lang); @@ -1030,22 +1036,17 @@ class WorkspaceTools /** * Upgrade the workspace database to the latest system schema - * - * @param bool $onedb Was installed in one DB or not - * @param bool $checkOnly Only check if the upgrade is needed if true - * - * @return bool upgradeSchema */ - public function upgradeDatabase($onedb = false, $checkOnly = false) + public function upgradeDatabase() { $this->initPropel(true); P11835::$dbAdapter = $this->dbAdapter; P11835::isApplicable(); $systemSchema = System::getSystemSchema($this->dbAdapter); - $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// get the Rbac Schema + $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// Get the RBAC Schema $this->registerSystemTables(array_merge($systemSchema, $systemSchemaRbac)); - $this->upgradeSchema($systemSchema); - $this->upgradeSchema($systemSchemaRbac, false, true, $onedb); // perform Upgrade to Rbac + $this->upgradeSchema($systemSchema, false, false, false); // Without add indexes + $this->upgradeSchema($systemSchemaRbac, false, true); // Perform upgrade to RBAC $this->upgradeData(); $this->checkRbacPermissions();//check or add new permissions $this->checkSequenceNumber(); @@ -1112,10 +1113,7 @@ class WorkspaceTools $arrayData = $emailSever->create2($arrayData); } } - P11835::execute(); - - return true; } private function setFormatRows() @@ -1136,14 +1134,18 @@ class WorkspaceTools } /** - * Upgrade this workspace database from a schema + * Upgrade the workspace database according to the schema * - * @param array $schema the schema information, such as returned from getSystemSchema - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool the changes if checkOnly is true, else return - * true on success + * @param array $schema The schema information, such as returned from getSystemSchema + * @param bool $checkOnly Only return the diff between current database and the schema + * @param bool $rbac Is RBAC database? + * @param bool $includeIndexes Include or no indexes in new tables + * + * @return bool|array + * + * @throws Exception */ - public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $onedb = false) + public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $includeIndexes = true) { $dbInfo = $this->getDBInfo(); @@ -1198,11 +1200,11 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAdd']) . " tables to add\n"); } - foreach ($changes['tablesToAdd'] as $sTable => $aColumns) { - $database->executeQuery($database->generateCreateTableSQL($sTable, $aColumns)); - if (isset($changes['tablesToAdd'][$sTable]['INDEXES'])) { - foreach ($changes['tablesToAdd'][$sTable]['INDEXES'] as $indexName => $aIndex) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $indexName, $aIndex)); + foreach ($changes['tablesToAdd'] as $tableName => $columns) { + $database->executeQuery($database->generateCreateTableSQL($tableName, $columns)); + if (isset($changes['tablesToAdd'][$tableName]['INDEXES']) && $includeIndexes) { + foreach ($changes['tablesToAdd'][$tableName]['INDEXES'] as $indexName => $keys) { + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $keys)); } } } @@ -1211,46 +1213,62 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAlter']) . " tables to alter\n"); } - foreach ($changes['tablesToAlter'] as $sTable => $aActions) { - foreach ($aActions as $sAction => $aAction) { - foreach ($aAction as $sColumn => $vData) { - switch ($sAction) { - case 'DROP': - $database->executeQuery($database->generateDropColumnSQL($sTable, $vData)); - break; - case 'ADD': - if ($database->checkPatchHor1787($sTable, $sColumn, $vData)) { - $database->executeQuery($database->generateCheckAddColumnSQL($sTable, $sColumn, $vData)); - $database->executeQuery($database->deleteAllIndexesIntable($sTable, $sColumn, $vData)); - } - $database->executeQuery($database->generateAddColumnSQL($sTable, $sColumn, $vData)); - break; - case 'CHANGE': - $database->executeQuery($database->generateChangeColumnSQL($sTable, $sColumn, $vData)); - break; + $tablesToAddColumns = []; + + foreach ($changes['tablesToAlter'] as $tableName => $actions) { + foreach ($actions as $action => $actionData) { + if ($action == 'ADD') { + $tablesToAddColumns[$tableName] = $actionData; + + // In a very old schema the primary key for table "LOGIN_LOG" was changed and we need to delete the + // primary index to avoid errors in the database upgrade + // TO DO: The change of a Primary Key in a table should be generic + if ($tableName == 'LOGIN_LOG' && array_key_exists('LOG_ID', $actionData)) { + $database->executeQuery('DROP INDEX `PRIMARY` ON LOGIN_LOG;'); + } + } else { + foreach ($actionData as $columnName => $meta) { + switch ($action) { + case 'DROP': + $database->executeQuery($database->generateDropColumnSQL($tableName, $meta)); + break; + case 'CHANGE': + $database->executeQuery($database->generateChangeColumnSQL($tableName, $columnName, $meta)); + break; + } } } } } - if (!empty($changes['tablesWithNewIndex'])) { - CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " indexes to add\n"); - } - foreach ($changes['tablesWithNewIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($tablesToAddColumns)) { + foreach ($tablesToAddColumns as $tableName => $tableColumn) { + $indexes = []; + if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { + $indexes = $changes['tablesWithNewIndex'][$tableName]; + unset($changes['tablesWithNewIndex'][$tableName]); + } + $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); } } - if (!empty($changes['tablesToAlterIndex'])) { - CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " indexes to alter\n"); - } - foreach ($changes['tablesToAlterIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateDropKeySQL($sTable, $sIndexName)); - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { + $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); } } + + if (!empty($changes['tablesToAlterIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " tables with indexes to alter\n"); + foreach ($changes['tablesToAlterIndex'] as $tableName => $indexes) { + foreach ($indexes as $indexName => $indexFields) { + $database->executeQuery($database->generateDropKeySQL($tableName, $indexName)); + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $indexFields)); + } + } + } + $this->closeDatabase(); return true; } From 41beb8478acfea8de40f491f56b62da900924409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Apr 2019 14:44:33 -0400 Subject: [PATCH 074/100] PMC-570 --- gulliver/system/class.database_mysql.php | 12 +- workflow/engine/bin/tasks/cliUpgrade.php | 24 +++ workflow/engine/classes/WorkspaceTools.php | 12 ++ .../ProcessMaker/Core/ProcessesManager.php | 98 ++++++++++++ .../src/ProcessMaker/Core/RunProcess.php | 146 ++++++++++++++++++ .../Upgrade/RunProcessUpgradeQuery.php | 61 ++++++++ 6 files changed, 350 insertions(+), 3 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Core/ProcessesManager.php create mode 100644 workflow/engine/src/ProcessMaker/Core/RunProcess.php create mode 100644 workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 870ba954f..53888a4ae 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -519,13 +519,15 @@ class database extends database_base } /** - * execute a sql query + * Execute a sql query * * @param string $query + * @param bool $throwError + * * @return array * @throws Exception */ - public function executeQuery($query) + public function executeQuery($query, $throwError = false) { $this->logQuery($query); @@ -545,7 +547,11 @@ class database extends database_base return $result; } catch (Exception $exception) { $this->logQuery($exception->getMessage()); - return []; + if ($throwError) { + throw $exception; + } else { + return []; + } } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index 7fec63fd0..36aa2e37d 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -36,6 +36,8 @@ CLI::taskArg('workspace'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_unify_database"); /*----------------------------------********---------------------------------*/ +CLI::taskName('upgrade-query'); +CLI::taskRun('runUpgradeQuery'); /** * Execute the upgrade @@ -299,3 +301,25 @@ function run_unify_database($args) $flag = G::isPMUnderUpdating(0); } /*----------------------------------********---------------------------------*/ + +/** + * Execute a query, used internally for upgrade process + * + * @param array $options + */ +function runUpgradeQuery($options) +{ + // Initializing variables + $workspaceName = $options[0]; + $query = base64_decode($options[1]); + $isRbac = (bool)$options[2]; + + // Creating a new instance of the extended class + $workspace = new WorkspaceTools($workspaceName); + + // Execute the query + $workspace->upgradeQuery($query, $isRbac); + + // Terminate without error + exit('success'); +} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3c70f78b0..d190b9c1f 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4623,4 +4623,16 @@ class WorkspaceTools } } } + + /** + * Execute a query, used internally for the upgrade process + * + * @param string $query + * @param bool $rbac + */ + public function upgradeQuery($query, $rbac) + { + $database = $this->getDatabase($rbac); + $database->executeQuery($query, true); + } } diff --git a/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php new file mode 100644 index 000000000..bff0c5d96 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php @@ -0,0 +1,98 @@ +processes = $processes; + } + + /** + * Get the list of terminated processes + * + * @return array + */ + public function getTerminated() + { + return $this->terminated; + } + + /** + * Get the list of processes with errors + * + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * Set the sleep time after each statuses revision + * + * @param int $sleepTime + */ + public function setSleepTime($sleepTime) + { + $this->sleepTime = $sleepTime; + } + + /** + * Run the processes + */ + public function run() + { + // Start all processes + foreach ($this->processes as $process) { + $process->run(); + } + + // Manage the processes + $this->manage(); + } + + /** + * Manage all started processes + */ + private function manage() + { + do { + // Check all remaining processes + foreach ($this->processes as $index => $process) { + // If the process has finished, save the info and destroy it + if ($process->getStatus() === RunProcess::TERMINATED || $process->getStatus() === RunProcess::ERROR) { + $processInfo = ['command' => $process->getCommand(), 'rawAnswer' => $process->getRawAnswer()]; + if ($process->getStatus() === RunProcess::TERMINATED) { + // Processes completed successfully + $this->terminated[] = $processInfo; + } else { + // Processes completed with errors + $this->errors[] = $processInfo; + } + + // Destroy the process + unset($this->processes[$index]); + } + } + + // Waiting... + sleep($this->sleepTime); + } while (!empty($this->processes)); + } +} diff --git a/workflow/engine/src/ProcessMaker/Core/RunProcess.php b/workflow/engine/src/ProcessMaker/Core/RunProcess.php new file mode 100644 index 000000000..8f2a0287f --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/RunProcess.php @@ -0,0 +1,146 @@ +command = $command; + } + + /** + * Class destructor, the resource created should be closed + */ + public function __destruct() + { + if (is_resource($this->resource)) { + proc_close($this->resource); + } + } + + /** + * Get the command + * + * @return string + */ + public function getCommand() + { + return $this->command; + } + + /** + * Get the raw response + * + * @return string|null + */ + public function getRawAnswer() + { + return $this->rawAnswer; + } + + /** + * Get the status + * + * @return string + */ + public function getStatus() + { + // If already exist a status return this value + if ($this->status !== null) { + return $this->status; + } + + // If doesn't exists a resource the process is not running + if (!is_resource($this->resource)) { + return self::NOT_RUNNING; + } + + // If the process is running return this value + if ($this->isRunning()) { + return self::RUNNING; + } + + // If the process is not running, parse the response to determine the status + $this->rawAnswer = stream_get_contents($this->pipes[1]); + $this->status = $this->parseAnswer(); + + return $this->status; + } + + /** + * Get the exit code + * + * @return string|null + */ + public function getExitCode() + { + return $this->exitCode; + } + + /** + * Run the command + */ + public function run() + { + $this->resource = proc_open($this->command, $this->descriptors, $this->pipes); + } + + /** + * Process is running? + * + * @return bool + */ + public function isRunning() + { + // Get the process status + $status = proc_get_status($this->resource); + + // If process is not running get the exit code + if ($status['running'] === false) { + $this->exitCode = $status['exitcode']; + } + + return $status['running']; + } + + /** + * Process the raw response and compare with the expected answer in order to determine the status + * + * @return string + */ + public function parseAnswer() + { + return $this->rawAnswer === self::EXPECTED_ANSWER ? self::TERMINATED : self::ERROR; + } +} diff --git a/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php new file mode 100644 index 000000000..e1295c0e4 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php @@ -0,0 +1,61 @@ +workspace = $workspace; + $this->sql = $sql; + $this->isRbac = $isRbac; + + // Build the command and send to the parent class + parent::__construct($this->buildCommand()); + } + + /** + * Override the parent method in order to compare the raw response with the SUCCESS value + * + * @return string + */ + public function parseAnswer() + { + return $this->getRawAnswer() === self::SUCCESS ? parent::TERMINATED : parent::ERROR; + } + + /** + * Build the command to execute a query for the upgrade process + * + * @return string + */ + private function buildCommand() + { + return sprintf(self::CMD, $this->workspace, base64_encode($this->sql), + ($this->isRbac ? self::RBAC : self::NO_RBAC)); + } +} \ No newline at end of file From d3d4dd69618596f765c4d20d52a6951f1ee5ab21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 11:48:09 -0400 Subject: [PATCH 075/100] PMC-571 --- workflow/engine/classes/WorkspaceTools.php | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index d190b9c1f..a926bb366 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -7,9 +7,11 @@ use ProcessMaker\BusinessModel\Process as BmProcess; use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\Installer; +use ProcessMaker\Core\ProcessesManager; use ProcessMaker\Core\System; use ProcessMaker\Plugins\Adapters\PluginAdapter; use ProcessMaker\Project\Adapter\BpmnWorkflow; +use ProcessMaker\Upgrade\RunProcessUpgradeQuery; use ProcessMaker\Util\FixReferencePath; /** @@ -1242,20 +1244,51 @@ class WorkspaceTools } if (!empty($tablesToAddColumns)) { + $upgradeQueries = []; foreach ($tablesToAddColumns as $tableName => $tableColumn) { $indexes = []; if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { $indexes = $changes['tablesWithNewIndex'][$tableName]; unset($changes['tablesWithNewIndex'][$tableName]); } - $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); + + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, $tableColumn, $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + $upgradeQueries = []; foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { - $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, [], $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } From 7e072bbc1091b32b3d69ffa3ec121dabe5ba8216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 14:22:52 -0400 Subject: [PATCH 076/100] PMC-572 --- workflow/engine/classes/WorkspaceTools.php | 106 +++++++++++---------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index a926bb366..3c239afa7 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -3625,59 +3625,36 @@ class WorkspaceTools } /** - * Migrate this workspace table Content. + * Generate update rows from Content sentence * - * @param $className - * @param $fields - * @param mixed|string $lang - * @throws Exception + * @param string $tableName + * @param array $fields + * @param string $lang + * + * @return string */ - public function migrateContentWorkspace($className, $fields, $lang = SYS_LANG) + public function generateUpdateFromContent($tableName, array $fields, $lang = SYS_LANG) { - try { - $this->initPropel(true); - $fieldUidName = $fields['uid']; - $oCriteria = new Criteria(); - $oCriteria->clearSelectColumns(); - $oCriteria->addAsColumn($fieldUidName, ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_PARENT); - $oCriteria->addSelectColumn(ContentPeer::CON_CATEGORY); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add(ContentPeer::CON_CATEGORY, $fields['fields'], Criteria::IN); - $oCriteria->add(ContentPeer::CON_LANG, $lang); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $methods = $fields['methods']; - while ($oDataset->next()) { - $row = $oDataset->getRow(); - $fieldName = $row['CON_CATEGORY']; - $fieldName = isset($fields['alias']) && isset($fields['alias'][$fieldName]) ? $fields['alias'][$fieldName] : $fieldName; - unset($row['CON_CATEGORY']); - $row[$fieldName] = $row['CON_VALUE']; - unset($row['CON_VALUE']); - $oTable = new $className(); - $that = array($oTable, $methods['exists']); - $params = array($row[$fieldUidName]); - if (isset($row['CON_PARENT']) && $row['CON_PARENT'] != '') { - array_push($params, $row['CON_PARENT']); - $fieldName = isset($fields['alias']) && isset($fields['alias']['CON_PARENT']) ? $fields['alias']['CON_PARENT'] : 'CON_PARENT'; - $row[$fieldName] = $row['CON_PARENT']; - } - unset($row['CON_PARENT']); - if (call_user_func_array($that, $params)) { - if (isset($methods['update'])) { - $fn = $methods['update']; - $fn($row); - } else { - $oTable->update($row); - } - } - } - $classNamePeer = class_exists($className . 'Peer') ? $className . 'Peer' : $fields['peer']; - CLI::logging("|--> Add content data in table " . $classNamePeer::TABLE_NAME . "\n"); - } catch (Exception $e) { - throw ($e); + $sql = "UPDATE " . $tableName . " AS T"; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $sql .= " LEFT JOIN CONTENT " . $tableAlias . " ON ("; + $sql .= $tableAlias . ".CON_CATEGORY = '" . $field . "' AND "; + $sql .= $tableAlias . ".CON_ID = T." . $fields['uid'] . " AND "; + $sql .= $tableAlias . ".CON_LANG = '" . $lang . "')"; } + $sql .= ' SET '; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $fieldName = !empty($fields['alias'][$field]) ? $fields['alias'][$field] : $field; + $sql .= $fieldName . " = " . $tableAlias . ".CON_VALUE, "; + } + $sql = rtrim($sql, ', '); + return $sql; } /** @@ -3687,6 +3664,8 @@ class WorkspaceTools * @param array $blackList * * @return array + * + * @throws Exception */ public function migrateContentRun($lang = SYS_LANG, $blackList = []) { @@ -3694,13 +3673,40 @@ class WorkspaceTools define('MEMCACHED_ENABLED', false); } $content = $this->getListContentMigrateTable(); + $contentQueries = []; foreach ($content as $className => $fields) { if (!in_array($className, $blackList)) { - $this->migrateContentWorkspace($className, $fields, $lang); + // Build class peer name + if (class_exists($className . 'Peer')) { + $classNamePeer = $className . 'Peer'; + } else { + $classNamePeer = $fields['peer']; + } + + // Build the query + $query = $this->generateUpdateFromContent($classNamePeer::TABLE_NAME, $fields, $lang); + + // Instantiate the class to execute the query in background + $contentQueries[] = new RunProcessUpgradeQuery($this->name, $query); + + // Add class to the control array $blackList[] = $className; } } + // Run queries in multiple threads + $processesManager = new ProcessesManager($contentQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + return $blackList; } From 80cd57e97aa94fce0d664a149d8770df5fb8f0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 16:17:21 -0400 Subject: [PATCH 077/100] PMC-573 --- workflow/engine/classes/WorkspaceTools.php | 159 +++++++++++++++------ 1 file changed, 115 insertions(+), 44 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3c239afa7..5eae87c8e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2420,6 +2420,13 @@ class WorkspaceTools * @param string $lang * * @return void + * + * @throws Exception + * + * @see \WorkspaceTools->upgrade + * @see \WorkspaceTools->restore + * @see workflow/engine/bin/tasks/cliWorkspaces.php:migrate_new_cases_lists() + * @link https://wiki.processmaker.com/3.3/processmaker_command#migrate-new-cases-lists */ public function migrateList($flagReinsert = false, $lang = 'en') { @@ -2432,7 +2439,7 @@ class WorkspaceTools return; } - $arrayTable1 = ['ListInbox', 'ListMyInbox', 'ListCanceled', 'ListParticipatedLast', 'ListParticipatedHistory', 'ListPaused']; + $arrayTable1 = ['ListCanceled', 'ListMyInbox', 'ListInbox', 'ListParticipatedHistory', 'ListPaused', 'ListParticipatedLast']; $arrayTable2 = ['ListUnassigned', 'ListUnassignedGroup']; $arrayTable = array_merge($arrayTable1, $arrayTable2); @@ -2457,23 +2464,57 @@ class WorkspaceTools } } + $listQueries = []; + if ($flagReinsert || !$flagListAll) { - $this->regenerateListCanceled($lang); - $this->regenerateListMyInbox(); //This list require no translation - $this->regenerateListInbox(); //This list require no translation - $this->regenerateListParticipatedHistory(); //This list require no translation - $this->regenerateListParticipatedLast(); //This list require no translation - $this->regenerateListPaused(); //This list require no translation + // Regenerate lists + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListCanceled($lang)); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListMyInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedHistory()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListPaused()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedLast()); } if ($flagReinsert || !$flagListUnassigned) { - $this->regenerateListUnassigned(); //This list require no translation + // This list always is truncated + $con = Propel::getConnection("workflow"); + $stmt = $con->createStatement(); + $stmt->executeQuery('TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'); + + // Regenerate list + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListUnassigned()); } + // Run queries in multiple threads + $processesManager = new ProcessesManager($listQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + + // This query cannot be launched in parallel, requires that the table already was populated + $this->updateListParticipatedLast(); + $this->listFirstExecution('insert'); $this->listFirstExecution('insert', 'unassigned'); } + /** + * Return query to populate canceled list + * + * @param string $lang + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListCanceled($lang = 'en') { $this->initPropel(true); @@ -2536,12 +2577,17 @@ class WorkspaceTools WHERE ACV.APP_STATUS = \'CANCELLED\' AND ACV.DEL_LAST_INDEX = 1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_CANCELED\n"); + + return $query; } + /** + * Return query to populate my inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListMyInbox() { $this->initPropel(true); @@ -2606,12 +2652,16 @@ class WorkspaceTools ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID WHERE ACV.DEL_INDEX=1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_MY_INBOX\n"); + return $query; } + /** + * Return query to populate inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListInbox() { $this->initPropel(true); @@ -2664,12 +2714,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS USR ON ACV.PREVIOUS_USR_UID = USR.USR_UID WHERE ACV.DEL_THREAD_STATUS = \'OPEN\''; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_INBOX\n"); + + return $query; } + /** + * Return query to populate participated history list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedHistory() { $this->initPropel(true); @@ -2722,12 +2777,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_HISTORY\n"); + + return $query; } + /** + * Return query to populate participated last list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedLast() { $this->initPropel(true); @@ -2803,10 +2863,18 @@ class WorkspaceTools ) ACV LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Inserted data into table LIST_PARTICIPATED_LAST\n"); + + return $query; + } + + /** + * Update participated last list + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListParticipatedLast() + { + $this->initPropel(true); $query = 'UPDATE ' . $this->dbName . '.LIST_PARTICIPATED_LAST LPL, ( SELECT TASK.TAS_TITLE, @@ -2832,18 +2900,19 @@ class WorkspaceTools LPL.DEL_CURRENT_USR_LASTNAME = IFNULL(USERS_VALUES.USR_LASTNAME, \'\'), LPL.DEL_CURRENT_TAS_TITLE = IFNULL(USERS_VALUES.TAS_TITLE, \'\') WHERE LPL.APP_UID = USERS_VALUES.APP_UID'; + + CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_LAST\n"); } /** - * This function overwrite the table LIST_PAUSED - * Get the principal information in the tables appDelay, appDelegation - * For the labels we use the tables user, process, task and application - * @return void + * Return query to populate paused list + * + * @return string + * + * @see \WorkspaceTools->migrateList() */ public function regenerateListPaused() { @@ -2922,17 +2991,22 @@ class WorkspaceTools APP_DELAY.APP_DISABLE_ACTION_USER = "0" AND APP_DELAY.APP_TYPE = "PAUSE" '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PAUSED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ + /** + * Return query to populate unassigned list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListUnassigned() { $this->initPropel(true); - $truncate = 'TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'; + //This executeQuery is very fast than Propel $query = 'INSERT INTO ' . $this->dbName . '.LIST_UNASSIGNED (APP_UID, @@ -2976,11 +3050,8 @@ class WorkspaceTools WHERE ACV.DEL_THREAD_STATUS = \'OPEN\' AND ACV.USR_UID = \'\' '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($truncate); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_UNASSIGNED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ From 3793f6f2fd57e8b2b389ec53b8810fc1d12d2bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 23 Apr 2019 09:42:25 -0400 Subject: [PATCH 078/100] PMC-594 --- .../engine/classes/MultipleFilesBackup.php | 20 +- workflow/engine/classes/WorkspaceTools.php | 245 ++++++++++-------- 2 files changed, 152 insertions(+), 113 deletions(-) diff --git a/workflow/engine/classes/MultipleFilesBackup.php b/workflow/engine/classes/MultipleFilesBackup.php index 8e06e5852..a3ee55cba 100644 --- a/workflow/engine/classes/MultipleFilesBackup.php +++ b/workflow/engine/classes/MultipleFilesBackup.php @@ -94,11 +94,21 @@ class MultipleFilesBackup } } - /* Restore from file(s) commpressed by letsBackup function, into a temporary directory - * @ filename got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. - * @ srcWorkspace contains the workspace to be restored. - * @ dstWorkspace contains the workspace to be overwriting. - * @ overwrite got the option true if the workspace will be overwrite. + /** + * Restore from file(s) compressed by letsBackup function, into a temporary directory + * + * @param string $filename Got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. + * @param string $srcWorkspace Contains the workspace to be restored. + * @param bool $dstWorkspace Contains the workspace to be overwriting. + * @param bool $overwrite Got the option true if the workspace will be overwrite. + * + * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces + * + * @deprecated Method outdated, only run the upgrade of APP_CACHE_VIEW table */ public static function letsRestore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true) { diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 5eae87c8e..adc7d7714 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -66,6 +66,23 @@ class WorkspaceTools 'UPDATE LIST_UNASSIGNED_GROUP SET USR_ID=(SELECT USR_ID FROM USERS WHERE USERS.USR_UID=LIST_UNASSIGNED_GROUP.USR_UID)', ); + public static $triggers = [ + 'APP_DELEGATION_UPDATE', + 'APPLICATION_UPDATE', + 'CONTENT_UPDATE' + ]; + public static $bigTables = [ + 'APPLICATION', + 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', + 'APP_CACHE_VIEW', + 'APP_DELEGATION', + 'APP_DELAY', + 'APP_DOCUMENT', + 'APP_HISTORY', + 'APP_MESSAGE', + 'GROUP_USER', + 'LOGIN_LOG' + ]; private $lastContentMigrateTable = false; private $listContentMigrateTable = []; @@ -249,18 +266,16 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); $start = microtime(true); - $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); - CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + $this->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', - 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; - CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); $start = microtime(true); - $this->deleteIndexes($bigTables); - CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + $this->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start to update CONTENT table...\n"); @@ -1854,7 +1869,7 @@ class WorkspaceTools } /** - * restore an archive into a workspace + * Restore a workspace * * Restores any database and files included in the backup, either as a new * workspace, or overwriting a previous one @@ -1865,8 +1880,13 @@ class WorkspaceTools * @param boolean $overwrite if you need overwrite the database * @param string $lang for define the language * @param string $port of database if is empty take 3306 + * @param array $optionMigrateHistoryData * * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces */ public static function restore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true, $lang = 'en', $port = '', $optionMigrateHistoryData = []) { @@ -2034,115 +2054,124 @@ class WorkspaceTools } } - $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $workspace->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating database...\n"); - $workspace->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - } - - $start = microtime(true); - CLI::logging("> Verify files enterprise old...\n"); - $workspace->verifyFilesOldEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify License Enterprise...\n"); - $workspace->verifyLicenseEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $workspace->checkMafeRequirements($workspaceName, $lang); - $stop = microtime(true); - CLI::logging("<*> Check Mafe Requirements Process took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating cache view...\n"); - $workspace->upgradeCacheView(true, true, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating cache view Process took " . ($stop - $start) . " seconds.\n"); - } else { - $workspace->upgradeTriggersOfTables(true, $lang); - } - - if ($pmVersion == '' && strpos(strtoupper($version), 'BRANCH')) { + if (empty($pmVersion) && strpos(strtoupper($version), 'BRANCH')) { $pmVersion = 'dev-version-backup'; } - //Move the labels of content to the corresponding table - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $workspace->migrateContent($workspace->name, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); + if (!empty($pmVersionWorkspaceToRestore) && (version_compare( + $pmVersionWorkspaceToRestore . "", + $pmVersion . "", + "<" + ) || empty($pmVersion)) || $pmVersion == "dev-version-backup" + ) { + // Upgrade the database schema and data + CLI::logging("* Start updating database schema...\n"); + $start = microtime(true); + $workspace->upgradeDatabase(); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Populate the new fields for replace string UID to Interger ID - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for APP_CACHE_VIEW...\n"); - $workspace->migratePopulateIndexingACV($workspace->name); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $workspace->checkMafeRequirements($workspaceName, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Move the data of cases to the corresponding List - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Updating List tables...\n"); - $workspace->migrateList($workspace->name, false, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating List Process took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); + $start = microtime(true); + $workspace->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $workspace->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); + $start = microtime(true); + $workspace->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - //Updating generated class files for PM Tables - passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspace->name); + $start = microtime(true); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $workspace->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); - $workspace->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); + $start = microtime(true); + $workspace->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $workspace->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start to update Files Manager...\n"); + $start = microtime(true); + $workspace->processFilesUpgrade($workspaceName); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start migrating and populating plugin singleton data...\n"); + $start = microtime(true); + $workspace->migrateSingleton($workspaceName); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to check Intermediate Email Event...\n"); + $start = microtime(true); + $workspace->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); + $start = microtime(true); + $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; + $workspace->clearDynContentHistoryData(false, $keepDynContent); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); + $start = microtime(true); + $workspace->migrateAppHistoryToAppDataChangeLog(false); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $workspace->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $workspace->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); + $start = microtime(true); + $workspace->upgradeSelfServiceData(); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($workspace->dbAdapter); + $workspace->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $workspace->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $workspace->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); + } + + CLI::logging("> Start To Verify License Enterprise...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); - $workspace->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + $workspace->verifyLicenseEnterprise($workspaceName); + CLI::logging("* End To Verify License Enterprise...(" . (microtime(true) - $start) . " seconds)\n"); + + // Updating generated class files for PM Tables + passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspaceName); } CLI::logging("Removing temporary files\n"); @@ -2318,7 +2347,7 @@ class WorkspaceTools CLI::logging(" Migrating Enterprise Core version...\n"); if (!file_exists($pathNewFile)) { CLI::logging(" Creating folder in $pathNewFile\n"); - G::mk_dir($newDiretory, 0777); + G::mk_dir($pathNewFile, 0777); } $shared_stat = stat(PATH_DATA); if (file_exists($pathDirectoryEnterprise)) { From 9f2a543c2d85d30982580cf667854901c40ed0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Jul 2019 10:36:22 -0400 Subject: [PATCH 079/100] Resolving conflicts after merge in develop the features related to Laravel 5.7 and MySQL 5.7 (Part 2) --- workflow/engine/classes/WorkspaceTools.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index cd70e65e7..14f117508 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -283,9 +283,8 @@ class WorkspaceTools $this->upgradeContent($workspace); CLI::logging("* End to update CONTENT table... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - CLI::logging("* Start to update CONTENT table...\n"); - $start = microtime(true); CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $start = microtime(true); $this->migrateContent($lang); CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . (microtime(true) - $start) . " seconds)\n"); @@ -354,12 +353,10 @@ class WorkspaceTools $this->upgradeSchema($systemSchema); CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start migrating to new list tables...\n"); $start = microtime(true); $this->migrateList(true, $lang); CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); @@ -2088,8 +2085,8 @@ class WorkspaceTools CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $start = microtime(true); $workspace->migrateContent($lang); CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . (microtime(true) - $start) . " seconds)\n"); @@ -2157,7 +2154,6 @@ class WorkspaceTools $start = microtime(true); $workspace->migrateList(true, $lang); CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); From 51dfa1c565e0af44f5c0ed9aebb5a7fc7c7e3be5 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 4 Jul 2019 13:25:42 -0400 Subject: [PATCH 080/100] PMC-895 --- .../ActionsByEmail/ResponseReader.php | 80 ++++++++++--------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php index 70a6fec03..c0fe78ccb 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail/ResponseReader.php @@ -132,46 +132,48 @@ class ResponseReader foreach ($mailsIds as $key => $mailId) { /** @var IncomingMail $mail */ $mail = $mailbox->getMail($mailId, false); - preg_match("/{(.*)}/", $mail->textPlain, $matches); - if ($matches) { - $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); - $dataAbeReq = loadAbeRequest($dataEmail['ABE_REQ_UID']); - if (config("system.workspace") === $dataEmail['workspace'] - && (array_key_exists('ABE_UID', $dataAbeReq) && $dataAbeReq['ABE_UID'] == $dataAbe['ABE_UID'])) { - $this->case = $dataEmail; - try { - $appDelegate = new AppDelegation(); - $alreadyRouted = $appDelegate->alreadyRouted($this->case["appUid"], $this->case["delIndex"]); - //Verify if the current case is already routed. - if ($alreadyRouted) { - $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ALREADY_ROUTED')); - throw (new Exception(G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'), 400)); + if (!empty($mail->textPlain)) { + preg_match("/{(.*)}/", $mail->textPlain, $matches); + if ($matches) { + $dataEmail = G::json_decode(Crypt::decryptString($matches[1]), true); + $dataAbeReq = loadAbeRequest($dataEmail['ABE_REQ_UID']); + if (config("system.workspace") === $dataEmail['workspace'] + && (array_key_exists('ABE_UID', $dataAbeReq) && $dataAbeReq['ABE_UID'] == $dataAbe['ABE_UID'])) { + $this->case = $dataEmail; + try { + $appDelegate = new AppDelegation(); + $alreadyRouted = $appDelegate->alreadyRouted($this->case["appUid"], $this->case["delIndex"]); + //Verify if the current case is already routed. + if ($alreadyRouted) { + $this->setMessageResponseError(G::LoadTranslation('ID_ABE_RESPONSE_ALREADY_ROUTED')); + throw (new Exception(G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'), 400)); + } + $this->processABE($this->case, $mail, $dataAbe); + $mailbox->markMailAsRead($mailId); + Bootstrap::registerMonolog( + $this->channel, + 100, // DEBUG + G::LoadTranslation('ID_ABE_LOG_PROCESSED_OK'), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); + } catch (Exception $e) { + $this->sendMessageError( + $this->getMessageResponseError() ? $this->getMessageResponseError() : $e->getMessage(), + $this->case, + $mail, + $emailSetup + ); + Bootstrap::registerMonolog( + $this->channel, + $e->getCode() != 0 ? $e->getCode() : 400, + $e->getMessage(), + $this->case, + config("system.workspace"), + 'processmaker.log' + ); } - $this->processABE($this->case, $mail, $dataAbe); - $mailbox->markMailAsRead($mailId); - Bootstrap::registerMonolog( - $this->channel, - 100, // DEBUG - G::LoadTranslation('ID_ABE_LOG_PROCESSED_OK'), - $this->case, - config("system.workspace"), - 'processmaker.log' - ); - } catch (Exception $e) { - $this->sendMessageError( - $this->getMessageResponseError() ? $this->getMessageResponseError() : $e->getMessage(), - $this->case, - $mail, - $emailSetup - ); - Bootstrap::registerMonolog( - $this->channel, - $e->getCode() != 0 ? $e->getCode() : 400, - $e->getMessage(), - $this->case, - config("system.workspace"), - 'processmaker.log' - ); } } } From d7f50269fecc67d526a58884e92a5ef67d0b81c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 13:36:08 -0400 Subject: [PATCH 081/100] PMC-565 --- bootstrap/classaliasmap.php | 1 - workflow/engine/bin/tasks/cliUpgrade.php | 287 +++++++++--------- workflow/engine/bin/tasks/cliWorkspaces.php | 85 +----- workflow/engine/classes/Upgrade.php | 128 -------- workflow/engine/classes/WorkspaceTools.php | 273 ++++++++--------- .../engine/classes/model/AddonsManager.php | 8 +- .../engine/src/ProcessMaker/Core/System.php | 33 -- 7 files changed, 268 insertions(+), 547 deletions(-) delete mode 100644 workflow/engine/classes/Upgrade.php diff --git a/bootstrap/classaliasmap.php b/bootstrap/classaliasmap.php index 62e24f3f0..734997540 100644 --- a/bootstrap/classaliasmap.php +++ b/bootstrap/classaliasmap.php @@ -80,7 +80,6 @@ return array( 'ToolBar' => ToolBar::class, 'Tree' => PmTree::class, 'triggerLibrary' => TriggerLibrary::class, - 'Upgrade' => Upgrade::class, 'workspaceTools' => WorkspaceTools::class, 'wsBase' => WsBase::class, 'wsResponse' => WsResponse::class, diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index a1d181dcf..d09d3adff 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -5,14 +5,16 @@ use ProcessMaker\Core\System; CLI::taskName('upgrade'); CLI::taskDescription("Upgrade workspaces.\n\n This command should be run after upgrading ProcessMaker to a new version so that all workspaces are also upgraded to the\n new version."); - +CLI::taskOpt('child', "Used by the main upgrade thread", 'child', 'child'); CLI::taskOpt('buildACV', 'If this option is enabled, the Cache View is built.', 'ACV', 'buildACV'); CLI::taskOpt('noxml', 'If this option is enabled, the XML files translation is not built.', 'NoXml', 'no-xml'); +CLI::taskOpt('nomafe', 'If this option is enabled, the MAFE files translation is not built.', 'nomafe', 'no-mafe'); /*----------------------------------********---------------------------------*/ CLI::taskOpt('keep_dyn_content', "Include the DYN_CONTENT_HISTORY value. Ex: --keep_dyn_content", 'i', 'keep_dyn_content'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_upgrade"); /*----------------------------------********---------------------------------*/ + CLI::taskName('unify-database'); CLI::taskDescription( << $workspace) { - $oneWorkspace = $workspace->name; + // Initializing variables + $globalStartTime = microtime(true); + $numberOfWorkspaces = count($workspaces); + $countWorkspace = 1; + + if ($printHF) { + // Set upgrade flag + if (count($workspaces) === 1) { + // For the specific workspace send in the command + G::isPMUnderUpdating(1, $workspaces[0]->name); + } else { + // For all workspaces + G::isPMUnderUpdating(1); } + + // Print information when start the upgrade process + CLI::logging('UPGRADE LOG INITIALIZED', PROCESSMAKER_PATH . 'upgrade.log'); + CLI::logging("UPGRADE STARTED\n"); } - $flag = G::isPMUnderUpdating(1, $oneWorkspace); - //start to upgrade - $checksum = System::verifyChecksum(); - if ($checksum === false) { - CLI::logging(CLI::error("checksum.txt not found, integrity check is not possible") . "\n"); - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } else { - if (!empty($checksum['missing'])) { - CLI::logging(CLI::error("The following files were not found in the installation:")."\n"); - foreach ($checksum['missing'] as $missing) { - CLI::logging(" $missing\n"); + + foreach ($workspaces as $workspace) { + if ($mainThread) { + CLI::logging("FOLDERS AND FILES OF THE SYSTEM\n"); + // Upgrade actions for global files + CLI::logging("* Start cleaning compiled folder...\n"); + $start = microtime(true); + if (defined('PATH_C')) { + G::rm_dir(PATH_C); + G::mk_dir(PATH_C, 0777); } - } - if (!empty($checksum['diff'])) { - CLI::logging(CLI::error("The following files have modifications:")."\n"); - foreach ($checksum['diff'] as $diff) { - CLI::logging(" $diff\n"); + CLI::logging("* End cleaning compiled folder...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to remove deprecated files...\n"); + $start = microtime(true); + $workspace->removeDeprecatedFiles(); + CLI::logging("* End to remove deprecated files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking Enterprise folder/files...\n"); + $start = microtime(true); + $workspace->verifyFilesOldEnterprise(); + CLI::logging("* End checking Enterprise folder/files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking framework paths...\n"); + $start = microtime(true); + $workspace->checkFrameworkPaths(); + CLI::logging("* End checking framework paths...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start fixing serialized instance in serverConf.singleton file...\n"); + $start = microtime(true); + $serverConf = ServerConf::getSingleton(); + $serverConf->updateClassNameInFile(); + CLI::logging("* End fixing serialized instance in serverConf.singleton file...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...\n"); + $start = microtime(true); + G::browserCacheFilesSetUid(); + CLI::logging("* End the safe upgrade for javascript files cached by the browser (Maborak, ExtJs)...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to backup patch files...\n"); + $arrayPatch = glob(PATH_TRUNK . 'patch-*'); + if ($arrayPatch) { + foreach ($arrayPatch as $value) { + if (file_exists($value)) { + // Copy patch content + $names = pathinfo($value); + $nameFile = $names['basename']; + + $contentFile = file_get_contents($value); + $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); + CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); + + // Move patch file + $newFile = PATH_DATA . $nameFile; + G::rm_dir($newFile); + copy($value, $newFile); + G::rm_dir($value); + } + } } - } - if (!(empty($checksum['missing']) || empty($checksum['diff']))) { - if (!CLI::question("Integrity check failed, do you want to continue the upgrade?")) { - CLI::logging("Upgrade failed\n"); - $flag = G::isPMUnderUpdating(0); - die(); - } - } - } - CLI::logging("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - G::mk_dir(PATH_C, 0777); - } + CLI::logging("* End to backup patch files...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - $count = count($workspaces); - $first = true; - $errors = false; - $countWorkspace = 0; - $buildCacheView = array_key_exists('buildACV', $args); - $flagUpdateXml = !array_key_exists('noxml', $args); - $optionMigrateHistoryData = [ - /*----------------------------------********---------------------------------*/ - 'keepDynContent' => array_key_exists('keep_dyn_content', $args) - /*----------------------------------********---------------------------------*/ - ]; + CLI::logging("* Start to backup log files...\n"); + $start = microtime(true); + $workspace->backupLogFiles(); + CLI::logging("* End to backup log files... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - foreach ($workspaces as $index => $workspace) { - if (empty(config("system.workspace"))) { - define("SYS_SYS", $workspace->name); - config(["system.workspace" => $workspace->name]); + // The previous actions should be executed only the first time + $mainThread = false; } + if ($numberOfWorkspaces === 1) { + // Displaying information of the current workspace to upgrade + CLI::logging("UPGRADING DATABASE AND FILES OF WORKSPACE '{$workspace->name}' ($countWorkspace/$numberOfWorkspaces)\n"); - if (!defined("PATH_DATA_SITE")) { - define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP); - } + // Build parameters + $arrayOptTranslation = [ + 'updateXml' => $updateXmlForms, + 'updateMafe' => $updateMafe + ]; + $optionMigrateHistoryData = [ + 'keepDynContent' => $keepDynContent + ]; - if (!defined('DB_ADAPTER')) { - define('DB_ADAPTER', 'mysql'); - } - - try { - $countWorkspace++; - CLI::logging("Upgrading workspaces ($countWorkspace/$count): " . CLI::info($workspace->name) . "\n"); - $workspace->upgrade($buildCacheView, $workspace->name, false, 'en', ['updateXml' => $flagUpdateXml, 'updateMafe' => $first], $optionMigrateHistoryData); + // Upgrade database and files from a specific workspace + $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - CLI::logging("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - $errors = true; + } else { + // Build arguments + $args = '--child'; + $args .= $updateXmlForms ? '' : ' --no-xml'; + $args .= $updateMafe ? '' : ' --no-mafe'; + $args .= $keepDynContent ? ' --keep_dyn_content' : ''; + + // Build and execute command in another thread + $command = PHP_BINARY . ' processmaker upgrade ' . $args . ' ' . $workspace->name; + passthru($command); } + + // After the first execution is required set this values to false + $updateXmlForms = false; + $updateMafe = false; + + // Increment workspaces counter + $countWorkspace++; } - //Verify the information of the singleton ServConf by changing the name of the class if is required. - CLI::logging("\nCheck/Fix serialized instance in serverConf.singleton file\n\n"); - $serverConf = ServerConf::getSingleton(); - $serverConf->updateClassNameInFile(); + if ($printHF) { + // Print information when finish the upgrade process + CLI::logging('UPGRADE FINISHED (Completed on ' . (microtime(true) - $globalStartTime) . + ' seconds), ProcessMaker ' . System::getVersion() . ' installed)' . "\n\n"); - // SAVE Upgrades/Patches - $arrayPatch = glob(PATH_TRUNK . 'patch-*'); - - if ($arrayPatch) { - foreach ($arrayPatch as $value) { - if (file_exists($value)) { - // copy content the patch - $names = pathinfo($value); - $nameFile = $names['basename']; - - $contentFile = file_get_contents($value); - $contentFile = preg_replace("[\n|\r|\n\r]", '', $contentFile); - CLI::logging($contentFile . ' installed (' . $nameFile . ')', PATH_DATA . 'log/upgrades.log'); - - // move file of patch - $newFile = PATH_DATA . $nameFile; - G::rm_dir($newFile); - copy($value, $newFile); - G::rm_dir($value); - } - } - } else { - CLI::logging('ProcessMaker ' . System::getVersion(). ' installed', PATH_DATA . 'log/upgrades.log'); + // Delete upgrade flag + G::isPMUnderUpdating(0); } - - //Safe upgrade for JavaScript files - CLI::logging("\nSafe upgrade for files cached by the browser\n\n"); - - G::browserCacheFilesSetUid(); - - //Status - if ($errors) { - CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n"); - CLI::logging(CLI::error("Please check the log above to correct any issues.") . "\n"); - } else { - CLI::logging("Upgrade successful\n"); - } - - //setting flag to false - $flag = G::isPMUnderUpdating(0); } -function listFiles($dir) -{ - $files = array(); - $lista = glob($dir.'/*'); - foreach ($lista as $valor) { - if (is_dir($valor)) { - $inner_files = listFiles($valor); - if (is_array($inner_files)) { - $files = array_merge($files, $inner_files); - } - } - if (is_file($valor)) { - array_push($files, $valor); - } - } - return $files; -} /*----------------------------------********---------------------------------*/ function run_unify_database($args) { diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 13df97e38..518d9d5a5 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -106,26 +106,6 @@ EOT CLI::taskArg('workspace', true, true); CLI::taskRun("run_plugins_database_upgrade"); -CLI::taskName('workspace-upgrade'); -CLI::taskDescription(<<name); - } - } -} - -/** - * This function is executed only by one workspace, for the command workspace-upgrade - * - * @param array $args, workspace name for to apply the upgrade - * @param array $opts, specify additional arguments for language, flag for buildACV, flag for noxml - * - * @return void - */ -function workspace_upgrade($args, $opts) { - $first = true; - $workspaces = get_workspaces_from_args($args); - $lang = array_key_exists("lang", $opts) ? $opts['lang'] : 'en'; - $buildCacheView = array_key_exists('buildACV', $opts); - $flagUpdateXml = !array_key_exists('noxml', $opts); - - $wsName = $workspaces[key($workspaces)]->name; - Bootstrap::setConstantsRelatedWs($wsName); - //Loop, read all the attributes related to the one workspace - foreach ($workspaces as $workspace) { - try { - $workspace->upgrade( - $buildCacheView, - $workspace->name, - false, - $lang, - ['updateXml' => $flagUpdateXml, 'updateMafe' => $first] - ); - $first = false; - $flagUpdateXml = false; - } catch (Exception $e) { - G::outRes("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); - } - } -} - /** * 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 @@ -1210,7 +1127,7 @@ function migrate_content($args, $opts) foreach ($workspaces as $workspace) { print_r('Regenerating content in: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); CLI::logging("-> Regenerating content \n"); - $workspace->migrateContentRun($workspace->name, $lang); + $workspace->migrateContentRun($lang); } $stop = microtime(true); CLI::logging("<*> Optimizing content data Process took " . ($stop - $start) . " seconds.\n"); diff --git a/workflow/engine/classes/Upgrade.php b/workflow/engine/classes/Upgrade.php deleted file mode 100644 index 67fa51dcf..000000000 --- a/workflow/engine/classes/Upgrade.php +++ /dev/null @@ -1,128 +0,0 @@ -addon = $addon; - } - - public function install() - { - - $filter = new InputFilter(); - $start = microtime(1); - $filename = $this->addon->getDownloadFilename(); - $time = microtime(1); - - $archive = new Archive_Tar ($filename); - $time = microtime(1); - $extractDir = dirname($this->addon->getDownloadFilename()) . "/extract"; - $extractDir = $filter->xssFilterHard($extractDir); - $backupDir = dirname($this->addon->getDownloadFilename()) . "/backup"; - $backupDir = $filter->xssFilterHard($backupDir); - if (file_exists($extractDir)) { - G::rm_dir($extractDir); - } - if (file_exists($backupDir)) { - G::rm_dir($backupDir); - } - if (!is_dir($backupDir)) { - mkdir($backupDir); - } - - $time = microtime(1); - echo "Extracting files...\n"; - $archive->extractModify($extractDir, 'processmaker'); - $checksumFile = file_get_contents("$extractDir/checksum.txt"); - $time = microtime(1); - $checksums = array(); - foreach (explode("\n", $checksumFile) as $line) { - $checksums[trim(substr($line, 33))] = substr($line, 0, 32); - } - - $checksum = array(); - $changedFiles = array(); - $time = microtime(1); - $files = $this->ls_dir($extractDir); - - echo "Updating ProcessMaker files...\n"; - $time = microtime(1); - $checksumTime = 0; - foreach ($checksums as $filename => $checksum) { - if (is_dir("$extractDir/$filename")) { - $filename = $filter->xssFilterHard($filename); - print $filename; - continue; - } - $installedFile = PATH_TRUNK . "/$filename"; - if (!file_exists($installedFile)) { - $installedMD5 = ""; - } else { - $time = microtime(1); - $installedMD5 = G::encryptFileOld($installedFile); - $checksumTime += microtime(1) - $time; - } - $archiveMD5 = $checksum; - if (strcasecmp($archiveMD5, $installedMD5) != 0) { - $changedFiles[] = $filename; - if (!is_dir(dirname($backupDir.'/'.$filename))) { - mkdir(dirname($backupDir.'/'.$filename), 0777, true); - } - if (file_exists($installedFile) && is_file($installedFile)) { - copy($installedFile, $backupDir.'/'.$filename); - } - if (!is_dir(dirname($installedFile))) { - mkdir(dirname($installedFile), 0777, true); - } - if (!copy("$extractDir/$filename", $installedFile)) { - throw new Exception("Could not overwrite '$filename'"); - } - } - } - - printf("Updated %d files\n", count($changedFiles)); - printf("Clearing cache...\n"); - if (defined('PATH_C')) { - G::rm_dir(PATH_C); - mkdir(PATH_C, 0777, true); - } - $workspaces = System::listWorkspaces(); - $count = count($workspaces); - $first = true; - $num = 0; - foreach ($workspaces as $index => $workspace) { - try { - $num += 1; - printf("Upgrading workspaces ($num/$count): {$workspace->name}\n"); - $workspace->upgrade(false, config("system.workspace"), false, 'en', ['updateXml' => $first, 'updateMafe' => $first]); - $workspace->close(); - $first = false; - } catch (Exception $e) { - printf("Errors upgrading workspace {$workspace->name}: {$e->getMessage()}\n"); - } - } - } - - private function ls_dir($dir, $basename = null) - { - $files = array(); - if ($basename == null) { - $basename = $dir; - } - foreach (glob("$dir/*") as $filename) { - if (is_dir($filename)) { - $files = array_merge($files, $this->ls_dir($filename, $basename)); - } else { - $files[] = substr($filename, strlen($basename) + 1); - } - } - return $files; - } - -} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 62a3713a5..cdd9e075e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -218,160 +218,115 @@ class WorkspaceTools /** * Upgrade this workspace to the latest system version * - * @param bool $buildCacheView - * @param string $workSpace + * @param string $workspace * @param bool $onedb * @param string $lang * @param array $arrayOptTranslation + * @param array $optionMigrateHistoryData * * @return void */ - public function upgrade($buildCacheView = false, $workSpace = null, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; } + CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $this->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating database...\n"); $this->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating translations...\n"); $start = microtime(true); - CLI::logging("> Check Intermediate Email Event...\n"); - $this->checkIntermediateEmailEvent(); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify enterprise old...\n"); - $this->verifyFilesOldEnterprise($workSpace); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Updating translations...\n"); $this->upgradeTranslation($arrayOptTranslation['updateXml'], $arrayOptTranslation['updateMafe']); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Translations Process took $final seconds.\n"); + CLI::logging("* End updating translations...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $this->checkMafeRequirements($workspace, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to update CONTENT table...\n"); + $start = microtime(true); + $this->upgradeContent($workspace); + CLI::logging("* End to update CONTENT table... (Completed on " . (microtime(true) - $start) . " seconds)\n"); $start = microtime(true); - CLI::logging("> Updating Content...\n"); - $this->upgradeContent($workSpace); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Content Process took $final seconds.\n"); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $this->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $this->checkMafeRequirements($workSpace, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Check Mafe Requirements Process took $final seconds.\n"); + $this->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update Files Manager...\n"); $start = microtime(true); - CLI::logging("> Updating Triggers...\n"); - $this->updateTriggers(true, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Updating Triggers Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Backup log files...\n"); - $this->backupLogFiles(); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Backup log files Process took $final seconds.\n"); - - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $this->migrateContent($workSpace, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); - $this->migratePopulateIndexingACV($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + $this->processFilesUpgrade($workspace); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); $start = microtime(true); - CLI::logging("> Migrate new lists...\n"); - $this->migrateList($workSpace, false, $lang); - $stop = microtime(true); - $final = $stop - $start; - CLI::logging("<*> Migrate new lists Process took $final seconds.\n"); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $this->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + $this->migrateSingleton($workspace); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning expired tokens...\n"); $start = microtime(true); - CLI::logging("> Clean access and refresh tokens...\n"); - $this->cleanTokens($workSpace); - $stop = microtime(true); - CLI::logging("<*> Clean access and refresh tokens took " . ($stop - $start) . " seconds.\n"); + $this->cleanTokens(); + CLI::logging("* End cleaning expired tokens...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to check Intermediate Email Event...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data...\n"); - $this->migrateSelfServiceRecordsRun($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating Self-Service records Process took " . ($stop - $start) . " seconds.\n"); + $this->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); $start = microtime(true); - CLI::logging("> Updating rows in Web Entry table for classic processes...\n"); - $this->updatingWebEntryClassicModel($workSpace); - $stop = microtime(true); - CLI::logging("<*> Updating rows in Web Entry table for classic processes took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Update framework paths...\n"); - $this->updateFrameworkPaths($workSpace); - $stop = microtime(true); - CLI::logging("<*> Update framework paths took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Migrating and populating plugin singleton data...\n"); - $this->migrateSingleton($workSpace); - $stop = microtime(true); - CLI::logging("<*> Migrating and populating plugin singleton data took " . ($stop - $start) . " seconds.\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); $this->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $this->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); + $this->migrateAppHistoryToAppDataChangeLog(true); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $this->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $this->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); $this->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $this->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); } /** @@ -391,6 +346,9 @@ class WorkspaceTools CLI::logging("<*> Database Upgrade Structure Process took $final seconds.\n"); } + /** + * Update the email events with the current email server + */ public function checkIntermediateEmailEvent() { $oEmailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); @@ -629,9 +587,11 @@ class WorkspaceTools } /** - * Upgrade this workspace Content. + * Upgrade this workspace Content + * * @param string $workspace * @param boolean $executeRegenerateContent + * * @return void */ public function upgradeContent($workspace = null, $executeRegenerateContent = false) @@ -683,7 +643,7 @@ class WorkspaceTools } /** - * Upgrade this workspace translations from all avaliable languages. + * Upgrade the workspace translations from all available languages * * @param bool $flagXml Update XML * @param bool $flagMafe Update MAFE @@ -1055,10 +1015,12 @@ class WorkspaceTools } /** - * Upgrade this workspace database to the latest system schema + * Upgrade the workspace database to the latest system schema * - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool upgradeSchema for more information + * @param bool $onedb Was installed in one DB or not + * @param bool $checkOnly Only check if the upgrade is needed if true + * + * @return bool upgradeSchema */ public function upgradeDatabase($onedb = false, $checkOnly = false) { @@ -2173,6 +2135,9 @@ class WorkspaceTools return $result; } + /** + * Backup the log files + */ public function backupLogFiles() { $config = System::getSystemConfiguration(); @@ -2189,6 +2154,12 @@ class WorkspaceTools } } + /** + * Check if the workspace have the clients used by MAFE registered + * + * @param string $workspace + * @param string $lang + */ public function checkMafeRequirements($workspace, $lang) { $this->initPropel(true); @@ -2265,9 +2236,8 @@ class WorkspaceTools return true; } - public function verifyFilesOldEnterprise($workspace) + public function verifyFilesOldEnterprise() { - $this->initPropel(true); $pathBackup = PATH_DATA . 'backups'; if (!file_exists($pathBackup)) { G::mk_dir($pathBackup, 0777); @@ -2381,12 +2351,12 @@ class WorkspaceTools /** * Migrate all cases to New list * - * @param string $workSpace Workspace * @param bool $flagReinsert Flag that specifies the re-insertion + * @param string $lang * * @return void */ - public function migrateList($workSpace, $flagReinsert = false, $lang = 'en') + public function migrateList($flagReinsert = false, $lang = 'en') { $this->initPropel(true); @@ -3034,19 +3004,21 @@ class WorkspaceTools } /** - * Process-Files upgrade + * Process files upgrade, store the information in the DB + * + * @param string $workspace * * return void */ - public function processFilesUpgrade() + public function processFilesUpgrade($workspace) { try { if (!defined("PATH_DATA_MAILTEMPLATES")) { - define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates" . PATH_SEP); + define("PATH_DATA_MAILTEMPLATES", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "mailTemplates" . PATH_SEP); } if (!defined("PATH_DATA_PUBLIC")) { - define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public" . PATH_SEP); + define("PATH_DATA_PUBLIC", PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP . "public" . PATH_SEP); } $this->initPropel(true); @@ -3559,8 +3531,12 @@ class WorkspaceTools return $response; } - - public function migrateContent($workspace, $lang = SYS_LANG) + /** + * Migrate texts/values from "CONTENT" table to the corresponding object tables + * + * @param string $lang + */ + public function migrateContent($lang = SYS_LANG) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3573,7 +3549,7 @@ class WorkspaceTools $blackList = $oConfig['CFG_VALUE'] == 'true' ? array('Groupwf', 'Process', 'Department', 'Task', 'InputDocument', 'Application') : unserialize($oConfig['CFG_VALUE']); } - $blackList = $this->migrateContentRun($workspace, $lang, $blackList); + $blackList = $this->migrateContentRun($lang, $blackList); $data["CFG_UID"] = 'MIGRATED_CONTENT'; $data["OBJ_UID"] = 'content'; $data["CFG_VALUE"] = serialize($blackList); @@ -3640,13 +3616,14 @@ class WorkspaceTools } /** - * Migration + * Migrate from "CONTENT" table to the corresponding object tables + * + * @param string $lang + * @param array $blackList * - * @param $workspace - * @param mixed|string $lang * @return array */ - public function migrateContentRun($workspace, $lang = SYS_LANG, $blackList = array()) + public function migrateContentRun($lang = SYS_LANG, $blackList = []) { if ((!class_exists('Memcache') || !class_exists('Memcached')) && !defined('MEMCACHED_ENABLED')) { define('MEMCACHED_ENABLED', false); @@ -3662,7 +3639,10 @@ class WorkspaceTools return $blackList; } - public function cleanTokens($workspace, $lang = SYS_LANG) + /** + * Clean the expired access and refresh tokens + */ + public function cleanTokens() { $this->initPropel(true); $oCriteria = new Criteria(); @@ -3750,7 +3730,10 @@ class WorkspaceTools } } - public function migrateSelfServiceRecordsRun($workspace) + /** + * Migrate the concatenated strings with UIDs from groups to the table "APP_ASSIGN_SELF_SERVICE_VALUE_GROUP" + */ + public function migrateSelfServiceRecordsRun() { // Initializing $this->initPropel(true); @@ -3797,7 +3780,10 @@ class WorkspaceTools CLI::logging(" Migrating Self-Service by Value Cases Done \n"); } - public function migratePopulateIndexingACV($workspace) + /** + * Populate new fields used for avoiding the use of the "APP_CACHE_VIEW" table + */ + public function migratePopulateIndexingACV() { // Migrating and populating new indexes CLI::logging("-> Migrating an populating indexing for avoiding the use of table APP_CACHE_VIEW Start \n"); @@ -4062,9 +4048,10 @@ class WorkspaceTools * It populates the WEB_ENTRY table for the classic processes, this procedure * is done to verify the execution of php files generated when the WebEntry * is configured. - * @param type $workSpace + * + * @param bool $force */ - public function updatingWebEntryClassicModel($workSpace, $force = false) + public function updatingWebEntryClassicModel($force = false) { //We obtain from the configuration the list of proUids obtained so that //we do not go through again. @@ -4160,8 +4147,9 @@ class WorkspaceTools /** * Updating triggers - * @param $flagRecreate - * @param $lang + * + * @param bool $flagRecreate + * @param string $lang */ public function updateTriggers($flagRecreate, $lang) { @@ -4170,6 +4158,8 @@ class WorkspaceTools } /** + * Migrate the data of the "plugin.singleton" file to the "PLUGIN_REGISTRY" table + * * @param $workspace */ public function migrateSingleton($workspace) @@ -4215,14 +4205,11 @@ class WorkspaceTools } /** - * Updating framework directory structure + * Check/Create framework's directories * */ - private function updateFrameworkPaths($workSpace = null) + public function checkFrameworkPaths() { - if ($workSpace === null) { - $workSpace = config("system.workspace"); - } $paths = [ PATH_DATA . 'framework' => 0770, PATH_DATA . 'framework' . DIRECTORY_SEPARATOR . 'cache' => 0770, diff --git a/workflow/engine/classes/model/AddonsManager.php b/workflow/engine/classes/model/AddonsManager.php index 06d16fedb..10691d3ac 100644 --- a/workflow/engine/classes/model/AddonsManager.php +++ b/workflow/engine/classes/model/AddonsManager.php @@ -385,13 +385,7 @@ class AddonsManager extends BaseAddonsManager $this->setState(); } else { - if ($this->getAddonType() == "core") { - $upgrade = new Upgrade($this); - - $upgrade->install(); - } else { - throw new Exception("Addon type {$this->getAddonType()} not supported."); - } + throw new Exception("Addon type {$this->getAddonType()} not supported."); } } diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 36e3061ed..15e957e7d 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -243,39 +243,6 @@ class System return $items; } - /** - * Review the checksum.txt - * - * @return array $result - */ - public static function verifyChecksum() - { - if (!file_exists(PATH_TRUNK . "checksum.txt")) { - return false; - } - $lines = explode("\n", file_get_contents(PATH_TRUNK . "checksum.txt")); - $result = array("diff" => array(), "missing" => array() - ); - foreach ($lines as $line) { - if (empty($line)) { - continue; - } - list ($checksum, $empty, $filename) = explode(" ", $line); - //Skip xmlform because these files always change. - if (strpos($filename, "/xmlform/") !== false) { - continue; - } - if (file_exists(realpath($filename))) { - if (strcmp($checksum, G::encryptFileOld(realpath($filename))) != 0) { - $result['diff'][] = $filename; - } - } else { - $result['missing'][] = $filename; - } - } - return $result; - } - /** * This function checks files to do updated to pm * From e7f8411241eb2cee909abcc9869be04d712b4737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 18 Mar 2019 16:17:23 -0400 Subject: [PATCH 082/100] PMC-568 --- gulliver/system/class.database_mysql.php | 12 ++++++++++++ workflow/engine/classes/WorkspaceTools.php | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 8191f51db..0bae312f0 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1012,4 +1012,16 @@ class database extends database_base } return $flag; } + + /** + * Generate drop trigger SQL + * + * @param string $triggerName + * + * @return string + */ + public function getDropTrigger($triggerName) + { + return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; + } } diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index cdd9e075e..bb16c28b9 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4544,4 +4544,25 @@ class WorkspaceTools } } } + + /** + * Delete the triggers MySQL that causes performance issues in the upgrade process + */ + public function deleteTriggersMySql($triggersToDelete) + { + // Initialize Propel + $this->initPropel(true); + $con = Propel::getConnection('workflow'); + + // Get statement instance + $stmt = $con->createStatement(); + + // Get MySQL DB instance class + $dbInstance = $this->getDatabase(); + + // Remove triggers MySQL + foreach ($triggersToDelete as $triggerName) { + $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); + } + } } From c75b943e2643bb3493bf818f0bdd25cba18ccb4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 12:31:29 -0400 Subject: [PATCH 083/100] PMC-569 --- workflow/engine/classes/WorkspaceTools.php | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index bb16c28b9..c1e210b4e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4565,4 +4565,30 @@ class WorkspaceTools $stmt->executeQuery($dbInstance->getDropTrigger($triggerName)); } } + + /** + * Delete indexes of specific tables + * + * @param array $tables + */ + public function deleteIndexes($tables) + { + // Get MySQL DB instance class + $database = $this->getDatabase(); + + foreach ($tables as $table) { + // Get all indexes of the table + $indexes = $database->executeQuery($database->generateTableIndexSQL($table)); + $indexesDeleted = []; + foreach ($indexes as $index) { + if ($index['Key_name'] != 'PRIMARY') { + if (!in_array($index['Key_name'], $indexesDeleted)) { + // Remove index + $database->executeQuery($database->generateDropKeySQL($table, $index['Key_name'])); + $indexesDeleted[] = $index['Key_name']; + } + } + } + } + } } From 7dd91f867c0596f5d8d8cac7c0e448a50a6f62e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 14:34:05 -0400 Subject: [PATCH 084/100] PMC-574 --- workflow/engine/classes/WorkspaceTools.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index c1e210b4e..615a9a2e2 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -247,6 +247,20 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + $start = microtime(true); + $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); + CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', + 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + $start = microtime(true); + $this->deleteIndexes($bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start to update CONTENT table...\n"); $start = microtime(true); $this->upgradeContent($workspace); From 90a7b778a1c8079d0c358f3216dcda418b35b8b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Wed, 20 Mar 2019 10:58:58 -0400 Subject: [PATCH 085/100] PMC-596 --- gulliver/system/class.database_mysql.php | 71 +++++++++++ workflow/engine/bin/tasks/cliUpgrade.php | 2 +- workflow/engine/classes/WorkspaceTools.php | 142 ++++++++++++--------- 3 files changed, 152 insertions(+), 63 deletions(-) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 0bae312f0..870ba954f 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1024,4 +1024,75 @@ class database extends database_base { return "DROP TRIGGER IF EXISTS `{$triggerName}`;"; } + + /** + * Generate alter table with or without adding the indexes + * + * @param string $tableName + * @param array $columns + * @param array $indexes + * + * @return string + */ + public function generateAddColumnsSql($tableName, $columns, $indexes = []) + { + $indexesAlreadyAdded = []; + $sql = 'ALTER TABLE ' . $this->sQuoteCharacter . $tableName . $this->sQuoteCharacter . ' '; + foreach ($columns as $columnName => $parameters) { + if (isset($parameters['Type']) && isset($parameters['Null'])) { + $sql .= 'ADD COLUMN ' . $this->sQuoteCharacter . $columnName . $this->sQuoteCharacter . ' ' . $parameters['Type']; + if ($parameters['Null'] == 'YES') { + $sql .= ' NULL'; + } else { + $sql .= ' NOT NULL'; + } + } + if (isset($parameters['AutoIncrement']) && $parameters['AutoIncrement']) { + $sql .= ' AUTO_INCREMENT'; + } + if (isset($parameters['PrimaryKey']) && $parameters['PrimaryKey']) { + $sql .= ' PRIMARY KEY'; + $indexesAlreadyAdded[] = $columnName; + } + if (isset($parameters['Unique']) && $parameters['Unique']) { + $sql .= ' UNIQUE'; + } + + // We need to check the property AI + if (isset($parameters['AI'])) { + if ($parameters['AI'] == 1) { + $sql .= ' AUTO_INCREMENT'; + } else { + if ($parameters['Default'] != '') { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + } else { + if (isset($parameters['Default'])) { + $sql .= " DEFAULT '" . $parameters['Default'] . "'"; + } + } + $sql .= ', '; + } + foreach ($indexes as $indexName => $indexColumns) { + $indexType = 'INDEX'; + if ($indexName === 'primaryKey' || $indexName === 'PRIMARY') { + $indexType = 'PRIMARY'; + $indexName = 'KEY'; + // If is primary key is not needed add a new index, the column already was added like primary key + if (count($indexColumns) == 1 && $indexesAlreadyAdded == $indexColumns) { + continue; + } + } + $sql .= 'ADD ' . $indexType . ' ' . $indexName . ' ('; + foreach ($indexColumns as $column) { + $sql .= $this->sQuoteCharacter . $column . $this->sQuoteCharacter . ', '; + } + $sql = substr($sql, 0, -2); + $sql .= '), '; + } + $sql = rtrim($sql, ', '); + + return $sql; + } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index d09d3adff..7fec63fd0 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -160,7 +160,7 @@ function run_upgrade($parameters, $args) ]; // Upgrade database and files from a specific workspace - $workspace->upgrade($workspace->name, true, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); + $workspace->upgrade($workspace->name, SYS_LANG, $arrayOptTranslation, $optionMigrateHistoryData); $workspace->close(); } else { // Build arguments diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 615a9a2e2..3c70f78b0 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -226,7 +226,7 @@ class WorkspaceTools * * @return void */ - public function upgrade($workspace, $onedb = false, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) + public function upgrade($workspace, $lang = 'en', array $arrayOptTranslation = null, $optionMigrateHistoryData = []) { if (is_null($arrayOptTranslation)) { $arrayOptTranslation = ['updateXml' => true, 'updateMafe' => true]; @@ -234,7 +234,7 @@ class WorkspaceTools CLI::logging("* Start updating database schema...\n"); $start = microtime(true); - $this->upgradeDatabase($onedb); + $this->upgradeDatabase(); CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start updating translations...\n"); @@ -283,13 +283,6 @@ class WorkspaceTools $this->processFilesUpgrade($workspace); CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating to new list tables...\n"); - $start = microtime(true); - $this->migrateList(true, $lang); - CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - CLI::logging("* Start migrating and populating plugin singleton data...\n"); $start = microtime(true); $this->migrateSingleton($workspace); @@ -337,6 +330,19 @@ class WorkspaceTools CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($this->dbAdapter); + $this->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $this->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); $this->updateTriggers(true, $lang); @@ -1030,22 +1036,17 @@ class WorkspaceTools /** * Upgrade the workspace database to the latest system schema - * - * @param bool $onedb Was installed in one DB or not - * @param bool $checkOnly Only check if the upgrade is needed if true - * - * @return bool upgradeSchema */ - public function upgradeDatabase($onedb = false, $checkOnly = false) + public function upgradeDatabase() { $this->initPropel(true); P11835::$dbAdapter = $this->dbAdapter; P11835::isApplicable(); $systemSchema = System::getSystemSchema($this->dbAdapter); - $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// get the Rbac Schema + $systemSchemaRbac = System::getSystemSchemaRbac($this->dbAdapter);// Get the RBAC Schema $this->registerSystemTables(array_merge($systemSchema, $systemSchemaRbac)); - $this->upgradeSchema($systemSchema); - $this->upgradeSchema($systemSchemaRbac, false, true, $onedb); // perform Upgrade to Rbac + $this->upgradeSchema($systemSchema, false, false, false); // Without add indexes + $this->upgradeSchema($systemSchemaRbac, false, true); // Perform upgrade to RBAC $this->upgradeData(); $this->checkRbacPermissions();//check or add new permissions $this->checkSequenceNumber(); @@ -1112,10 +1113,7 @@ class WorkspaceTools $arrayData = $emailSever->create2($arrayData); } } - P11835::execute(); - - return true; } private function setFormatRows() @@ -1136,14 +1134,18 @@ class WorkspaceTools } /** - * Upgrade this workspace database from a schema + * Upgrade the workspace database according to the schema * - * @param array $schema the schema information, such as returned from getSystemSchema - * @param bool $checkOnly only check if the upgrade is needed if true - * @return array bool the changes if checkOnly is true, else return - * true on success + * @param array $schema The schema information, such as returned from getSystemSchema + * @param bool $checkOnly Only return the diff between current database and the schema + * @param bool $rbac Is RBAC database? + * @param bool $includeIndexes Include or no indexes in new tables + * + * @return bool|array + * + * @throws Exception */ - public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $onedb = false) + public function upgradeSchema($schema, $checkOnly = false, $rbac = false, $includeIndexes = true) { $dbInfo = $this->getDBInfo(); @@ -1198,11 +1200,11 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAdd']) . " tables to add\n"); } - foreach ($changes['tablesToAdd'] as $sTable => $aColumns) { - $database->executeQuery($database->generateCreateTableSQL($sTable, $aColumns)); - if (isset($changes['tablesToAdd'][$sTable]['INDEXES'])) { - foreach ($changes['tablesToAdd'][$sTable]['INDEXES'] as $indexName => $aIndex) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $indexName, $aIndex)); + foreach ($changes['tablesToAdd'] as $tableName => $columns) { + $database->executeQuery($database->generateCreateTableSQL($tableName, $columns)); + if (isset($changes['tablesToAdd'][$tableName]['INDEXES']) && $includeIndexes) { + foreach ($changes['tablesToAdd'][$tableName]['INDEXES'] as $indexName => $keys) { + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $keys)); } } } @@ -1211,46 +1213,62 @@ class WorkspaceTools CLI::logging("-> " . count($changes['tablesToAlter']) . " tables to alter\n"); } - foreach ($changes['tablesToAlter'] as $sTable => $aActions) { - foreach ($aActions as $sAction => $aAction) { - foreach ($aAction as $sColumn => $vData) { - switch ($sAction) { - case 'DROP': - $database->executeQuery($database->generateDropColumnSQL($sTable, $vData)); - break; - case 'ADD': - if ($database->checkPatchHor1787($sTable, $sColumn, $vData)) { - $database->executeQuery($database->generateCheckAddColumnSQL($sTable, $sColumn, $vData)); - $database->executeQuery($database->deleteAllIndexesIntable($sTable, $sColumn, $vData)); - } - $database->executeQuery($database->generateAddColumnSQL($sTable, $sColumn, $vData)); - break; - case 'CHANGE': - $database->executeQuery($database->generateChangeColumnSQL($sTable, $sColumn, $vData)); - break; + $tablesToAddColumns = []; + + foreach ($changes['tablesToAlter'] as $tableName => $actions) { + foreach ($actions as $action => $actionData) { + if ($action == 'ADD') { + $tablesToAddColumns[$tableName] = $actionData; + + // In a very old schema the primary key for table "LOGIN_LOG" was changed and we need to delete the + // primary index to avoid errors in the database upgrade + // TO DO: The change of a Primary Key in a table should be generic + if ($tableName == 'LOGIN_LOG' && array_key_exists('LOG_ID', $actionData)) { + $database->executeQuery('DROP INDEX `PRIMARY` ON LOGIN_LOG;'); + } + } else { + foreach ($actionData as $columnName => $meta) { + switch ($action) { + case 'DROP': + $database->executeQuery($database->generateDropColumnSQL($tableName, $meta)); + break; + case 'CHANGE': + $database->executeQuery($database->generateChangeColumnSQL($tableName, $columnName, $meta)); + break; + } } } } } - if (!empty($changes['tablesWithNewIndex'])) { - CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " indexes to add\n"); - } - foreach ($changes['tablesWithNewIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($tablesToAddColumns)) { + foreach ($tablesToAddColumns as $tableName => $tableColumn) { + $indexes = []; + if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { + $indexes = $changes['tablesWithNewIndex'][$tableName]; + unset($changes['tablesWithNewIndex'][$tableName]); + } + $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); } } - if (!empty($changes['tablesToAlterIndex'])) { - CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " indexes to alter\n"); - } - foreach ($changes['tablesToAlterIndex'] as $sTable => $aIndexes) { - foreach ($aIndexes as $sIndexName => $aIndexFields) { - $database->executeQuery($database->generateDropKeySQL($sTable, $sIndexName)); - $database->executeQuery($database->generateAddKeysSQL($sTable, $sIndexName, $aIndexFields)); + if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { + $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); } } + + if (!empty($changes['tablesToAlterIndex']) && $includeIndexes) { + CLI::logging("-> " . count($changes['tablesToAlterIndex']) . " tables with indexes to alter\n"); + foreach ($changes['tablesToAlterIndex'] as $tableName => $indexes) { + foreach ($indexes as $indexName => $indexFields) { + $database->executeQuery($database->generateDropKeySQL($tableName, $indexName)); + $database->executeQuery($database->generateAddKeysSQL($tableName, $indexName, $indexFields)); + } + } + } + $this->closeDatabase(); return true; } From 0da9afd8d383a7b9077aa03d3d9a3f66959ed5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Apr 2019 14:44:33 -0400 Subject: [PATCH 086/100] PMC-570 --- gulliver/system/class.database_mysql.php | 12 +- workflow/engine/bin/tasks/cliUpgrade.php | 24 +++ workflow/engine/classes/WorkspaceTools.php | 12 ++ .../ProcessMaker/Core/ProcessesManager.php | 98 ++++++++++++ .../src/ProcessMaker/Core/RunProcess.php | 146 ++++++++++++++++++ .../Upgrade/RunProcessUpgradeQuery.php | 61 ++++++++ 6 files changed, 350 insertions(+), 3 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Core/ProcessesManager.php create mode 100644 workflow/engine/src/ProcessMaker/Core/RunProcess.php create mode 100644 workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 870ba954f..53888a4ae 100644 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -519,13 +519,15 @@ class database extends database_base } /** - * execute a sql query + * Execute a sql query * * @param string $query + * @param bool $throwError + * * @return array * @throws Exception */ - public function executeQuery($query) + public function executeQuery($query, $throwError = false) { $this->logQuery($query); @@ -545,7 +547,11 @@ class database extends database_base return $result; } catch (Exception $exception) { $this->logQuery($exception->getMessage()); - return []; + if ($throwError) { + throw $exception; + } else { + return []; + } } } diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index 7fec63fd0..36aa2e37d 100644 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -36,6 +36,8 @@ CLI::taskArg('workspace'); /*----------------------------------********---------------------------------*/ CLI::taskRun("run_unify_database"); /*----------------------------------********---------------------------------*/ +CLI::taskName('upgrade-query'); +CLI::taskRun('runUpgradeQuery'); /** * Execute the upgrade @@ -299,3 +301,25 @@ function run_unify_database($args) $flag = G::isPMUnderUpdating(0); } /*----------------------------------********---------------------------------*/ + +/** + * Execute a query, used internally for upgrade process + * + * @param array $options + */ +function runUpgradeQuery($options) +{ + // Initializing variables + $workspaceName = $options[0]; + $query = base64_decode($options[1]); + $isRbac = (bool)$options[2]; + + // Creating a new instance of the extended class + $workspace = new WorkspaceTools($workspaceName); + + // Execute the query + $workspace->upgradeQuery($query, $isRbac); + + // Terminate without error + exit('success'); +} diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3c70f78b0..d190b9c1f 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -4623,4 +4623,16 @@ class WorkspaceTools } } } + + /** + * Execute a query, used internally for the upgrade process + * + * @param string $query + * @param bool $rbac + */ + public function upgradeQuery($query, $rbac) + { + $database = $this->getDatabase($rbac); + $database->executeQuery($query, true); + } } diff --git a/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php new file mode 100644 index 000000000..bff0c5d96 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/ProcessesManager.php @@ -0,0 +1,98 @@ +processes = $processes; + } + + /** + * Get the list of terminated processes + * + * @return array + */ + public function getTerminated() + { + return $this->terminated; + } + + /** + * Get the list of processes with errors + * + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * Set the sleep time after each statuses revision + * + * @param int $sleepTime + */ + public function setSleepTime($sleepTime) + { + $this->sleepTime = $sleepTime; + } + + /** + * Run the processes + */ + public function run() + { + // Start all processes + foreach ($this->processes as $process) { + $process->run(); + } + + // Manage the processes + $this->manage(); + } + + /** + * Manage all started processes + */ + private function manage() + { + do { + // Check all remaining processes + foreach ($this->processes as $index => $process) { + // If the process has finished, save the info and destroy it + if ($process->getStatus() === RunProcess::TERMINATED || $process->getStatus() === RunProcess::ERROR) { + $processInfo = ['command' => $process->getCommand(), 'rawAnswer' => $process->getRawAnswer()]; + if ($process->getStatus() === RunProcess::TERMINATED) { + // Processes completed successfully + $this->terminated[] = $processInfo; + } else { + // Processes completed with errors + $this->errors[] = $processInfo; + } + + // Destroy the process + unset($this->processes[$index]); + } + } + + // Waiting... + sleep($this->sleepTime); + } while (!empty($this->processes)); + } +} diff --git a/workflow/engine/src/ProcessMaker/Core/RunProcess.php b/workflow/engine/src/ProcessMaker/Core/RunProcess.php new file mode 100644 index 000000000..8f2a0287f --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/RunProcess.php @@ -0,0 +1,146 @@ +command = $command; + } + + /** + * Class destructor, the resource created should be closed + */ + public function __destruct() + { + if (is_resource($this->resource)) { + proc_close($this->resource); + } + } + + /** + * Get the command + * + * @return string + */ + public function getCommand() + { + return $this->command; + } + + /** + * Get the raw response + * + * @return string|null + */ + public function getRawAnswer() + { + return $this->rawAnswer; + } + + /** + * Get the status + * + * @return string + */ + public function getStatus() + { + // If already exist a status return this value + if ($this->status !== null) { + return $this->status; + } + + // If doesn't exists a resource the process is not running + if (!is_resource($this->resource)) { + return self::NOT_RUNNING; + } + + // If the process is running return this value + if ($this->isRunning()) { + return self::RUNNING; + } + + // If the process is not running, parse the response to determine the status + $this->rawAnswer = stream_get_contents($this->pipes[1]); + $this->status = $this->parseAnswer(); + + return $this->status; + } + + /** + * Get the exit code + * + * @return string|null + */ + public function getExitCode() + { + return $this->exitCode; + } + + /** + * Run the command + */ + public function run() + { + $this->resource = proc_open($this->command, $this->descriptors, $this->pipes); + } + + /** + * Process is running? + * + * @return bool + */ + public function isRunning() + { + // Get the process status + $status = proc_get_status($this->resource); + + // If process is not running get the exit code + if ($status['running'] === false) { + $this->exitCode = $status['exitcode']; + } + + return $status['running']; + } + + /** + * Process the raw response and compare with the expected answer in order to determine the status + * + * @return string + */ + public function parseAnswer() + { + return $this->rawAnswer === self::EXPECTED_ANSWER ? self::TERMINATED : self::ERROR; + } +} diff --git a/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php new file mode 100644 index 000000000..e1295c0e4 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Upgrade/RunProcessUpgradeQuery.php @@ -0,0 +1,61 @@ +workspace = $workspace; + $this->sql = $sql; + $this->isRbac = $isRbac; + + // Build the command and send to the parent class + parent::__construct($this->buildCommand()); + } + + /** + * Override the parent method in order to compare the raw response with the SUCCESS value + * + * @return string + */ + public function parseAnswer() + { + return $this->getRawAnswer() === self::SUCCESS ? parent::TERMINATED : parent::ERROR; + } + + /** + * Build the command to execute a query for the upgrade process + * + * @return string + */ + private function buildCommand() + { + return sprintf(self::CMD, $this->workspace, base64_encode($this->sql), + ($this->isRbac ? self::RBAC : self::NO_RBAC)); + } +} \ No newline at end of file From 27e7f88c4689c34b47f003c7e0bcda10a4966640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 11:48:09 -0400 Subject: [PATCH 087/100] PMC-571 --- workflow/engine/classes/WorkspaceTools.php | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index d190b9c1f..a926bb366 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -7,9 +7,11 @@ use ProcessMaker\BusinessModel\Process as BmProcess; use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\Installer; +use ProcessMaker\Core\ProcessesManager; use ProcessMaker\Core\System; use ProcessMaker\Plugins\Adapters\PluginAdapter; use ProcessMaker\Project\Adapter\BpmnWorkflow; +use ProcessMaker\Upgrade\RunProcessUpgradeQuery; use ProcessMaker\Util\FixReferencePath; /** @@ -1242,20 +1244,51 @@ class WorkspaceTools } if (!empty($tablesToAddColumns)) { + $upgradeQueries = []; foreach ($tablesToAddColumns as $tableName => $tableColumn) { $indexes = []; if (!empty($changes['tablesWithNewIndex'][$tableName]) && $includeIndexes) { $indexes = $changes['tablesWithNewIndex'][$tableName]; unset($changes['tablesWithNewIndex'][$tableName]); } - $database->executeQuery($database->generateAddColumnsSql($tableName, $tableColumn, $indexes)); + + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, $tableColumn, $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } if (!empty($changes['tablesWithNewIndex']) && $includeIndexes) { CLI::logging("-> " . count($changes['tablesWithNewIndex']) . " tables with indexes to add\n"); + $upgradeQueries = []; foreach ($changes['tablesWithNewIndex'] as $tableName => $indexes) { - $database->executeQuery($database->generateAddColumnsSql($tableName, [], $indexes)); + // Instantiate the class to execute the query in background + $upgradeQueries[] = new RunProcessUpgradeQuery($this->name, $database->generateAddColumnsSql($tableName, [], $indexes), $rbac); + } + + // Run queries in multiple threads + $processesManager = new ProcessesManager($upgradeQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); } } From a3a88649bdd4f13aeb9b1b346b825af8ad3e3f43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 14:22:52 -0400 Subject: [PATCH 088/100] PMC-572 --- workflow/engine/classes/WorkspaceTools.php | 106 +++++++++++---------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index a926bb366..3c239afa7 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -3625,59 +3625,36 @@ class WorkspaceTools } /** - * Migrate this workspace table Content. + * Generate update rows from Content sentence * - * @param $className - * @param $fields - * @param mixed|string $lang - * @throws Exception + * @param string $tableName + * @param array $fields + * @param string $lang + * + * @return string */ - public function migrateContentWorkspace($className, $fields, $lang = SYS_LANG) + public function generateUpdateFromContent($tableName, array $fields, $lang = SYS_LANG) { - try { - $this->initPropel(true); - $fieldUidName = $fields['uid']; - $oCriteria = new Criteria(); - $oCriteria->clearSelectColumns(); - $oCriteria->addAsColumn($fieldUidName, ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_PARENT); - $oCriteria->addSelectColumn(ContentPeer::CON_CATEGORY); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add(ContentPeer::CON_CATEGORY, $fields['fields'], Criteria::IN); - $oCriteria->add(ContentPeer::CON_LANG, $lang); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $methods = $fields['methods']; - while ($oDataset->next()) { - $row = $oDataset->getRow(); - $fieldName = $row['CON_CATEGORY']; - $fieldName = isset($fields['alias']) && isset($fields['alias'][$fieldName]) ? $fields['alias'][$fieldName] : $fieldName; - unset($row['CON_CATEGORY']); - $row[$fieldName] = $row['CON_VALUE']; - unset($row['CON_VALUE']); - $oTable = new $className(); - $that = array($oTable, $methods['exists']); - $params = array($row[$fieldUidName]); - if (isset($row['CON_PARENT']) && $row['CON_PARENT'] != '') { - array_push($params, $row['CON_PARENT']); - $fieldName = isset($fields['alias']) && isset($fields['alias']['CON_PARENT']) ? $fields['alias']['CON_PARENT'] : 'CON_PARENT'; - $row[$fieldName] = $row['CON_PARENT']; - } - unset($row['CON_PARENT']); - if (call_user_func_array($that, $params)) { - if (isset($methods['update'])) { - $fn = $methods['update']; - $fn($row); - } else { - $oTable->update($row); - } - } - } - $classNamePeer = class_exists($className . 'Peer') ? $className . 'Peer' : $fields['peer']; - CLI::logging("|--> Add content data in table " . $classNamePeer::TABLE_NAME . "\n"); - } catch (Exception $e) { - throw ($e); + $sql = "UPDATE " . $tableName . " AS T"; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $sql .= " LEFT JOIN CONTENT " . $tableAlias . " ON ("; + $sql .= $tableAlias . ".CON_CATEGORY = '" . $field . "' AND "; + $sql .= $tableAlias . ".CON_ID = T." . $fields['uid'] . " AND "; + $sql .= $tableAlias . ".CON_LANG = '" . $lang . "')"; } + $sql .= ' SET '; + $i = 0; + foreach ($fields['fields'] as $field) { + $i++; + $tableAlias = "C" . $i; + $fieldName = !empty($fields['alias'][$field]) ? $fields['alias'][$field] : $field; + $sql .= $fieldName . " = " . $tableAlias . ".CON_VALUE, "; + } + $sql = rtrim($sql, ', '); + return $sql; } /** @@ -3687,6 +3664,8 @@ class WorkspaceTools * @param array $blackList * * @return array + * + * @throws Exception */ public function migrateContentRun($lang = SYS_LANG, $blackList = []) { @@ -3694,13 +3673,40 @@ class WorkspaceTools define('MEMCACHED_ENABLED', false); } $content = $this->getListContentMigrateTable(); + $contentQueries = []; foreach ($content as $className => $fields) { if (!in_array($className, $blackList)) { - $this->migrateContentWorkspace($className, $fields, $lang); + // Build class peer name + if (class_exists($className . 'Peer')) { + $classNamePeer = $className . 'Peer'; + } else { + $classNamePeer = $fields['peer']; + } + + // Build the query + $query = $this->generateUpdateFromContent($classNamePeer::TABLE_NAME, $fields, $lang); + + // Instantiate the class to execute the query in background + $contentQueries[] = new RunProcessUpgradeQuery($this->name, $query); + + // Add class to the control array $blackList[] = $className; } } + // Run queries in multiple threads + $processesManager = new ProcessesManager($contentQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + return $blackList; } From 357fd58e0e3e1749fd650178a00cca3c3676b3f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 12 Apr 2019 16:17:21 -0400 Subject: [PATCH 089/100] PMC-573 --- workflow/engine/classes/WorkspaceTools.php | 159 +++++++++++++++------ 1 file changed, 115 insertions(+), 44 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 3c239afa7..5eae87c8e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2420,6 +2420,13 @@ class WorkspaceTools * @param string $lang * * @return void + * + * @throws Exception + * + * @see \WorkspaceTools->upgrade + * @see \WorkspaceTools->restore + * @see workflow/engine/bin/tasks/cliWorkspaces.php:migrate_new_cases_lists() + * @link https://wiki.processmaker.com/3.3/processmaker_command#migrate-new-cases-lists */ public function migrateList($flagReinsert = false, $lang = 'en') { @@ -2432,7 +2439,7 @@ class WorkspaceTools return; } - $arrayTable1 = ['ListInbox', 'ListMyInbox', 'ListCanceled', 'ListParticipatedLast', 'ListParticipatedHistory', 'ListPaused']; + $arrayTable1 = ['ListCanceled', 'ListMyInbox', 'ListInbox', 'ListParticipatedHistory', 'ListPaused', 'ListParticipatedLast']; $arrayTable2 = ['ListUnassigned', 'ListUnassignedGroup']; $arrayTable = array_merge($arrayTable1, $arrayTable2); @@ -2457,23 +2464,57 @@ class WorkspaceTools } } + $listQueries = []; + if ($flagReinsert || !$flagListAll) { - $this->regenerateListCanceled($lang); - $this->regenerateListMyInbox(); //This list require no translation - $this->regenerateListInbox(); //This list require no translation - $this->regenerateListParticipatedHistory(); //This list require no translation - $this->regenerateListParticipatedLast(); //This list require no translation - $this->regenerateListPaused(); //This list require no translation + // Regenerate lists + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListCanceled($lang)); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListMyInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListInbox()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedHistory()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListPaused()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedLast()); } if ($flagReinsert || !$flagListUnassigned) { - $this->regenerateListUnassigned(); //This list require no translation + // This list always is truncated + $con = Propel::getConnection("workflow"); + $stmt = $con->createStatement(); + $stmt->executeQuery('TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'); + + // Regenerate list + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListUnassigned()); } + // Run queries in multiple threads + $processesManager = new ProcessesManager($listQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } + + // This query cannot be launched in parallel, requires that the table already was populated + $this->updateListParticipatedLast(); + $this->listFirstExecution('insert'); $this->listFirstExecution('insert', 'unassigned'); } + /** + * Return query to populate canceled list + * + * @param string $lang + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListCanceled($lang = 'en') { $this->initPropel(true); @@ -2536,12 +2577,17 @@ class WorkspaceTools WHERE ACV.APP_STATUS = \'CANCELLED\' AND ACV.DEL_LAST_INDEX = 1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_CANCELED\n"); + + return $query; } + /** + * Return query to populate my inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListMyInbox() { $this->initPropel(true); @@ -2606,12 +2652,16 @@ class WorkspaceTools ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID WHERE ACV.DEL_INDEX=1'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_MY_INBOX\n"); + return $query; } + /** + * Return query to populate inbox list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListInbox() { $this->initPropel(true); @@ -2664,12 +2714,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS USR ON ACV.PREVIOUS_USR_UID = USR.USR_UID WHERE ACV.DEL_THREAD_STATUS = \'OPEN\''; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_INBOX\n"); + + return $query; } + /** + * Return query to populate participated history list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedHistory() { $this->initPropel(true); @@ -2722,12 +2777,17 @@ class WorkspaceTools ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_HISTORY\n"); + + return $query; } + /** + * Return query to populate participated last list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListParticipatedLast() { $this->initPropel(true); @@ -2803,10 +2863,18 @@ class WorkspaceTools ) ACV LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID LEFT JOIN ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID'; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Inserted data into table LIST_PARTICIPATED_LAST\n"); + + return $query; + } + + /** + * Update participated last list + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListParticipatedLast() + { + $this->initPropel(true); $query = 'UPDATE ' . $this->dbName . '.LIST_PARTICIPATED_LAST LPL, ( SELECT TASK.TAS_TITLE, @@ -2832,18 +2900,19 @@ class WorkspaceTools LPL.DEL_CURRENT_USR_LASTNAME = IFNULL(USERS_VALUES.USR_LASTNAME, \'\'), LPL.DEL_CURRENT_TAS_TITLE = IFNULL(USERS_VALUES.TAS_TITLE, \'\') WHERE LPL.APP_UID = USERS_VALUES.APP_UID'; + + CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PARTICIPATED_LAST\n"); } /** - * This function overwrite the table LIST_PAUSED - * Get the principal information in the tables appDelay, appDelegation - * For the labels we use the tables user, process, task and application - * @return void + * Return query to populate paused list + * + * @return string + * + * @see \WorkspaceTools->migrateList() */ public function regenerateListPaused() { @@ -2922,17 +2991,22 @@ class WorkspaceTools APP_DELAY.APP_DISABLE_ACTION_USER = "0" AND APP_DELAY.APP_TYPE = "PAUSE" '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_PAUSED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ + /** + * Return query to populate unassigned list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ public function regenerateListUnassigned() { $this->initPropel(true); - $truncate = 'TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED'; + //This executeQuery is very fast than Propel $query = 'INSERT INTO ' . $this->dbName . '.LIST_UNASSIGNED (APP_UID, @@ -2976,11 +3050,8 @@ class WorkspaceTools WHERE ACV.DEL_THREAD_STATUS = \'OPEN\' AND ACV.USR_UID = \'\' '; - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($truncate); - $stmt->executeQuery($query); - CLI::logging("> Completed table LIST_UNASSIGNED\n"); + + return $query; } /*----------------------------------********---------------------------------*/ From 5d866a859f5029e028c98873e7d944f36d62aa48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 23 Apr 2019 09:42:25 -0400 Subject: [PATCH 090/100] PMC-594 --- .../engine/classes/MultipleFilesBackup.php | 20 +- workflow/engine/classes/WorkspaceTools.php | 245 ++++++++++-------- 2 files changed, 152 insertions(+), 113 deletions(-) diff --git a/workflow/engine/classes/MultipleFilesBackup.php b/workflow/engine/classes/MultipleFilesBackup.php index 8e06e5852..a3ee55cba 100644 --- a/workflow/engine/classes/MultipleFilesBackup.php +++ b/workflow/engine/classes/MultipleFilesBackup.php @@ -94,11 +94,21 @@ class MultipleFilesBackup } } - /* Restore from file(s) commpressed by letsBackup function, into a temporary directory - * @ filename got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. - * @ srcWorkspace contains the workspace to be restored. - * @ dstWorkspace contains the workspace to be overwriting. - * @ overwrite got the option true if the workspace will be overwrite. + /** + * Restore from file(s) compressed by letsBackup function, into a temporary directory + * + * @param string $filename Got the name and path of the compressed file(s), if there are many files with file extention as a numerical series, the extention should be discriminated. + * @param string $srcWorkspace Contains the workspace to be restored. + * @param bool $dstWorkspace Contains the workspace to be overwriting. + * @param bool $overwrite Got the option true if the workspace will be overwrite. + * + * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces + * + * @deprecated Method outdated, only run the upgrade of APP_CACHE_VIEW table */ public static function letsRestore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true) { diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 5eae87c8e..adc7d7714 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -66,6 +66,23 @@ class WorkspaceTools 'UPDATE LIST_UNASSIGNED_GROUP SET USR_ID=(SELECT USR_ID FROM USERS WHERE USERS.USR_UID=LIST_UNASSIGNED_GROUP.USR_UID)', ); + public static $triggers = [ + 'APP_DELEGATION_UPDATE', + 'APPLICATION_UPDATE', + 'CONTENT_UPDATE' + ]; + public static $bigTables = [ + 'APPLICATION', + 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', + 'APP_CACHE_VIEW', + 'APP_DELEGATION', + 'APP_DELAY', + 'APP_DOCUMENT', + 'APP_HISTORY', + 'APP_MESSAGE', + 'GROUP_USER', + 'LOGIN_LOG' + ]; private $lastContentMigrateTable = false; private $listContentMigrateTable = []; @@ -249,18 +266,16 @@ class WorkspaceTools $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - CLI::logging("* Start deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE...\n"); + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); $start = microtime(true); - $this->deleteTriggersMySQL(['APP_DELEGATION_UPDATE', 'APPLICATION_UPDATE', 'CONTENT_UPDATE']); - CLI::logging("* End deleting MySQL triggers: APP_DELEGATION_UPDATE, APPLICATION_UPDATE, CONTENT_UPDATE... (Completed on " . + $this->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $bigTables = ['APPLICATION', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', 'APP_CACHE_VIEW', 'APP_DELEGATION', 'APP_DELAY', - 'APP_DOCUMENT', 'APP_HISTORY', 'APP_MESSAGE', 'GROUP_USER', 'LOGIN_LOG']; - CLI::logging("* Start deleting indexes from big tables: " . implode(', ', $bigTables) . "...\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); $start = microtime(true); - $this->deleteIndexes($bigTables); - CLI::logging("* End deleting indexes from big tables: " . implode(', ', $bigTables) . "... (Completed on " . + $this->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); CLI::logging("* Start to update CONTENT table...\n"); @@ -1854,7 +1869,7 @@ class WorkspaceTools } /** - * restore an archive into a workspace + * Restore a workspace * * Restores any database and files included in the backup, either as a new * workspace, or overwriting a previous one @@ -1865,8 +1880,13 @@ class WorkspaceTools * @param boolean $overwrite if you need overwrite the database * @param string $lang for define the language * @param string $port of database if is empty take 3306 + * @param array $optionMigrateHistoryData * * @throws Exception + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php::run_workspace_restore() + * + * @link https://wiki.processmaker.com/3.0/Backing_up_and_Restoring_ProcessMaker#RestoringWorkspaces */ public static function restore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true, $lang = 'en', $port = '', $optionMigrateHistoryData = []) { @@ -2034,115 +2054,124 @@ class WorkspaceTools } } - $start = microtime(true); - CLI::logging("> Remove deprecated files...\n"); - $workspace->removeDeprecatedFiles(); - $stop = microtime(true); - CLI::logging("<*> Remove deprecated files took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating database...\n"); - $workspace->upgradeDatabase($onedb); - $stop = microtime(true); - CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); - } - - $start = microtime(true); - CLI::logging("> Verify files enterprise old...\n"); - $workspace->verifyFilesOldEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Verify License Enterprise...\n"); - $workspace->verifyLicenseEnterprise($workspaceName); - $stop = microtime(true); - CLI::logging("<*> Verify took " . ($stop - $start) . " seconds.\n"); - - $start = microtime(true); - CLI::logging("> Check Mafe Requirements...\n"); - $workspace->checkMafeRequirements($workspaceName, $lang); - $stop = microtime(true); - CLI::logging("<*> Check Mafe Requirements Process took " . ($stop - $start) . " seconds.\n"); - - if (($pmVersionWorkspaceToRestore != '') && (version_compare( - $pmVersionWorkspaceToRestore . "", - $pmVersion . "", - "<" - ) || $pmVersion == "") - ) { - $start = microtime(true); - CLI::logging("> Updating cache view...\n"); - $workspace->upgradeCacheView(true, true, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating cache view Process took " . ($stop - $start) . " seconds.\n"); - } else { - $workspace->upgradeTriggersOfTables(true, $lang); - } - - if ($pmVersion == '' && strpos(strtoupper($version), 'BRANCH')) { + if (empty($pmVersion) && strpos(strtoupper($version), 'BRANCH')) { $pmVersion = 'dev-version-backup'; } - //Move the labels of content to the corresponding table - $start = microtime(true); - CLI::logging("> Optimizing content data...\n"); - $workspace->migrateContent($workspace->name, $lang); - $stop = microtime(true); - CLI::logging("<*> Optimizing content data took " . ($stop - $start) . " seconds.\n"); + if (!empty($pmVersionWorkspaceToRestore) && (version_compare( + $pmVersionWorkspaceToRestore . "", + $pmVersion . "", + "<" + ) || empty($pmVersion)) || $pmVersion == "dev-version-backup" + ) { + // Upgrade the database schema and data + CLI::logging("* Start updating database schema...\n"); + $start = microtime(true); + $workspace->upgradeDatabase(); + CLI::logging("* End updating database schema...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Populate the new fields for replace string UID to Interger ID - $start = microtime(true); - CLI::logging("> Migrating and populating indexing for APP_CACHE_VIEW...\n"); - $workspace->migratePopulateIndexingACV($workspace->name); - $stop = microtime(true); - CLI::logging("<*> Migrating an populating indexing for APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start checking MAFE requirements...\n"); + $start = microtime(true); + $workspace->checkMafeRequirements($workspaceName, $lang); + CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - //Move the data of cases to the corresponding List - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Updating List tables...\n"); - $workspace->migrateList($workspace->name, false, $lang); - $stop = microtime(true); - CLI::logging("<*> Updating List Process took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); + $start = microtime(true); + $workspace->deleteTriggersMySQL(self::$triggers); + CLI::logging("* End deleting MySQL triggers: " . implode(', ', self::$triggers) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); - CLI::logging("> Updating Files Manager...\n"); - $workspace->processFilesUpgrade(); - $stop = microtime(true); - CLI::logging("<*> Updating Files Manager took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start deleting indexes from big tables: " . implode(', ', self::$bigTables) . "...\n"); + $start = microtime(true); + $workspace->deleteIndexes(self::$bigTables); + CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - //Updating generated class files for PM Tables - passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspace->name); + $start = microtime(true); + CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $workspace->migrateContent($lang); + CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . + (microtime(true) - $start) . " seconds)\n"); - $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; - //Review if we need to remove the 'History of use' from APP_HISTORY - $start = microtime(true); - CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); - $workspace->clearDynContentHistoryData(false, $keepDynContent); - $stop = microtime(true); - CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + CLI::logging("* Start updating rows in Web Entry table for classic processes...\n"); + $start = microtime(true); + $workspace->updatingWebEntryClassicModel(true); + CLI::logging("* End updating rows in Web Entry table for classic processes...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ - $start = microtime(true); - CLI::logging("> Migrating history data...\n"); - $workspace->migrateAppHistoryToAppDataChangeLog(false); - $stop = microtime(true); - CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); - /*----------------------------------********---------------------------------*/ + CLI::logging("* Start to update Files Manager...\n"); + $start = microtime(true); + $workspace->processFilesUpgrade($workspaceName); + CLI::logging("* End to update Files Manager... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + CLI::logging("* Start migrating and populating plugin singleton data...\n"); + $start = microtime(true); + $workspace->migrateSingleton($workspaceName); + CLI::logging("* End migrating and populating plugin singleton data...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start to check Intermediate Email Event...\n"); + $start = microtime(true); + $workspace->checkIntermediateEmailEvent(); + CLI::logging("* End to check Intermediate Email Event... (Completed on " . (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start cleaning DYN_CONTENT in APP_HISTORY...\n"); + $start = microtime(true); + $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; + $workspace->clearDynContentHistoryData(false, $keepDynContent); + CLI::logging("* End cleaning DYN_CONTENT in APP_HISTORY...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating history data...\n"); + $start = microtime(true); + $workspace->migrateAppHistoryToAppDataChangeLog(false); + CLI::logging("* End migrating history data...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...\n"); + $start = microtime(true); + $workspace->migratePopulateIndexingACV(); + CLI::logging("* End migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); + $start = microtime(true); + $workspace->migrateSelfServiceRecordsRun(); + CLI::logging("* End optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding new fields and populating values in tables related to feature self service by value...\n"); + $start = microtime(true); + $workspace->upgradeSelfServiceData(); + CLI::logging("* End adding new fields and populating values in tables related to feature self service by value...(Completed on " . + (microtime(true) - $start) . " seconds)\n"); + + CLI::logging("* Start adding/replenishing all indexes...\n"); + $start = microtime(true); + $systemSchema = System::getSystemSchema($workspace->dbAdapter); + $workspace->upgradeSchema($systemSchema); + CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + + /*----------------------------------********---------------------------------*/ + CLI::logging("* Start migrating to new list tables...\n"); + $start = microtime(true); + $workspace->migrateList(true, $lang); + CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); + /*----------------------------------********---------------------------------*/ + + CLI::logging("* Start updating MySQL triggers...\n"); + $start = microtime(true); + $workspace->updateTriggers(true, $lang); + CLI::logging("* End updating MySQL triggers...(" . (microtime(true) - $start) . " seconds)\n"); + } + + CLI::logging("> Start To Verify License Enterprise...\n"); $start = microtime(true); - CLI::logging("> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP....\n"); - $workspace->upgradeSelfServiceData(); - $stop = microtime(true); - CLI::logging("<*> Optimizing Self-Service data in table APP_ASSIGN_SELF_SERVICE_VALUE_GROUP took " . ($stop - $start) . " seconds.\n"); + $workspace->verifyLicenseEnterprise($workspaceName); + CLI::logging("* End To Verify License Enterprise...(" . (microtime(true) - $start) . " seconds)\n"); + + // Updating generated class files for PM Tables + passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspaceName); } CLI::logging("Removing temporary files\n"); @@ -2318,7 +2347,7 @@ class WorkspaceTools CLI::logging(" Migrating Enterprise Core version...\n"); if (!file_exists($pathNewFile)) { CLI::logging(" Creating folder in $pathNewFile\n"); - G::mk_dir($newDiretory, 0777); + G::mk_dir($pathNewFile, 0777); } $shared_stat = stat(PATH_DATA); if (file_exists($pathDirectoryEnterprise)) { From 7e82d0e02c8cf87c038b66edd654c62099f6f1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Jul 2019 14:36:40 -0400 Subject: [PATCH 091/100] Fix conflicts after merge with develop --- workflow/engine/classes/WorkspaceTools.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index adc7d7714..a496b7fb6 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -238,7 +238,6 @@ class WorkspaceTools * Upgrade this workspace to the latest system version * * @param string $workspace - * @param bool $onedb * @param string $lang * @param array $arrayOptTranslation * @param array $optionMigrateHistoryData @@ -283,8 +282,8 @@ class WorkspaceTools $this->upgradeContent($workspace); CLI::logging("* End to update CONTENT table... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $start = microtime(true); $this->migrateContent($lang); CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . (microtime(true) - $start) . " seconds)\n"); @@ -353,12 +352,10 @@ class WorkspaceTools $this->upgradeSchema($systemSchema); CLI::logging("* End adding/replenishing all indexes...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start migrating to new list tables...\n"); $start = microtime(true); $this->migrateList(true, $lang); CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); @@ -1053,6 +1050,14 @@ class WorkspaceTools /** * Upgrade the workspace database to the latest system schema +<<<<<<< HEAD +======= + * + * @param bool $onedb Was installed in one DB or not + * @param bool $checkOnly Only check if the upgrade is needed if true + * + * @return bool upgradeSchema +>>>>>>> PMC-565 */ public function upgradeDatabase() { From 588e30b234779257373866c21d41c143f14b0514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 19 Mar 2019 14:34:05 -0400 Subject: [PATCH 092/100] PMC-574 --- workflow/engine/classes/WorkspaceTools.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index a496b7fb6..29ac1716c 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -264,7 +264,7 @@ class WorkspaceTools $start = microtime(true); $this->checkMafeRequirements($workspace, $lang); CLI::logging("* End checking MAFE requirements...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - + CLI::logging("* Start deleting MySQL triggers: " . implode(', ', self::$triggers) . "...\n"); $start = microtime(true); $this->deleteTriggersMySQL(self::$triggers); @@ -1050,14 +1050,6 @@ class WorkspaceTools /** * Upgrade the workspace database to the latest system schema -<<<<<<< HEAD -======= - * - * @param bool $onedb Was installed in one DB or not - * @param bool $checkOnly Only check if the upgrade is needed if true - * - * @return bool upgradeSchema ->>>>>>> PMC-565 */ public function upgradeDatabase() { From 2990788ce9e0c3c77d971ecc2d0629cf74339513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Jul 2019 10:36:22 -0400 Subject: [PATCH 093/100] Resolving conflicts after merge in develop the features related to Laravel 5.7 and MySQL 5.7 (Part 2) --- workflow/engine/classes/WorkspaceTools.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 29ac1716c..bea6c752e 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2084,8 +2084,8 @@ class WorkspaceTools CLI::logging("* End deleting indexes from big tables: " . implode(', ', self::$bigTables) . "... (Completed on " . (microtime(true) - $start) . " seconds)\n"); - $start = microtime(true); CLI::logging("* Start to migrate texts/values from 'CONTENT' table to the corresponding object tables...\n"); + $start = microtime(true); $workspace->migrateContent($lang); CLI::logging("* End to migrate texts/values from 'CONTENT' table to the corresponding object tables... (Completed on " . (microtime(true) - $start) . " seconds)\n"); @@ -2154,7 +2154,6 @@ class WorkspaceTools $start = microtime(true); $workspace->migrateList(true, $lang); CLI::logging("* End migrating to new list tables...(Completed on " . (microtime(true) - $start) . " seconds)\n"); - /*----------------------------------********---------------------------------*/ CLI::logging("* Start updating MySQL triggers...\n"); $start = microtime(true); From 416093f6986a86c61ed2769806bc9b8a4554c4f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 4 Jul 2019 14:23:36 -0400 Subject: [PATCH 094/100] PMC-771 --- workflow/engine/classes/model/AppCacheView.php | 10 ++++++++-- workflow/engine/classes/model/ListUnassigned.php | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index 45a669b02..32b3ab3d7 100644 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -288,7 +288,10 @@ class AppCacheView extends BaseAppCacheView $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE'); - $c->add(TaskPeer::TAS_GROUP_VARIABLE, ''); + $c->add( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL)) + ); $c->add(TaskUserPeer::USR_UID, $userUid); $rs = TaskPeer::doSelectRS($c); @@ -314,7 +317,10 @@ class AppCacheView extends BaseAppCacheView $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE'); - $c->add(TaskPeer::TAS_GROUP_VARIABLE, ''); + $c->add( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL)) + ); $c->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); $rs = TaskPeer::doSelectRS($c); diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index a073a8c7b..4cafc2681 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -398,7 +398,10 @@ class ListUnassigned extends BaseListUnassigned implements ListInterface $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE'); - $c->add(TaskPeer::TAS_GROUP_VARIABLE, ''); + $c->add( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL)) + ); $c->add(TaskUserPeer::USR_UID, $userUid); //TU_TYPE = 2 is a AdHoc task if (!$adHocUsers) { @@ -430,7 +433,10 @@ class ListUnassigned extends BaseListUnassigned implements ListInterface $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE'); - $c->add(TaskPeer::TAS_GROUP_VARIABLE, ''); + $c->add( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr( + $c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL)) + ); $c->add(TaskUserPeer::USR_UID, $groupsList, Criteria::IN); //TU_TYPE = 2 is a AdHoc task if (!$adHocUsers) { From 18d00f40d1d626375f36db3224cbedc926060c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 5 Jul 2019 15:19:06 -0400 Subject: [PATCH 095/100] PMC-934 --- workflow/engine/classes/WorkspaceTools.php | 524 ++++++++++----------- 1 file changed, 245 insertions(+), 279 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 1c29e2379..f7f6d86e2 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2463,8 +2463,8 @@ class WorkspaceTools return; } - $arrayTable1 = ['ListCanceled', 'ListMyInbox', 'ListInbox', 'ListParticipatedHistory', 'ListPaused', 'ListParticipatedLast']; - $arrayTable2 = ['ListUnassigned', 'ListUnassignedGroup']; + $arrayTable1 = ['ListCanceled', 'ListInbox', 'ListParticipatedLast', 'ListPaused']; + $arrayTable2 = ['ListUnassigned']; $arrayTable = array_merge($arrayTable1, $arrayTable2); if ($flagReinsert) { @@ -2488,16 +2488,15 @@ class WorkspaceTools } } + // Initialize queries array $listQueries = []; if ($flagReinsert || !$flagListAll) { // Regenerate lists $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListCanceled($lang)); - $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListMyInbox()); $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListInbox()); - $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedHistory()); - $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListPaused()); $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListParticipatedLast()); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListPaused()); } if ($flagReinsert || !$flagListUnassigned) { @@ -2510,7 +2509,7 @@ class WorkspaceTools $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->regenerateListUnassigned()); } - // Run queries in multiple threads + // Run queries in multiple threads for populate the list tables $processesManager = new ProcessesManager($listQueries); $processesManager->run(); @@ -2523,8 +2522,39 @@ class WorkspaceTools throw new Exception($errorMessage); } - // This query cannot be launched in parallel, requires that the table already was populated - $this->updateListParticipatedLast(); + // Clean the queries array + $listQueries = []; + // Canceled List + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_CANCELED')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_CANCELED')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_CANCELED')); + // Inbox List + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_INBOX')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_INBOX')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_INBOX')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListAppStatusId('LIST_INBOX')); + // Participated List + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_PARTICIPATED_LAST')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_PARTICIPATED_LAST')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_PARTICIPATED_LAST')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListAppStatusId('LIST_PARTICIPATED_LAST')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListParticipatedLastCurrentUser()); + // Unassigned List + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_UNASSIGNED')); + $listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_UNASSIGNED')); + + // Run queries in multiple threads for update the list tables + $processesManager = new ProcessesManager($listQueries); + $processesManager->run(); + + // If exists an error throw an exception + if (!empty($processesManager->getErrors())) { + $errorMessage = ''; + foreach ($processesManager->getErrors() as $error) { + $errorMessage .= $error['rawAnswer'] . PHP_EOL; + } + throw new Exception($errorMessage); + } $this->listFirstExecution('insert'); $this->listFirstExecution('insert', 'unassigned'); @@ -2541,7 +2571,6 @@ class WorkspaceTools */ public function regenerateListCanceled($lang = 'en') { - $this->initPropel(true); $query = 'INSERT INTO ' . $this->dbName . '.LIST_CANCELED (APP_UID, USR_UID, @@ -2605,80 +2634,6 @@ class WorkspaceTools return $query; } - /** - * Return query to populate my inbox list - * - * @return string - * - * @see \WorkspaceTools->migrateList() - */ - public function regenerateListMyInbox() - { - $this->initPropel(true); - $query = 'INSERT INTO ' . $this->dbName . '.LIST_MY_INBOX - (APP_UID, - USR_UID, - TAS_UID, - PRO_UID, - APP_NUMBER, - APP_TITLE, - APP_PRO_TITLE, - APP_TAS_TITLE, - APP_CREATE_DATE, - APP_UPDATE_DATE, - APP_FINISH_DATE, - APP_STATUS, - DEL_INDEX, - DEL_PREVIOUS_USR_UID, - DEL_PREVIOUS_USR_USERNAME, - DEL_PREVIOUS_USR_FIRSTNAME, - DEL_PREVIOUS_USR_LASTNAME, - DEL_CURRENT_USR_UID, - DEL_CURRENT_USR_USERNAME, - DEL_CURRENT_USR_FIRSTNAME, - DEL_CURRENT_USR_LASTNAME, - DEL_DELEGATE_DATE, - DEL_INIT_DATE, - DEL_DUE_DATE, - DEL_PRIORITY) - - SELECT - ACV.APP_UID, - ACV.USR_UID, - ACV.TAS_UID, - ACV.PRO_UID, - ACV.APP_NUMBER, - ACV.APP_TITLE, - ACV.APP_PRO_TITLE, - ACV.APP_TAS_TITLE, - ACV.APP_CREATE_DATE, - ACV.APP_UPDATE_DATE, - ACV.APP_FINISH_DATE, - ACV.APP_STATUS, - ACV.DEL_INDEX, - ACV.PREVIOUS_USR_UID AS DEL_PREVIOUS_USR_UID, - PRE_USR.USR_USERNAME AS DEL_PREVIOUS_USR_USERNAME, - PRE_USR.USR_FIRSTNAME AS DEL_PREVIOUS_USR_FIRSTNAME, - PRE_USR.USR_LASTNAME AS DEL_PREVIOUS_USR_LASTNAME, - ACV.USR_UID AS DEL_CURRENT_USR_UID, - CUR_USR.USR_USERNAME AS DEL_CURRENT_USR_USERNAME, - CUR_USR.USR_FIRSTNAME AS DEL_CURRENT_USR_FIRSTNAME, - CUR_USR.USR_LASTNAME AS DEL_CURRENT_USR_LASTNAME, - ACV.DEL_DELEGATE_DATE AS DEL_DELEGATE_DATE, - ACV.DEL_INIT_DATE AS DEL_INIT_DATE, - ACV.DEL_TASK_DUE_DATE AS DEL_DUE_DATE, - ACV.DEL_PRIORITY - FROM - ' . $this->dbName . '.APP_CACHE_VIEW ACV - LEFT JOIN - ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID - LEFT JOIN - ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID - WHERE ACV.DEL_INDEX=1'; - - return $query; - } - /** * Return query to populate inbox list * @@ -2688,7 +2643,6 @@ class WorkspaceTools */ public function regenerateListInbox() { - $this->initPropel(true); $query = 'INSERT INTO ' . $this->dbName . '.LIST_INBOX (APP_UID, DEL_INDEX, @@ -2742,195 +2696,6 @@ class WorkspaceTools return $query; } - /** - * Return query to populate participated history list - * - * @return string - * - * @see \WorkspaceTools->migrateList() - */ - public function regenerateListParticipatedHistory() - { - $this->initPropel(true); - $query = 'INSERT INTO ' . $this->dbName . '.LIST_PARTICIPATED_HISTORY - (APP_UID, - DEL_INDEX, - USR_UID, - TAS_UID, - PRO_UID, - APP_NUMBER, - APP_TITLE, - APP_PRO_TITLE, - APP_TAS_TITLE, - DEL_PREVIOUS_USR_UID, - DEL_PREVIOUS_USR_USERNAME, - DEL_PREVIOUS_USR_FIRSTNAME, - DEL_PREVIOUS_USR_LASTNAME, - DEL_CURRENT_USR_USERNAME, - DEL_CURRENT_USR_FIRSTNAME, - DEL_CURRENT_USR_LASTNAME, - DEL_DELEGATE_DATE, - DEL_INIT_DATE, - DEL_DUE_DATE, - DEL_PRIORITY) - - SELECT - ACV.APP_UID, - ACV.DEL_INDEX, - ACV.USR_UID, - ACV.TAS_UID, - ACV.PRO_UID, - ACV.APP_NUMBER, - ACV.APP_TITLE, - ACV.APP_PRO_TITLE, - ACV.APP_TAS_TITLE, - ACV.PREVIOUS_USR_UID AS DEL_PREVIOUS_USR_UID, - PRE_USR.USR_USERNAME AS DEL_PREVIOUS_USR_USERNAME, - PRE_USR.USR_FIRSTNAME AS DEL_PREVIOUS_USR_FIRSTNAME, - PRE_USR.USR_LASTNAME AS DEL_PREVIOUS_USR_LASTNAME, - CUR_USR.USR_USERNAME AS DEL_CURRENT_USR_USERNAME, - CUR_USR.USR_FIRSTNAME AS DEL_CURRENT_USR_FIRSTNAME, - CUR_USR.USR_LASTNAME AS DEL_CURRENT_USR_LASTNAME, - ACV.DEL_DELEGATE_DATE AS DEL_DELEGATE_DATE, - ACV.DEL_INIT_DATE AS DEL_INIT_DATE, - ACV.DEL_TASK_DUE_DATE AS DEL_DUE_DATE, - ACV.DEL_PRIORITY - FROM - ' . $this->dbName . '.APP_CACHE_VIEW ACV - LEFT JOIN - ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID - LEFT JOIN - ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID'; - - return $query; - } - - /** - * Return query to populate participated last list - * - * @return string - * - * @see \WorkspaceTools->migrateList() - */ - public function regenerateListParticipatedLast() - { - $this->initPropel(true); - $query = 'INSERT INTO ' . $this->dbName . '.LIST_PARTICIPATED_LAST - ( - APP_UID, - USR_UID, - DEL_INDEX, - TAS_UID, - PRO_UID, - APP_NUMBER, - APP_TITLE, - APP_PRO_TITLE, - APP_TAS_TITLE, - APP_STATUS, - DEL_PREVIOUS_USR_UID, - DEL_PREVIOUS_USR_USERNAME, - DEL_PREVIOUS_USR_FIRSTNAME, - DEL_PREVIOUS_USR_LASTNAME, - DEL_CURRENT_USR_USERNAME, - DEL_CURRENT_USR_FIRSTNAME, - DEL_CURRENT_USR_LASTNAME, - DEL_DELEGATE_DATE, - DEL_INIT_DATE, - DEL_DUE_DATE, - DEL_CURRENT_TAS_TITLE, - DEL_PRIORITY, - DEL_THREAD_STATUS) - - SELECT - ACV.APP_UID, - IF(ACV.USR_UID=\'\', \'SELF_SERVICES\', ACV.USR_UID), - ACV.DEL_INDEX, - ACV.TAS_UID, - ACV.PRO_UID, - ACV.APP_NUMBER, - ACV.APP_TITLE, - ACV.APP_PRO_TITLE, - ACV.APP_TAS_TITLE, - ACV.APP_STATUS, - DEL_PREVIOUS_USR_UID, - IFNULL(PRE_USR.USR_USERNAME, CUR_USR.USR_USERNAME) AS DEL_PREVIOUS_USR_USERNAME, - IFNULL(PRE_USR.USR_FIRSTNAME, CUR_USR.USR_FIRSTNAME) AS DEL_PREVIOUS_USR_USERNAME, - IFNULL(PRE_USR.USR_LASTNAME, CUR_USR.USR_LASTNAME) AS DEL_PREVIOUS_USR_USERNAME, - CUR_USR.USR_USERNAME AS DEL_CURRENT_USR_USERNAME, - CUR_USR.USR_FIRSTNAME AS DEL_CURRENT_USR_FIRSTNAME, - CUR_USR.USR_LASTNAME AS DEL_CURRENT_USR_LASTNAME, - ACV.DEL_DELEGATE_DATE AS DEL_DELEGATE_DATE, - ACV.DEL_INIT_DATE AS DEL_INIT_DATE, - ACV.DEL_TASK_DUE_DATE AS DEL_DUE_DATE, - ACV.APP_TAS_TITLE AS DEL_CURRENT_TAS_TITLE, - ACV.DEL_PRIORITY, - ACV.DEL_THREAD_STATUS - FROM - ( - SELECT - CASE WHEN ACV1.PREVIOUS_USR_UID = \'\' AND ACV1.DEL_INDEX = 1 - THEN ACV1.USR_UID - ELSE ACV1.PREVIOUS_USR_UID END AS DEL_PREVIOUS_USR_UID, - ACV1.* - FROM ' . $this->dbName . '.APP_CACHE_VIEW ACV1 - JOIN - (SELECT - ACV_INT.APP_UID, - MAX(ACV_INT.DEL_INDEX) MAX_DEL_INDEX - FROM - ' . $this->dbName . '.APP_CACHE_VIEW ACV_INT - GROUP BY - ACV_INT.USR_UID, - ACV_INT.APP_UID - ) ACV2 - ON ACV2.APP_UID = ACV1.APP_UID AND ACV2.MAX_DEL_INDEX = ACV1.DEL_INDEX - ) ACV - LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID - LEFT JOIN ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID'; - - return $query; - } - - /** - * Update participated last list - * - * @see \WorkspaceTools->migrateList() - */ - public function updateListParticipatedLast() - { - $this->initPropel(true); - $query = 'UPDATE ' . $this->dbName . '.LIST_PARTICIPATED_LAST LPL, ( - SELECT - TASK.TAS_TITLE, - CUR_USER.APP_UID, - USERS.USR_UID, - USERS.USR_USERNAME, - USERS.USR_FIRSTNAME, - USERS.USR_LASTNAME - FROM ( - SELECT - APP_UID, - TAS_UID, - DEL_INDEX, - USR_UID - FROM ' . $this->dbName . '.APP_DELEGATION - WHERE DEL_LAST_INDEX = 1 - ) CUR_USER - LEFT JOIN ' . $this->dbName . '.USERS ON CUR_USER.USR_UID = USERS.USR_UID - LEFT JOIN ' . $this->dbName . '.TASK ON CUR_USER.TAS_UID = TASK.TAS_UID) USERS_VALUES - SET - LPL.DEL_CURRENT_USR_USERNAME = IFNULL(USERS_VALUES.USR_USERNAME, \'\'), - LPL.DEL_CURRENT_USR_FIRSTNAME = IFNULL(USERS_VALUES.USR_FIRSTNAME, \'\'), - LPL.DEL_CURRENT_USR_LASTNAME = IFNULL(USERS_VALUES.USR_LASTNAME, \'\'), - LPL.DEL_CURRENT_TAS_TITLE = IFNULL(USERS_VALUES.TAS_TITLE, \'\') - WHERE LPL.APP_UID = USERS_VALUES.APP_UID'; - - CLI::logging("> Updating the current users data on table LIST_PARTICIPATED_LAST\n"); - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $stmt->executeQuery($query); - } - /** * Return query to populate paused list * @@ -2940,7 +2705,6 @@ class WorkspaceTools */ public function regenerateListPaused() { - $this->initPropel(true); $query = 'INSERT INTO ' . $this->dbName . '.LIST_PAUSED ( APP_UID, @@ -3019,7 +2783,91 @@ class WorkspaceTools return $query; } - /*----------------------------------********---------------------------------*/ + /** + * Return query to populate participated last list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function regenerateListParticipatedLast() + { + $query = 'INSERT INTO ' . $this->dbName . '.LIST_PARTICIPATED_LAST + ( + APP_UID, + USR_UID, + DEL_INDEX, + TAS_UID, + PRO_UID, + APP_NUMBER, + APP_TITLE, + APP_PRO_TITLE, + APP_TAS_TITLE, + APP_STATUS, + DEL_PREVIOUS_USR_UID, + DEL_PREVIOUS_USR_USERNAME, + DEL_PREVIOUS_USR_FIRSTNAME, + DEL_PREVIOUS_USR_LASTNAME, + DEL_CURRENT_USR_USERNAME, + DEL_CURRENT_USR_FIRSTNAME, + DEL_CURRENT_USR_LASTNAME, + DEL_DELEGATE_DATE, + DEL_INIT_DATE, + DEL_DUE_DATE, + DEL_CURRENT_TAS_TITLE, + DEL_PRIORITY, + DEL_THREAD_STATUS) + + SELECT + ACV.APP_UID, + IF(ACV.USR_UID=\'\', \'SELF_SERVICES\', ACV.USR_UID), + ACV.DEL_INDEX, + ACV.TAS_UID, + ACV.PRO_UID, + ACV.APP_NUMBER, + ACV.APP_TITLE, + ACV.APP_PRO_TITLE, + ACV.APP_TAS_TITLE, + ACV.APP_STATUS, + DEL_PREVIOUS_USR_UID, + IFNULL(PRE_USR.USR_USERNAME, CUR_USR.USR_USERNAME) AS DEL_PREVIOUS_USR_USERNAME, + IFNULL(PRE_USR.USR_FIRSTNAME, CUR_USR.USR_FIRSTNAME) AS DEL_PREVIOUS_USR_USERNAME, + IFNULL(PRE_USR.USR_LASTNAME, CUR_USR.USR_LASTNAME) AS DEL_PREVIOUS_USR_USERNAME, + CUR_USR.USR_USERNAME AS DEL_CURRENT_USR_USERNAME, + CUR_USR.USR_FIRSTNAME AS DEL_CURRENT_USR_FIRSTNAME, + CUR_USR.USR_LASTNAME AS DEL_CURRENT_USR_LASTNAME, + ACV.DEL_DELEGATE_DATE AS DEL_DELEGATE_DATE, + ACV.DEL_INIT_DATE AS DEL_INIT_DATE, + ACV.DEL_TASK_DUE_DATE AS DEL_DUE_DATE, + ACV.APP_TAS_TITLE AS DEL_CURRENT_TAS_TITLE, + ACV.DEL_PRIORITY, + ACV.DEL_THREAD_STATUS + FROM + ( + SELECT + CASE WHEN ACV1.PREVIOUS_USR_UID = \'\' AND ACV1.DEL_INDEX = 1 + THEN ACV1.USR_UID + ELSE ACV1.PREVIOUS_USR_UID END AS DEL_PREVIOUS_USR_UID, + ACV1.* + FROM ' . $this->dbName . '.APP_CACHE_VIEW ACV1 + JOIN + (SELECT + ACV_INT.APP_UID, + MAX(ACV_INT.DEL_INDEX) MAX_DEL_INDEX + FROM + ' . $this->dbName . '.APP_CACHE_VIEW ACV_INT + GROUP BY + ACV_INT.USR_UID, + ACV_INT.APP_UID + ) ACV2 + ON ACV2.APP_UID = ACV1.APP_UID AND ACV2.MAX_DEL_INDEX = ACV1.DEL_INDEX + ) ACV + LEFT JOIN ' . $this->dbName . '.USERS PRE_USR ON ACV.PREVIOUS_USR_UID = PRE_USR.USR_UID + LEFT JOIN ' . $this->dbName . '.USERS CUR_USR ON ACV.USR_UID = CUR_USR.USR_UID'; + + return $query; + } + /** * Return query to populate unassigned list * @@ -3029,9 +2877,6 @@ class WorkspaceTools */ public function regenerateListUnassigned() { - $this->initPropel(true); - - //This executeQuery is very fast than Propel $query = 'INSERT INTO ' . $this->dbName . '.LIST_UNASSIGNED (APP_UID, DEL_INDEX, @@ -3077,7 +2922,128 @@ class WorkspaceTools return $query; } - /*----------------------------------********---------------------------------*/ + + /** + * Return query to update PRO_ID in list table + * + * @param string $list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListProId($list) { + $query = 'UPDATE ' . $list . ' AS LT + INNER JOIN ( + SELECT PROCESS.PRO_UID, PROCESS.PRO_ID + FROM PROCESS + ) AS PRO + ON (LT.PRO_UID = PRO.PRO_UID) + SET LT.PRO_ID = PRO.PRO_ID + WHERE LT.PRO_ID = 0'; + return $query; + } + + /** + * Return query to update USR_ID in list table + * + * @param string $list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListUsrId($list) { + $query = 'UPDATE ' . $list . ' AS LT + INNER JOIN ( + SELECT USERS.USR_UID, USERS.USR_ID + FROM USERS + ) AS USR + ON (LT.USR_UID = USR.USR_UID) + SET LT.USR_ID = USR.USR_ID + WHERE LT.USR_ID = 0'; + return $query; + } + + /** + * Return query to update TAS_ID in list table + * + * @param string $list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListTasId($list) { + $query = 'UPDATE ' . $list . ' AS LT + INNER JOIN ( + SELECT TASK.TAS_UID, TASK.TAS_ID + FROM TASK + ) AS TAS + ON (LT.TAS_UID = TAS.TAS_UID) + SET LT.TAS_ID = TAS.TAS_ID + WHERE LT.TAS_ID = 0'; + return $query; + } + + /** + * Return query to update APP_STATUS_ID in list table + * + * @para string $list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListAppStatusId($list) { + $query = "UPDATE " . $list . " + SET APP_STATUS_ID = (case + when APP_STATUS = 'DRAFT' then 1 + when APP_STATUS = 'TO_DO' then 2 + when APP_STATUS = 'COMPLETED' then 3 + when APP_STATUS = 'CANCELLED' then 4 + end) + WHERE APP_STATUS in ('DRAFT', 'TO_DO', 'COMPLETED', 'CANCELLED') AND APP_STATUS_ID = 0"; + return $query; + } + + /** + * Return query to update participated last list + * + * @return string + * + * @see \WorkspaceTools->migrateList() + */ + public function updateListParticipatedLastCurrentUser() + { + $query = 'UPDATE ' . $this->dbName . '.LIST_PARTICIPATED_LAST LPL, ( + SELECT + TASK.TAS_TITLE, + CUR_USER.APP_UID, + USERS.USR_UID, + USERS.USR_USERNAME, + USERS.USR_FIRSTNAME, + USERS.USR_LASTNAME + FROM ( + SELECT + APP_UID, + TAS_UID, + DEL_INDEX, + USR_UID + FROM ' . $this->dbName . '.APP_DELEGATION + WHERE DEL_LAST_INDEX = 1 + ) CUR_USER + LEFT JOIN ' . $this->dbName . '.USERS ON CUR_USER.USR_UID = USERS.USR_UID + LEFT JOIN ' . $this->dbName . '.TASK ON CUR_USER.TAS_UID = TASK.TAS_UID) USERS_VALUES + SET + LPL.DEL_CURRENT_USR_USERNAME = IFNULL(USERS_VALUES.USR_USERNAME, \'\'), + LPL.DEL_CURRENT_USR_FIRSTNAME = IFNULL(USERS_VALUES.USR_FIRSTNAME, \'\'), + LPL.DEL_CURRENT_USR_LASTNAME = IFNULL(USERS_VALUES.USR_LASTNAME, \'\'), + LPL.DEL_CURRENT_TAS_TITLE = IFNULL(USERS_VALUES.TAS_TITLE, \'\') + WHERE LPL.APP_UID = USERS_VALUES.APP_UID'; + + return $query; + } /** * This function checks if List tables are going to migrated From 9d0692f13ceea1f86238575d339a18fe4c31f835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 8 Jul 2019 14:46:00 -0400 Subject: [PATCH 096/100] Fix errors found in FT. Command 'migrate-list-unassigned'. User Id in APP_DELAY. --- workflow/engine/bin/tasks/cliWorkspaces.php | 8 +++---- workflow/engine/classes/WorkspaceTools.php | 23 +++++++++++++++++++++ workflow/engine/classes/model/AppDelay.php | 2 ++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index a195e8378..c45935522 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -1038,7 +1038,7 @@ function migrate_new_cases_lists($command, $args, $opts) foreach ($workspaces as $workspace) { print_r("Upgrading database in " . pakeColor::colorize($workspace->name, "INFO") . "\n"); try { - $workspace->migrateList($workspace->name, true, $lang); + $workspace->migrateList(true, $lang); echo "> List tables are done\n"; } catch (Exception $e) { G::outRes("> Error: " . CLI::error($e->getMessage()) . "\n"); @@ -1063,17 +1063,15 @@ function migrate_counters($command, $args) } } -function migrate_list_unassigned($command, $args, $opts) +function migrate_list_unassigned($command, $args) { $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 Unassigned List in" . pakeColor::colorize($workspace->name, "INFO") . "\n"); try { - $workspace->regenerateListUnassigned(); + $workspace->runRegenerateListUnassigned(); echo "> Unassigned List is done\n"; } catch (Exception $e) { G::outRes("> Error: " . CLI::error($e->getMessage()) . "\n"); diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index f7f6d86e2..f4badbba6 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -2923,6 +2923,29 @@ class WorkspaceTools return $query; } + /** + * Re-populate only the unassigned list + */ + public function runRegenerateListUnassigned() + { + // Init Propel + $this->initPropel(true); + + // Initialize Propel objects + $con = Propel::getConnection("workflow"); + $stmt = $con->createStatement(); + + // Clean table + $stmt->executeQuery('TRUNCATE ' . $this->dbName . '.LIST_UNASSIGNED;'); + + // Populate table + $stmt->executeQuery($this->regenerateListUnassigned()); + + // Update some fields + $stmt->executeQuery($this->updateListProId('LIST_UNASSIGNED')); + $stmt->executeQuery($this->updateListTasId('LIST_UNASSIGNED')); + } + /** * Return query to update PRO_ID in list table * diff --git a/workflow/engine/classes/model/AppDelay.php b/workflow/engine/classes/model/AppDelay.php index 06d9d269c..6157d6907 100644 --- a/workflow/engine/classes/model/AppDelay.php +++ b/workflow/engine/classes/model/AppDelay.php @@ -199,6 +199,8 @@ class AppDelay extends BaseAppDelay if (empty($usrUid)) { global $RBAC; $usrUid = $RBAC->aUserInfo['USER_INFO']['USR_UID']; + } + if (empty($usrId)) { $u = new Users(); $usrId = $u->load($usrUid)['USR_ID']; } From 65c49226190c2a39f740fa9f893687839a059df5 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Jul 2019 10:23:48 -0400 Subject: [PATCH 097/100] solved conflict composer.lock, config/app.php, workflow/engine/classes/SpoolRun.php --- composer.lock | 3511 +++++++++++++++----------- config/app.php | 9 +- workflow/engine/classes/SpoolRun.php | 80 +- 3 files changed, 2047 insertions(+), 1553 deletions(-) diff --git a/composer.lock b/composer.lock index f63ea0385..3e87b567a 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", + "content-hash": "f548a9edab2774eff09bb261eb05c6d0", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" + "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-11-29T15:23:08+00:00" + "time": "2018-12-18T17:10:59+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "e4176c9772842904552997702e549035b6ba641d" + "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-11-28T17:54:53+00:00" + "time": "2018-12-10T15:33:17+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" + "reference": "4449e02225bc1d351907ceee79b2411b428df517" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-11-16T14:26:15+00:00" + "time": "2018-12-18T17:11:02+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,20 +307,191 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.1", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.9", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2019-06-23T10:14:27+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -353,7 +524,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "geshi/geshi", @@ -427,7 +598,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -438,6 +609,189 @@ ], "time": "2015-10-16T22:11:08+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -527,42 +881,94 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v5.4.36", + "name": "kylekatarnls/update-helper", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.6", + "composer-plugin-api": "^1.1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "^2.0.x-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-06-05T08:34:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.7.28", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", - "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "~3.2", - "symfony/debug": "~3.2", - "symfony/finder": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/process": "~3.2", - "symfony/routing": "~3.2", - "symfony/var-dumper": "~3.2", - "tijsverkoyen/css-to-inline-styles": "~2.2", - "vlucas/phpdotenv": "~2.2" + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", + "league/flysystem": "^1.0.8", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", + "php": "^7.1.3", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", + "vlucas/phpdotenv": "^2.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" }, "replace": { "illuminate/auth": "self.version", @@ -577,7 +983,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -593,39 +998,50 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", - "mockery/mockery": "~0.9.4", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.7", - "predis/predis": "~1.0", - "symfony/css-selector": "~3.2", - "symfony/dom-crawler": "~3.2" + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.1.4", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", + "predis/predis": "^1.1.1", + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -653,7 +1069,121 @@ "framework", "laravel" ], - "time": "2017-08-30T09:26:16+00:00" + "time": "2019-02-26T15:41:34+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" }, { "name": "laravel/tinker", @@ -719,17 +1249,72 @@ "time": "2018-10-12T19:39:35+00:00" }, { - "name": "league/flysystem", - "version": "1.0.49", + "name": "lcobucci/jwt", + "version": "3.3.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, + { + "name": "league/flysystem", + "version": "1.0.53", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -800,7 +1385,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "libchart/libchart", @@ -828,7 +1413,7 @@ ], "authors": [ { - "name": "Jean-Marc Trémeaux", + "name": "Jean-Marc Tr??meaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -854,12 +1439,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8" + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", "shasum": "" }, "require": { @@ -1005,77 +1590,36 @@ ], "time": "2016-04-12T18:29:35+00:00" }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" - }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1105,7 +1649,55 @@ "datetime", "time" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2019-06-11T09:07:59+00:00" + }, + { + "name": "nexmo/client", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/php-parser", @@ -1159,34 +1751,91 @@ "time": "2018-02-28T20:30:58+00:00" }, { - "name": "paragonie/random_compat", - "version": "v2.0.17", + "name": "opis/closure", + "version": "3.3.0", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "url": "https://github.com/opis/closure.git", + "reference": "f846725591203098246276b2e7b9e8b7814c4965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", + "reference": "f846725591203098246276b2e7b9e8b7814c4965", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^5.4 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-05-31T20:04:32+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1205,7 +1854,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { "name": "pdepend/pdepend", @@ -1249,16 +1898,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.3", + "version": "1.4.7", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", "shasum": "" }, "require": { @@ -1269,8 +1918,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "bz2 compression support.", - "ext-xz": "lzma2 compression support.", + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1305,26 +1954,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class", + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2017-06-11T17:28:11+00:00" + "time": "2019-04-08T13:15:55+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -1358,24 +2007,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20T20:28:12+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.6", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "052868b244d31f822796e7e9981f62557eb256d4" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", - "reference": "052868b244d31f822796e7e9981f62557eb256d4", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1402,7 +2051,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2018-08-22T19:28:09+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", @@ -1459,6 +2108,172 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "php-imap/php-imap", "version": "3.0.6", @@ -1530,27 +2345,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1586,7 +2401,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2017-11-04T09:26:05+00:00" + "time": "2018-11-15T22:32:31+00:00" }, { "name": "psr/container", @@ -1637,6 +2452,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -1675,6 +2592,54 @@ ], "time": "2012-12-21T11:40:51+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -1924,29 +2889,37 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1974,36 +2947,36 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081" + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081", + "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -2011,7 +2984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2038,41 +3011,47 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-08T06:33:08+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -2080,7 +3059,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2107,20 +3086,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { @@ -2160,36 +3139,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/http-kernel": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2216,38 +3195,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-06-19T15:27:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" + "reference": "b851928be349c065197fdc0832f78d85139e3903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", + "reference": "b851928be349c065197fdc0832f78d85139e3903", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2260,7 +3241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2287,34 +3268,41 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:23+00:00" + "time": "2019-06-15T04:08:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2323,7 +3311,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2350,30 +3338,88 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.19", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "shasum": "" + }, + "require": { + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2400,29 +3446,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2449,34 +3495,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2503,34 +3550,37 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-26T09:25:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -2538,34 +3588,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2592,20 +3642,79 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:04:48+00:00" + "time": "2019-06-26T14:26:16+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "name": "symfony/mime", + "version": "v4.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-06-04T09:22:54+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "82ebae02209c21113908c229e9883c419720738a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -2617,7 +3726,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2650,20 +3759,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "symfony/polyfill-iconv", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-03-04T13:44:35+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { @@ -2675,7 +3905,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2709,35 +3939,89 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" }, "files": [ "bootstrap.php" @@ -2760,7 +4044,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -2768,29 +4052,29 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/process", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2817,43 +4101,42 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -2861,7 +4144,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2894,37 +4177,103 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-06-26T13:54:39+00:00" }, { - "name": "symfony/translation", - "version": "v3.4.19", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2935,7 +4284,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2962,42 +4311,106 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.4.19", + "name": "symfony/translation-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-intl": "To show region name in time zone dump", - "ext-symfony_debug": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3031,7 +4444,7 @@ "debug", "dump" ], - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-06-17T17:37:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3140,20 +4553,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -3161,7 +4575,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3186,65 +4600,76 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" - } - ], - "packages-dev": [ + "time": "2019-01-29T11:11:52+00:00" + }, { - "name": "beberlei/assert", - "version": "v2.9.6", + "name": "zendframework/zend-diactoros", + "version": "2.1.2", "source": { "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=5.3" + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, "files": [ - "lib/Assert/functions.php" - ] + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", + "description": "PSR HTTP Message implementations", "keywords": [ - "assert", - "assertion", - "validation" + "http", + "psr", + "psr-7" ], - "time": "2018-06-11T17:15:25+00:00" - }, + "time": "2019-04-29T21:11:00+00:00" + } + ], + "packages-dev": [ { "name": "behat/behat", "version": "v3.5.0", @@ -3325,16 +4750,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -3342,8 +4767,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3380,7 +4805,7 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", @@ -3545,51 +4970,6 @@ ], "time": "2017-04-04T11:38:05+00:00" }, - { - "name": "clue/graph", - "version": "v0.9.0", - "source": { - "type": "git", - "url": "https://github.com/clue/graph.git", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", - "graphp/graphviz": "GraphViz graph drawing / DOT output" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fhaculty\\Graph\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A mathematical graph/network library written in PHP", - "homepage": "https://github.com/clue/graph", - "keywords": [ - "edge", - "graph", - "mathematical", - "network", - "vertex" - ], - "time": "2015-03-07T18:11:31+00:00" - }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -3623,32 +5003,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3668,212 +5050,72 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { - "name": "facebook/webdriver", - "version": "1.6.0", + "name": "filp/whoops", + "version": "2.1.6", "source": { "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "url": "https://github.com/filp/whoops.git", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" + "php": "^5.5.9 || ^7.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8 || ^5.0", + "symfony/var-dumper": "^2.6 || ^3.0" }, "suggest": { - "ext-SimpleXML": "For Firefox profile creation" + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" }, "type": "library", "extra": { "branch-alias": { - "dev-community": "1.5-dev" + "dev-master": "2.0-dev" } }, "autoload": { "psr-4": { - "Facebook\\WebDriver\\": "lib/" + "Whoops\\": "src/Whoops/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2018-05-16T17:37:13+00:00" - }, - { - "name": "florianwolters/component-core-stringutils", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" + "MIT" ], "authors": [ { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", "role": "Developer" } ], - "description": "Offers operations on the data type string as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", "keywords": [ - "helper", - "language", - "string", - "wrapper" + "error", + "exception", + "handling", + "library", + "whoops", + "zf2" ], - "time": "2013-07-01T10:24:07+00:00" - }, - { - "name": "florianwolters/component-util-reflection", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": ">=0.2-beta", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Provides operations for the PHP Reflection API as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", - "keywords": [ - "reflection", - "utility" - ], - "time": "2013-03-19T16:42:41+00:00" - }, - { - "name": "florianwolters/component-util-singleton", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": "0.3.*", - "florianwolters/component-util-reflection": "0.2.*", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": [ - "src/php", - "src/tests/unit-tests/php", - "src/tests/mocks/php" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", - "keywords": [ - "creation", - "pattern", - "singleton", - "utility" - ], - "time": "2013-06-29T12:35:22+00:00" + "time": "2017-02-18T14:22:27+00:00" }, { "name": "fzaninotto/faker", @@ -3925,237 +5167,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "graphp/algorithms", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/graphp/algorithms.git", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", - "shasum": "" - }, - "require": { - "clue/graph": "~0.9.0|~0.8.0", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Graphp\\Algorithms\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "Common mathematical graph algorithms", - "homepage": "https://github.com/graphp/algorithms", - "keywords": [ - "Graph algorithms", - "dijkstra", - "kruskal", - "minimum spanning tree", - "moore-bellman-ford", - "prim", - "shortest path" - ], - "time": "2015-03-08T10:12:01+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2017-03-20T17:10:46+00:00" - }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -4215,108 +5226,30 @@ ], "time": "2017-06-30T04:02:48+00:00" }, - { - "name": "lmc/steward", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/lmc-eu/steward.git", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "shasum": "" - }, - "require": { - "beberlei/assert": "^2.7", - "clue/graph": "~0.9.0", - "doctrine/inflector": "~1.0", - "ext-curl": "*", - "ext-zip": "*", - "facebook/webdriver": "^1.4.0", - "florianwolters/component-util-singleton": "0.3.2", - "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.4.2", - "ondram/ci-detector": "^2.1", - "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7.11", - "symfony/console": "^3.3.0", - "symfony/event-dispatcher": "~3.0", - "symfony/filesystem": "~3.0", - "symfony/finder": "~3.0", - "symfony/options-resolver": "^3.2", - "symfony/process": "^3.2.0", - "symfony/stopwatch": "^3.0", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "~1.0", - "squizlabs/php_codesniffer": "^2.4.1", - "symfony/var-dumper": "^3.2" - }, - "suggest": { - "ext-posix": "For colored output", - "ext-xdebug": "For remote tests debugging" - }, - "bin": [ - "bin/steward", - "bin/steward.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Lmc\\Steward\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "LMC s.r.o.", - "homepage": "https://github.com/lmc-eu" - } - ], - "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", - "keywords": [ - "phpunit", - "selenium", - "testing", - "webdriver" - ], - "time": "2018-07-26T22:03:36+00:00" - }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -4339,337 +5272,7 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" - }, - { - "name": "nette/caching", - "version": "v2.5.8", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", - "shasum": "" - }, - "require": { - "nette/finder": "^2.2 || ~3.0.0", - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^2.4 || ~3.0.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "? Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2018-03-21T11:04:32+00:00" - }, - { - "name": "nette/finder", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", - "shasum": "" - }, - "require": { - "nette/utils": "~2.4", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "time": "2018-06-28T11:49:23+00:00" - }, - { - "name": "nette/reflection", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "^2.2 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "^2.4 || ^3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Reflection: docblock annotations parser and common reflection classes", - "homepage": "https://nette.org", - "keywords": [ - "annotation", - "nette", - "reflection" - ], - "time": "2017-07-11T19:28:57+00:00" - }, - { - "name": "nette/utils", - "version": "v2.5.3", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/loader.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "time": "2018-09-18T10:22:16+00:00" - }, - { - "name": "ondram/ci-detector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12", - "phpunit/phpunit": "^5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "OndÅ™ej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect current continuous integration server and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "adapter", - "appveyor", - "bamboo", - "continuous integration", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "time": "2017-05-26T16:39:57+00:00" + "time": "2019-04-07T13:18:21+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4727,29 +5330,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4768,7 +5377,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4819,16 +5428,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4849,8 +5458,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4878,7 +5487,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5082,29 +5691,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5127,7 +5736,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5271,56 +5880,6 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5836,16 +6395,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -5878,25 +6437,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.19", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "420458095cf60025eb0841276717e0da7f75e50e" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", - "reference": "420458095cf60025eb0841276717e0da7f75e50e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -5939,127 +6498,24 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v3.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2018-11-11T19:48:54+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v3.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "0f43969ab2718de55c1c1158dce046668079788d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", - "reference": "0f43969ab2718de55c1c1158dce046668079788d", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6074,7 +6530,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6101,24 +6557,25 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-04-06T14:04:46+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6151,20 +6608,20 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.0.0", + "version": "9.1.1", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", "shasum": "" }, "require": { @@ -6210,7 +6667,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-10-07T17:38:02+00:00" + "time": "2018-12-30T23:16:27+00:00" } ], "aliases": [], @@ -6225,7 +6682,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.1" }, "platform-dev": [] } diff --git a/config/app.php b/config/app.php index bd0116a86..02c5a1b72 100644 --- a/config/app.php +++ b/config/app.php @@ -9,24 +9,23 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), - 'log' => env('APP_LOG', 'single'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'key' => env('APP_KEY', 'base64:rU28h/tElUn/eiLY0qC24jJq1rakvAFRoRl1DWxj/kM='), 'cipher' => 'AES-256-CBC', 'timezone' => 'UTC', 'providers' => [ - CacheServiceProvider::class, FilesystemServiceProvider::class, + CacheServiceProvider::class, + ViewServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, - ViewServiceProvider::class, - + Illuminate\Notifications\NotificationServiceProvider::class, ], + 'aliases' => [ 'Crypt' => Illuminate\Support\Facades\Crypt::class ], diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index faecdc5d8..b3468c7c7 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -91,6 +91,16 @@ class SpoolRun $this->appMsgUid = $v; } + /** + * Get the fileData property + * + * @return array + */ + public function getFileData() + { + return $this->fileData; + } + /** * Set the $spoolId * @@ -232,32 +242,52 @@ class SpoolRun } /** - * set email parameters + * Set email parameters * - * @param string $sAppMsgUid , $sSubject, $sFrom, $sTo, $sBody, $sDate, $sCC, $sBCC, $sTemplate - * @return none + * @param string $appMsgUid + * @param string $subject + * @param string $from + * @param string $to + * @param string $body + * @param string $date + * @param string $cc + * @param string $bcc + * @param string $template + * @param array $attachments + * @param bool $contentTypeIsHtml + * @param string $error + * + * @see SpoolRun->create() + * @see SpoolRun->resendEmails() */ - public function setData($sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate = "", $sCC = "", $sBCC = "", $sTemplate = "", $aAttachment = array(), $bContentTypeIsHtml = true, $sError = "") + public function setData($appMsgUid, $subject, $from, $to, $body, $date = '', $cc = '', $bcc = '', $template = '', $attachments = [], + $contentTypeIsHtml = true, $error = '') { - $this->spoolId = $sAppMsgUid; - $this->fileData['subject'] = $sSubject; - $this->fileData['from'] = $sFrom; - $this->fileData['to'] = $sTo; - $this->fileData['body'] = $sBody; - $this->fileData['date'] = ($sDate != '' ? $sDate : date('Y-m-d H:i:s')); - $this->fileData['cc'] = $sCC; - $this->fileData['bcc'] = $sBCC; - $this->fileData['template'] = $sTemplate; - $this->fileData['attachments'] = $aAttachment; - $this->fileData['envelope_to'] = array(); - $this->fileData["contentTypeIsHtml"] = $bContentTypeIsHtml; - $this->fileData["error"] = $sError; + // Fill "fileData" property + $this->spoolId = $appMsgUid; + $this->fileData['subject'] = $subject; + $this->fileData['from'] = $from; + $this->fileData['to'] = $to; + $this->fileData['body'] = $body; + $this->fileData['date'] = (!empty($date) ? $date : date('Y-m-d H:i:s')); + $this->fileData['cc'] = $cc; + $this->fileData['bcc'] = $bcc; + $this->fileData['template'] = $template; + $this->fileData['attachments'] = $attachments; + $this->fileData["contentTypeIsHtml"] = $contentTypeIsHtml; + $this->fileData["error"] = $error; + // Initialize some values used internally + $this->fileData['envelope_to'] = []; + $this->fileData['envelope_cc'] = []; + $this->fileData['envelope_bcc'] = []; + + // Domain validation when the email engine is "OpenMail" if (array_key_exists('MESS_ENGINE', $this->config)) { - if ($this->config['MESS_ENGINE'] == 'OPENMAIL') { - if ($this->config['MESS_SERVER'] != '') { - if (($sAux = @gethostbyaddr($this->config['MESS_SERVER']))) { - $this->fileData['domain'] = $sAux; + if ($this->config['MESS_ENGINE'] === 'OPENMAIL') { + if (!empty($this->config['MESS_SERVER'])) { + if (($domain = @gethostbyaddr($this->config['MESS_SERVER']))) { + $this->fileData['domain'] = $domain; } else { $this->fileData['domain'] = $this->config['MESS_SERVER']; } @@ -841,4 +871,12 @@ class SpoolRun return $appMsgUid; } + + /** + * Run the private method "handleEnvelopeTo", this method was created in order to use in the unit tests + */ + public function runHandleEnvelopeTo() + { + $this->handleEnvelopeTo(); + } } From 1df3032abf8c10e548933278896c49cb64d1b55f Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Jul 2019 10:55:30 -0400 Subject: [PATCH 098/100] Revert "solved conflict composer.lock, config/app.php, workflow/engine/classes/SpoolRun.php" This reverts commit fe9ac14379855e61eb560dabc1757eb7313210a9. --- composer.lock | 3521 +++++++++++--------------- config/app.php | 9 +- workflow/engine/classes/SpoolRun.php | 80 +- 3 files changed, 1558 insertions(+), 2052 deletions(-) diff --git a/composer.lock b/composer.lock index 3e87b567a..f63ea0385 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f548a9edab2774eff09bb261eb05c6d0", + "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" + "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-12-18T17:10:59+00:00" + "time": "2018-11-29T15:23:08+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" + "reference": "e4176c9772842904552997702e549035b6ba641d" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-12-10T15:33:17+00:00" + "time": "2018-11-28T17:54:53+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "4449e02225bc1d351907ceee79b2411b428df517" + "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-12-18T17:11:02+00:00" + "time": "2018-11-16T14:26:15+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.3.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "4.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,191 +307,20 @@ "singularize", "string" ], - "time": "2018-01-09T20:05:19+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "^4.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "time": "2019-06-08T11:03:04+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2019-03-31T00:38:28+00:00" - }, - { - "name": "egulias/email-validator", - "version": "2.1.9", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", - "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" - }, - "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "time": "2019-06-23T10:14:27+00:00" + "time": "2015-11-06T14:35:42+00:00" }, { "name": "erusev/parsedown", - "version": "1.7.3", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", "shasum": "" }, "require": { @@ -524,7 +353,7 @@ "markdown", "parser" ], - "time": "2019-03-17T18:48:37+00:00" + "time": "2018-03-08T01:11:30+00:00" }, { "name": "geshi/geshi", @@ -598,7 +427,7 @@ "src/" ] }, - "notification-url": "https://packagist.org/downloads/", + "notification-url": "http://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -609,189 +438,6 @@ ], "time": "2015-10-16T22:11:08+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -880,95 +526,43 @@ "description": "Highlight PHP code in terminal", "time": "2018-09-29T18:48:56+00:00" }, - { - "name": "kylekatarnls/update-helper", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/kylekatarnls/update-helper.git", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0", - "php": ">=5.3.0" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "composer/composer": "^2.0.x-dev", - "phpunit/phpunit": ">=4.8.35 <6.0" - }, - "type": "composer-plugin", - "extra": { - "class": "UpdateHelper\\ComposerPlugin" - }, - "autoload": { - "psr-0": { - "UpdateHelper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle", - "email": "kylekatarnls@gmail.com" - } - ], - "description": "Update helper", - "time": "2019-06-05T08:34:23+00:00" - }, { "name": "laravel/framework", - "version": "v5.7.28", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" + "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", + "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "erusev/parsedown": "^1.7", + "doctrine/inflector": "~1.1", + "erusev/parsedown": "~1.6", "ext-mbstring": "*", "ext-openssl": "*", - "laravel/nexmo-notification-channel": "^1.0", - "laravel/slack-notification-channel": "^1.0", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3", - "opis/closure": "^3.1", - "php": "^7.1.3", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.1", - "symfony/debug": "^4.1", - "symfony/finder": "^4.1", - "symfony/http-foundation": "^4.1", - "symfony/http-kernel": "^4.1", - "symfony/process": "^4.1", - "symfony/routing": "^4.1", - "symfony/var-dumper": "^4.1", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^2.2" - }, - "conflict": { - "tightenco/collect": "<5.5.33" + "league/flysystem": "~1.0", + "monolog/monolog": "~1.11", + "mtdowling/cron-expression": "~1.0", + "nesbot/carbon": "~1.20", + "paragonie/random_compat": "~1.4|~2.0", + "php": ">=5.6.4", + "ramsey/uuid": "~3.0", + "swiftmailer/swiftmailer": "~5.4", + "symfony/console": "~3.2", + "symfony/debug": "~3.2", + "symfony/finder": "~3.2", + "symfony/http-foundation": "~3.2", + "symfony/http-kernel": "~3.2", + "symfony/process": "~3.2", + "symfony/routing": "~3.2", + "symfony/var-dumper": "~3.2", + "tijsverkoyen/css-to-inline-styles": "~2.2", + "vlucas/phpdotenv": "~2.2" }, "replace": { "illuminate/auth": "self.version", @@ -983,6 +577,7 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", + "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -998,50 +593,39 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "tightenco/collect": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.7.*", - "pda/pheanstalk": "^3.0|^4.0", - "phpunit/phpunit": "^7.5", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.1", - "symfony/dom-crawler": "^4.1", - "true/punycode": "^2.1" + "aws/aws-sdk-php": "~3.0", + "doctrine/dbal": "~2.5", + "mockery/mockery": "~0.9.4", + "pda/pheanstalk": "~3.0", + "phpunit/phpunit": "~5.7", + "predis/predis": "~1.0", + "symfony/css-selector": "~3.2", + "symfony/dom-crawler": "~3.2" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", + "laravel/tinker": "Required to use the tinker console command (~1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "nexmo/client": "Required to use the Nexmo transport (~1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", + "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -1069,121 +653,7 @@ "framework", "laravel" ], - "time": "2019-02-26T15:41:34+00:00" - }, - { - "name": "laravel/nexmo-notification-channel", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/nexmo-notification-channel.git", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", - "shasum": "" - }, - "require": { - "nexmo/client": "^1.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\NexmoChannelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Nexmo Notification Channel for laravel.", - "keywords": [ - "laravel", - "nexmo", - "notifications" - ], - "time": "2018-12-04T12:57:08+00:00" - }, - { - "name": "laravel/slack-notification-channel", - "version": "v1.0.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\SlackChannelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Slack Notification Channel for laravel.", - "keywords": [ - "laravel", - "notifications", - "slack" - ], - "time": "2018-12-12T13:12:06+00:00" + "time": "2017-08-30T09:26:16+00:00" }, { "name": "laravel/tinker", @@ -1248,73 +718,18 @@ ], "time": "2018-10-12T19:39:35+00:00" }, - { - "name": "lcobucci/jwt", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-openssl": "*", - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "Lcobucci\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" - } - ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": [ - "JWS", - "jwt" - ], - "time": "2019-05-24T18:30:49+00:00" - }, { "name": "league/flysystem", - "version": "1.0.53", + "version": "1.0.49", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" + "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", + "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", "shasum": "" }, "require": { @@ -1385,7 +800,7 @@ "sftp", "storage" ], - "time": "2019-06-18T20:09:29+00:00" + "time": "2018-11-23T23:41:29+00:00" }, { "name": "libchart/libchart", @@ -1413,7 +828,7 @@ ], "authors": [ { - "name": "Jean-Marc Tr??meaux", + "name": "Jean-Marc Trémeaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -1439,12 +854,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" + "reference": "188968f6a15796077350f1be9c461f8d02c559a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", - "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", + "reference": "188968f6a15796077350f1be9c461f8d02c559a8", "shasum": "" }, "require": { @@ -1591,35 +1006,76 @@ "time": "2016-04-12T18:29:35+00:00" }, { - "name": "nesbot/carbon", - "version": "1.39.0", + "name": "mtdowling/cron-expression", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" + "url": "https://github.com/mtdowling/cron-expression.git", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", - "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2017-01-23T04:29:33+00:00" + }, + { + "name": "nesbot/carbon", + "version": "1.36.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", "shasum": "" }, "require": { - "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { - "composer/composer": "^1.2", - "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "bin": [ - "bin/upgrade-carbon" - ], + "suggest": { + "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", + "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." + }, "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1649,55 +1105,7 @@ "datetime", "time" ], - "time": "2019-06-11T09:07:59+00:00" - }, - { - "name": "nexmo/client", - "version": "1.8.1", - "source": { - "type": "git", - "url": "https://github.com/Nexmo/nexmo-php.git", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", - "shasum": "" - }, - "require": { - "lcobucci/jwt": "^3.2", - "php": ">=5.6", - "php-http/client-implementation": "^1.0", - "php-http/guzzle6-adapter": "^1.0", - "zendframework/zend-diactoros": "^1.8.4 || ^2.0" - }, - "require-dev": { - "estahn/phpunit-json-assertions": "^1.0.0", - "php-http/mock-client": "^0.3.0", - "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^3.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Nexmo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tim Lytle", - "email": "tim@nexmo.com", - "homepage": "http://twitter.com/tjlytle", - "role": "Developer" - } - ], - "description": "PHP Client for using Nexmo's API.", - "time": "2019-05-13T20:27:43+00:00" + "time": "2018-11-22T18:23:02+00:00" }, { "name": "nikic/php-parser", @@ -1750,92 +1158,35 @@ ], "time": "2018-02-28T20:30:58+00:00" }, - { - "name": "opis/closure", - "version": "3.3.0", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "f846725591203098246276b2e7b9e8b7814c4965" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", - "reference": "f846725591203098246276b2e7b9e8b7814c4965", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "time": "2019-05-31T20:04:32+00:00" - }, { "name": "paragonie/random_compat", - "version": "v9.99.99", + "version": "v2.0.17", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", + "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", "shasum": "" }, "require": { - "php": "^7" + "php": ">=5.2.0" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" + "phpunit/phpunit": "4.*|5.*" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1854,7 +1205,7 @@ "pseudorandom", "random" ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2018-07-04T16:31:37+00:00" }, { "name": "pdepend/pdepend", @@ -1898,16 +1249,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.7", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", - "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", "shasum": "" }, "require": { @@ -1918,8 +1269,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "Bz2 compression support.", - "ext-xz": "Lzma2 compression support.", + "ext-bz2": "bz2 compression support.", + "ext-xz": "lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1954,26 +1305,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", + "description": "Tar file management class", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2019-04-08T13:15:55+00:00" + "time": "2017-06-11T17:28:11+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.2", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", - "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", "shasum": "" }, "type": "library", @@ -2007,24 +1358,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2019-02-06T16:52:33+00:00" + "time": "2015-07-20T20:28:12+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.9", + "version": "v1.10.6", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" + "reference": "052868b244d31f822796e7e9981f62557eb256d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", - "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", + "reference": "052868b244d31f822796e7e9981f62557eb256d4", "shasum": "" }, "require": { - "pear/console_getopt": "~1.4", + "pear/console_getopt": "~1.3", "pear/pear_exception": "~1.0" }, "replace": { @@ -2051,7 +1402,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2019-03-13T18:15:44+00:00" + "time": "2018-08-22T19:28:09+00:00" }, { "name": "pear/pear_exception", @@ -2108,172 +1459,6 @@ ], "time": "2015-02-10T20:07:52+00:00" }, - { - "name": "php-http/guzzle6-adapter", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/guzzle6-adapter.git", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "php-http/httplug": "^1.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "php-http/adapter-integration-tests": "^0.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Adapter\\Guzzle6\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, - { - "name": "David de Boer", - "email": "david@ddeboer.nl" - } - ], - "description": "Guzzle 6 HTTP Adapter", - "homepage": "http://httplug.io", - "keywords": [ - "Guzzle", - "http" - ], - "time": "2016-05-10T06:13:32+00:00" - }, - { - "name": "php-http/httplug", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "php-http/promise": "^1.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "time": "2016-08-31T08:30:17+00:00" - }, - { - "name": "php-http/promise", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", - "shasum": "" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "time": "2016-01-26T13:27:02+00:00" - }, { "name": "php-imap/php-imap", "version": "3.0.6", @@ -2345,27 +1530,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -2401,7 +1586,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2018-11-15T22:32:31+00:00" + "time": "2017-11-04T09:26:05+00:00" }, { "name": "psr/container", @@ -2452,108 +1637,6 @@ ], "time": "2017-02-14T16:28:37+00:00" }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "time": "2019-04-30T12:38:16+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "psr/log", "version": "1.0.0", @@ -2592,54 +1675,6 @@ ], "time": "2012-12-21T11:40:51+00:00" }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" - }, { "name": "psy/psysh", "version": "v0.9.9", @@ -2889,37 +1924,29 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.1", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=5.3.3" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "symfony/phpunit-bridge": "~3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -2947,36 +1974,36 @@ "mail", "mailer" ], - "time": "2019-04-21T09:21:45+00:00" + "time": "2018-07-31T09:26:32+00:00" }, { "name": "symfony/config", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" + "reference": "8a660daeb65dedbe0b099529f65e61866c055081" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", - "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", + "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", + "reference": "8a660daeb65dedbe0b099529f65e61866c055081", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/filesystem": "~3.4|~4.0", + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<3.4" + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" }, "require-dev": { - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/messenger": "~4.1", - "symfony/yaml": "~3.4|~4.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -2984,7 +2011,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3011,47 +2038,41 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-06-08T06:33:08+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/console", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", - "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", + "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, - "provide": { - "psr/log-implementation": "1.0" - }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", + "symfony/config": "~3.3|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" + "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log": "For using the console logger", + "psr/log-implementation": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -3059,7 +2080,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3086,20 +2107,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" + "time": "2018-11-26T12:48:07+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.29", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" + "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", + "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", "shasum": "" }, "require": { @@ -3139,36 +2160,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/debug", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" + "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", - "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", + "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": "<3.4" + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3195,40 +2216,38 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-06-19T15:27:09+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "b851928be349c065197fdc0832f78d85139e3903" + "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", - "reference": "b851928be349c065197fdc0832f78d85139e3903", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", + "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.2" + "php": "^5.5.9|>=7.0.8", + "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<4.3", - "symfony/finder": "<3.4", + "symfony/config": "<3.3.7", + "symfony/finder": "<3.3", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" + "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "^4.3", - "symfony/expression-language": "~3.4|~4.0", + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3241,7 +2260,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3268,41 +2287,34 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-06-15T04:08:07+00:00" + "time": "2018-11-20T16:14:23+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" + "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", - "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", + "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3311,7 +2323,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3338,88 +2350,30 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-06-20T06:46:26+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/filesystem", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", - "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3446,29 +2400,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-23T08:51:25+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/finder", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", - "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3495,35 +2449,34 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" + "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", - "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/mime": "^4.3", - "symfony/polyfill-mbstring": "~1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" + "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3550,37 +2503,34 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-26T09:25:00+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" + "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", - "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", + "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php73": "^1.9" + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", + "symfony/var-dumper": "<3.3", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -3588,34 +2538,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.3", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.10|^4.0.10", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/translation-contracts": "^1.1", - "symfony/var-dumper": "^4.1.1", - "twig/twig": "^1.34|^2.4" + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", + "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3642,79 +2592,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-26T14:26:16+00:00" - }, - { - "name": "symfony/mime", - "version": "v4.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "egulias/email-validator": "^2.0", - "symfony/dependency-injection": "~3.4|^4.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A library to manipulate MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "time": "2019-06-04T09:22:54+00:00" + "time": "2018-11-26T14:04:48+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", "shasum": "" }, "require": { @@ -3726,7 +2617,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -3759,141 +2650,20 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "time": "2019-02-06T07:57:58+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "time": "2019-03-04T13:44:35+00:00" + "time": "2018-08-06T14:22:27+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -3905,7 +2675,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -3939,89 +2709,35 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "name": "symfony/polyfill-php70", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", "shasum": "" }, "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2019-02-06T07:57:58+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php70\\": "" }, "files": [ "bootstrap.php" @@ -4044,7 +2760,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4052,29 +2768,29 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2018-09-21T06:26:08+00:00" }, { "name": "symfony/process", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4101,42 +2817,43 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2018-11-20T16:10:26+00:00" }, { "name": "symfony/routing", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" + "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", - "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", + "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", + "symfony/config": "<3.3.1", + "symfony/dependency-injection": "<3.3", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.2", + "doctrine/annotations": "~1.0", "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", + "symfony/config": "^3.3.1|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", + "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -4144,7 +2861,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4177,103 +2894,37 @@ "uri", "url" ], - "time": "2019-06-26T13:54:39+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v1.1.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2018-11-26T08:40:22+00:00" }, { "name": "symfony/translation", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" + "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", - "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", + "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", + "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.2" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<3.4", + "symfony/config": "<2.8", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, - "provide": { - "symfony/translation-implementation": "1.0" - }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", + "symfony/config": "~2.8|~3.0|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/service-contracts": "^1.1.2", - "symfony/var-dumper": "~3.4|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -4284,7 +2935,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4311,106 +2962,42 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v1.1.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2018-11-26T10:17:44+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.3.2", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" + "reference": "6867713afe6c50ade2f34ed6435563b065a52145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", - "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", + "reference": "6867713afe6c50ade2f34ed6435563b065a52145", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "ext-symfony_debug": "" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4444,7 +3031,7 @@ "debug", "dump" ], - "time": "2019-06-17T17:37:00+00:00" + "time": "2018-11-20T16:10:26+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -4553,21 +3140,20 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.6.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" + "php": ">=5.3.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -4575,7 +3161,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.5-dev" } }, "autoload": { @@ -4600,76 +3186,65 @@ "env", "environment" ], - "time": "2019-01-29T11:11:52+00:00" - }, - { - "name": "zendframework/zend-diactoros", - "version": "2.1.2", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", - "shasum": "" - }, - "require": { - "php": "^7.1", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.5.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^7.0.2", - "zendframework/zend-coding-standard": "~1.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev", - "dev-develop": "2.2.x-dev", - "dev-release-1.8": "1.8.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], - "psr-4": { - "Zend\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "keywords": [ - "http", - "psr", - "psr-7" - ], - "time": "2019-04-29T21:11:00+00:00" + "time": "2018-07-29T20:33:41+00:00" } ], "packages-dev": [ + { + "name": "beberlei/assert", + "version": "v2.9.6", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.1.1", + "phpunit/phpunit": "^4.8.35|^5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" + }, + "files": [ + "lib/Assert/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" + } + ], + "description": "Thin assertion library for input validation in business models.", + "keywords": [ + "assert", + "assertion", + "validation" + ], + "time": "2018-06-11T17:15:25+00:00" + }, { "name": "behat/behat", "version": "v3.5.0", @@ -4750,16 +3325,16 @@ }, { "name": "behat/gherkin", - "version": "v4.6.0", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", "shasum": "" }, "require": { @@ -4767,8 +3342,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -4805,7 +3380,7 @@ "gherkin", "parser" ], - "time": "2019-01-16T14:22:17+00:00" + "time": "2017-08-30T11:04:43+00:00" }, { "name": "behat/mink", @@ -4970,6 +3545,51 @@ ], "time": "2017-04-04T11:38:05+00:00" }, + { + "name": "clue/graph", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/clue/graph.git", + "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", + "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", + "graphp/graphviz": "GraphViz graph drawing / DOT output" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fhaculty\\Graph\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A mathematical graph/network library written in PHP", + "homepage": "https://github.com/clue/graph", + "keywords": [ + "edge", + "graph", + "mathematical", + "network", + "vertex" + ], + "time": "2015-03-07T18:11:31+00:00" + }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -5003,34 +3623,32 @@ }, { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -5050,72 +3668,212 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2015-06-14T21:17:01+00:00" }, { - "name": "filp/whoops", - "version": "2.1.6", + "name": "facebook/webdriver", + "version": "1.6.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", - "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0" + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" }, "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", - "symfony/var-dumper": "^2.6 || ^3.0" + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" }, "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "ext-SimpleXML": "For Firefox profile creation" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-community": "1.5-dev" } }, "autoload": { "psr-4": { - "Whoops\\": "src/Whoops/" + "Facebook\\WebDriver\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "time": "2018-05-16T17:37:13+00:00" + }, + { + "name": "florianwolters/component-core-stringutils", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", + "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", + "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": "src/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", "role": "Developer" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", + "description": "Offers operations on the data type string as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", "keywords": [ - "error", - "exception", - "handling", - "library", - "whoops", - "zf2" + "helper", + "language", + "string", + "wrapper" ], - "time": "2017-02-18T14:22:27+00:00" + "time": "2013-07-01T10:24:07+00:00" + }, + { + "name": "florianwolters/component-util-reflection", + "version": "v0.2.0", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", + "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", + "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", + "shasum": "" + }, + "require": { + "florianwolters/component-core-stringutils": ">=0.2-beta", + "php": ">=5.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": "src/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", + "role": "Developer" + } + ], + "description": "Provides operations for the PHP Reflection API as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", + "keywords": [ + "reflection", + "utility" + ], + "time": "2013-03-19T16:42:41+00:00" + }, + { + "name": "florianwolters/component-util-singleton", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", + "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", + "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", + "shasum": "" + }, + "require": { + "florianwolters/component-core-stringutils": "0.3.*", + "florianwolters/component-util-reflection": "0.2.*", + "php": ">=5.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": [ + "src/php", + "src/tests/unit-tests/php", + "src/tests/mocks/php" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", + "role": "Developer" + } + ], + "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", + "keywords": [ + "creation", + "pattern", + "singleton", + "utility" + ], + "time": "2013-06-29T12:35:22+00:00" }, { "name": "fzaninotto/faker", @@ -5167,6 +3925,237 @@ ], "time": "2018-07-12T10:23:15+00:00" }, + { + "name": "graphp/algorithms", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/graphp/algorithms.git", + "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", + "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", + "shasum": "" + }, + "require": { + "clue/graph": "~0.9.0|~0.8.0", + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Graphp\\Algorithms\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "Common mathematical graph algorithms", + "homepage": "https://github.com/graphp/algorithms", + "keywords": [ + "Graph algorithms", + "dijkstra", + "kruskal", + "minimum spanning tree", + "moore-bellman-ford", + "prim", + "shortest path" + ], + "time": "2015-03-08T10:12:01+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -5227,29 +4216,107 @@ "time": "2017-06-30T04:02:48+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.9.1", + "name": "lmc/steward", + "version": "2.3.4", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "url": "https://github.com/lmc-eu/steward.git", + "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", + "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", "shasum": "" }, "require": { - "php": "^7.1" + "beberlei/assert": "^2.7", + "clue/graph": "~0.9.0", + "doctrine/inflector": "~1.0", + "ext-curl": "*", + "ext-zip": "*", + "facebook/webdriver": "^1.4.0", + "florianwolters/component-util-singleton": "0.3.2", + "graphp/algorithms": "^0.8.1", + "nette/reflection": "^2.4.2", + "ondram/ci-detector": "^2.1", + "php": "^5.6 || ~7.0", + "phpunit/phpunit": "^5.7.11", + "symfony/console": "^3.3.0", + "symfony/event-dispatcher": "~3.0", + "symfony/filesystem": "~3.0", + "symfony/finder": "~3.0", + "symfony/options-resolver": "^3.2", + "symfony/process": "^3.2.0", + "symfony/stopwatch": "^3.0", + "symfony/yaml": "^3.2" }, - "replace": { - "myclabs/deep-copy": "self.version" + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "php-coveralls/php-coveralls": "^1.0.2", + "php-mock/php-mock-phpunit": "~1.0", + "squizlabs/php_codesniffer": "^2.4.1", + "symfony/var-dumper": "^3.2" + }, + "suggest": { + "ext-posix": "For colored output", + "ext-xdebug": "For remote tests debugging" + }, + "bin": [ + "bin/steward", + "bin/steward.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Lmc\\Steward\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "LMC s.r.o.", + "homepage": "https://github.com/lmc-eu" + } + ], + "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", + "keywords": [ + "phpunit", + "selenium", + "testing", + "webdriver" + ], + "time": "2018-07-26T22:03:36+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { @@ -5272,7 +4339,337 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "nette/caching", + "version": "v2.5.8", + "source": { + "type": "git", + "url": "https://github.com/nette/caching.git", + "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", + "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", + "shasum": "" + }, + "require": { + "nette/finder": "^2.2 || ~3.0.0", + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "latte/latte": "^2.4", + "nette/di": "^2.4 || ~3.0.0", + "nette/tester": "^2.0", + "tracy/tracy": "^2.4" + }, + "suggest": { + "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "? Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "time": "2018-03-21T11:04:32+00:00" + }, + { + "name": "nette/finder", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", + "shasum": "" + }, + "require": { + "nette/utils": "~2.4", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "time": "2018-06-28T11:49:23+00:00" + }, + { + "name": "nette/reflection", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/nette/reflection.git", + "reference": "b12327e98ead74e87a1315e0d48182a702adf901" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", + "reference": "b12327e98ead74e87a1315e0d48182a702adf901", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/caching": "^2.2 || ^3.0", + "nette/utils": "^2.4 || ^3.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/di": "^2.4 || ^3.0", + "nette/tester": "^2.0", + "tracy/tracy": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "Nette Reflection: docblock annotations parser and common reflection classes", + "homepage": "https://nette.org", + "keywords": [ + "annotation", + "nette", + "reflection" + ], + "time": "2017-07-11T19:28:57+00:00" + }, + { + "name": "nette/utils", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize() and toAscii()", + "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/loader.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "time": "2018-09-18T10:22:16+00:00" + }, + { + "name": "ondram/ci-detector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "be3410cb14443796122ca051f4224b5eae06aa76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", + "reference": "be3410cb14443796122ca051f4224b5eae06aa76", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.12", + "phpunit/phpunit": "^5.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "OndÅ™ej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect current continuous integration server and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "adapter", + "appveyor", + "bamboo", + "continuous integration", + "gitlab", + "interface", + "jenkins", + "teamcity", + "travis" + ], + "time": "2017-05-26T16:39:57+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -5330,35 +4727,29 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", "shasum": "" }, "require": { - "php": "^7.0", + "php": "^5.6 || ^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -5377,7 +4768,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-04-30T17:48:53+00:00" + "time": "2017-11-10T14:09:06+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -5428,16 +4819,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.1", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { @@ -5458,8 +4849,8 @@ } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" + "psr-0": { + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5487,7 +4878,7 @@ "spy", "stub" ], - "time": "2019-06-13T12:50:23+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5691,29 +5082,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "~4.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -5736,7 +5127,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", @@ -5880,6 +5271,56 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -6395,16 +5836,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.4.2", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", "shasum": "" }, "require": { @@ -6437,25 +5878,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ "phpcs", "standards" ], - "time": "2019-04-10T23:49:02+00:00" + "time": "2018-09-23T23:08:17+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.29", + "version": "v3.4.19", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "4459eef5298dedfb69f771186a580062b8516497" + "reference": "420458095cf60025eb0841276717e0da7f75e50e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", - "reference": "4459eef5298dedfb69f771186a580062b8516497", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", + "reference": "420458095cf60025eb0841276717e0da7f75e50e", "shasum": "" }, "require": { @@ -6498,24 +5939,127 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { - "name": "symfony/yaml", - "version": "v4.3.2", + "name": "symfony/options-resolver", + "version": "v3.4.19", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", - "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", + "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2018-11-11T19:48:54+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "0f43969ab2718de55c1c1158dce046668079788d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", + "reference": "0f43969ab2718de55c1c1158dce046668079788d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2018-11-11T19:48:54+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", + "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6530,7 +6074,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6557,25 +6101,24 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-04-06T14:04:46+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" + "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6608,20 +6151,20 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "time": "2018-01-29T19:49:41+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.1.1", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" + "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", - "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", "shasum": "" }, "require": { @@ -6667,7 +6210,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-12-30T23:16:27+00:00" + "time": "2018-10-07T17:38:02+00:00" } ], "aliases": [], @@ -6682,7 +6225,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=7.1" + "php": ">=5.6" }, "platform-dev": [] } diff --git a/config/app.php b/config/app.php index 02c5a1b72..bd0116a86 100644 --- a/config/app.php +++ b/config/app.php @@ -9,23 +9,24 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), + 'log' => env('APP_LOG', 'single'), + 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'key' => env('APP_KEY', 'base64:rU28h/tElUn/eiLY0qC24jJq1rakvAFRoRl1DWxj/kM='), 'cipher' => 'AES-256-CBC', 'timezone' => 'UTC', 'providers' => [ - FilesystemServiceProvider::class, CacheServiceProvider::class, - ViewServiceProvider::class, + FilesystemServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - ], + ViewServiceProvider::class, + ], 'aliases' => [ 'Crypt' => Illuminate\Support\Facades\Crypt::class ], diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index b3468c7c7..faecdc5d8 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -91,16 +91,6 @@ class SpoolRun $this->appMsgUid = $v; } - /** - * Get the fileData property - * - * @return array - */ - public function getFileData() - { - return $this->fileData; - } - /** * Set the $spoolId * @@ -242,52 +232,32 @@ class SpoolRun } /** - * Set email parameters + * set email parameters * - * @param string $appMsgUid - * @param string $subject - * @param string $from - * @param string $to - * @param string $body - * @param string $date - * @param string $cc - * @param string $bcc - * @param string $template - * @param array $attachments - * @param bool $contentTypeIsHtml - * @param string $error - * - * @see SpoolRun->create() - * @see SpoolRun->resendEmails() + * @param string $sAppMsgUid , $sSubject, $sFrom, $sTo, $sBody, $sDate, $sCC, $sBCC, $sTemplate + * @return none */ - public function setData($appMsgUid, $subject, $from, $to, $body, $date = '', $cc = '', $bcc = '', $template = '', $attachments = [], - $contentTypeIsHtml = true, $error = '') + public function setData($sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate = "", $sCC = "", $sBCC = "", $sTemplate = "", $aAttachment = array(), $bContentTypeIsHtml = true, $sError = "") { - // Fill "fileData" property - $this->spoolId = $appMsgUid; - $this->fileData['subject'] = $subject; - $this->fileData['from'] = $from; - $this->fileData['to'] = $to; - $this->fileData['body'] = $body; - $this->fileData['date'] = (!empty($date) ? $date : date('Y-m-d H:i:s')); - $this->fileData['cc'] = $cc; - $this->fileData['bcc'] = $bcc; - $this->fileData['template'] = $template; - $this->fileData['attachments'] = $attachments; - $this->fileData["contentTypeIsHtml"] = $contentTypeIsHtml; - $this->fileData["error"] = $error; + $this->spoolId = $sAppMsgUid; + $this->fileData['subject'] = $sSubject; + $this->fileData['from'] = $sFrom; + $this->fileData['to'] = $sTo; + $this->fileData['body'] = $sBody; + $this->fileData['date'] = ($sDate != '' ? $sDate : date('Y-m-d H:i:s')); + $this->fileData['cc'] = $sCC; + $this->fileData['bcc'] = $sBCC; + $this->fileData['template'] = $sTemplate; + $this->fileData['attachments'] = $aAttachment; + $this->fileData['envelope_to'] = array(); + $this->fileData["contentTypeIsHtml"] = $bContentTypeIsHtml; + $this->fileData["error"] = $sError; - // Initialize some values used internally - $this->fileData['envelope_to'] = []; - $this->fileData['envelope_cc'] = []; - $this->fileData['envelope_bcc'] = []; - - // Domain validation when the email engine is "OpenMail" if (array_key_exists('MESS_ENGINE', $this->config)) { - if ($this->config['MESS_ENGINE'] === 'OPENMAIL') { - if (!empty($this->config['MESS_SERVER'])) { - if (($domain = @gethostbyaddr($this->config['MESS_SERVER']))) { - $this->fileData['domain'] = $domain; + if ($this->config['MESS_ENGINE'] == 'OPENMAIL') { + if ($this->config['MESS_SERVER'] != '') { + if (($sAux = @gethostbyaddr($this->config['MESS_SERVER']))) { + $this->fileData['domain'] = $sAux; } else { $this->fileData['domain'] = $this->config['MESS_SERVER']; } @@ -871,12 +841,4 @@ class SpoolRun return $appMsgUid; } - - /** - * Run the private method "handleEnvelopeTo", this method was created in order to use in the unit tests - */ - public function runHandleEnvelopeTo() - { - $this->handleEnvelopeTo(); - } } From 1e63a8192600f5a3a5b63ccef88adfaffe368aba Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Jul 2019 11:37:48 -0400 Subject: [PATCH 099/100] change --- workflow/engine/classes/ActionsByEmailCoreClass.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index 21a4d33cc..e69d6cd22 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -529,7 +529,7 @@ class ActionsByEmailCoreClass extends PMPlugin */ private function defineSubject($subjectField, array $caseData) { - $subject = G::replaceDataField($subjectField, $caseData); + $subject = G::replaceDataField($subjectField, $caseData, 'mysql', false); if (empty($subject)) { $subject = $this->getCasePropertiesKey('APP_TITLE'); } From 1bec73b153e5abbc2a38d5f6679d79c533351750 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 17 Jul 2019 09:58:12 -0400 Subject: [PATCH 100/100] PMC-975 --- workflow/engine/classes/PmDynaform.php | 28 -------------------------- 1 file changed, 28 deletions(-) mode change 100644 => 100755 workflow/engine/classes/PmDynaform.php diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php old mode 100644 new mode 100755 index 26b58124f..c8946e72f --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -2334,34 +2334,6 @@ class PmDynaform $this->lastQueryError = null; } - /** - * This adds a new definition on the json dynaform - * @param json $json - * - * @link https://wiki.processmaker.com/3.0/Grid_Control - * @see workflow/engine/classes/PmDynaform->jsonr - */ - public function setDataSchema($json, $appDataVariables) - { - foreach ($json->data as $key => $value) { - $columnsData = []; - foreach ($json->columns as $keyData => $valueData) { - foreach ($appDataVariables as $keyAppData => $valueAppData) { - if (array_key_exists($valueData->id, $valueAppData) || array_key_exists($valueData->id . "_label", - $valueAppData) || array_key_exists($valueData->name, - $valueAppData) || array_key_exists($valueData->name . "_label", $valueAppData)) { - array_push($columnsData, ["defined" => true]); - break; - } else { - array_push($columnsData, ["defined" => false]); - break; - } - } - } - $json->dataSchema[$key] = $columnsData; - } - } - /** * Get session message. *