Phundament App Class Reference
  • Package
  • Class
  • Tree

Packages

  • bootstrap
    • widgets
      • input
  • Image
  • None
  • p3admin
  • p3extensions
    • behaviors
    • commands
    • components
    • helpers
    • widgets
  • p3media
    • actions
    • controllers
    • models
  • p3pages
    • models
  • p3widgets
    • components
    • models
  • PHP
  • system
    • db
      • ar
    • gii
    • web
      • auth
      • helpers
      • widgets
  • yiiext
    • widgets
      • fancybox
      • lipsum
  • zii
    • widgets
      • grid

Classes

  • ActivationController
  • AdminController
  • AssignmentController
  • AssignmentForm
  • AuthChildForm
  • AuthItemController
  • AuthItemForm
  • BaseP3Widget
  • BaseP3WidgetMeta
  • BaseP3WidgetTranslation
  • Bootstrap
  • CImageComponent
  • CKEditor
  • CodeProvider
  • DefaultController
  • EChosen
  • EDbMigration
  • EditableField
  • EditableSaver
  • EMigrateCommand
  • ESelect2
  • EUserFlash
  • FullCrudFieldProvider
  • GenerateForm
  • IdentificationColumnValidator
  • InstallController
  • JSONEditorView
  • JuiJSONEditorInput
  • LoginController
  • LogoutController
  • Metadata
  • P3CrudFieldProvider
  • P3MediaController
  • P3MediaMetaController
  • P3MediaSelect
  • P3PageController
  • P3PageMetaController
  • P3PageTranslationController
  • P3Widget
  • P3WidgetController
  • P3WidgetMetaController
  • P3WidgetTranslation
  • P3WidgetTranslationController
  • ProfileController
  • ProfileFieldController
  • RAuthItemBehavior
  • RAuthItemChildDataProvider
  • RAuthItemDataProvider
  • RAuthItemParentDataProvider
  • RAuthorizer
  • RController
  • RDbAuthManager
  • RecoveryController
  • RegistrationController
  • RegistrationForm
  • RGenerator
  • Rights
  • RightsFilter
  • RightsModule
  • RInstaller
  • RPermissionDataProvider
  • RUserBehavior
  • RWebUser
  • UActiveForm
  • UploadHandler
  • UserChangePassword
  • UserController
  • UserIdentity
  • UserLogin
  • UserModule
  • UserRecoveryForm
  • UWdropDownDep
  • UWfile
  • UWjuiAutoComplete
  • UWjuidate
  • UWrelBelongsTo
  • WebUserBehavior
  1 <?php
  2 /**
  3 * Rights generator component class file.
  4 *
  5 * @author Christoffer Niska <cniska@live.com>
  6 * @copyright Copyright &copy; 2010 Christoffer Niska
  7 * @since 0.9.8
  8 */
  9 class RGenerator extends CApplicationComponent
 10 {
 11     private $_authManager;
 12     private $_items;
 13 
 14     /**
 15     * @property CDbConnection
 16     */
 17     public $db;
 18 
 19     /**
 20     * Initializes the generator.
 21     */
 22     public function init()
 23     {
 24         parent::init();
 25 
 26         $this->_authManager = Yii::app()->getAuthManager();
 27         $this->db = $this->_authManager->db;
 28     }
 29 
 30     /**
 31     * Runs the generator.
 32     * @return the items generated or false if failed.
 33     */
 34     public function run()
 35     {
 36         $authManager = $this->_authManager;
 37         $itemTable = $authManager->itemTable;
 38 
 39         // Start transaction
 40         $txn = $this->db->beginTransaction();
 41 
 42         try
 43         {
 44             $generatedItems = array();
 45 
 46             // Loop through each type of items
 47             foreach( $this->_items as $type=>$items )
 48             {
 49                 // Loop through items
 50                 foreach( $items as $name )
 51                 {
 52                     // Make sure the item does not already exist
 53                     if( $authManager->getAuthItem($name)===null )
 54                     {
 55                         // Insert item
 56                         $sql = "INSERT INTO {$itemTable} (name, type, data)
 57                             VALUES (:name, :type, :data)";
 58                         $command = $this->db->createCommand($sql);
 59                         $command->bindValue(':name', $name);
 60                         $command->bindValue(':type', $type);
 61                         $command->bindValue(':data', 'N;');
 62                         $command->execute();
 63 
 64                         $generatedItems[] = $name;
 65                     }
 66                 }
 67             }
 68 
 69             // All commands executed successfully, commit
 70             $txn->commit();
 71             return $generatedItems;
 72         }
 73         catch( CDbException $e )
 74         {
 75             // Something went wrong, rollback
 76             $txn->rollback();
 77             return false;
 78         }
 79     }
 80 
 81     /**
 82     * Appends items to be generated of a specific type.
 83     * @param array $items the items to be generated.
 84     * @param integer $type the item type.
 85     */
 86     public function addItems($items, $type)
 87     {
 88         if( isset($this->_items[ $type ])===false )
 89             $this->_items[ $type ] = array();
 90 
 91         foreach( $items as $itemname )
 92             $this->_items[ $type ][] = $itemname;
 93     }
 94 
 95     /**
 96     * Returns all the controllers and their actions.
 97     * @param array $items the controllers and actions.
 98     */
 99     public function getControllerActions($items=null)
100     {
101         if( $items===null )
102             $items = $this->getAllControllers();
103 
104         foreach( $items['controllers'] as $controllerName=>$controller )
105         {
106             $actions = array();
107             $file = fopen($controller['path'], 'r');
108             $lineNumber = 0;
109             while( feof($file)===false )
110             {
111                 ++$lineNumber;
112                 $line = fgets($file);
113                 preg_match('/public[ \t]+function[ \t]+action([A-Z]{1}[a-zA-Z0-9]+)[ \t]*\(/', $line, $matches);
114                 if( $matches!==array() )
115                 {
116                     $name = $matches[1];
117                     $actions[ strtolower($name) ] = array(
118                         'name'=>$name,
119                         'line'=>$lineNumber
120                     );
121                 }
122             }
123 
124             $items['controllers'][ $controllerName ]['actions'] = $actions;
125         }
126 
127         foreach( $items['modules'] as $moduleName=>$module )
128             $items['modules'][ $moduleName ] = $this->getControllerActions($module);
129 
130         return $items;
131     }
132 
133     /**
134     * Returns a list of all application controllers.
135     * @return array the controllers.
136     */
137     protected function getAllControllers()
138     {
139         $basePath = Yii::app()->basePath;
140         $items['controllers'] = $this->getControllersInPath($basePath.DIRECTORY_SEPARATOR.'controllers');
141         $items['modules'] = $this->getControllersInModules($basePath);
142         return $items;
143     }
144 
145     /**
146     * Returns all controllers under the specified path.
147     * @param string $path the path.
148     * @return array the controllers.
149     */
150     protected function getControllersInPath($path)
151     {
152         $controllers = array();
153 
154         if( file_exists($path)===true )
155         {
156             $controllerDirectory = scandir($path);
157             foreach( $controllerDirectory as $entry )
158             {
159                 if( $entry{0}!=='.' )
160                 {
161                     $entryPath = $path.DIRECTORY_SEPARATOR.$entry;
162                     if( strpos(strtolower($entry), 'controller')!==false )
163                     {
164                         $name = substr($entry, 0, -14);
165                         $controllers[ strtolower($name) ] = array(
166                             'name'=>$name,
167                             'file'=>$entry,
168                             'path'=>$entryPath,
169                         );
170                     }
171 
172                     if( is_dir($entryPath)===true )
173                         foreach( $this->getControllersInPath($entryPath) as $controllerName=>$controller )
174                             $controllers[ $controllerName ] = $controller;
175                 }
176             }
177         }
178 
179         return $controllers;
180     }
181 
182     /**
183     * Returns all the controllers under the specified path.
184     * @param string $path the path.
185     * @return array the controllers.
186     */
187     protected function getControllersInModules($path)
188     {
189         $items = array();
190 
191         $modulePath = $path.DIRECTORY_SEPARATOR.'modules';
192         if( file_exists($modulePath)===true )
193         {
194             $moduleDirectory = scandir($modulePath);
195             foreach( $moduleDirectory as $entry )
196             {
197                 if( substr($entry, 0, 1)!=='.' && $entry!=='rights' )
198                 {
199                     $subModulePath = $modulePath.DIRECTORY_SEPARATOR.$entry;
200                     if( file_exists($subModulePath)===true )
201                     {
202                         $items[ $entry ]['controllers'] = $this->getControllersInPath($subModulePath.DIRECTORY_SEPARATOR.'controllers');
203                         $items[ $entry ]['modules'] = $this->getControllersInModules($subModulePath);
204                     }
205                 }
206             }
207         }
208 
209         return $items;
210     }
211 }
212 
Phundament App Class Reference API documentation generated by ApiGen 2.8.0