0011370: repair function for persistent filters (favorites) without grants
authorPhilipp Schüle <p.schuele@metaways.de>
Mon, 12 Oct 2015 16:29:52 +0000 (18:29 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Wed, 14 Oct 2015 14:51:29 +0000 (16:51 +0200)
* checks all filters - add default grants for filters without grants
* adds a fix for getGrantsForRecords
* fixes an invalid continue() statement

https://forge.tine20.org/view.php?id=11370

Change-Id: I007d229d1032982b502a43e65fccf23377f0b5d4
Reviewed-on: http://gerrit.tine20.com/customers/2271
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Tinebase/Backend/Sql/Grants.php
tine20/Tinebase/Frontend/Cli.php
tine20/Tinebase/Frontend/Cli/Abstract.php

index 672396c..067a121 100644 (file)
@@ -54,10 +54,16 @@ class Tinebase_Backend_Sql_Grants extends Tinebase_Backend_Sql
             unset($recordGrant->account_grant);
             
             $record = $records->getById($recordGrant->record_id);
+            $records->removeRecord($record);
             if (! $record->grants instanceof Tinebase_Record_RecordSet) {
                 $record->grants = new Tinebase_Record_RecordSet($this->_modelName);
             }
             $record->grants->addRecord($recordGrant);
+
+            // NOTICE: this is strange - we have to remove the record and add it
+            //   again to make sure that grants are updated ...
+            //   maybe we should add a "replace" method?
+            $records->addRecord($record);
         }
         
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ 
index fa9c67b..294d219 100644 (file)
@@ -457,8 +457,7 @@ class Tinebase_Frontend_Cli extends Tinebase_Frontend_Cli_Abstract
     public function monitoringCheckCron()
     {
         $message = 'CRON FAIL';
-        $result  = 2;
-        
+
         try {
             $lastJob = Tinebase_AsyncJob::getInstance()->getLastJob('Tinebase_Event_Async_Minutely');
             
@@ -637,6 +636,8 @@ class Tinebase_Frontend_Cli extends Tinebase_Frontend_Cli_Abstract
         foreach($this->_applicationsToWorkOn as $app => $cfg) {
             $this->_createDemoDataRecursive($app, $cfg, $_opts);
         }
+
+        return 0;
     }
     
     /**
@@ -684,6 +685,8 @@ class Tinebase_Frontend_Cli extends Tinebase_Frontend_Cli_Abstract
         $this->_addOutputLogWriter();
         
         Tinebase_FileSystem::getInstance()->clearDeletedFiles();
+
+        return 0;
     }
     
     /**
@@ -815,5 +818,48 @@ class Tinebase_Frontend_Cli extends Tinebase_Frontend_Cli_Abstract
         if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
             Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' The operation has been terminated successfully.');
         }
+
+        return 0;
+    }
+
+    /**
+     * repair function for persistent filters (favorites) without grants: this adds default grants for those filters.
+     *
+     * @return int
+     */
+    public function setDefaultGrantsOfPersistentFilters()
+    {
+        if (! $this->_checkAdminRight()) {
+            return -1;
+        }
+
+        $this->_addOutputLogWriter(6);
+
+        // get all persistent filters without grants
+        // TODO this could be enhanced by allowing to set default grants for other filters, too
+
+        $filters = Tinebase_PersistentFilter::getInstance()->search(new Tinebase_Model_PersistentFilterFilter());
+        $filtersWithoutGrants = 0;
+
+        foreach ($filters as $filter) {
+            if (count($filter->grants) == 0) {
+                // update to set default grants
+                $filter = Tinebase_PersistentFilter::getInstance()->update($filter);
+                $filtersWithoutGrants++;
+
+                if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
+                    Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
+                        . ' Updated filter: ' . print_r($filter->toArray(), true));
+                }
+            }
+        }
+
+        if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
+            Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__
+                . ' Set default grants for ' . $filtersWithoutGrants . ' filters'
+                . ' (checked ' . count($filters) . ' in total).');
+        }
+
+        return 0;
     }
 }
index 4dba992..394c60d 100644 (file)
@@ -122,7 +122,6 @@ class Tinebase_Frontend_Cli_Abstract
      * @param Zend_Console_Getopt $_opts
      * @param boolean $checkDependencies
      */
-    
     public function createDemoData($_opts = NULL, $checkDependencies = TRUE)
     {
         // just admins can perform this action
@@ -192,6 +191,8 @@ class Tinebase_Frontend_Cli_Abstract
             echo 'Creating Demo Data is not implemented yet for this Application!' . chr(10);
             echo chr(10);
         }
+
+        return true;
     }
     
     /**
@@ -439,7 +440,7 @@ class Tinebase_Frontend_Cli_Abstract
         $class_name = $this->_applicationName . '_Setup_Import_Egw14';
         if (! class_exists($class_name)) {
             $logger->ERR(__METHOD__ . '::' . __LINE__ . " no import for {$this->_applicationName} available");
-            continue;
+            exit(1);
         }
         
         try {