]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add support for the old public backgroundjob api
authorRobin Appelman <icewind@owncloud.com>
Wed, 24 Apr 2013 12:38:41 +0000 (14:38 +0200)
committerRobin Appelman <icewind@owncloud.com>
Wed, 24 Apr 2013 12:40:49 +0000 (14:40 +0200)
lib/backgroundjob/job.php
lib/backgroundjob/joblist.php
lib/public/backgroundjob.php
tests/lib/backgroundjob/dummyjoblist.php

index aab3b8e4a64f71c84819b00e518193c62cfcb851..49fbffbd6849039476790058f8e7bd64b2cf3433 100644 (file)
@@ -42,4 +42,8 @@ abstract class Job {
        public function getLastRun() {
                return $this->lastRun;
        }
+
+       public function getArgument() {
+               return $this->argument;
+       }
 }
index 7471f84153b0e3c06508b504dfd3409185dc2e74..cc803dd9b5fb73d98e5f67cb8f45f0fe5fe967f1 100644 (file)
@@ -110,6 +110,20 @@ class JobList {
                }
        }
 
+       /**
+        * @param int $id
+        * @return Job
+        */
+       public function getById($id) {
+               $query = \OC_DB::prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` = ?');
+               $result = $query->execute(array($id));
+               if ($row = $result->fetchRow()) {
+                       return $this->buildJob($row);
+               } else {
+                       return null;
+               }
+       }
+
        /**
         * get the job object from a row in the db
         *
index 9a58bd39658778eadff8ca8e82dcbca9ba1748e1..aa6c59067e09e9887b9b9944526ecb36d7de9b2d 100644 (file)
@@ -1,24 +1,24 @@
 <?php
 /**
-* ownCloud
-*
-* @author Jakob Sack
-* @copyright 2012 Jakob Sack owncloud@jakobsack.de
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Jakob Sack
+ * @copyright 2012 Jakob Sack owncloud@jakobsack.de
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 
 /**
  * Public interface of ownCloud forbackground jobs.
@@ -28,6 +28,8 @@
 // This means that they should be used by apps instead of the internal ownCloud classes
 namespace OCP;
 
+use \OC\BackgroundJob\JobList;
+
 /**
  * This class provides functions to register backgroundjobs in ownCloud
  *
@@ -60,16 +62,148 @@ class BackgroundJob {
         * This method sets the execution type of the background jobs. Possible types
         * are "none", "ajax", "webcron", "cron"
         */
-       public static function setExecutionType( $type ) {
-               return \OC_BackgroundJob::setExecutionType( $type );
+       public static function setExecutionType($type) {
+               return \OC_BackgroundJob::setExecutionType($type);
        }
 
        /**
         * @param \OC\BackgroundJob\Job|string $job
         * @param mixed $argument
         */
-       public static function registerJob($job, $argument = null){
-               $jobList = new \OC\BackgroundJob\JobList();
+       public static function registerJob($job, $argument = null) {
+               $jobList = new JobList();
                $jobList->add($job, $argument);
        }
+
+       /**
+        * @deprecated
+        * @brief creates a regular task
+        * @param string $klass class name
+        * @param string $method method name
+        * @return true
+        */
+       public static function addRegularTask($klass, $method) {
+               self::registerJob('RegularLegacyJob', array($klass, $method));
+               return true;
+       }
+
+       /**
+        * @deprecated
+        * @brief gets all regular tasks
+        * @return associative array
+        *
+        * key is string "$klass-$method", value is array( $klass, $method )
+        */
+       static public function allRegularTasks() {
+               $jobList = new JobList();
+               $allJobs = $jobList->getAll();
+               $regularJobs = array();
+               foreach ($allJobs as $job) {
+                       if ($job instanceof RegularLegacyJob) {
+                               $key = implode('-', $job->getArgument());
+                               $regularJobs[$key] = $job->getArgument();
+                       }
+               }
+               return $regularJobs;
+       }
+
+       /**
+        * @deprecated
+        * @brief Gets one queued task
+        * @param int $id ID of the task
+        * @return associative array
+        */
+       public static function findQueuedTask($id) {
+               $jobList = new JobList();
+               return $jobList->getById($id);
+       }
+
+       /**
+        * @deprecated
+        * @brief Gets all queued tasks
+        * @return array with associative arrays
+        */
+       public static function allQueuedTasks() {
+               $jobList = new JobList();
+               $allJobs = $jobList->getAll();
+               $queuedJobs = array();
+               foreach ($allJobs as $job) {
+                       if ($job instanceof QueuedLegacyJob) {
+                               $queuedJob = $job->getArgument();
+                               $queuedJob['id'] = $job->getId();
+                               $queuedJobs[] = $queuedJob;
+                       }
+               }
+               return $queuedJobs;
+       }
+
+       /**
+        * @deprecated
+        * @brief Gets all queued tasks of a specific app
+        * @param string $app app name
+        * @return array with associative arrays
+        */
+       public static function queuedTaskWhereAppIs($app) {
+               $jobList = new JobList();
+               $allJobs = $jobList->getAll();
+               $queuedJobs = array();
+               foreach ($allJobs as $job) {
+                       if ($job instanceof QueuedLegacyJob) {
+                               $queuedJob = $job->getArgument();
+                               $queuedJob['id'] = $job->getId();
+                               if ($queuedJob['app'] === $app) {
+                                       $queuedJobs[] = $queuedJob;
+                               }
+                       }
+               }
+               return $queuedJobs;
+       }
+
+       /**
+        * @deprecated
+        * @brief queues a task
+        * @param string $app app name
+        * @param string $class class name
+        * @param string $method method name
+        * @param string $parameters all useful data as text
+        * @return int id of task
+        */
+       public static function addQueuedTask($app, $class, $method, $parameters) {
+               self::registerJob('QueuedLegacyJob', array('app' => $app, 'klass' => $class, 'method' => $method, 'parameters' => $parameters));
+               return true;
+       }
+
+       /**
+        * @deprecated
+        * @brief deletes a queued task
+        * @param int $id id of task
+        * @return bool
+        *
+        * Deletes a report
+        */
+       public static function deleteQueuedTask($id) {
+               $jobList = new JobList();
+               $job = $jobList->getById($id);
+               if ($job) {
+                       $jobList->remove($job);
+               }
+       }
+}
+
+/**
+ * Wrappers to support old versions of the BackgroundJob api
+ */
+class RegularLegacyJob extends \OC\BackgroundJob\Job {
+       public function run($argument) {
+               call_user_func($argument);
+       }
+}
+
+class QueuedLegacyJob extends \OC\BackgroundJob\QueuedJob {
+       public function run($argument) {
+               $class = $argument['klass'];
+               $method = $argument['method'];
+               $parameters = $argument['parameters'];
+               call_user_func(array($class, $method), $parameters);
+       }
 }
index 833607c15c2ecd5217ef5cb2e1f25245e793c672..d91d6b344b5f05d2c8410675c0d15970b299a064 100644 (file)
@@ -98,6 +98,19 @@ class DummyJobList extends \OC\BackgroundJob\JobList {
                }
        }
 
+       /**
+        * @param int $id
+        * @return Job
+        */
+       public function getById($id) {
+               foreach ($this->jobs as $job) {
+                       if ($job->getId() === $id) {
+                               return $job;
+                       }
+               }
+               return null;
+       }
+
        /**
         * get the id of the last ran job
         *