Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / robo / src / Collection / Temporary.php
1 <?php
2
3 namespace Robo\Collection;
4
5 /**
6  * The temporary collection keeps track of the global collection of
7  * temporary cleanup tasks in instances where temporary-generating
8  * tasks are executed directly via their run() method, rather than
9  * as part of a collection.
10  *
11  * In general, temporary-generating tasks should always be run in
12  * a collection, as the cleanup functions registered with the
13  * Temporary collection will not run until requested.
14  *
15  * Since the results could be undefined if cleanup functions were called
16  * at arbitrary times during a program's execution, cleanup should only
17  * be done immeidately prior to program termination, when there is no
18  * danger of cleaning up after some unrelated task.
19  *
20  * An application need never use Temporary directly, save to
21  * call Temporary::wrap() inside loadTasks or loadShortcuts, and
22  * to call Temporary::complete() immediately prior to terminating.
23  * This is recommended, but not required; this function will be
24  * registered as a shutdown function, and called on termination.
25  */
26 class Temporary
27 {
28     private static $collection;
29
30     /**
31      * Provides direct access to the collection of temporaries, if necessary.
32      */
33     public static function getCollection()
34     {
35         if (!static::$collection) {
36             static::$collection = \Robo\Robo::getContainer()->get('collection');
37             register_shutdown_function(function () {
38                 static::complete();
39             });
40         }
41
42         return static::$collection;
43     }
44
45     /**
46      * Call the complete method of all of the registered objects.
47      */
48     public static function complete()
49     {
50         // Run the collection of tasks. This will also run the
51         // completion tasks.
52         $collection = static::getCollection();
53         $collection->run();
54         // Make sure that our completion functions do not run twice.
55         $collection->reset();
56     }
57 }