jsharmony-cms
Version:
241 lines (231 loc) • 16.2 kB
JSON
{
"code_deployment_target_role_type": {
"type": "code",
"caption": "Deployment Target Role Type",
"init_data": [
{ "code_val": "PUBLISH", "code_txt": "Publish", "code_seq": 1 },
{ "code_val": "PUBLISH_RELEASE", "code_txt": "Publish Release", "code_seq": 2 },
{ "code_val": "EDITOR", "code_txt": "Preview / Editor", "code_seq": 3 }
]
},
"code_deployment_sts": {
"type": "code",
"caption": "Deployment Status",
"init_data": [
{ "code_val": "CANCEL", "code_txt": "Canceled", "code_seq": 1 },
{ "code_val": "COMPLETE", "code_txt": "Complete", "code_seq": 2 },
{ "code_val": "PENDING", "code_txt": "Pending", "code_seq": 4 },
{ "code_val": "RUNNING", "code_txt": "Running", "code_seq": 5 },
{ "code_val": "FAILED", "code_txt": "Failed", "code_seq": 6 }
]
},
"deployment_target": {
"type": "table",
"caption": ["Deployment Target","Deployment Targets"],
"columns": [
{ "name": "deployment_target_id", "type": "bigint", "key": true, "identity": true, "null": false },
{ "name": "deployment_target_name", "type": "varchar", "length": 256, "null": false },
{ "name": "deployment_target_sts", "type": "varchar", "length": 32, "foreignkey": { "jsharmony.code_ac": "code_val" }, "null": false, "default": "ACTIVE" },
{ "name": "site_id", "type": "bigint", "foreignkey": { "site": { "column": "site_id", "on_delete": "cascade" } }, "null": false },
{ "name": "deployment_target_publish_path", "type": "varchar", "length": 2048 },
{ "name": "deployment_target_template_variables", "type": "varchar", "length": -1 },
{ "name": "deployment_target_publish_config", "type": "varchar", "length": -1 },
{ "name": "deployment_target_client_salt", "type": "varchar", "length": 256 },
{ "name": "deployment_target_etstmp", "type": "datetime", "length": 7, "default": { "sql": "%%%%%%jsh.map.timestamp%%%%%%" } },
{ "name": "deployment_target_euser", "type": "varchar", "length": 20, "default": { "sql": "%%%%%%jsh.map.current_user%%%%%%" } },
{ "name": "deployment_target_mtstmp", "type": "datetime", "length": 7 },
{ "name": "deployment_target_muser", "type": "varchar", "length": 20 }
],
"unique": [
["deployment_target_name","site_id"]
],
"triggers": [
{ "on": ["update", "insert"], "exec": [
"set(deployment_target_mtstmp,%%%%%%jsh.map.timestamp%%%%%%);",
"set(deployment_target_muser,%%%%%%jsh.map.current_user%%%%%%);"
]
},
{ "on": ["insert"], "exec": [
"insert into {schema}.deployment_target_role(deployment_target_id, sys_role_name, deployment_target_role_type) select inserted(deployment_target_id),'*',code_val from {schema}.code_deployment_target_role_type where code_val in ('EDITOR','PUBLISH');",
]
},
{
"on": ["delete"], "exec": [
"update {schema}.sys_user_site set sys_user_site_editor = null where sys_user_site_editor = deleted(deployment_target_id);",
"update {schema}.site set site_default_editor = null where site_default_editor = deleted(deployment_target_id);",
"delete from {schema}.deployment_target_role where deployment_target_id = deleted(deployment_target_id);"
]
}
]
},
"deployment_target_role": {
"type": "table",
"caption": ["Deployment Target Role","Deployment Target Roles"],
"columns": [
{ "name": "deployment_target_role_id", "type": "bigint", "key": true, "identity": true, "null": false },
{ "name": "deployment_target_id", "type": "bigint", "null": false, "foreignkey": { "deployment_target": "deployment_target_id" }, "actions": ["prevent_update"] },
{ "name": "sys_role_name", "type": "varchar", "length": 16, "null": false, "foreignkey": { "jsharmony.sys_role": "sys_role_name" }, "actions": ["prevent_update"] },
{ "name": "deployment_target_role_type", "type": "varchar", "length": 32, "foreignkey": { "code_deployment_target_role_type": "code_val" }, "null": false },
{ "name": "deployment_target_role_etstmp", "type": "datetime", "length": 7, "default": { "sql": "%%%%%%jsh.map.timestamp%%%%%%" } },
{ "name": "deployment_target_role_euser", "type": "varchar", "length": 20, "default": { "sql": "%%%%%%jsh.map.current_user%%%%%%" } },
{ "name": "deployment_target_role_mtstmp", "type": "datetime", "length": 7 },
{ "name": "deployment_target_role_muser", "type": "varchar", "length": 20 }
],
"triggers": [
{ "on": ["update", "insert"], "exec": [
"set(deployment_target_role_mtstmp,%%%%%%jsh.map.timestamp%%%%%%);",
"set(deployment_target_role_muser,%%%%%%jsh.map.current_user%%%%%%);"
]
}
]
},
"deployment": {
"type": "table",
"caption": ["Deployment","Deployments"],
"columns": [
{ "name": "deployment_id", "type": "bigint", "key": true, "identity": true, "null": false },
{ "name": "deployment_tag", "type": "varchar", "length": 256, "null": false, "actions": ["prevent_update"] },
{ "name": "branch_id", "type": "bigint", "foreignkey": { "branch": "branch_id" }, "null": false, "actions": ["prevent_update"] },
{ "name": "deployment_date", "type": "datetime", "length": 7, "null": false },
{ "name": "deployment_sts", "type": "varchar", "length": 32, "foreignkey": { "code_deployment_sts": "code_val" }, "null": false, "default": "PENDING" },
{ "name": "deployment_target_id", "type": "bigint", "null": false, "foreignkey": { "deployment_target": "deployment_target_id" }, "actions": ["prevent_update"] },
{ "name": "deployment_git_revision", "type": "varchar", "length": 1024 },
{ "name": "deployment_params", "type": "varchar", "length": -1 },
{ "name": "deployment_sts_tstmp", "type": "datetime", "length": 7 },
{ "name": "deployment_sts_user", "type": "varchar", "length": 20 },
{ "name": "deployment_etstmp", "type": "datetime", "length": 7, "default": { "sql": "%%%%%%jsh.map.timestamp%%%%%%" } },
{ "name": "deployment_euser", "type": "varchar", "length": 20, "default": { "sql": "%%%%%%jsh.map.current_user%%%%%%" } },
{ "name": "deployment_mtstmp", "type": "datetime", "length": 7 },
{ "name": "deployment_muser", "type": "varchar", "length": 20 }
],
"triggers": [
{ "on": ["validate_update"], "exec": [
"errorif((deleted(deployment_sts)<>'PENDING') and update(deployment_date),'Can only change deployment_date for deployment_sts PENDING');",
"errorif(update(deployment_sts) and (inserted(deployment_sts)='PENDING'),'Cannot change deployment_sts back to PENDING');",
"errorif(update(deployment_sts) and (inserted(deployment_sts)='CANCEL') and (deleted(deployment_sts)<>'PENDING'),'Can only set deployment_sts to CANCEL from PENDING');",
"errorif(update(deployment_sts) and (inserted(deployment_sts)='COMPLETE') and (deleted(deployment_sts)<>'RUNNING'),'Can only set deployment_sts to COMPLETE from RUNNING');",
"errorif(update(deployment_sts) and (inserted(deployment_sts)='RUNNING') and (deleted(deployment_sts)<>'PENDING'),'Can only set deployment_sts to RUNNING from PENDING');",
"errorif(update(deployment_sts) and (inserted(deployment_sts)='FAILED') and (deleted(deployment_sts)<>'RUNNING'),'Can only set deployment_sts to FAILED from RUNNING');"
]
},
{ "on": ["update", "insert"], "exec": [
"set(deployment_mtstmp,%%%%%%jsh.map.timestamp%%%%%%);",
"set(deployment_muser,%%%%%%jsh.map.current_user%%%%%%);",
"setif(update(deployment_sts),deployment_sts_tstmp,%%%%%%jsh.map.timestamp%%%%%%);",
"setif(update(deployment_sts),deployment_sts_user,%%%%%%jsh.map.current_user%%%%%%);"
]
}
]
},
"v_my_deployment_target": {
"type": "view",
"caption": ["Deployment Target", "Deployment Targets"],
"dependencies": ["{schema}.v_sys_user_site_access"],
"tables": {
"deployment_target": {
"columns": [
"deployment_target_id",
"deployment_target_name",
"deployment_target_sts",
"site_id",
"deployment_target_publish_path",
"deployment_target_template_variables",
{
"name":"deployment_target_can_editor", "type": "int",
"sqlselect": [
"case ",
" when exists(select * from deployment_target_role dtr inner join jsharmony.sys_user_role r on r.sys_role_name = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and dtr.deployment_target_role_type='EDITOR' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" when exists(select * from deployment_target_role dtr inner join {schema}.sys_user_site r on r.sys_user_site_access = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and r.site_id = deployment_target.site_id and dtr.deployment_target_role_type='EDITOR' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" else 0 end"
]
},
{
"name":"deployment_target_can_publish", "type": "int",
"sqlselect": [
"case ",
" when {schema}.my_user_is_publisher(deployment_target.site_id) = 0 then 0",
" when exists(select * from deployment_target_role dtr inner join jsharmony.sys_user_role r on r.sys_role_name = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and dtr.deployment_target_role_type='PUBLISH' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" when exists(select * from deployment_target_role dtr inner join {schema}.sys_user_site r on r.sys_user_site_access = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and r.site_id = deployment_target.site_id and dtr.deployment_target_role_type='PUBLISH' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" else 0 end"
]
},
{
"name":"deployment_target_can_publish_release", "type": "int",
"sqlselect": [
"case ",
" when {schema}.my_user_is_publisher(deployment_target.site_id) = 0 then 0",
" when exists(select * from deployment_target_role dtr inner join jsharmony.sys_user_role r on r.sys_role_name = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and dtr.deployment_target_role_type='PUBLISH_RELEASE' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" when exists(select * from deployment_target_role dtr inner join {schema}.sys_user_site r on r.sys_user_site_access = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and r.site_id = deployment_target.site_id and dtr.deployment_target_role_type='PUBLISH_RELEASE' and dtr.deployment_target_id = deployment_target.deployment_target_id) then 1",
" else 0 end"
]
}
]
}
},
"where": [
"deployment_target_id in (select deployment_target_id from deployment_target_role dtr inner join jsharmony.sys_user_role r on r.sys_role_name = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id())",
"or",
"deployment_target_id in (select deployment_target_id from deployment_target_role dtr inner join {schema}.sys_user_site r on r.sys_user_site_access = dtr.sys_role_name and r.sys_user_id = jsharmony.my_sys_user_id() and r.site_id = deployment_target.site_id)"
]
},
"v_my_deployment": {
"type": "view",
"caption": ["Deployment","Deployments"],
"tables": {
"deployment": {
"columns": [
"deployment_id",
"deployment_tag",
"branch_id",
"deployment_date",
"deployment_sts",
"deployment_target_id",
"deployment_git_revision",
"deployment_params",
"deployment_etstmp",
"deployment_euser",
"deployment_mtstmp",
"deployment_muser",
]
},
"v_my_deployment_target": {
"columns": [
"site_id"
],
"join_type": "inner",
"join_columns": {
"deployment.deployment_target_id": "v_my_deployment_target.deployment_target_id",
"case when deployment_target_can_publish = 1 then 1 when deployment_target_can_publish_release = 1 then 1 else 0 end": "1"
}
}
},
"triggers": [
{"on": ["insert"], "exec": [
//Verify access
"errorif($ifnull({schema}.can_publish(inserted(branch_id), inserted(deployment_target_id)),0)<>1,'No access to publish to this deployment target.');",
//Verify non-duplicate tag name
"errorif(exists(select 1 from {schema}.deployment inner join {schema}.branch on {schema}.branch.branch_id={schema}.deployment.branch_id where deployment_tag=inserted(deployment_tag) and site_id=inserted(site_id)),'Deployment Tag must be unique for the site.');",
"errorif(exists(select 1 from {schema}.deployment inner join {schema}.deployment_target on {schema}.deployment_target.deployment_target_id={schema}.deployment.deployment_target_id where deployment_tag=inserted(deployment_tag) and site_id=(select site_id from deployment_target where deployment_target_id=inserted(deployment_target_id))),'Deployment Tag must be unique for the site.');",
//Verify deployment_target site_id matches branch site_id
"errorif(exists(select 1 where (select site_id from {schema}.branch where branch_id=inserted(branch_id))<>(select site_id from {schema}.deployment_target where deployment_target_id=inserted(deployment_target_id))),'Deployment Target and Revision Sites do not match')",
//Insert branch
"with_insert_identity(branch, branch_id, ",
" insert into {schema}.branch(branch_parent_id, branch_type, branch_name, branch_sts, site_id, branch_user_id) values(inserted(branch_id), 'DEPLOYMENT', inserted(deployment_tag), 'ARCHIVE', (select site_id from {schema}.branch where branch_id=inserted(branch_id)), null),",
////Insert deployment
" insert into {schema}.deployment(deployment_tag, branch_id, deployment_date, deployment_target_id, deployment_sts, deployment_git_revision, deployment_params) values(inserted(deployment_tag), @@INSERT_ID, inserted(deployment_date), inserted(deployment_target_id), 'PENDING', inserted(deployment_git_revision), inserted(deployment_params))",
" return_insert_key(deployment, deployment_id, (deployment_target_id=inserted(deployment_target_id) and deployment_tag=inserted(deployment_tag)));",
////Add all menu / pages / media / redirect / sitemap from other branch
" foreach(%%%{schema}.branch_items%%%, %%%TRIGGER_EOL%%%, \"insert into {tbl_branch_item}(branch_id, {item}_key, {item}_id, {item}_orig_id) select (select deployment.branch_id from {schema}.deployment inner join {schema}.branch on {schema}.branch.branch_id={schema}.deployment.branch_id where deployment_tag=inserted(deployment_tag) and site_id=inserted(site_id)), {item}_key, {item}_id, {item}_id from {tbl_branch_item} where branch_id=inserted(branch_id) and {item}_id is not null\")",
" increment_changes()",
")"
]
},
{"on": ["update"], "exec": [
//Verify access
"errorif($ifnull({schema}.could_have_published((select branch_id from {schema}.deployment where deployment_id = deleted(deployment_id)), (select deployment_target_id from {schema}.deployment where deployment_id = deleted(deployment_id))),0)<>1,'No access to cancel this deployment.');",
"update {schema}.deployment set deployment_sts = 'CANCEL' where deployment_id = deleted(deployment_id)"
]
}
]
}
}