Overview

Namespaces

  • None
  • RedBeanPHP
    • Adapter
    • BeanHelper
    • Cursor
    • Driver
    • Logger
      • RDefault
    • QueryWriter
    • RedException
    • Repository
    • Util

Classes

  • R
  • RedBean_SimpleModel
  • RedBeanPHP\Adapter\DBAdapter
  • RedBeanPHP\AssociationManager
  • RedBeanPHP\BeanCollection
  • RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper
  • RedBeanPHP\Cursor\NullCursor
  • RedBeanPHP\Cursor\PDOCursor
  • RedBeanPHP\Driver\RPDO
  • RedBeanPHP\DuplicationManager
  • RedBeanPHP\Facade
  • RedBeanPHP\Finder
  • RedBeanPHP\Jsonable
  • RedBeanPHP\LabelMaker
  • RedBeanPHP\Logger\RDefault
  • RedBeanPHP\Logger\RDefault\Debug
  • RedBeanPHP\Observable
  • RedBeanPHP\OODB
  • RedBeanPHP\OODBBean
  • RedBeanPHP\QueryWriter\AQueryWriter
  • RedBeanPHP\QueryWriter\CUBRID
  • RedBeanPHP\QueryWriter\MySQL
  • RedBeanPHP\QueryWriter\PostgreSQL
  • RedBeanPHP\QueryWriter\SQLiteT
  • RedBeanPHP\R
  • RedBeanPHP\Repository
  • RedBeanPHP\Repository\Fluid
  • RedBeanPHP\Repository\Frozen
  • RedBeanPHP\SimpleModel
  • RedBeanPHP\SimpleModelHelper
  • RedBeanPHP\TagManager
  • RedBeanPHP\ToolBox
  • RedBeanPHP\Util\ArrayTool
  • RedBeanPHP\Util\DispenseHelper
  • RedBeanPHP\Util\Dump
  • RedBeanPHP\Util\MultiLoader
  • RedBeanPHP\Util\Transaction

Interfaces

  • RedBeanPHP\Adapter
  • RedBeanPHP\BeanHelper
  • RedBeanPHP\Cursor
  • RedBeanPHP\Driver
  • RedBeanPHP\Logger
  • RedBeanPHP\Observer
  • RedBeanPHP\Plugin
  • RedBeanPHP\QueryWriter

Exceptions

  • RedBeanPHP\RedException
  • RedBeanPHP\RedException\SQL

Functions

  • array_flatten
  • dmp
  • EID
  • genslots
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: namespace RedBeanPHP;
  4: 
  5: use RedBeanPHP\ToolBox as ToolBox;
  6: use RedBeanPHP\OODBBean as OODBBean;
  7: 
  8: /**
  9:  * Label Maker.
 10:  * Makes so-called label beans.
 11:  * A label is a bean with only an id, type and name property.
 12:  * Labels can be used to create simple entities like categories, tags or enums.
 13:  * This service class provides convenience methods to deal with this kind of
 14:  * beans.
 15:  *
 16:  * @file       RedBeanPHP/LabelMaker.php
 17:  * @author     Gabor de Mooij and the RedBeanPHP Community
 18:  * @license    BSD/GPLv2
 19:  *
 20:  * @copyright
 21:  * copyright (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community
 22:  * This source file is subject to the BSD/GPLv2 License that is bundled
 23:  * with this source code in the file license.txt.
 24:  */
 25: class LabelMaker
 26: {
 27:     /**
 28:      * @var ToolBox
 29:      */
 30:     protected $toolbox;
 31: 
 32:     /**
 33:      * Constructor.
 34:      *
 35:      * @param ToolBox $toolbox
 36:      */
 37:     public function __construct( ToolBox $toolbox )
 38:     {
 39:         $this->toolbox = $toolbox;
 40:     }
 41: 
 42:     /**
 43:      * A label is a bean with only an id, type and name property.
 44:      * This function will dispense beans for all entries in the array. The
 45:      * values of the array will be assigned to the name property of each
 46:      * individual bean.
 47:      *
 48:      * <code>
 49:      * $people = R::dispenseLabels( 'person', [ 'Santa', 'Claus' ] );
 50:      * </code>
 51:      *
 52:      * @param string $type   type of beans you would like to have
 53:      * @param array  $labels list of labels, names for each bean
 54:      *
 55:      * @return array
 56:      */
 57:     public function dispenseLabels( $type, $labels )
 58:     {
 59:         $labelBeans = array();
 60:         foreach ( $labels as $label ) {
 61:             $labelBean       = $this->toolbox->getRedBean()->dispense( $type );
 62:             $labelBean->name = $label;
 63:             $labelBeans[]    = $labelBean;
 64:         }
 65: 
 66:         return $labelBeans;
 67:     }
 68: 
 69:     /**
 70:      * Gathers labels from beans. This function loops through the beans,
 71:      * collects the value of the name property for each individual bean
 72:      * and stores the names in a new array. The array then gets sorted using the
 73:      * default sort function of PHP (sort).
 74:      *
 75:      * Usage:
 76:      *
 77:      * <code>
 78:      * $o1->name = 'hamburger';
 79:      * $o2->name = 'pizza';
 80:      * implode( ',', R::gatherLabels( [ $o1, $o2 ] ) ); //hamburger,pizza
 81:      * </code>
 82:      *
 83:      * Note that the return value is an array of strings, not beans.
 84:      *
 85:      * @param array $beans list of beans to loop through
 86:      *
 87:      * @return array
 88:      */
 89:     public function gatherLabels( $beans )
 90:     {
 91:         $labels = array();
 92: 
 93:         foreach ( $beans as $bean ) {
 94:             $labels[] = $bean->name;
 95:         }
 96: 
 97:         sort( $labels );
 98: 
 99:         return $labels;
100:     }
101: 
102:     /**
103:      * Fetches an ENUM from the database and creates it if necessary.
104:      * An ENUM has the following format:
105:      *
106:      * <code>
107:      * ENUM:VALUE
108:      * </code>
109:      *
110:      * If you pass 'ENUM' only, this method will return an array of its
111:      * values:
112:      *
113:      * <code>
114:      * implode( ',', R::gatherLabels( R::enum( 'flavour' ) ) ) //'BANANA,MOCCA'
115:      * </code>
116:      *
117:      * If you pass 'ENUM:VALUE' this method will return the specified enum bean
118:      * and create it in the database if it does not exist yet:
119:      *
120:      * <code>
121:      * $bananaFlavour = R::enum( 'flavour:banana' );
122:      * $bananaFlavour->name;
123:      * </code>
124:      *
125:      * So you can use this method to set an ENUM value in a bean:
126:      *
127:      * <code>
128:      * $shake->flavour = R::enum( 'flavour:banana' );
129:      * </code>
130:      *
131:      * the property flavour now contains the enum bean, a parent bean.
132:      * In the database, flavour_id will point to the flavour record with name 'banana'.
133:      *
134:      * @param string $enum ENUM specification for label
135:      *
136:      * @return array|OODBBean
137:      */
138:     public function enum( $enum )
139:     {
140:         $oodb = $this->toolbox->getRedBean();
141: 
142:         if ( strpos( $enum, ':' ) === FALSE ) {
143:             $type  = $enum;
144:             $value = FALSE;
145:         } else {
146:             list( $type, $value ) = explode( ':', $enum );
147:             $value                = preg_replace( '/\W+/', '_', strtoupper( trim( $value ) ) );
148:         }
149: 
150:         /**
151:          * We use simply find here, we could use inspect() in fluid mode etc,
152:          * but this would be useless. At first sight it looks clean, you could even
153:          * bake this into find(), however, find not only has to deal with the primary
154:          * search type, people can also include references in the SQL part, so avoiding
155:          * find failures does not matter, this is still the quickest way making use
156:          * of existing functionality.
157:          *
158:          * @note There seems to be a bug in XDebug v2.3.2 causing suppressed
159:          * exceptions like these to surface anyway, to prevent this use:
160:          *
161:          * "xdebug.default_enable = 0"
162:          *
163:          *  Also see Github Issue #464
164:          */
165:         $values = $oodb->find( $type );
166: 
167:         if ( $value === FALSE ) {
168:             return $values;
169:         }
170: 
171:         foreach( $values as $enumItem ) {
172:                 if ( $enumItem->name === $value ) return $enumItem;
173:         }
174: 
175:         $newEnumItems = $this->dispenseLabels( $type, array( $value ) );
176:         $newEnumItem  = reset( $newEnumItems );
177: 
178:         $oodb->store( $newEnumItem );
179: 
180:         return $newEnumItem;
181:     }
182: }
183: 
API documentation generated by ApiGen