13246: pgsql / calendar - fix broken sql in grants check
authorPaul Mehrer <p.mehrer@metaways.de>
Wed, 21 Jun 2017 08:19:29 +0000 (10:19 +0200)
committerPaul Mehrer <p.mehrer@metaways.de>
Wed, 21 Jun 2017 09:34:06 +0000 (11:34 +0200)
Change-Id: Iefa1f1b5a51cced06c863a0279130b6f5eb3f10c
Reviewed-on: http://gerrit.tine20.com/customers/4920
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Paul Mehrer <p.mehrer@metaways.de>
Tested-by: Paul Mehrer <p.mehrer@metaways.de>
tine20/Calendar/Backend/Sql.php

index 90db9ca..294faa2 100644 (file)
@@ -509,15 +509,15 @@ class Calendar_Backend_Sql extends Tinebase_Backend_Sql_Abstract
         
         foreach ($allGrants as $grant) {
             if (in_array($grant, $this->_recordBasedGrants)) {
-                $_select->columns(array($grant => "\n MAX( CASE WHEN ( \n" .
+                $_select->columns(array($grant => new Zend_Db_Expr("\n MAX( CASE WHEN ( \n" .
                     '  /* physgrant */' . $this->_getContainGrantCondition('physgrants', 'groupmemberships', 'rolememberships', $grant) . " OR \n" .
                     '  /* implicit  */' . $this->_getImplicitGrantCondition($grant) . " OR \n" .
                     '  /* inherited */' . $this->_getInheritedGrantCondition($grant) . " \n" .
-                 ") THEN 1 ELSE 0 END ) "));
+                 ") THEN 1 ELSE 0 END ) ")));
             } else {
-                $_select->columns(array($grant => "\n MAX( CASE WHEN ( \n" .
+                $_select->columns(array($grant => new Zend_Db_Expr("\n MAX( CASE WHEN ( \n" .
                     '  /* physgrant */' . $this->_getContainGrantCondition('physgrants', 'groupmemberships', 'rolememberships', $grant) . "\n" .
-                ") THEN 1 ELSE 0 END ) "));
+                ") THEN 1 ELSE 0 END ) ")));
             }
         }
     }
@@ -546,7 +546,9 @@ class Calendar_Backend_Sql extends Tinebase_Backend_Sql_Abstract
         
         $sql = $this->_db->quoteInto(    "($quoteTypeIdentifier = ?", Tinebase_Acl_Rights::ACCOUNT_TYPE_USER)  . " AND $quoteIdIdentifier = $userExpression)" .
                $this->_db->quoteInto(" OR ($quoteTypeIdentifier = ?", Tinebase_Acl_Rights::ACCOUNT_TYPE_GROUP) . ' AND ' . $this->_db->quoteIdentifier("$_groupMembersTableName.group_id") . " = $quoteIdIdentifier" . ')' .
-               $this->_db->quoteInto(" OR ($quoteTypeIdentifier = ?", Tinebase_Acl_Rights::ACCOUNT_TYPE_ROLE) . ' AND ' . $this->_db->quoteIdentifier("$_roleMembersTableName.role_id") . " = $quoteIdIdentifier" . ')' .
+               ($this->_db instanceof Zend_Db_Adapter_Pdo_Pgsql ?
+               $this->_db->quoteInto(" OR ($quoteTypeIdentifier = ?", Tinebase_Acl_Rights::ACCOUNT_TYPE_ROLE) . ' AND CAST(' . $this->_db->quoteIdentifier("$_roleMembersTableName.role_id") . " AS text) = $quoteIdIdentifier" . ')' :
+               $this->_db->quoteInto(" OR ($quoteTypeIdentifier = ?", Tinebase_Acl_Rights::ACCOUNT_TYPE_ROLE) . ' AND ' . $this->_db->quoteIdentifier("$_roleMembersTableName.role_id") . " = $quoteIdIdentifier" . ')') .
                $this->_db->quoteInto(" OR ($quoteTypeIdentifier = ?)", Tinebase_Acl_Rights::ACCOUNT_TYPE_ANYONE);
         
         if ($_requiredGrant) {