diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Calendar.php b/workflow/engine/src/ProcessMaker/BusinessModel/Calendar.php index 8d7d14bd2..8c1e98403 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Calendar.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Calendar.php @@ -8,8 +8,8 @@ class Calendar "CAL_NAME" => array("fieldName" => "CALENDAR_NAME", "type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "calendarName"), "CAL_DESCRIPTION" => array("fieldName" => "CALENDAR_DESCRIPTION", "type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "calendarDescription"), - "CAL_WORK_DAYS" => array("fieldName" => "CALENDAR_WORK_DAYS", "type" => "array", "required" => true, "empty" => false, "defaultValues" => array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"), "fieldNameAux" => "calendarWorkDays"), - "CAL_STATUS" => array("fieldName" => "CALENDAR_STATUS", "type" => "string", "required" => true, "empty" => false, "defaultValues" => array("ACTIVE", "INACTIVE"), "fieldNameAux" => "calendarStatus"), + "CAL_WORK_DAYS" => array("fieldName" => "CALENDAR_WORK_DAYS", "type" => "array", "required" => true, "empty" => false, "defaultValues" => array(1, 2, 3, 4, 5, 6, 7), "fieldNameAux" => "calendarWorkDays"), + "CAL_STATUS" => array("fieldName" => "CALENDAR_STATUS", "type" => "string", "required" => false, "empty" => false, "defaultValues" => array("ACTIVE", "INACTIVE"), "fieldNameAux" => "calendarStatus"), "CAL_WORK_HOUR" => array("fieldName" => "CALENDAR_WORK_HOUR", "type" => "array", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "calendarWorkHour"), "CAL_HOLIDAY" => array("fieldName" => "CALENDAR_HOLIDAY", "type" => "array", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "calendarHoliday"), @@ -18,9 +18,9 @@ class Calendar ); private $arrayWorkHourFieldDefinition = array( - "DAY" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "ALL"), "fieldNameAux" => "day"), - "HOUR_START" => array("type" => "hour", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "hourStart"), - "HOUR_END" => array("type" => "hour", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "hourEnd") + "DAY" => array("type" => "int", "required" => true, "empty" => false, "defaultValues" => array(0, 1, 2, 3, 4, 5, 6, 7), "fieldNameAux" => "day"), + "HOUR_START" => array("type" => "hour", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "hourStart"), + "HOUR_END" => array("type" => "hour", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "hourEnd") ); private $arrayHolidayFieldDefinition = array( @@ -188,20 +188,50 @@ class Calendar } /** - * Replace and Get Work Days + * Transform Work Days * - * @param string $workDays Work days - * @param bool $toNumber If is true replace to numbers, replace to string otherwise + * @param mixed $workDays Work days + * @param bool $toDb If is true transform data to represent it according to database, do the reverse otherwise * - * return string Return Work days + * return mixed Return Work days */ - public function workDaysReplaceData($workDays, $toNumber = true) + public function workDaysTransformData($workDays, $toDb = true) { try { - $arrayDayString = array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "ALL"); - $arrayDayNumber = array(0, 1, 2, 3, 4, 5, 6, 7); + $arrayDayName = array("SUN", "ALL"); + $arrayDay = array(7, 0); + $arrayDayDb = array(0, 7); - return ($toNumber)? str_replace($arrayDayString, $arrayDayNumber, $workDays) : str_replace($arrayDayNumber, $arrayDayString, $workDays); + $data = (is_string($workDays) && preg_match("/\|/", $workDays))? explode("|", $workDays) : $workDays; + $type = "int"; + + if (is_array($data)) { + $data = implode("|", $data); + $type = "array"; + } + + if ($toDb) { + $data = str_replace($arrayDay, $arrayDayName, $data); + $data = str_replace($arrayDayName, $arrayDayDb, $data); + } else { + $data = str_replace($arrayDayDb, $arrayDayName, $data); + $data = str_replace($arrayDayName, $arrayDay, $data); + } + + switch ($type) { + case "int": + $data = (int)($data); + break; + case "array": + $data = explode("|", $data); + + foreach ($data as $key => $value) { + $data[$key] = (int)($value); + } + break; + } + + return $data; } catch (\Exception $e) { throw $e; } @@ -300,12 +330,12 @@ class Calendar if (isset($arrayData["CAL_WORK_HOUR"])) { foreach ($arrayData["CAL_WORK_HOUR"] as $value) { - if ($value["DAY"] != "ALL" && !in_array($value["DAY"], $arrayData["CAL_WORK_DAYS"])) { + if ($value["DAY"] != 0 && !in_array($value["DAY"], $arrayData["CAL_WORK_DAYS"], true)) { throw (new \Exception(str_replace(array("{0}", "{1}"), array($this->arrayWorkHourFieldNameForException["day"], $this->arrayFieldNameForException["calendarWorkDays"]), "Value specified for \"{0}\" does not exist in \"{1}\"."))); } $arrayCalendarWorkHour[] = array( - "CALENDAR_BUSINESS_DAY" => $this->workDaysReplaceData($value["DAY"]), + "CALENDAR_BUSINESS_DAY" => $this->workDaysTransformData($value["DAY"]), "CALENDAR_BUSINESS_START" => $value["HOUR_START"], "CALENDAR_BUSINESS_END" => $value["HOUR_END"] ); @@ -328,8 +358,8 @@ class Calendar $arrayDataAux["CALENDAR_UID"] = \G::generateUniqueID(); $arrayDataAux["CALENDAR_NAME"] = $arrayData["CAL_NAME"]; $arrayDataAux["CALENDAR_DESCRIPTION"] = (isset($arrayData["CAL_DESCRIPTION"]))? $arrayData["CAL_DESCRIPTION"] : ""; - $arrayDataAux["CALENDAR_WORK_DAYS"] = explode("|", $this->workDaysReplaceData(implode("|", $arrayData["CAL_WORK_DAYS"]))); - $arrayDataAux["CALENDAR_STATUS"] = $arrayData["CAL_STATUS"]; + $arrayDataAux["CALENDAR_WORK_DAYS"] = $this->workDaysTransformData($arrayData["CAL_WORK_DAYS"]); + $arrayDataAux["CALENDAR_STATUS"] = (isset($arrayData["CAL_STATUS"]))? $arrayData["CAL_STATUS"] : "ACTIVE"; $arrayDataAux["BUSINESS_DAY"] = $arrayCalendarWorkHour; $arrayDataAux["HOLIDAY"] = $arrayCalendarHoliday; @@ -401,18 +431,18 @@ class Calendar //Set variables $arrayCalendarData = \G::array_change_key_case2($this->getCalendar($calendarUid), CASE_UPPER); - $calendarWorkDays = (isset($arrayData["CAL_WORK_DAYS"]))? $arrayData["CAL_WORK_DAYS"] : $arrayCalendarData["CAL_WORK_DAYS"]; + $calendarWorkDays = (isset($arrayData["CAL_WORK_DAYS"]))? $arrayData["CAL_WORK_DAYS"] : array_keys($arrayCalendarData["CAL_WORK_DAYS"]); $arrayCalendarWorkHour = array(); $arrayAux = (isset($arrayData["CAL_WORK_HOUR"]))? $arrayData["CAL_WORK_HOUR"] : $arrayCalendarData["CAL_WORK_HOUR"]; foreach ($arrayAux as $value) { - if (isset($arrayData["CAL_WORK_HOUR"]) && $value["DAY"] != "ALL" && !in_array($value["DAY"], $calendarWorkDays)) { + if (isset($arrayData["CAL_WORK_HOUR"]) && $value["DAY"] != 0 && !in_array($value["DAY"], $calendarWorkDays, true)) { throw (new \Exception(str_replace(array("{0}", "{1}"), array($this->arrayWorkHourFieldNameForException["day"], $this->arrayFieldNameForException["calendarWorkDays"]), "Value specified for \"{0}\" does not exist in \"{1}\"."))); } $arrayCalendarWorkHour[] = array( - "CALENDAR_BUSINESS_DAY" => $this->workDaysReplaceData($value["DAY"]), + "CALENDAR_BUSINESS_DAY" => $this->workDaysTransformData($value["DAY"]), "CALENDAR_BUSINESS_START" => $value["HOUR_START"], "CALENDAR_BUSINESS_END" => $value["HOUR_END"] ); @@ -433,7 +463,7 @@ class Calendar $arrayDataAux["CALENDAR_UID"] = $calendarUid; $arrayDataAux["CALENDAR_NAME"] = (isset($arrayData["CAL_NAME"]))? $arrayData["CAL_NAME"] : $arrayCalendarData["CAL_NAME"]; $arrayDataAux["CALENDAR_DESCRIPTION"] = (isset($arrayData["CAL_DESCRIPTION"]))? $arrayData["CAL_DESCRIPTION"] : $arrayCalendarData["CAL_DESCRIPTION"]; - $arrayDataAux["CALENDAR_WORK_DAYS"] = explode("|", $this->workDaysReplaceData(implode("|", $calendarWorkDays))); + $arrayDataAux["CALENDAR_WORK_DAYS"] = $this->workDaysTransformData($calendarWorkDays); $arrayDataAux["CALENDAR_STATUS"] = (isset($arrayData["CAL_STATUS"]))? $arrayData["CAL_STATUS"] : $arrayCalendarData["CAL_STATUS"]; $arrayDataAux["BUSINESS_DAY"] = $arrayCalendarWorkHour; @@ -531,7 +561,7 @@ class Calendar foreach ($arrayData as $value) { $arrayCalendarWorkHour[] = array( - $this->getFieldNameByFormatFieldName("DAY") => $this->workDaysReplaceData($value["CALENDAR_BUSINESS_DAY"] . "", false), + $this->getFieldNameByFormatFieldName("DAY") => $this->workDaysTransformData($value["CALENDAR_BUSINESS_DAY"] . "", false), $this->getFieldNameByFormatFieldName("HOUR_START") => $value["CALENDAR_BUSINESS_START"] . "", $this->getFieldNameByFormatFieldName("HOUR_END") => $value["CALENDAR_BUSINESS_END"] . "", ); @@ -548,16 +578,30 @@ class Calendar ); } + $conf = new \Configurations(); + $confEnvSetting = $conf->getFormats(); + + $dateTime = new \DateTime($record["CALENDAR_CREATE_DATE"]); + $dateCreate = $dateTime->format($confEnvSetting["dateFormat"]); + $dateTime = new \DateTime($record["CALENDAR_UPDATE_DATE"]); + $dateUpdate = $dateTime->format($confEnvSetting["dateFormat"]); + + $arrayCalendarWorkDays = array(); + + foreach ($this->workDaysTransformData($record["CALENDAR_WORK_DAYS"] . "", false) as $value) { + $arrayCalendarWorkDays[$value] = \G::LoadTranslation("ID_WEEKDAY_" . (($value != 7)? $value : 0)); + } + return array( $this->getFieldNameByFormatFieldName("CAL_UID") => $record["CALENDAR_UID"], $this->getFieldNameByFormatFieldName("CAL_NAME") => $record["CALENDAR_NAME"], $this->getFieldNameByFormatFieldName("CAL_DESCRIPTION") => $record["CALENDAR_DESCRIPTION"] . "", - $this->getFieldNameByFormatFieldName("CAL_WORK_DAYS") => explode("|", $this->workDaysReplaceData($record["CALENDAR_WORK_DAYS"] . "", false)), + $this->getFieldNameByFormatFieldName("CAL_WORK_DAYS") => $arrayCalendarWorkDays, $this->getFieldNameByFormatFieldName("CAL_STATUS") => $record["CALENDAR_STATUS"], $this->getFieldNameByFormatFieldName("CAL_WORK_HOUR") => $arrayCalendarWorkHour, $this->getFieldNameByFormatFieldName("CAL_HOLIDAY") => $arrayCalendarHoliday, - $this->getFieldNameByFormatFieldName("CAL_CREATE_DATE") => $record["CALENDAR_CREATE_DATE"] . "", - $this->getFieldNameByFormatFieldName("CAL_UPDATE_DATE") => $record["CALENDAR_UPDATE_DATE"] . "", + $this->getFieldNameByFormatFieldName("CAL_CREATE_DATE") => $dateCreate, + $this->getFieldNameByFormatFieldName("CAL_UPDATE_DATE") => $dateUpdate, $this->getFieldNameByFormatFieldName("CAL_TOTAL_USERS") => (int)($record["CALENDAR_TOTAL_USERS"]), $this->getFieldNameByFormatFieldName("CAL_TOTAL_PROCESSES") => (int)($record["CALENDAR_TOTAL_PROCESSES"]), $this->getFieldNameByFormatFieldName("CAL_TOTAL_TASKS") => (int)($record["CALENDAR_TOTAL_TASKS"]) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php index 67e8d975f..1f3c96e0f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php @@ -205,7 +205,7 @@ class Process } //defaultValues - if (count($arrayFieldDefinition[$fieldName]["defaultValues"]) > 0 && !in_array($fieldValue, $arrayFieldDefinition[$fieldName]["defaultValues"])) { + if (count($arrayFieldDefinition[$fieldName]["defaultValues"]) > 0 && !in_array($fieldValue, $arrayFieldDefinition[$fieldName]["defaultValues"], true)) { throw (new \Exception(str_replace(array("{0}", "{1}"), array($fieldNameAux, implode("|", $arrayFieldDefinition[$fieldName]["defaultValues"])), "Invalid value for \"{0}\", it only accepts values: \"{1}\"."))); } @@ -276,7 +276,7 @@ class Process } foreach ($arrayAux as $value) { - if (!in_array($value, $arrayFieldDefinition[$fieldName]["defaultValues"])) { + if (!in_array($value, $arrayFieldDefinition[$fieldName]["defaultValues"], true)) { throw (new \Exception(str_replace(array("{0}", "{1}"), array($fieldNameAux, implode("|", $arrayFieldDefinition[$fieldName]["defaultValues"])), "Invalid value for \"{0}\", it only accepts values: \"{1}\"."))); } } diff --git a/workflow/engine/src/Tests/BusinessModel/CalendarTest.php b/workflow/engine/src/Tests/BusinessModel/CalendarTest.php index 811858039..47131c50f 100644 --- a/workflow/engine/src/Tests/BusinessModel/CalendarTest.php +++ b/workflow/engine/src/Tests/BusinessModel/CalendarTest.php @@ -41,11 +41,10 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( "CAL_NAME" => "PHPUnit Calendar$i", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE", + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5), "CAL_WORK_HOUR" => array( - array("DAY" => "ALL", "HOUR_START" => "00:00", "HOUR_END" => "00:00"), - array("DAY" => "MON", "HOUR_START" => "09:00", "HOUR_END" => "17:00") + array("DAY" => 0, "HOUR_START" => "00:00", "HOUR_END" => "00:00"), + array("DAY" => 1, "HOUR_START" => "09:00", "HOUR_END" => "17:00") ), "CAL_HOLIDAY" => array( array("NAME" => "holiday1", "DATE_START" => "2014-03-01", "DATE_END" => "2014-03-31"), @@ -65,9 +64,9 @@ class CalendarTest extends \PHPUnit_Framework_TestCase //Create - Japanese characters $arrayData = array( - "CAL_NAME" => "私の名前(PHPUnitの)", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_NAME" => "私の名前(PHPUnitの)", + "CAL_DESCRIPTION" => "Description", + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5) ); $arrayCalendar = self::$calendar->create($arrayData); @@ -131,7 +130,6 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $this->assertEquals($arrayCalendar[0]["CAL_UID"], $arrayRecord[0]["CAL_UID"]); $this->assertEquals($arrayCalendar[0]["CAL_NAME"], $arrayRecord[0]["CAL_NAME"]); $this->assertEquals($arrayCalendar[0]["CAL_DESCRIPTION"], $arrayRecord[0]["CAL_DESCRIPTION"]); - $this->assertEquals($arrayCalendar[0]["CAL_STATUS"], $arrayRecord[0]["CAL_STATUS"]); } /** @@ -153,7 +151,6 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $this->assertEquals($arrayCalendar["CAL_UID"], $arrayRecord[0]["CAL_UID"]); $this->assertEquals($arrayCalendar["CAL_NAME"], $arrayRecord[0]["CAL_NAME"]); $this->assertEquals($arrayCalendar["CAL_DESCRIPTION"], $arrayRecord[0]["CAL_DESCRIPTION"]); - $this->assertEquals($arrayCalendar["CAL_STATUS"], $arrayRecord[0]["CAL_STATUS"]); //Get - Japanese characters $arrayCalendar = self::$calendar->getCalendar($arrayRecord[self::$numCalendar]["CAL_UID"]); @@ -161,9 +158,9 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $this->assertTrue(is_array($arrayCalendar)); $this->assertNotEmpty($arrayCalendar); + $this->assertEquals($arrayCalendar["CAL_UID"], $arrayRecord[self::$numCalendar]["CAL_UID"]); $this->assertEquals($arrayCalendar["CAL_NAME"], "私の名前(PHPUnitの)"); - $this->assertEquals($arrayCalendar["CAL_WORK_DAYS"], array("MON", "TUE", "WED", "THU", "FRI")); - $this->assertEquals($arrayCalendar["CAL_STATUS"], "ACTIVE"); + $this->assertEquals($arrayCalendar["CAL_DESCRIPTION"], "Description"); } /** @@ -209,8 +206,7 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( //"CAL_NAME" => "PHPUnit Calendar", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5) ); $arrayCalendar = self::$calendar->create($arrayData); @@ -229,8 +225,7 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( "CAL_NAME" => "", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5) ); $arrayCalendar = self::$calendar->create($arrayData); @@ -242,15 +237,14 @@ class CalendarTest extends \PHPUnit_Framework_TestCase * @covers \ProcessMaker\BusinessModel\Calendar::create * * @expectedException Exception - * @expectedExceptionMessage Invalid value for "CAL_WORK_DAYS", it only accepts values: "SUN|MON|TUE|WED|THU|FRI|SAT". + * @expectedExceptionMessage Invalid value for "CAL_WORK_DAYS", it only accepts values: "1|2|3|4|5|6|7". */ public function testCreateExceptionInvalidDataCalWorkDays() { $arrayData = array( "CAL_NAME" => "PHPUnit Calendar", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MONDAY", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(10, 2, 3, 4, 5) ); $arrayCalendar = self::$calendar->create($arrayData); @@ -269,8 +263,7 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( "CAL_NAME" => "PHPUnit Calendar0", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5), ); $arrayCalendar = self::$calendar->create($arrayData); @@ -319,8 +312,7 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( "CAL_NAME" => "PHPUnit Calendar", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5), ); $arrayCalendar = self::$calendar->update("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", $arrayData); @@ -342,8 +334,7 @@ class CalendarTest extends \PHPUnit_Framework_TestCase $arrayData = array( "CAL_NAME" => "", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MON", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(1, 2, 3, 4, 5), ); $arrayCalendar = self::$calendar->update($arrayRecord[0]["CAL_UID"], $arrayData); @@ -358,15 +349,14 @@ class CalendarTest extends \PHPUnit_Framework_TestCase * @param array $arrayRecord Data of the calendars * * @expectedException Exception - * @expectedExceptionMessage Invalid value for "CAL_WORK_DAYS", it only accepts values: "SUN|MON|TUE|WED|THU|FRI|SAT". + * @expectedExceptionMessage Invalid value for "CAL_WORK_DAYS", it only accepts values: "1|2|3|4|5|6|7". */ public function testUpdateExceptionInvalidDataCalWorkDays($arrayRecord) { $arrayData = array( "CAL_NAME" => "PHPUnit Calendar", "CAL_DESCRIPTION" => "Description", - "CAL_WORK_DAYS" => array("MONDAY", "TUE", "WED", "THU", "FRI"), - "CAL_STATUS" => "ACTIVE" + "CAL_WORK_DAYS" => array(10, 2, 3, 4, 5), ); $arrayCalendar = self::$calendar->update($arrayRecord[0]["CAL_UID"], $arrayData);