Version 1
[yaffs-website] / vendor / gabordemooij / redbean / RedBeanPHP / Util / DispenseHelper.php
diff --git a/vendor/gabordemooij/redbean/RedBeanPHP/Util/DispenseHelper.php b/vendor/gabordemooij/redbean/RedBeanPHP/Util/DispenseHelper.php
new file mode 100644 (file)
index 0000000..57cb495
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+namespace RedBeanPHP\Util;
+
+use RedBeanPHP\OODB as OODB;
+use RedBeanPHP\RedException as RedException;
+
+/**
+ * Dispense Helper
+ *
+ * A helper class containing a dispense utility.
+ * 
+ * @file    RedBeanPHP/Util/DispenseHelper.php
+ * @author  Gabor de Mooij and the RedBeanPHP Community
+ * @license BSD/GPLv2
+ *
+ * @copyright
+ * copyright (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community
+ * This source file is subject to the BSD/GPLv2 License that is bundled
+ * with this source code in the file license.txt.
+ */
+class DispenseHelper
+{
+       /**
+        * Dispenses a new RedBean OODB Bean for use with
+        * the rest of the methods.
+        *
+        * @param OODB         $oodb              OODB
+        * @param string|array $typeOrBeanArray   type or bean array to import
+        * @param integer      $number            number of beans to dispense
+        * @param boolean          $alwaysReturnArray if TRUE always returns the result as an array
+        *
+        * @return array|OODBBean
+        */
+       public static function dispense( OODB $oodb, $typeOrBeanArray, $num = 1, $alwaysReturnArray = FALSE ) {
+
+               if ( is_array($typeOrBeanArray) ) {
+
+                       if ( !isset( $typeOrBeanArray['_type'] ) ) {
+                               $list = array();
+                               foreach( $typeOrBeanArray as $beanArray ) {
+                                       if ( 
+                                               !( is_array( $beanArray ) 
+                                               && isset( $beanArray['_type'] ) ) ) {
+                                               throw new RedException( 'Invalid Array Bean' );
+                                       }
+                               }
+                               foreach( $typeOrBeanArray as $beanArray ) $list[] = self::dispense( $oodb, $beanArray );
+                               return $list;
+                       }
+
+                       $import = $typeOrBeanArray;
+                       $type = $import['_type'];
+                       unset( $import['_type'] );
+               } else {
+                       $type = $typeOrBeanArray;
+               }
+
+               if ( !preg_match( '/^[a-z0-9]+$/', $type ) ) {
+                       throw new RedException( 'Invalid type: ' . $type );
+               }
+
+               $beanOrBeans = $oodb->dispense( $type, $num, $alwaysReturnArray );
+
+               if ( isset( $import ) ) {
+                       $beanOrBeans->import( $import );
+               }
+
+               return $beanOrBeans;
+       }
+       
+       
+       /**
+        * Takes a comma separated list of bean types
+        * and dispenses these beans. For each type in the list
+        * you can specify the number of beans to be dispensed.
+        *
+        * Usage:
+        *
+        * <code>
+        * list( $book, $page, $text ) = R::dispenseAll( 'book,page,text' );
+        * </code>
+        *
+        * This will dispense a book, a page and a text. This way you can
+        * quickly dispense beans of various types in just one line of code.
+        *
+        * Usage:
+        *
+        * <code>
+        * list($book, $pages) = R::dispenseAll('book,page*100');
+        * </code>
+        *
+        * This returns an array with a book bean and then another array
+        * containing 100 page beans.
+        *
+        * @param OODB    $oodb       OODB
+        * @param string  $order      a description of the desired dispense order using the syntax above
+        * @param boolean $onlyArrays return only arrays even if amount < 2
+        *
+        * @return array
+        */
+       public static function dispenseAll( OODB $oodb, $order, $onlyArrays = FALSE )
+       {
+               $list = array();
+
+               foreach( explode( ',', $order ) as $order ) {
+                       if ( strpos( $order, '*' ) !== FALSE ) {
+                               list( $type, $amount ) = explode( '*', $order );
+                       } else {
+                               $type   = $order;
+                               $amount = 1;
+                       }
+
+                       $list[] = self::dispense( $oodb, $type, $amount, $onlyArrays );
+               }
+
+               return $list;
+       }
+}