+++ /dev/null
-<?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;
- }
-}