From 6194325030556b05c852ff3beb0735ed035964c1 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Mon, 21 Aug 2017 13:27:03 +0200 Subject: [PATCH 01/15] prepare db and model for skipping subencoding checks --- src/Application/Controller/XMLRPC/Handler.php | 2 +- src/Application/Migrations/04_projects.sql | 1 + src/Application/Migrations/06_tickets.sql | 4 +-- .../Migrations/15_function_ticket_state.sql | 30 +++++++++++++++---- src/Application/Model/ProjectTicketState.php | 18 +++++------ src/Application/Model/Ticket.php | 12 ++++---- 6 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/Application/Controller/XMLRPC/Handler.php b/src/Application/Controller/XMLRPC/Handler.php index a647661..4ccdd82 100644 --- a/src/Application/Controller/XMLRPC/Handler.php +++ b/src/Application/Controller/XMLRPC/Handler.php @@ -437,7 +437,7 @@ public function setCommenceTicketState($ticket_id) { throw new Exception(__FUNCTION__.': ticket is not in initial state!',1304); } - $commenceState = ProjectTicketState::getCommenceState($ticket['project_id'], $ticket['ticket_type']); + $commenceState = ProjectTicketState::getCommenceState($ticket['project_id'], $ticket['ticket_type'], $ticket_id); if(!$commenceState) { throw new Exception(__FUNCTION__.': ticket has no commence state!',1305); } diff --git a/src/Application/Migrations/04_projects.sql b/src/Application/Migrations/04_projects.sql index f6a6799..86a5ab9 100644 --- a/src/Application/Migrations/04_projects.sql +++ b/src/Application/Migrations/04_projects.sql @@ -50,6 +50,7 @@ CREATE TABLE tbl_project_ticket_state ticket_type enum_ticket_type NOT NULL, ticket_state enum_ticket_state NOT NULL, service_executable boolean NOT NULL DEFAULT false, + skip_on_dependent boolean NOT NULL DEFAULT false, CONSTRAINT tbl_project_ticket_state_pk PRIMARY KEY (project_id, ticket_type, ticket_state), CONSTRAINT tbl_project_ticket_state_project_fk FOREIGN KEY (project_id) REFERENCES tbl_project (id) MATCH SIMPLE diff --git a/src/Application/Migrations/06_tickets.sql b/src/Application/Migrations/06_tickets.sql index ffeb681..ac92f2b 100644 --- a/src/Application/Migrations/06_tickets.sql +++ b/src/Application/Migrations/06_tickets.sql @@ -40,7 +40,7 @@ $BODY$ DECLARE next_state record; BEGIN - next_state := ticket_state_next(NEW.project_id, NEW.ticket_type, NEW.ticket_state); + next_state := ticket_state_next(NEW.project_id, NEW.ticket_type, NEW.ticket_state, NEW.id); NEW.ticket_state_next := next_state.ticket_state; NEW.service_executable := next_state.service_executable; @@ -76,7 +76,7 @@ $BODY$ (progress, ticket_state_next, service_executable) = (tp, (n).ticket_state, (n).service_executable) FROM ( - SELECT id, ticket_state_next(t2.project_id, t2.ticket_type, t2.ticket_state) AS n, ticket_progress(t2.id) as tp + SELECT id, ticket_state_next(t2.project_id, t2.ticket_type, t2.ticket_state, t2.id) AS n, ticket_progress(t2.id) as tp FROM tbl_ticket t2 WHERE t2.project_id = param_project_id AND param_project_id IS NOT NULL ) AS x diff --git a/src/Application/Migrations/15_function_ticket_state.sql b/src/Application/Migrations/15_function_ticket_state.sql index 01c6d67..0e93d8d 100644 --- a/src/Application/Migrations/15_function_ticket_state.sql +++ b/src/Application/Migrations/15_function_ticket_state.sql @@ -2,7 +2,7 @@ BEGIN; SET ROLE TO postgres; -CREATE OR REPLACE FUNCTION ticket_state_next(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state) +CREATE OR REPLACE FUNCTION ticket_state_next(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state, param_ticket_id bigint default NULL) RETURNS TABLE(ticket_state enum_ticket_state, service_executable boolean) AS $$ DECLARE @@ -19,7 +19,16 @@ BEGIN WHERE pts.project_id = param_project_id AND ts2.ticket_type = param_ticket_type AND - ts2.ticket_state = param_ticket_state + ts2.ticket_state = param_ticket_state AND + (pts.skip_on_dependent = false OR + ( /* is master encoding ticket */ + SELECT ep.depends_on + FROM tbl_ticket t + JOIN tbl_encoding_profile_version epv ON epv.id = t.encoding_profile_version_id + JOIN tbl_encoding_profile ep ON ep.id = epv.encoding_profile_id + WHERE t.id = param_ticket_id + ) IS NULL + ) ORDER BY ts1.sort ASC LIMIT 1; @@ -30,7 +39,7 @@ END $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION ticket_state_previous(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state) +CREATE OR REPLACE FUNCTION ticket_state_previous(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state, param_ticket_id bigint default NULL) RETURNS TABLE(ticket_state enum_ticket_state, service_executable boolean) AS $$ DECLARE @@ -47,7 +56,16 @@ BEGIN WHERE pts.project_id = param_project_id AND ts2.ticket_type = param_ticket_type AND - ts2.ticket_state = param_ticket_state + ts2.ticket_state = param_ticket_state AND + (pts.skip_on_dependent = false OR + ( /* is master encoding ticket */ + SELECT ep.depends_on + FROM tbl_ticket t + JOIN tbl_encoding_profile_version epv ON epv.id = t.encoding_profile_version_id + JOIN tbl_encoding_profile ep ON ep.id = epv.encoding_profile_id + WHERE t.id = param_ticket_id + ) IS NULL + ) ORDER BY ts1.sort DESC LIMIT 1; @@ -96,7 +114,7 @@ END $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION ticket_state_commence(param_project_id bigint, param_ticket_type enum_ticket_type) +CREATE OR REPLACE FUNCTION ticket_state_commence(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_id bigint) RETURNS enum_ticket_state AS $$ DECLARE @@ -111,7 +129,7 @@ BEGIN ret := (SELECT ticket_state_initial(param_project_id, param_ticket_type)); WHILE ret IS NOT NULL LOOP - SELECT * INTO next_state FROM ticket_state_next(param_project_id, param_ticket_type, ret); + SELECT * INTO next_state FROM ticket_state_next(param_project_id, param_ticket_type, ret, param_ticket_id); IF NOT FOUND THEN ret := NULL; EXIT; diff --git a/src/Application/Model/ProjectTicketState.php b/src/Application/Model/ProjectTicketState.php index 89226f9..8868f9a 100644 --- a/src/Application/Model/ProjectTicketState.php +++ b/src/Application/Model/ProjectTicketState.php @@ -21,30 +21,30 @@ class ProjectTicketState extends Model { ]; // TODO: use Ticket::queryNextState / queryPreviousState? - public static function getNextState($project, $type, $state) { + public static function getNextState($project, $type, $state, $ticket) { $handle = Database::$Instance->query( - 'SELECT * FROM ticket_state_next(?, ?, ?)', - [$project, $type, $state] + 'SELECT * FROM ticket_state_next(?, ?, ?, ?)', + [$project, $type, $state, $ticket] ); $row = $handle->fetch(); return ($row === false)? null : $row; } - public static function getPreviousState($project, $type, $state) { + public static function getPreviousState($project, $type, $state, $ticket) { $handle = Database::$Instance->query( - 'SELECT * FROM ticket_state_previous(?, ?, ?)', - [$project, $type, $state] + 'SELECT * FROM ticket_state_previous(?, ?, ?, ?)', + [$project, $type, $state, $ticket] ); $row = $handle->fetch(); return ($row === false)? null : $row; } - public static function getCommenceState($project, $type) { + public static function getCommenceState($project, $type, $ticket) { $handle = Database::$Instance->query( - 'SELECT ticket_state_commence(?, ?)', - [$project, $type] + 'SELECT ticket_state_commence(?, ?, ?)', + [$project, $type, $ticket] ); return $handle->fetch()['ticket_state_commence']; diff --git a/src/Application/Model/Ticket.php b/src/Application/Model/Ticket.php index 3cbefe4..744bef3 100644 --- a/src/Application/Model/Ticket.php +++ b/src/Application/Model/Ticket.php @@ -855,12 +855,13 @@ public function queryPreviousState($state = null) { return (new Database_Query('')) ->select('ticket_state') ->from( - 'ticket_state_previous(?, ?, ?)', + 'ticket_state_previous(?, ?, ?, ?)', 'previous_state', [ $this['project_id'], $this['ticket_type'], - ($state === null)? $this['ticket_state'] : $state + ($state === null)? $this['ticket_state'] : $state, + $this['id'] ] ); } @@ -869,16 +870,17 @@ public function queryNextState($state = null) { return (new Database_Query('')) ->select('ticket_state') ->from( - 'ticket_state_next(?, ?, ?)', + 'ticket_state_next(?, ?, ?, ?)', 'next_state', [ $this['project_id'], $this['ticket_type'], - ($state === null)? $this['ticket_state'] : $state + ($state === null)? $this['ticket_state'] : $state, + $this['id'] ] ); } - + public function findNextForAction($state) { $next = null; From a3675155a9057c1fac8f99607b721bd0f20dc4fd Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Mon, 21 Aug 2017 13:39:12 +0200 Subject: [PATCH 02/15] add migration for skipping subencoding checks --- ...de_tables-2017-08-21-subencoding-skips.sql | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 Application/Migrations/__tmp_upgrade_tables-2017-08-21-subencoding-skips.sql diff --git a/Application/Migrations/__tmp_upgrade_tables-2017-08-21-subencoding-skips.sql b/Application/Migrations/__tmp_upgrade_tables-2017-08-21-subencoding-skips.sql new file mode 100644 index 0000000..3852198 --- /dev/null +++ b/Application/Migrations/__tmp_upgrade_tables-2017-08-21-subencoding-skips.sql @@ -0,0 +1,152 @@ +BEGIN; + +SET ROLE TO postgres; + +DROP FUNCTION ticket_state_next(bigint, enum_ticket_type, enum_ticket_state); +CREATE OR REPLACE FUNCTION ticket_state_next(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state, param_ticket_id bigint default NULL) + RETURNS TABLE(ticket_state enum_ticket_state, service_executable boolean) AS +$$ +DECLARE +BEGIN + RETURN QUERY + SELECT + pts.ticket_state, pts.service_executable + FROM + tbl_ticket_state ts1 + JOIN + tbl_project_ticket_state pts ON pts.ticket_type = ts1.ticket_type AND pts.ticket_state = ts1.ticket_state + JOIN + tbl_ticket_state ts2 ON ts1.ticket_type = ts2.ticket_type AND ts1.sort > ts2.sort + WHERE + pts.project_id = param_project_id AND + ts2.ticket_type = param_ticket_type AND + ts2.ticket_state = param_ticket_state AND + (pts.skip_on_dependent = false OR + ( /* is master encoding ticket */ + SELECT ep.depends_on + FROM tbl_ticket t + JOIN tbl_encoding_profile_version epv ON epv.id = t.encoding_profile_version_id + JOIN tbl_encoding_profile ep ON ep.id = epv.encoding_profile_id + WHERE t.id = param_ticket_id + ) IS NULL + ) + ORDER BY + ts1.sort ASC + LIMIT 1; + IF NOT FOUND THEN + RETURN QUERY SELECT NULL::enum_ticket_state, false; + END IF; +END +$$ +LANGUAGE plpgsql; + +DROP FUNCTION ticket_state_previous(bigint, enum_ticket_type, enum_ticket_state); +CREATE OR REPLACE FUNCTION ticket_state_previous(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_state enum_ticket_state, param_ticket_id bigint default NULL) + RETURNS TABLE(ticket_state enum_ticket_state, service_executable boolean) AS +$$ +DECLARE +BEGIN + RETURN QUERY + SELECT + pts.ticket_state, pts.service_executable + FROM + tbl_ticket_state ts1 + JOIN + tbl_project_ticket_state pts ON pts.ticket_type = ts1.ticket_type AND pts.ticket_state = ts1.ticket_state + JOIN + tbl_ticket_state ts2 ON ts1.ticket_type = ts2.ticket_type AND ts1.sort < ts2.sort + WHERE + pts.project_id = param_project_id AND + ts2.ticket_type = param_ticket_type AND + ts2.ticket_state = param_ticket_state AND + (pts.skip_on_dependent = false OR + ( /* is master encoding ticket */ + SELECT ep.depends_on + FROM tbl_ticket t + JOIN tbl_encoding_profile_version epv ON epv.id = t.encoding_profile_version_id + JOIN tbl_encoding_profile ep ON ep.id = epv.encoding_profile_id + WHERE t.id = param_ticket_id + ) IS NULL + ) + ORDER BY + ts1.sort DESC + LIMIT 1; + IF NOT FOUND THEN + RETURN QUERY SELECT NULL::enum_ticket_state, false; + END IF; +END +$$ +LANGUAGE plpgsql; + +DROP FUNCTION ticket_state_commence(bigint, enum_ticket_type); +CREATE OR REPLACE FUNCTION ticket_state_commence(param_project_id bigint, param_ticket_type enum_ticket_type, param_ticket_id bigint) + RETURNS enum_ticket_state AS +$$ +DECLARE + ret enum_ticket_state; + next_state record; +BEGIN + -- special case: meta ticket, since it has no serviceable states + IF param_ticket_type = 'meta' THEN + RETURN 'staged'::enum_ticket_state; + END IF; + + ret := (SELECT ticket_state_initial(param_project_id, param_ticket_type)); + + WHILE ret IS NOT NULL LOOP + SELECT * INTO next_state FROM ticket_state_next(param_project_id, param_ticket_type, ret, param_ticket_id); + IF NOT FOUND THEN + ret := NULL; + EXIT; + END IF; + + -- exit, if serviceable state is found + EXIT WHEN next_state.service_executable IS TRUE; + + -- otherwise set current state as possible commence state + ret := next_state.ticket_state; + END LOOP; + + RETURN ret; +END +$$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION update_ticket_next_state() + RETURNS trigger AS +$BODY$ +DECLARE + next_state record; +BEGIN + next_state := ticket_state_next(NEW.project_id, NEW.ticket_type, NEW.ticket_state, NEW.id); + + NEW.ticket_state_next := next_state.ticket_state; + NEW.service_executable := next_state.service_executable; + + RETURN NEW; +END +$BODY$ +LANGUAGE plpgsql VOLATILE; + +CREATE OR REPLACE FUNCTION update_all_tickets_progress_and_next_state(param_project_id bigint) + RETURNS VOID AS +$BODY$ +BEGIN + + UPDATE tbl_ticket t SET + (progress, ticket_state_next, service_executable) + = (tp, (n).ticket_state, (n).service_executable) + FROM ( + SELECT id, ticket_state_next(t2.project_id, t2.ticket_type, t2.ticket_state, t2.id) AS n, ticket_progress(t2.id) as tp + FROM tbl_ticket t2 + WHERE t2.project_id = param_project_id AND param_project_id IS NOT NULL + ) AS x + WHERE t.id = x.id; + +END; +$BODY$ +LANGUAGE plpgsql VOLATILE; + +ALTER TABLE tbl_project_ticket_state ADD COLUMN skip_on_dependent BOOLEAN NOT NULL DEFAULT FALSE; + +COMMIT; \ No newline at end of file From 1f9eae3b08408c654843fa908eae24dfc986c903 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Sun, 17 Sep 2017 21:00:10 +0200 Subject: [PATCH 03/15] add checkboxes for skip_on_dependent to state config view --- src/Application/Model/TicketState.php | 4 +++- src/Application/View/projects/settings/states.html.php | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Application/Model/TicketState.php b/src/Application/Model/TicketState.php index 8d195cb..dccc0f7 100644 --- a/src/Application/Model/TicketState.php +++ b/src/Application/Model/TicketState.php @@ -9,7 +9,9 @@ class TicketState extends Model { public $hasOne = [ 'ProjectTicketState' => [ 'foreign_key' => ['ticket_type', 'ticket_state'], - 'select' => '(ticket_state IS NOT NULL) AS project_enabled, service_executable AS project_service_executable' + 'select' => '(ticket_state IS NOT NULL) AS project_enabled,' . + 'service_executable AS project_service_executable,' . + 'skip_on_dependent AS project_skip_on_dependent' ] ]; diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 00d0352..5abfbc9 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -35,6 +35,7 @@ Type State Service + Skip for Subtickets @@ -62,6 +63,9 @@ checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], [], false); } ?> + checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], [], false); + } ?> register('States[' . $index . '][_destroy]'); ?> From 48a2399f02f29ee13abd4bb8f638ab638e5afcd0 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Thu, 21 Sep 2017 16:12:30 +0200 Subject: [PATCH 04/15] isSkippable in state model --- src/Application/Model/TicketState.php | 5 +++++ src/Application/View/projects/settings/states.html.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Application/Model/TicketState.php b/src/Application/Model/TicketState.php index dccc0f7..55265f6 100644 --- a/src/Application/Model/TicketState.php +++ b/src/Application/Model/TicketState.php @@ -33,6 +33,11 @@ public static function getStateByAction($action) { return self::$_actions[$action]; } + + public function isSkippable() { + return ($this['ticket_state'] === 'postencoded' || + $this['ticket_state'] === 'checking'); + } public function defaultScope(Model_Resource $resource) { $resource->orderBy('ticket_type, sort'); diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 5abfbc9..3df3f43 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -63,7 +63,7 @@ checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], [], false); } ?> - checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], [], false); } ?> From 5cbde7773be7a62af703e3c81eadf4b27481a566 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Thu, 21 Sep 2017 16:20:25 +0200 Subject: [PATCH 05/15] fix isSkippable --- src/Application/Model/TicketState.php | 6 +++--- src/Application/View/projects/settings/states.html.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Application/Model/TicketState.php b/src/Application/Model/TicketState.php index 55265f6..86cc92b 100644 --- a/src/Application/Model/TicketState.php +++ b/src/Application/Model/TicketState.php @@ -34,9 +34,9 @@ public static function getStateByAction($action) { return self::$_actions[$action]; } - public function isSkippable() { - return ($this['ticket_state'] === 'postencoded' || - $this['ticket_state'] === 'checking'); + public static function isSkippable($state) { + return ($state === 'postencoded' || + $state === 'checking'); } public function defaultScope(Model_Resource $resource) { diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 3df3f43..c1742b8 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -63,7 +63,7 @@ checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], [], false); } ?> - checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], [], false); } ?> From d8e55c1c9708f5446ff7c7cb0a8933da9d0feee8 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Thu, 21 Sep 2017 16:24:43 +0200 Subject: [PATCH 06/15] change wording: subticket -> dependent profile --- src/Application/View/projects/settings/states.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index c1742b8..cd0452f 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -35,7 +35,7 @@ Type State Service - Skip for Subtickets + Skip in dependent profiles From 8e844437cd4c6f860235d36f6f3c3c9f98d823e5 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Thu, 21 Sep 2017 16:33:08 +0200 Subject: [PATCH 07/15] move explanation to title --- src/Application/View/projects/settings/states.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index cd0452f..0eb3ed1 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -35,7 +35,7 @@ Type State Service - Skip in dependent profiles + Skip From 239ff0068d8dd99a5fa639b1453441b3f89d4ae5 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Thu, 21 Sep 2017 16:46:47 +0200 Subject: [PATCH 08/15] more title text --- .../View/projects/settings/states.html.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 0eb3ed1..c1dab25 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -1,7 +1,9 @@ title('States | '); ?> render('projects/settings/_header'); ?> - $project['read_only']]); ?> @@ -34,8 +36,8 @@ Type State - Service - Skip + Service + Skip @@ -61,10 +63,10 @@ $f->hidden('States[' . $index . '][ticket_type]', $state['ticket_type']); ?> checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], [], false); + echo $f->checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], ['title' => $title_service], false); } ?> checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], [], false); + echo $f->checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], ['title' => $title_skip], false); } ?> register('States[' . $index . '][_destroy]'); ?> From 1f000bd93d6872e9100770529631492632353e4d Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 12:35:14 +0200 Subject: [PATCH 09/15] change state settings view to one column layout --- .../View/projects/settings/states.html.php | 95 ++++++++++--------- 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index c1dab25..166847e 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -19,58 +19,61 @@ $encodingStates, (!empty($project))? $project['dependent_ticket_trigger_state'] : null) ?> +
$state): ?> 1): - $typeRows = 0; ?> - - -
- -
- - - - - - - - - - - - - - - - - - +
TypeStateServiceSkip
checkbox( - 'States[' . $index . '][ticket_state]', - $state['ticket_state'], - $state['project_enabled'], - ['value' => $state['ticket_state']] + + if ($type !== null): + // close previous table ?> +
+ + + + + + + + + + + + + + + + + + - - - - register('States[' . $index . '][_destroy]'); ?> - + false + ) . + $f->hidden('States[' . $index . '][ticket_type]', $state['ticket_type']); + ?> + + + + + register('States[' . $index . '][_destroy]'); + endforeach; ?>
TypeStateServiceSkip
+ checkbox( + 'States[' . $index . '][ticket_state]', + $state['ticket_state'], + $state['project_enabled'], + ['value' => $state['ticket_state']] + (($state['project_enabled'])? ['data-association-destroy' => 'States[' . $index . '][_destroy]'] : []), - false - ) . - $f->hidden('States[' . $index . '][ticket_type]', $state['ticket_type']); - ?>checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], ['title' => $title_service], false); - } ?>checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], ['title' => $title_skip], false); - } ?>
+ checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], ['title' => $title_service], false); + } ?> + + checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], ['title' => $title_skip], false); + } ?> +
From d65406470a15097d6b70dc6e682a9e5e274b3b01 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 12:37:07 +0200 Subject: [PATCH 10/15] make checkbox columns bigger in state settings view --- src/Application/View/projects/settings/states.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 166847e..2b4e2a6 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -34,8 +34,8 @@ Type State - Service - Skip + Service + Master only From 0a861a700fa571a17b48dbffe3011014719bc911 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 12:38:48 +0200 Subject: [PATCH 11/15] center checkboxes in their columns in state settings view --- src/Application/View/projects/settings/states.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 2b4e2a6..c170166 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -61,12 +61,12 @@ $f->hidden('States[' . $index . '][ticket_type]', $state['ticket_type']); ?> - + checkbox('States[' . $index . '][service_executable]', null, $state['project_service_executable'], ['title' => $title_service], false); } ?> - + checkbox('States[' . $index . '][skip_on_dependent]', null, $state['project_skip_on_dependent'], ['title' => $title_skip], false); } ?> From 2d9d669f47391e67666811b04e74e7131fbc5ae5 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 12:40:31 +0200 Subject: [PATCH 12/15] center some column titles in state settings view --- src/Application/View/projects/settings/states.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index c170166..2b90912 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -34,8 +34,8 @@ Type State - Service - Master only + Service + Master only From 99268b9e4499962d5f005c47f1576755e62b8842 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 12:47:10 +0200 Subject: [PATCH 13/15] only show needed headings in state settings view --- .../View/projects/settings/states.html.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 2b90912..76c303f 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -27,6 +27,7 @@ // close previous table ?> +
@@ -34,8 +35,16 @@ - - + + From da5eeedec8d9d31d9ee28e2120b9876cab51f596 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 14:50:24 +0200 Subject: [PATCH 14/15] hide tooltips for hidden column headers in state config view --- .../View/projects/settings/states.html.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index 76c303f..f81fbf8 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -27,22 +27,28 @@ // close previous table ?>
Type StateServiceMaster only + + Service + + + + Master only + +
+
+
- - @@ -85,5 +91,6 @@ endforeach; ?>
Type State + - Service + title="">Service + + > + - Master only + title="">Master only + + >
-
+ + From 4b07689da52127bd4e9505746f5437147af2c3d2 Mon Sep 17 00:00:00 2001 From: Markus Otto Date: Fri, 13 Oct 2017 14:59:13 +0200 Subject: [PATCH 15/15] Enhance layout --- .../View/projects/settings/states.html.php | 18 ++++++++++++------ src/Public/css/main.css | 9 +++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Application/View/projects/settings/states.html.php b/src/Application/View/projects/settings/states.html.php index f81fbf8..41496e8 100644 --- a/src/Application/View/projects/settings/states.html.php +++ b/src/Application/View/projects/settings/states.html.php @@ -19,19 +19,25 @@ $encodingStates, (!empty($project))? $project['dependent_ticket_trigger_state'] : null) ?> -
- $state): ?> - + $state): + if ($type != $state['ticket_type']): $type = $state['ticket_type']; if ($type !== null): + if (!$firstType): // close previous table ?>
-
- -
+
diff --git a/src/Public/css/main.css b/src/Public/css/main.css index 26dcf55..7205a02 100644 --- a/src/Public/css/main.css +++ b/src/Public/css/main.css @@ -2542,6 +2542,15 @@ ul.project-settings-header li.current a.hooks:before { margin-left: 0.5em; } +.stages-container .column-50:nth-child(even) { + float:right; +} +.stages-container .column-50:nth-child(odd) { + + padding-right: 15px; + padding-left: 0; +} + .progress-width[data-progress="0"] { width: 0%; } .progress-width[data-progress="1"] { width: 1%; } .progress-width[data-progress="2"] { width: 2%; }