openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 3b1fcabe32e97041001b0b054584485ed0043adf
parent e20f5c52857d01e2ece247908fb44064a9efd2c9
Author: Jan Dankert <devnull@localhost>
Date:   Wed, 20 Dec 2017 23:02:40 +0100

Das Projekt erhält eine neue Spalte 'flags', in der alle möglichen Einstellungen als Bitmaske hinterlegt werden können. Außerdem Refactoring der DBUpdate-Schnittstelle, möglichst häufig Konstanten verwenden.

Diffstat:
db/DbUpdate.class.php | 2+-
db/update/DBVersion000001.class.php | 222++++++++++++++++++++++++++++++++++++++++----------------------------------------
db/update/DBVersion000002.class.php | 6+++---
db/update/DBVersion000004.class.php | 4++--
db/update/DBVersion000005.class.php | 4++--
db/update/DBVersion000006.class.php | 6+++---
db/update/DBVersion000007.class.php | 8++++----
db/update/DBVersion000008.class.php | 2+-
db/update/DBVersion000009.class.php | 4++--
db/update/DBVersion000010.class.php | 4++--
db/update/DBVersion000011.class.php | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/cms-core/model/Project.class.php | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
modules/database/DbVersion.class.php | 87++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
modules/util/Http.class.php | 4++--
14 files changed, 303 insertions(+), 195 deletions(-)

diff --git a/db/DbUpdate.class.php b/db/DbUpdate.class.php @@ -2,7 +2,7 @@ use database\Database; -define('OR_DB_SUPPORTED_VERSION',10); +define('OR_DB_SUPPORTED_VERSION',11); define('OR_DB_STATUS_UPDATE_PROGRESS', 0); define('OR_DB_STATUS_UPDATE_SUCCESS' , 1); diff --git a/db/update/DBVersion000001.class.php b/db/update/DBVersion000001.class.php @@ -19,27 +19,27 @@ class DBVersion000001 extends DbVersion $this->addTable('project'); - $this->addColumn('project','name' ,'VARCHAR', 128,null,$not_nullable); - $this->addColumn('project','target_dir' ,'VARCHAR', 255,null,$not_nullable); - $this->addColumn('project','ftp_url' ,'VARCHAR', 255,null,$not_nullable); - $this->addColumn('project','ftp_passive' ,'INT' ,null,null,$not_nullable); - $this->addColumn('project','cmd_after_publish' ,'VARCHAR', 255,null,$not_nullable); - $this->addColumn('project','content_negotiation','INT' , 1, 0,$not_nullable); - $this->addColumn('project','cut_index' ,'INT' , 1, 0,$not_nullable); + $this->addColumn('project','name' ,OR_DB_COLUMN_TYPE_VARCHAR, 128,null,$not_nullable); + $this->addColumn('project','target_dir' ,OR_DB_COLUMN_TYPE_VARCHAR, 255,null,$not_nullable); + $this->addColumn('project','ftp_url' ,OR_DB_COLUMN_TYPE_VARCHAR, 255,null,$not_nullable); + $this->addColumn('project','ftp_passive' ,OR_DB_COLUMN_TYPE_INT ,null,null,$not_nullable); + $this->addColumn('project','cmd_after_publish' ,OR_DB_COLUMN_TYPE_VARCHAR, 255,null,$not_nullable); + $this->addColumn('project','content_negotiation',OR_DB_COLUMN_TYPE_INT , 1, 0,$not_nullable); + $this->addColumn('project','cut_index' ,OR_DB_COLUMN_TYPE_INT , 1, 0,$not_nullable); $this->addPrimaryKey('project','id'); $this->addIndex('project','name'); /* * - $this->addColumn('id','INT',null,null,$not_nullable); - $this->addColumn('name','VARCHAR',128,null,$not_nullable); - $this->addColumn('target_dir','VARCHAR',255,null,$not_nullable); - $this->addColumn('ftp_url','VARCHAR',255,null,$not_nullable); - $this->addColumn('ftp_passive','INT',1,0,$not_nullable); - $this->addColumn('cmd_after_publish','VARCHAR',255,null,$not_nullable); - $this->addColumn('content_negotiation','INT',1,0,$not_nullable); - $this->addColumn('cut_$this->addIndex('','INT');',1,0,$not_nullable); + $this->addColumn('id',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); + $this->addColumn('name',OR_DB_COLUMN_TYPE_VARCHAR,128,null,$not_nullable); + $this->addColumn('target_dir',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('ftp_url',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('ftp_passive',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('cmd_after_publish',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('content_negotiation',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('cut_$this->addIndex('',OR_DB_COLUMN_TYPE_INT);',1,0,$not_nullable); $this->addPrimaryKey('','id'); close_table unique_$this->addIndex('','name'); @@ -49,36 +49,36 @@ class DBVersion000001 extends DbVersion $this->addTable('user'); - $this->addColumn('user','name','VARCHAR',128,null,$not_nullable); - $this->addColumn('user','password','VARCHAR',50,null,$not_nullable); - $this->addColumn('user','ldap_dn','VARCHAR',255,null,$not_nullable); - $this->addColumn('user','fullname','VARCHAR',128,null,$not_nullable); - $this->addColumn('user','tel','VARCHAR',128,null,$not_nullable); - $this->addColumn('user','mail','VARCHAR',255,null,$not_nullable); - $this->addColumn('user','descr','VARCHAR',255,null,$not_nullable); - $this->addColumn('user','style','VARCHAR',64,null,$not_nullable); - $this->addColumn('user','is_admin','INT',1,0,$not_nullable); + $this->addColumn('user','name',OR_DB_COLUMN_TYPE_VARCHAR,128,null,$not_nullable); + $this->addColumn('user','password',OR_DB_COLUMN_TYPE_VARCHAR,50,null,$not_nullable); + $this->addColumn('user','ldap_dn',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('user','fullname',OR_DB_COLUMN_TYPE_VARCHAR,128,null,$not_nullable); + $this->addColumn('user','tel',OR_DB_COLUMN_TYPE_VARCHAR,128,null,$not_nullable); + $this->addColumn('user','mail',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('user','descr',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('user','style',OR_DB_COLUMN_TYPE_VARCHAR,64,null,$not_nullable); + $this->addColumn('user','is_admin',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); $this->addPrimaryKey('user','id'); $this->addUniqueIndex('user','name'); $this->addTable('group'); - $this->addColumn('group','name','VARCHAR',100,null,$not_nullable); + $this->addColumn('group','name',OR_DB_COLUMN_TYPE_VARCHAR,100,null,$not_nullable); $this->addPrimaryKey('group','id'); $this->addUniqueIndex('group','name'); $this->addTable('object'); - $this->addColumn('object','parentid','INT',null,null,$nullable); - $this->addColumn('object','projectid','INT',0,0,$not_nullable); - $this->addColumn('object','filename','VARCHAR',255,null,$not_nullable); - $this->addColumn('object','orderid','INT',0,null,$not_nullable); - $this->addColumn('object','create_date','INT',0,null,$not_nullable); - $this->addColumn('object','create_userid','INT',0,null,$nullable); - $this->addColumn('object','lastchange_date','INT',0,null,$not_nullable); - $this->addColumn('object','lastchange_userid','INT',0,null,$nullable); - $this->addColumn('object','is_folder','INT',1,null,$not_nullable); - $this->addColumn('object','is_file','INT',1,null,$not_nullable); - $this->addColumn('object','is_page','INT',1,null,$not_nullable); - $this->addColumn('object','is_link','INT',1,null,$not_nullable); + $this->addColumn('object','parentid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('object','projectid',OR_DB_COLUMN_TYPE_INT,0,0,$not_nullable); + $this->addColumn('object','filename',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('object','orderid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('object','create_date',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('object','create_userid',OR_DB_COLUMN_TYPE_INT,0,null,$nullable); + $this->addColumn('object','lastchange_date',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('object','lastchange_userid',OR_DB_COLUMN_TYPE_INT,0,null,$nullable); + $this->addColumn('object','is_folder',OR_DB_COLUMN_TYPE_INT,1,null,$not_nullable); + $this->addColumn('object','is_file',OR_DB_COLUMN_TYPE_INT,1,null,$not_nullable); + $this->addColumn('object','is_page',OR_DB_COLUMN_TYPE_INT,1,null,$not_nullable); + $this->addColumn('object','is_link',OR_DB_COLUMN_TYPE_INT,1,null,$not_nullable); $this->addPrimaryKey('object','id'); $this->addConstraint('object','projectid','project','id'); $this->addConstraint('object','lastchange_userid','user','id'); @@ -99,8 +99,8 @@ class DBVersion000001 extends DbVersion $this->addTable('template'); - $this->addColumn('template','projectid','INT',null,null,$not_nullable); - $this->addColumn('template','name','VARCHAR',50,null,$not_nullable); + $this->addColumn('template','projectid',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); + $this->addColumn('template','name',OR_DB_COLUMN_TYPE_VARCHAR,50,null,$not_nullable); $this->addPrimaryKey('template','id'); $this->addConstraint('template','projectid','project','id'); @@ -111,10 +111,10 @@ class DBVersion000001 extends DbVersion $this->addTable('language'); - $this->addColumn('language','projectid','INT',0,null,$not_nullable); - $this->addColumn('language','isocode','VARCHAR',10,null,$not_nullable); - $this->addColumn('language','name','VARCHAR',50,null,$not_nullable); - $this->addColumn('language','is_default','INT',1,0,$not_nullable); + $this->addColumn('language','projectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('language','isocode',OR_DB_COLUMN_TYPE_VARCHAR,10,null,$not_nullable); + $this->addColumn('language','name',OR_DB_COLUMN_TYPE_VARCHAR,50,null,$not_nullable); + $this->addColumn('language','is_default',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); $this->addPrimaryKey('language','id'); $this->addConstraint('language','projectid','project','id'); $this->addUniqueIndex('language','projectid,isocode'); @@ -123,8 +123,8 @@ class DBVersion000001 extends DbVersion $this->addTable('page'); - $this->addColumn('page','objectid','INT',0,null,$not_nullable); - $this->addColumn('page','templateid','INT',0,null,$not_nullable); + $this->addColumn('page','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('page','templateid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); $this->addPrimaryKey('page','id'); $this->addConstraint('page','templateid','template','id'); $this->addConstraint('page','objectid','object','id'); @@ -136,10 +136,10 @@ class DBVersion000001 extends DbVersion $this->addTable('projectmodel'); - $this->addColumn('projectmodel','projectid','INT',0,null,$not_nullable); - $this->addColumn('projectmodel','name','VARCHAR',50,null,$not_nullable); - $this->addColumn('projectmodel','extension','VARCHAR',10,null,$nullable); - $this->addColumn('projectmodel','is_default','INT',1,0,$not_nullable); + $this->addColumn('projectmodel','projectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('projectmodel','name',OR_DB_COLUMN_TYPE_VARCHAR,50,null,$not_nullable); + $this->addColumn('projectmodel','extension',OR_DB_COLUMN_TYPE_VARCHAR,10,null,$nullable); + $this->addColumn('projectmodel','is_default',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); $this->addPrimaryKey('projectmodel','id'); $this->addConstraint('projectmodel','projectid','project','id'); @@ -148,24 +148,24 @@ class DBVersion000001 extends DbVersion $this->addTable('element'); - $this->addColumn('element','templateid','INT',0,0,$not_nullable); - $this->addColumn('element','name','VARCHAR',50,null,$not_nullable); - $this->addColumn('element','descr','VARCHAR',255,null,$not_nullable); - $this->addColumn('element','type','VARCHAR',20,null,$not_nullable); - $this->addColumn('element','subtype','VARCHAR',20,null,$nullable); - $this->addColumn('element','with_icon','INT',1,0,$not_nullable); - $this->addColumn('element','dateformat','VARCHAR',100,null,$nullable); - $this->addColumn('element','wiki','INT',1,0,$nullable); - $this->addColumn('element','html','INT',1,0,$nullable); - $this->addColumn('element','all_languages','INT',1,0,$not_nullable); - $this->addColumn('element','writable','INT',1,0,$not_nullable); - $this->addColumn('element','decimals','INT',0,null,$nullable); - $this->addColumn('element','dec_point','VARCHAR',5,null,$nullable); - $this->addColumn('element','thousand_sep','VARCHAR',1,null,$nullable); - $this->addColumn('element','code','TEXT',null,null,$nullable); - $this->addColumn('element','default_text','TEXT',null,null,$nullable); - $this->addColumn('element','folderobjectid','INT',null,null,$nullable); - $this->addColumn('element','default_objectid','INT',null,null,$nullable); + $this->addColumn('element','templateid',OR_DB_COLUMN_TYPE_INT,0,0,$not_nullable); + $this->addColumn('element','name',OR_DB_COLUMN_TYPE_VARCHAR,50,null,$not_nullable); + $this->addColumn('element','descr',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('element','type',OR_DB_COLUMN_TYPE_VARCHAR,20,null,$not_nullable); + $this->addColumn('element','subtype',OR_DB_COLUMN_TYPE_VARCHAR,20,null,$nullable); + $this->addColumn('element','with_icon',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('element','dateformat',OR_DB_COLUMN_TYPE_VARCHAR,100,null,$nullable); + $this->addColumn('element','wiki',OR_DB_COLUMN_TYPE_INT,1,0,$nullable); + $this->addColumn('element','html',OR_DB_COLUMN_TYPE_INT,1,0,$nullable); + $this->addColumn('element','all_languages',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('element','writable',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('element','decimals',OR_DB_COLUMN_TYPE_INT,0,null,$nullable); + $this->addColumn('element','dec_point',OR_DB_COLUMN_TYPE_VARCHAR,5,null,$nullable); + $this->addColumn('element','thousand_sep',OR_DB_COLUMN_TYPE_VARCHAR,1,null,$nullable); + $this->addColumn('element','code',OR_DB_COLUMN_TYPE_TEXT,null,null,$nullable); + $this->addColumn('element','default_text',OR_DB_COLUMN_TYPE_TEXT,null,null,$nullable); + $this->addColumn('element','folderobjectid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('element','default_objectid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); $this->addPrimaryKey('element','id'); $this->addConstraint('element','default_objectid','object','id'); $this->addConstraint('element','folderobjectid','object','id'); @@ -179,10 +179,10 @@ class DBVersion000001 extends DbVersion $this->addTable('file'); - $this->addColumn('file','objectid','INT',0,null,$not_nullable); - $this->addColumn('file','extension','VARCHAR',10,null,$not_nullable); - $this->addColumn('file','size','INT',0,null,$not_nullable); - $this->addColumn('file','value','BLOB',null,null,$not_nullable); + $this->addColumn('file','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('file','extension',OR_DB_COLUMN_TYPE_VARCHAR,10,null,$not_nullable); + $this->addColumn('file','size',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('file','value',OR_DB_COLUMN_TYPE_BLOB,null,null,$not_nullable); $this->addPrimaryKey('file','id'); $this->addConstraint('file','objectid','object','id'); @@ -191,7 +191,7 @@ class DBVersion000001 extends DbVersion $this->addTable('folder'); - $this->addColumn('folder','objectid','INT',0,null,$not_nullable); + $this->addColumn('folder','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); $this->addPrimaryKey('folder','id'); $this->addConstraint('folder','objectid','object','id'); @@ -202,9 +202,9 @@ class DBVersion000001 extends DbVersion $this->addTable('link'); - $this->addColumn('link','objectid','INT',0,null,$not_nullable); - $this->addColumn('link','link_objectid','INT',null,null,$nullable); - $this->addColumn('link','url','VARCHAR',255,null,$nullable); + $this->addColumn('link','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('link','link_objectid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('link','url',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$nullable); $this->addPrimaryKey('link','id'); $this->addConstraint('link','objectid','object','id'); $this->addConstraint('link','link_objectid','object','id'); @@ -217,10 +217,10 @@ class DBVersion000001 extends DbVersion $this->addTable('name'); - $this->addColumn('name','objectid','INT',0,null,$not_nullable); - $this->addColumn('name','name','VARCHAR',255,null,$not_nullable); - $this->addColumn('name','descr','VARCHAR',255,null,$not_nullable); - $this->addColumn('name','languageid','INT',0,null,$not_nullable); + $this->addColumn('name','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('name','name',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('name','descr',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); + $this->addColumn('name','languageid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); $this->addPrimaryKey('name','id'); $this->addConstraint('name','objectid','object','id'); $this->addConstraint('name','languageid','language','id'); @@ -234,10 +234,10 @@ class DBVersion000001 extends DbVersion $this->addTable('templatemodel'); - $this->addColumn('templatemodel','templateid','INT',0,null,$not_nullable); - $this->addColumn('templatemodel','projectmodelid','INT',0,null,$not_nullable); - $this->addColumn('templatemodel','extension','VARCHAR',10,null,$nullable); - $this->addColumn('templatemodel','text','TEXT',null,null,$not_nullable); + $this->addColumn('templatemodel','templateid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('templatemodel','projectmodelid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('templatemodel','extension',OR_DB_COLUMN_TYPE_VARCHAR,10,null,$nullable); + $this->addColumn('templatemodel',OR_DB_COLUMN_TYPE_TEXT,OR_DB_COLUMN_TYPE_TEXT,null,null,$not_nullable); $this->addPrimaryKey('templatemodel','id'); $this->addConstraint('templatemodel','templateid','template','id'); $this->addConstraint('templatemodel','projectmodelid','projectmodel','id'); @@ -251,8 +251,8 @@ class DBVersion000001 extends DbVersion $this->addTable('usergroup'); - $this->addColumn('usergroup','userid','INT',null,null,$not_nullable); - $this->addColumn('usergroup','groupid','INT',null,null,$not_nullable); + $this->addColumn('usergroup','userid',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); + $this->addColumn('usergroup','groupid',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); $this->addPrimaryKey('usergroup','id'); $this->addConstraint('usergroup','groupid','group','id'); $this->addConstraint('usergroup','userid','user','id'); @@ -265,17 +265,17 @@ class DBVersion000001 extends DbVersion $this->addTable('value'); - $this->addColumn('value','pageid','INT',0,null,$not_nullable); - $this->addColumn('value','languageid','INT',null,null,$not_nullable); - $this->addColumn('value','elementid','INT',0,null,$not_nullable); - $this->addColumn('value','linkobjectid','INT',null,null,$nullable); - $this->addColumn('value','text','TEXT',null,null,$nullable); - $this->addColumn('value','number','INT',null,null,$nullable); - $this->addColumn('value','date','INT',null,null,$nullable); - $this->addColumn('value','active','INT',0,null,$not_nullable); - $this->addColumn('value','lastchange_date','INT',0,null,$not_nullable); - $this->addColumn('value','lastchange_userid','INT',null,null,$nullable); - $this->addColumn('value','publish','INT',null,null,$not_nullable); + $this->addColumn('value','pageid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('value','languageid',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); + $this->addColumn('value','elementid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('value','linkobjectid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('value',OR_DB_COLUMN_TYPE_TEXT,OR_DB_COLUMN_TYPE_TEXT,null,null,$nullable); + $this->addColumn('value','number',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('value','date',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('value','active',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('value','lastchange_date',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('value','lastchange_userid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('value','publish',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); $this->addPrimaryKey('value','id'); $this->addConstraint('value','pageid','page','id'); $this->addConstraint('value','elementid','element','id'); @@ -295,21 +295,21 @@ class DBVersion000001 extends DbVersion $this->addTable('acl'); - $this->addColumn('acl','userid','INT',null,null,$nullable); - $this->addColumn('acl','groupid','INT',null,null,$nullable); - $this->addColumn('acl','objectid','INT',null,null,$not_nullable); - $this->addColumn('acl','languageid','INT',0,null,$nullable); - $this->addColumn('acl','is_write','INT',1,0,$not_nullable); - $this->addColumn('acl','is_prop','INT',1,0,$not_nullable); - $this->addColumn('acl','is_create_folder','INT',1,0,$not_nullable); - $this->addColumn('acl','is_create_file','INT',1,0,$not_nullable); - $this->addColumn('acl','is_create_link','INT',1,0,$not_nullable); - $this->addColumn('acl','is_create_page','INT',1,0,$not_nullable); - $this->addColumn('acl','is_delete','INT',1,0,$not_nullable); - $this->addColumn('acl','is_release','INT',1,0,$not_nullable); - $this->addColumn('acl','is_publish','INT',1,0,$not_nullable); - $this->addColumn('acl','is_grant','INT',1,0,$not_nullable); - $this->addColumn('acl','is_transmit','INT',1,0,$not_nullable); + $this->addColumn('acl','userid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('acl','groupid',OR_DB_COLUMN_TYPE_INT,null,null,$nullable); + $this->addColumn('acl','objectid',OR_DB_COLUMN_TYPE_INT,null,null,$not_nullable); + $this->addColumn('acl','languageid',OR_DB_COLUMN_TYPE_INT,0,null,$nullable); + $this->addColumn('acl','is_write',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_prop',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_create_folder',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_create_file',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_create_link',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_create_page',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_delete',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_release',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_publish',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_grant',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); + $this->addColumn('acl','is_transmit',OR_DB_COLUMN_TYPE_INT,1,0,$not_nullable); $this->addPrimaryKey('acl','id'); $this->addConstraint('acl','groupid','group','id'); $this->addConstraint('acl','userid','user','id'); diff --git a/db/update/DBVersion000002.class.php b/db/update/DBVersion000002.class.php @@ -12,9 +12,9 @@ class DBVersion000002 extends DbVersion { $this->addTable('version'); - $this->addColumn('version','version' ,'INT',null,null,false); - $this->addColumn('version','status' ,'INT',null,null,false); - $this->addColumn('version','installed','INT',null,null,false); + $this->addColumn('version','version' ,OR_DB_COLUMN_TYPE_INT,null,null,false); + $this->addColumn('version','status' ,OR_DB_COLUMN_TYPE_INT,null,null,false); + $this->addColumn('version','installed',OR_DB_COLUMN_TYPE_INT,null,null,false); $this->addPrimaryKey ('version','id' ); $this->addIndex ('version','status' ); diff --git a/db/update/DBVersion000004.class.php b/db/update/DBVersion000004.class.php @@ -15,10 +15,10 @@ class DBVersion000004 extends DbVersion $nullable = true; // Add user language - $this->addColumn('user','language','VARCHAR', 2,null,$nullable); + $this->addColumn('user','language',OR_DB_COLUMN_TYPE_VARCHAR, 2,null,$nullable); // Add user timezone - $this->addColumn('user','timezone','VARCHAR',64,null,$nullable); + $this->addColumn('user','timezone',OR_DB_COLUMN_TYPE_VARCHAR,64,null,$nullable); } } diff --git a/db/update/DBVersion000005.class.php b/db/update/DBVersion000005.class.php @@ -15,7 +15,7 @@ class DBVersion000005 extends DbVersion $nullable = true; // longer Passwords! 50 is not enough. - $this->addColumn('user','password_hash','VARCHAR',255,null,$not_nullable); + $this->addColumn('user','password_hash',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); $db = $this->getDb(); $table = $this->getTableName('user'); @@ -26,7 +26,7 @@ class DBVersion000005 extends DbVersion $this->dropColumn('user','password'); - $this->addColumn('user','password_salt','VARCHAR',255,null,$not_nullable); + $this->addColumn('user','password_salt',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); } } diff --git a/db/update/DBVersion000006.class.php b/db/update/DBVersion000006.class.php @@ -14,11 +14,11 @@ class DBVersion000006 extends DbVersion $not_nullable = false; $nullable = true; - $this->addColumn('user','password_expires','INT',0,null,$nullable); + $this->addColumn('user','password_expires',OR_DB_COLUMN_TYPE_INT,0,null,$nullable); - $this->addColumn('user','last_login' ,'INT',0,null,$nullable); + $this->addColumn('user','last_login' ,OR_DB_COLUMN_TYPE_INT,0,null,$nullable); - $this->addColumn('user','password_algo' ,'INT',0,2,$not_nullable); + $this->addColumn('user','password_algo' ,OR_DB_COLUMN_TYPE_INT,0,2,$not_nullable); // Setting Password algo. Passwords beginning with '$' are (old) MD5-hashes. diff --git a/db/update/DBVersion000007.class.php b/db/update/DBVersion000007.class.php @@ -15,7 +15,7 @@ class DBVersion000007 extends DbVersion $not_nullable = false; $nullable = true; - $this->addColumn('user','otp_secret' ,'VARCHAR',255,null,$nullable ); + $this->addColumn('user','otp_secret' ,OR_DB_COLUMN_TYPE_VARCHAR,255,null,$nullable ); $table = $this->getTableName('user'); $db = $this->getDb(); @@ -29,9 +29,9 @@ class DBVersion000007 extends DbVersion $stmt->query(); } - $this->addColumn('user','totp' ,'INT' , 1, 0,$not_nullable); - $this->addColumn('user','hotp_counter','INT' , 0, 0,$not_nullable); - $this->addColumn('user','hotp' ,'INT' , 1, 0,$not_nullable); + $this->addColumn('user','totp' ,OR_DB_COLUMN_TYPE_INT , 1, 0,$not_nullable); + $this->addColumn('user','hotp_counter',OR_DB_COLUMN_TYPE_INT , 0, 0,$not_nullable); + $this->addColumn('user','hotp' ,OR_DB_COLUMN_TYPE_INT , 1, 0,$not_nullable); } } diff --git a/db/update/DBVersion000008.class.php b/db/update/DBVersion000008.class.php @@ -18,7 +18,7 @@ class DBVersion000008 extends DbVersion $not_nullable = false; $nullable = true; - $this->addColumn('object','typeid','INT',2,0,$not_nullable); + $this->addColumn('object','typeid',OR_DB_COLUMN_TYPE_INT,2,0,$not_nullable); $this->addIndex('object','typeid'); // Converting old values... diff --git a/db/update/DBVersion000009.class.php b/db/update/DBVersion000009.class.php @@ -23,8 +23,8 @@ class DBVersion000009 extends DbVersion // Creating new table 'url' $this->addTable('url'); - $this->addColumn('url','objectid','INT',0,null,$not_nullable); - $this->addColumn('url','url','VARCHAR',255,null,$not_nullable); + $this->addColumn('url','objectid',OR_DB_COLUMN_TYPE_INT,0,null,$not_nullable); + $this->addColumn('url','url',OR_DB_COLUMN_TYPE_VARCHAR,255,null,$not_nullable); $this->addPrimaryKey('url','id'); $this->addConstraint('url','objectid','object','id'); diff --git a/db/update/DBVersion000010.class.php b/db/update/DBVersion000010.class.php @@ -3,7 +3,7 @@ use database\DbVersion; use security\Password; /** - * Filetype 'file' is now devided into 'file' (unchanged), 'image' (new) and 'text' (new). + * Filetype 'file' is now devided into 'file' (unchanged), 'image' (new) and OR_DB_COLUMN_TYPE_TEXT (new). * * @author dankert * @@ -27,7 +27,7 @@ class DBVersion000010 extends DbVersion $updateStmt = $db->sql('UPDATE '.$tableObject. ' SET typeid=7 WHERE id IN (SELECT objectid FROM '.$tableFile. - " WHERE extension IN ('css','text','txt','js','html','xml','log','ini','gpx') )" + " WHERE extension IN ('css',OR_DB_COLUMN_TYPE_TEXT,'txt','js','html','xml','log','ini','gpx') )" ); $updateStmt->query(); diff --git a/db/update/DBVersion000011.class.php b/db/update/DBVersion000011.class.php @@ -0,0 +1,58 @@ +<?php + +use database\DbVersion; +use security\Password; + +/** + * Project gets new columns. + * + * @author dankert + * + */ +class DBVersion000011 extends DbVersion +{ + /** + * + */ + public function update() + { + $not_nullable = false; + $nullable = true; + + + $this->addColumn('project', 'url', OR_DB_COLUMN_TYPE_VARCHAR, 255, '', $not_nullable); + $this->addColumn('project', 'flags', OR_DB_COLUMN_TYPE_INT, 11, 0, $not_nullable); + + $db = $this->getDb(); + $tableProject = $this->getTableName('project'); + + // Update the url + $updateStmt = $db->sql(<<<SQL +UPDATE $tableProject + SET url= CONCAT('//',name) +SQL + ); + $updateStmt->query(); + + // Update the new flags + $updateStmt = $db->sql(<<<SQL +UPDATE $tableProject + SET flags=flags+1 WHERE cut_index=1 +SQL + ); + $updateStmt->query(); + + $updateStmt = $db->sql(<<<SQL +UPDATE $tableProject + SET flags=flags+2 WHERE content_negotiation=1 +SQL + ); + $updateStmt->query(); + + // now the information is hold in column 'flags', so we can delete the old columns. + $this->dropColumn('project', 'cut_index'); + $this->dropColumn('project', 'content_negotiation'); + } +} + +?>+ \ No newline at end of file diff --git a/modules/cms-core/model/Project.class.php b/modules/cms-core/model/Project.class.php @@ -2,6 +2,11 @@ namespace cms\model; +define('PROJECT_FLAG_CUT_INDEX',1); +define('PROJECT_FLAG_CONTENT_NEGOTIATION',2); +define('PROJECT_FLAG_PUBLISH_FILE_EXTENSION',4); +define('PROJECT_FLAG_PUBLISH_PAGE_EXTENSION',8); + use database\Database; use Session; @@ -12,7 +17,7 @@ use Session; * @author Jan Dankert * @package openrat.objects */ -class Project +class Project extends ModelBase { // Eigenschaften var $projectid; @@ -21,9 +26,28 @@ class Project var $ftp_url; var $ftp_passive; var $cmd_after_publish; - var $content_negotiation; - var $cut_index; - + + + /** + * @var boolean + */ + public $content_negotiation = false; + + /** + * @var boolean + */ + public $cut_index = false; + + /** + * @var boolean + */ + public $publishFileExtension = true; + + /** + * @var boolean + */ + public $publishPageExtension = true; + var $log = array(); @@ -186,8 +210,10 @@ class Project $this->ftp_url = $row['ftp_url' ]; $this->ftp_passive = $row['ftp_passive' ]; $this->cmd_after_publish = $row['cmd_after_publish' ]; - $this->content_negotiation = $row['content_negotiation']; - $this->cut_index = $row['cut_index' ]; + $this->cut_index = $row['flags']&PROJECT_FLAG_CUT_INDEX; + $this->content_negotiation = $row['flags']&PROJECT_FLAG_CONTENT_NEGOTIATION; + $this->publishFileExtension = $row['flags']&PROJECT_FLAG_PUBLISH_FILE_EXTENSION; + $this->publishPageExtension = $row['flags']&PROJECT_FLAG_PUBLISH_PAGE_EXTENSION; } @@ -207,9 +233,11 @@ class Project $this->ftp_url = $row['ftp_url' ]; $this->ftp_passive = $row['ftp_passive' ]; $this->cmd_after_publish = $row['cmd_after_publish' ]; - $this->content_negotiation = $row['content_negotiation']; - $this->cut_index = $row['cut_index' ]; - } + $this->cut_index = $row['flags']&PROJECT_FLAG_CUT_INDEX; + $this->content_negotiation = $row['flags']&PROJECT_FLAG_CONTENT_NEGOTIATION; + $this->publishFileExtension = $row['flags']&PROJECT_FLAG_PUBLISH_FILE_EXTENSION; + $this->publishPageExtension = $row['flags']&PROJECT_FLAG_PUBLISH_PAGE_EXTENSION; + } // Speichern @@ -223,8 +251,7 @@ class Project target_dir = {target_dir}, ftp_url = {ftp_url}, ftp_passive = {ftp_passive}, - cut_index = {cut_index}, - content_negotiation = {content_negotiation}, + flags = {flags}, cmd_after_publish = {cmd_after_publish} WHERE id= {projectid} SQL @@ -235,8 +262,14 @@ SQL $sql->setString('target_dir' ,$this->target_dir ); $sql->setInt ('ftp_passive' ,$this->ftp_passive ); $sql->setString('cmd_after_publish' ,$this->cmd_after_publish ); - $sql->setInt ('content_negotiation',$this->content_negotiation ); - $sql->setInt ('cut_index' ,$this->cut_index ); + + $flags = 0; + if( $this->cut_index) $flags |= PROJECT_FLAG_CUT_INDEX; + if( $this->content_negotiation) $flags |= PROJECT_FLAG_CONTENT_NEGOTIATION; + if( $this->publishFileExtension) $flags |= PROJECT_FLAG_PUBLISH_PAGE_EXTENSION; + if( $this->publishPageExtension) $flags |= PROJECT_FLAG_PUBLISH_PAGE_EXTENSION; + + $sql->setInt ('flags' ,$flags ); $sql->setInt ('projectid' ,$this->projectid ); $sql->query(); @@ -255,32 +288,29 @@ SQL } - // Speichern + /** + * Liefert alle Eigenschaften des Projektes. + */ public function getProperties() { - return Array( 'name' =>$this->name, - 'target_dir' =>$this->target_dir, - 'ftp_url' =>$this->ftp_url, - 'ftp_passive' =>$this->ftp_passive, - 'cmd_after_publish' =>$this->cmd_after_publish, - 'content_negotiation'=>$this->content_negotiation, - 'cut_index' =>$this->cut_index, - 'projectid' =>$this->projectid ); + return parent::getProperties(); } - // Projekt hinzufuegen - public function add() + /** + * Add a project to the database. + */ + public function add() { $db = db_connection(); - + $sql = $db->sql('SELECT MAX(id) FROM {{project}}'); $this->projectid = intval($sql->getOne())+1; // Projekt hinzuf?gen - $sql = $db->sql( 'INSERT INTO {{project}} (id,name,target_dir,ftp_url,ftp_passive,cmd_after_publish,content_negotiation,cut_index) '. - " VALUES( {projectid},{name},'','',0,'',0,0 ) " ); + $sql = $db->sql( 'INSERT INTO {{project}} (id,name,target_dir,ftp_url,ftp_passive,cmd_after_publish,flags) '. + " VALUES( {projectid},{name},'','',0,'',0 ) " ); $sql->setInt ('projectid',$this->projectid ); $sql->setString('name' ,$this->name ); @@ -363,7 +393,7 @@ SQL } - // Projekt l?schen + // Deleting the project $sql = $db->sql( 'DELETE FROM {{project}}'. ' WHERE id= {projectid} ' ); $sql->setInt( 'projectid',$this->projectid ); diff --git a/modules/database/DbVersion.class.php b/modules/database/DbVersion.class.php @@ -1,11 +1,21 @@ <?php -namespace { + +namespace database { + define('OR_DB_INDEX_PREFIX', 'IX'); define('OR_DB_CONSTRAINT_PREFIX', 'FK'); -} -namespace database { + define('OR_DB_TYPE_MYSQL',1); + define('OR_DB_TYPE_POSTGRES',2); + define('OR_DB_TYPE_SQLITE',3); + define('OR_DB_TYPE_ORACLE',4); + + define('OR_DB_COLUMN_TYPE_INT',1); + define('OR_DB_COLUMN_TYPE_VARCHAR',2); + define('OR_DB_COLUMN_TYPE_TEXT',3); + define('OR_DB_COLUMN_TYPE_BLOB',4); + use Http; @@ -14,6 +24,11 @@ namespace database { private $db; private $tablePrefix; private $tableSuffix; + + /** + * Datenbank-RDBMS-Typ + * @var int + */ private $dbmsType; public function __construct(Database $db) @@ -23,33 +38,33 @@ namespace database { switch ($db->conf['type']) { case 'mysql': case 'mysqli': - $this->dbmsType = 'mysql'; + $this->dbmsType = OR_DB_TYPE_MYSQL; break; case 'postgresql': - $this->dbmsType = 'postgresql'; + $this->dbmsType = OR_DB_TYPE_POSTGRES; break; case 'sqlite': case 'sqlite3': - $this->dbmsType = 'sqlite'; + $this->dbmsType = OR_DB_TYPE_SQLITE; break; case 'pdo': $dsnParts = explode(':', $db->conf['dsn']); switch ($dsnParts[0]) { case 'mysql': - $this->dbmsType = 'mysql'; + $this->dbmsType = OR_DB_TYPE_MYSQL; break; case 'pgsql': - $this->dbmsType = 'postgresql'; + $this->dbmsType = OR_DB_TYPE_POSTGRES; break; case 'sqlite': - $this->dbmsType = 'sqlite'; + $this->dbmsType = OR_DB_TYPE_SQLITE; break; default: - Http::serverError('Datebase Configuration Error', 'Unknown DBMS in PDO-DSN: ' . $dsnParts[0]); + throw new \LogicException('Unknown DBMS in PDO-DSN: ' . $dsnParts[0]); } break; default: - Http::serverError('Datebase Configuration Error', 'Unknown DBMS type: ' . $db->conf['type']); + throw new \LogicException('Unknown DBMS type: ' . $db->conf['type']); } $this->tablePrefix = $db->conf['prefix']; @@ -69,12 +84,13 @@ namespace database { /** * Erzeugt eine neue Tabelle. * Die neue Tabelle enthält bereits eine Spalte "id" (da eine leere Tabelle i.d.R. nicht zulässig ist). + * @param $tableName string */ function addTable($tableName) { $tableName = $this->getTableName($tableName); - $table_opts = $this->dbmsType == 'mysql' ? ' ENGINE=InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci' : ''; + $table_opts = $this->dbmsType == OR_DB_TYPE_MYSQL ? ' ENGINE=InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci' : ''; $ddl = $this->db->sql('CREATE TABLE ' . $tableName . '(id INTEGER)' . $table_opts . ';'); // The syntax 'TYPE = InnoDB' was deprecated in MySQL 5.0 and was removed in MySQL 5.1 and later versions. @@ -83,28 +99,31 @@ namespace database { } - # Creating a new column - # param 1: column name - # param 2: type (available are: INT,VARCHAR,TEXT,BLOB) - # param 3: size (number value) - # param 4: default (number value) - # param 5: nullable (available are: J,N) + /** + * Creating a new column. + * @param $tableName string Table name + * @param $columnName string Column name + * @param $type int one of the constance OR_DB_COLUMN_TYPE_* + * @param $size int Size + * @param $default mixed Default value + * @param $nullable boolean + */ function addColumn($tableName, $columnName, $type, $size, $default, $nullable) { $table = $this->getTableName($tableName); $type = strtoupper($type); switch ($type) { - case 'INT': + case OR_DB_COLUMN_TYPE_INT: switch ($this->dbmsType) { - case 'mysql': + case OR_DB_TYPE_MYSQL: if ($size == 1) $dbmsInternalType = 'TINYINT'; else $dbmsInternalType = 'INT'; break; - case 'oracle': + case OR_DB_TYPE_ORACLE: $dbmsInternalType = 'NUMBER'; break; @@ -114,7 +133,7 @@ namespace database { } break; - case 'VARCHAR': + case OR_DB_COLUMN_TYPE_VARCHAR: switch ($this->dbmsType) { default: $dbmsInternalType = 'VARCHAR'; @@ -122,13 +141,13 @@ namespace database { } break; - case 'TEXT': + case OR_DB_COLUMN_TYPE_TEXT: switch ($this->dbmsType) { - case 'mysql': + case OR_DB_TYPE_MYSQL: $dbmsInternalType = 'MEDIUMTEXT'; break; - case 'oracle': + case OR_DB_TYPE_ORACLE: $dbmsInternalType = 'CLOB'; break; @@ -138,21 +157,21 @@ namespace database { } break; - case 'BLOB': + case OR_DB_COLUMN_TYPE_BLOB: switch ($this->dbmsType) { - case 'mysql': + case OR_DB_TYPE_MYSQL: $dbmsInternalType = 'MEDIUMBLOB'; break; - case 'oracle': + case OR_DB_TYPE_ORACLE: $dbmsInternalType = 'CLOB'; break; - case 'postgresql': + case OR_DB_TYPE_POSTGRES: $dbmsInternalType = 'TEXT'; break; - case 'sqlite': + case OR_DB_TYPE_SQLITE: $dbmsInternalType = 'TEXT'; break; @@ -162,12 +181,12 @@ namespace database { } break; default: - Http::serverError('Datebase Configuration Error', 'Unknown Column type: ' . $type); + throw new \LogicException( 'Unknown Column type: ' . $type); } - if ($this->dbmsType == 'oracle') { - // TEXT-columns should be nullable in Oracle, because empty strings are treated as NULL - if ($type == 'VARCHAR' || $type == 'TEXT') + if ($this->dbmsType == OR_DB_TYPE_ORACLE) { + // TEXT-columns must be nullable in Oracle, because empty strings are treated as NULL. BAD BAD BAD, Oracle! + if ($type == OR_DB_COLUMN_TYPE_VARCHAR || $type == OR_DB_COLUMN_TYPE_TEXT) $nullable = true; } diff --git a/modules/util/Http.class.php b/modules/util/Http.class.php @@ -512,14 +512,14 @@ class Http if ( @$_REQUEST['output']=='json' || sizeof($types)==1 && in_array('application/json',$types) ) { header('Content-Type: application/json'); - require_once( OR_SERVICECLASSES_DIR."JSON.class.".PHP_EXT ); + require_once( OR_MODULES_DIR."util/JSON.class.".PHP_EXT ); $json = new JSON(); echo $json->encode( array('status'=>$status,'error'=>$text,'description'=>$message,'reason'=>$reason) ); } elseif ( @$_REQUEST['output']=='xml' || sizeof($types)==1 && in_array('application/xml',$types) ) { header('Content-Type: application/xml'); - require_once( OR_SERVICECLASSES_DIR."XML.class.".PHP_EXT ); + require_once( OR_MODULES_DIR."util/XML.class.".PHP_EXT ); $xml = new XML(); $xml->root='error'; echo $xml->encode( array('status'=>$status,'error'=>$text,'description'=>$message,'reason'=>$reason) );