diff --git a/dba/base-data.sql b/dba/base-data.sql index 106342d6..9323ec84 100644 --- a/dba/base-data.sql +++ b/dba/base-data.sql @@ -17,20 +17,20 @@ INSERT INTO role_member (user_no, role_no) VALUES(1, 1); -- Set the insert sequence to the next number, with a minimum of 1000 SELECT setval('usr_user_no_seq', (SELECT 1000 UNION SELECT user_no FROM usr ORDER BY 1 DESC LIMIT 1) ); -INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) - VALUES( 1, 'Administers Group', TRUE, 'A', '' ); +INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers ) + VALUES( 1, 'Administers Group', TRUE, 'A' ); -INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) - VALUES( 2, 'is Assistant to', FALSE, 'RW', '' ); +INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers ) + VALUES( 2, 'is Assistant to', FALSE, 'RW' ); -INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) - VALUES( 3, 'Is a member of group', TRUE, 'R', '' ); +INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers ) + VALUES( 3, 'Is a member of group', TRUE, 'R' ); -INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) - VALUES( 4, 'Administers Resource', FALSE, 'A', '' ); +INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers ) + VALUES( 4, 'Administers Resource', FALSE, 'A' ); -INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) - VALUES( 5, 'Can see free/busy time of', FALSE, 'F', '' ); +INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers ) + VALUES( 5, 'Can see free/busy time of', FALSE, 'F' ); -- Set the insert sequence to the next number, with a minimum of 1000 diff --git a/dba/caldav_functions.sql b/dba/caldav_functions.sql index 5ee77dc1..2b819e72 100644 --- a/dba/caldav_functions.sql +++ b/dba/caldav_functions.sql @@ -236,7 +236,7 @@ BEGIN -- dbg := ''S-''; SELECT rt1.confers INTO out_confers FROM relationship r1 JOIN relationship_type rt1 USING ( rt_id ) - WHERE NOT rt1.rt_isgroup AND r1.from_user = in_from AND r1.to_user = in_to; + WHERE NOT rt1.rt_togroup AND r1.from_user = in_from AND r1.to_user = in_to; IF FOUND THEN RETURN dbg || out_confers; END IF; @@ -244,7 +244,7 @@ BEGIN SELECT rt1.confers, rt2.confers INTO out_confers, tmp_confers FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id ) LEFT OUTER JOIN relationship r2 ON ( r1.to_user = r2.from_user ) JOIN relationship_type rt2 ON ( r2.rt_id = rt2.rt_id ) - WHERE rt1.rt_isgroup AND NOT rt2.rt_isgroup AND r1.from_user = in_from AND r2.to_user = in_to; + WHERE rt1.rt_togroup AND NOT rt2.rt_togroup AND r1.from_user = in_from AND r2.to_user = in_to; IF FOUND THEN -- RAISE NOTICE ''Permissions to group % from group %'', out_confers, tmp_confers; @@ -271,7 +271,7 @@ BEGIN SELECT rt1.confers INTO out_confers, tmp_confers FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id ) LEFT OUTER JOIN relationship r2 ON ( rt1.rt_id = r2.rt_id ) - WHERE rt1.rt_isgroup AND r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user + WHERE rt1.rt_togroup AND r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; IF FOUND THEN diff --git a/dba/patches/1.1.7.sql b/dba/patches/1.1.7.sql new file mode 100644 index 00000000..886cd2ac --- /dev/null +++ b/dba/patches/1.1.7.sql @@ -0,0 +1,15 @@ + +-- Adding lock support + +BEGIN; +SELECT check_db_revision(1,1,6); + +ALTER TABLE relationship_type DROP COLUMN rt_inverse; +ALTER TABLE relationship_type DROP COLUMN prefix_match; +ALTER TABLE relationship_type ALTER COLUMN rt_isgroup RENAME TO rt_togroup; +ALTER TABLE relationship_type ADD COLUMN rt_fromgroup BOOLEAN; + +SELECT new_db_revision(1,1,7, 'July' ); +COMMIT; +ROLLBACK; + diff --git a/dba/rscds.sql b/dba/rscds.sql index 9b306e24..bbbfe68a 100644 --- a/dba/rscds.sql +++ b/dba/rscds.sql @@ -85,10 +85,9 @@ GRANT SELECT,INSERT,UPDATE,DELETE ON collection TO general; CREATE TABLE relationship_type ( rt_id SERIAL PRIMARY KEY, rt_name TEXT, - rt_isgroup BOOLEAN, - rt_inverse INT, + rt_togroup BOOLEAN, confers TEXT DEFAULT 'RW', - prefix_match TEXT DEFAULT '' + rt_fromgroup BOOLEAN ); GRANT SELECT,INSERT,UPDATE,DELETE ON relationship_type TO general; @@ -132,4 +131,4 @@ CREATE INDEX properties_dav_name_idx ON property(dav_name); GRANT SELECT,INSERT,UPDATE,DELETE ON property TO general; -SELECT new_db_revision(1,1,6, 'June' ); +SELECT new_db_revision(1,1,7, 'July' ); diff --git a/htdocs/relationship_types.php b/htdocs/relationship_types.php index d17ffd64..1f444cf8 100644 --- a/htdocs/relationship_types.php +++ b/htdocs/relationship_types.php @@ -57,9 +57,9 @@ require_once("interactive-page.php"); $browser->AddColumn( 'rt_id', 'Id' ); $browser->AddColumn( 'rt_name', translate('Name') ); - $browser->AddColumn( 'rt_isgroup', translate('To Group?'), '', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" ); + $browser->AddColumn( 'rt_fromgroup', translate('From Group?'), '', '', "CASE WHEN rt_fromgroup THEN 'Yes' ELSE 'No' END" ); + $browser->AddColumn( 'rt_togroup', translate('To Group?'), '', '', "CASE WHEN rt_togroup THEN 'Yes' ELSE 'No' END" ); $browser->AddColumn( 'confers', translate('Rights') ); - $browser->AddColumn( 'prefix_match', translate("Prefix") ); $browser->AddColumn( 'action', translate("Action"), "", "", "'base_url/relationship_types.php?action=delete&rt_id=' || rt_id || '\">".translate("Delete")."'" ); $browser->SetJoins( 'relationship_type' ); @@ -77,24 +77,23 @@ require_once("interactive-page.php"); array("title" => translate("Enter the name for this resource type"), "size" => "20") ); - $rt_isgroup_field = new EntryField( "checkbox", "rt_isgroup", + $rt_fromgroup_field = new EntryField( "checkbox", "rt_fromgroup", + array("title" => translate("Is the source of this relationship a group of access rights?")) ); + + $rt_fromgroup_field = new EntryField( "checkbox", "rt_togroup", array("title" => translate("Is the target of this relationship a group of access rights?")) ); $confers_field = new EntryField( "text", "confers", array("title" => translate("Is this access read ('R') or Read and Write ('RW')?"), "size" => "5") ); - $prefix_match_field = new EntryField( "text", "hprefix_match", - array("title" => translate("Restrict access to prefixes matching this pattern"), - "size" => "15") ); - $browser->AddRow( array( 'rt_id' => 'new', 'rt_name' => $rt_name_field->Render(), 'rt_link' => $rt_name_field->Render(), - 'rt_isgroup' => $rt_isgroup_field->Render(), + 'rt_fromgroup' => $rt_fromgroup_field->Render(), + 'rt_togroup' => $rt_togroup_field->Render(), 'confers' => $confers_field->Render(), - 'prefix_match' => $prefix_match_field->Render(), 'action' => '' ) ); diff --git a/inc/RSCDSSession.php b/inc/RSCDSSession.php index fcab612d..0d240b6b 100644 --- a/inc/RSCDSSession.php +++ b/inc/RSCDSSession.php @@ -143,13 +143,12 @@ class RSCDSSession extends Session */ function GetRelationships () { $this->relationships = array(); - $sql = 'SELECT relationship.rt_id, rt_name, rt_isgroup, confers, prefix_match FROM relationship JOIN relationship_type USING (rt_id) WHERE from_user = '.$this->user_no.' UNION '; - $sql .= 'SELECT relationship_type.rt_id, rt_name, rt_isgroup, confers, prefix_match FROM relationship JOIN relationship_type ON (relationship.rt_id = relationship_type.rt_inverse) WHERE to_user = '.$this->user_no.';'; + $sql = 'SELECT relationship.rt_id, rt_name, rt_fromgroup, rt_togroup, confers FROM relationship JOIN relationship_type USING (rt_id) WHERE from_user = '.$this->user_no; $qry = new PgQuery( $sql ); if ( $qry->Exec('RSCDSSession') && $qry->rows > 0 ) { while( $relationship = $qry->Fetch() ) { $this->relationships[$relationship->rt_id] = $relationship; - dbg_error_log( "RSCDSSession", "Relationships: %d - %s - %d - %s - %s -", $relationship->rt_id, $relationship->rt_name, $relationship->rt_isgroup, $relationship->confers, $relationship->prefix_match ); + dbg_error_log( "RSCDSSession", "Relationships: %d - %s - %d - %s - %s -", $relationship->rt_id, $relationship->rt_name, $relationship->rt_fromgroup, $relationship->rt_togroup, $relationship->confers ); } } } diff --git a/inc/RSCDSUser.php b/inc/RSCDSUser.php index 412c271d..acef3b9a 100644 --- a/inc/RSCDSUser.php +++ b/inc/RSCDSUser.php @@ -90,7 +90,6 @@ class RSCDSUser extends User $browser->AddHidden( 'user_link', "'base_url/user.php?user_no=' || user_no || '\">' || fullname || ''" ); $browser->AddColumn( 'rt_name', translate('Relationship') ); $browser->AddColumn( 'fullname', translate('Linked To'), 'left', '##user_link##' ); -// $browser->AddColumn( 'is_group', 'Group?', 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" ); $browser->AddHidden( 'confers' ); $browser->AddColumn( 'email', translate('EMail') ); if ( $ef->EditMode ) { // && $session->AllowedTo("MaintainRelationships") ) { @@ -140,7 +139,7 @@ EOSQL; "_null" => $nullvalue, "_sql" => $sql ) ); - $group_target = ( isset($this->roles['Group']) ? 'WHERE NOT rt_isgroup' : '' ); + $group_target = ( isset($this->roles['Group']) ? 'WHERE NOT rt_fromgroup' : '' ); $relationship_type_selection = $ef->DataEntryField( "", "lookup", "relate_as", array("title" => translate("Select the type of relationship from this user"), "_null" => translate("--- select a relationship type ---"), @@ -175,7 +174,7 @@ EOSQL; $browser->AddHidden( 'user_link', "'base_url/user.php?user_no=' || user_no || '\">' || fullname || ''" ); $browser->AddColumn( 'fullname', translate('Linked From'), 'left', '##user_link##' ); $browser->AddColumn( 'rt_name', translate('Relationship') ); - $browser->AddColumn( 'is_group', translate('Group?'), 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" ); + $browser->AddColumn( 'to_group', translate('Group?'), 'centre', '', "CASE WHEN rt_togroup THEN 'Yes' ELSE 'No' END" ); $browser->AddHidden( 'confers' ); $browser->AddColumn( 'email', translate('EMail') ); diff --git a/rscds.webprj b/rscds.webprj index 288f5ef6..9ccb28aa 100644 --- a/rscds.webprj +++ b/rscds.webprj @@ -228,5 +228,6 @@ +