[ Index ]
 

Code source de CakePHP 1.1.13.4450

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/cake/scripts/ -> acl.php (source)

   1  #!/usr/bin/php -q
   2  <?php
   3  /* SVN FILE: $Id: acl.php 4409 2007-02-02 13:20:59Z phpnut $ */
   4  /**
   5   * Short description for file.
   6   *
   7   * Long description for file
   8   *
   9   * PHP versions 4 and 5
  10   *
  11   * CakePHP(tm) :  Rapid Development Framework <http://www.cakephp.org/>
  12   * Copyright 2005-2007, Cake Software Foundation, Inc.
  13   *                                1785 E. Sahara Avenue, Suite 490-204
  14   *                                Las Vegas, Nevada 89104
  15   *
  16   * Licensed under The MIT License
  17   * Redistributions of files must retain the above copyright notice.
  18   *
  19   * @filesource
  20   * @copyright        Copyright 2005-2007, Cake Software Foundation, Inc.
  21   * @link                http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project
  22   * @package            cake
  23   * @subpackage        cake.cake.scripts
  24   * @since            CakePHP(tm) v 0.10.0.1232
  25   * @version            $Revision: 4409 $
  26   * @modifiedby        $LastChangedBy: phpnut $
  27   * @lastmodified    $Date: 2007-02-02 07:20:59 -0600 (Fri, 02 Feb 2007) $
  28   * @license            http://www.opensource.org/licenses/mit-license.php The MIT License
  29   */
  30  /**
  31   * Enter description here...
  32   */
  33      ini_set('display_errors', '1');
  34      ini_set('error_reporting', '7');
  35      define ('DS', DIRECTORY_SEPARATOR);
  36      $app = 'app';
  37      $core = null;
  38      $root = dirname(dirname(dirname(__FILE__)));
  39      $here = $argv[0];
  40      $dataSource = 'default';
  41      $unset = array();
  42      for ($i = 1; $i < count($argv); $i++) {
  43          // Process command-line modifiers here
  44          switch (strtolower($argv[$i])) {
  45              case '-app':
  46                  $app = $argv[$i + 1];
  47                  $unset[$i] = $argv[$i];
  48                  $unset[$i + 1] = $argv[$i + 1]; 
  49              break;
  50              case '-core':
  51                  $core = $argv[$i + 1];
  52                  $unset[$i] = $argv[$i];
  53                  $unset[$i + 1] = $argv[$i + 1]; 
  54              break;
  55              case '-root':
  56                  $root = $argv[$i + 1];
  57                  $unset[$i] = $argv[$i];
  58                  $unset[$i + 1] = $argv[$i + 1]; 
  59              break;
  60              case '-datasource':
  61                  $dataSource = $argv[$i + 1];
  62                  $unset[$i] = $argv[$i];
  63                  $unset[$i + 1] = $argv[$i + 1]; 
  64              break;
  65          }
  66      }
  67  
  68      if (strlen($app) && $app[0] == DS) {
  69          $cnt = substr_count($root, DS);
  70          $app = str_repeat('..' . DS, $cnt) . $app;
  71      }
  72      define ('ROOT', $root.DS);
  73      define ('APP_DIR', $app);
  74      define ('DEBUG', 1);;
  75      define('CAKE_CORE_INCLUDE_PATH', ROOT);
  76      define('DATASOURCE', $dataSource);
  77  
  78      if(function_exists('ini_set')) {
  79          ini_set('include_path',ini_get('include_path').
  80              PATH_SEPARATOR.CAKE_CORE_INCLUDE_PATH.DS.
  81              PATH_SEPARATOR.CORE_PATH.DS.
  82              PATH_SEPARATOR.ROOT.DS.APP_DIR.DS.
  83              PATH_SEPARATOR.APP_DIR.DS.
  84              PATH_SEPARATOR.APP_PATH);
  85          define('APP_PATH', null);
  86          define('CORE_PATH', null);
  87      } else {
  88          define('APP_PATH', ROOT . DS . APP_DIR . DS);
  89          define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
  90      }
  91  
  92      require  ('cake'.DS.'basics.php');
  93      require  ('cake'.DS.'config'.DS.'paths.php');
  94      require (CONFIGS.'core.php');
  95      uses ('object', 'configure', 'neat_array', 'session', 'security', 'inflector', 'model'.DS.'connection_manager',
  96              'model'.DS.'datasources'.DS.'dbo_source', 'model'.DS.'model');
  97      require(CAKE.'app_model.php');
  98      uses ('controller'.DS.'components'.DS.'acl', 'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aclnode',
  99              'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aco', 'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'acoaction',
 100              'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aro');
 101      //Get and format args: first arg is the name of the script.
 102      $serverArgs = $argv;
 103      if(!empty($unset)) {
 104          $serverArgs = array_values(array_diff($argv, $unset));
 105      }
 106      
 107      $wasted = array_shift($serverArgs);
 108      $command = array_shift($serverArgs);
 109      $args = $serverArgs;
 110      $aclCLI = new AclCLI ($command, $args);
 111  /**
 112   * @package        cake
 113   * @subpackage    cake.cake.scritps
 114   */
 115  class AclCLI {
 116  /**
 117   * Enter description here...
 118   *
 119   * @var unknown_type
 120   */
 121      var $stdin;
 122  /**
 123   * Enter description here...
 124   *
 125   * @var unknown_type
 126   */
 127      var $stdout;
 128  /**
 129   * Enter description here...
 130   *
 131   * @var unknown_type
 132   */
 133      var $stderr;
 134  /**
 135   * Enter description here...
 136   *
 137   * @var unknown_type
 138   */
 139      var $acl;
 140  /**
 141   * Enter description here...
 142   *
 143   * @var unknown_type
 144   */
 145      var $args;
 146  /**
 147   * Enter description here...
 148   *
 149   * @var unknown_type
 150   */
 151      var $dataSource = 'default';
 152  /**
 153   * Enter description here...
 154   *
 155   * @param unknown_type $command
 156   * @param unknown_type $args
 157   * @return AclCLI
 158   */
 159  	function AclCLI($command, $args) {
 160          $this->__construct($command, $args);
 161      }
 162  /**
 163   * Enter description here...
 164   *
 165   * @param unknown_type $command
 166   * @param unknown_type $args
 167   */
 168  	function __construct ($command, $args) {
 169          $this->stdin = fopen('php://stdin', 'r');
 170          $this->stdout = fopen('php://stdout', 'w');
 171          $this->stderr = fopen('php://stderr', 'w');
 172  
 173          if (ACL_CLASSNAME != 'DB_ACL'){
 174              $out = "--------------------------------------------------\n";
 175              $out .= "Error: Your current Cake configuration is set to \n";
 176              $out .= "an ACL implementation other than DB. Please change \n";
 177              $out .= "your core config to reflect your decision to use \n";
 178              $out .= "DB_ACL before attempting to use this script.\n";
 179              $out .= "--------------------------------------------------\n";
 180              $out .= "Current ACL Classname: " . ACL_CLASSNAME . "\n";
 181              $out .= "--------------------------------------------------\n";
 182              fwrite($this->stderr, $out);
 183              exit();
 184          }
 185          
 186          if(!in_array($command, array('help'))) {
 187              if(!file_exists(CONFIGS.'database.php')) {
 188                  $this->stdout('');
 189                  $this->stdout('Your database configuration was not found.');
 190                  $this->stdout('Take a moment to create one:');
 191                  $this->doDbConfig();
 192              }
 193              require_once (CONFIGS.'database.php');
 194              
 195              if(!in_array($command, array('initdb'))) {
 196                  $this->dataSource = DATASOURCE;
 197                  $this->Acl = new AclComponent();
 198                  $this->args = $args;
 199                  $this->db =& ConnectionManager::getDataSource($this->dataSource);
 200              }
 201          }
 202  
 203          switch ($command) {
 204              case 'create':
 205                  $this->create();
 206              break;
 207              case 'delete':
 208                  $this->delete();
 209              break;
 210              case 'setParent':
 211                  $this->setParent();
 212              break;
 213              case 'getPath':
 214                  $this->getPath();
 215              break;
 216              case 'grant':
 217                  $this->grant();
 218              break;
 219              case 'deny':
 220                  $this->deny();
 221              break;
 222              case 'inherit':
 223                  $this->inherit();
 224              break;
 225              case 'view':
 226                  $this->view();
 227              break;
 228              case 'initdb':
 229                  $this->initdb();
 230              break;
 231              case 'upgrade':
 232                  $this->upgradedb();
 233              break;
 234              case 'help':
 235                  $this->help();
 236              break;
 237              default:
 238                  fwrite($this->stderr, "Unknown ACL command '$command'.\nFor usage, try 'php acl.php help'.\n\n");
 239              break;
 240          }
 241      }
 242  /**
 243   * Enter description here...
 244   *
 245   */
 246  	function create() {
 247          $this->checkArgNumber(4, 'create');
 248          $this->checkNodeType();
 249          extract($this->__dataVars());
 250          
 251          $parent = (is_numeric($this->args[2])) ? intval($this->args[2]) : $this->args[2];
 252          if(!$this->Acl->{$class}->create(intval($this->args[1]), $parent, $this->args[3])){
 253              $this->displayError("Parent Node Not Found", "There was an error creating the ".$class.", probably couldn't find the parent node.\n If you wish to create a new root node, specify the <parent_id> as '0'.");
 254          }
 255          $this->stdout("New $class '".$this->args[3]."' created.\n\n");
 256      }
 257  /**
 258   * Enter description here...
 259   *
 260   */
 261  	function delete() {
 262          $this->checkArgNumber(2, 'delete');
 263          $this->checkNodeType();
 264          extract($this->__dataVars());
 265          if(!$this->Acl->{$class}->delete($this->args[1])) {
 266              $this->displayError("Node Not Deleted", "There was an error deleting the ".$class.". Check that the node exists.\n");
 267          }
 268          $this->stdout("{$class} deleted.\n\n");
 269      }
 270  
 271  /**
 272   * Enter description here...
 273   *
 274   */
 275  	function setParent() {
 276          $this->checkArgNumber(3, 'setParent');
 277          $this->checkNodeType();
 278          extract($this->__dataVars());
 279          if (!$this->Acl->{$class}->setParent($this->args[2], $this->args[1])){
 280              $this->stdout("Error in setting new parent. Please make sure the parent node exists, and is not a descendant of the node specified.\n");
 281          } else {
 282              $this->stdout("Node parent set to ".$this->args[2]."\n\n");
 283          }
 284      }
 285  /**
 286   * Enter description here...
 287   *
 288   */
 289  	function getPath() {
 290          $this->checkArgNumber(2, 'getPath');
 291          $this->checkNodeType();
 292          extract($this->__dataVars());
 293          $id = (is_numeric($this->args[2])) ? intval($this->args[1]) : $this->args[1];
 294          $nodes = $this->Acl->{$class}->getPath($id);
 295          if (empty($nodes)) {
 296              $this->displayError("Supplied Node '".$this->args[1]."' not found", "No tree returned.");
 297          }
 298          for ($i = 0; $i < count($nodes); $i++) {
 299              $this->stdout(str_repeat('  ', $i) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias'] . "\n");
 300          }
 301      }
 302  /**
 303   * Enter description here...
 304   *
 305   */
 306  	function grant() {
 307          $this->checkArgNumber(3, 'grant');
 308          //add existence checks for nodes involved
 309          $aro = (is_numeric($this->args[0])) ? intval($this->args[0]) : $this->args[0];
 310          $aco = (is_numeric($this->args[1])) ? intval($this->args[1]) : $this->args[1];
 311          $this->Acl->allow($aro, $aco, $this->args[2]);
 312          $this->stdout("Permission granted.\n");
 313      }
 314  /**
 315   * Enter description here...
 316   *
 317   */
 318  	function deny() {
 319          $this->checkArgNumber(3, 'deny');
 320          //add existence checks for nodes involved
 321          $aro = (is_numeric($this->args[0])) ? intval($this->args[0]) : $this->args[0];
 322          $aco = (is_numeric($this->args[1])) ? intval($this->args[1]) : $this->args[1];
 323          $this->Acl->deny($aro, $aco, $this->args[2]);
 324          $this->stdout("Requested permission successfully denied.\n");
 325      }
 326  /**
 327   * Enter description here...
 328   *
 329   */
 330  	function inherit() {
 331          $this->checkArgNumber(3, 'inherit');
 332          $aro = (is_numeric($this->args[0])) ? intval($this->args[0]) : $this->args[0];
 333          $aco = (is_numeric($this->args[1])) ? intval($this->args[1]) : $this->args[1];
 334          $this->Acl->inherit($aro, $aco, $this->args[2]);
 335          $this->stdout("Requested permission successfully inherited.\n");
 336      }
 337  /**
 338   * Enter description here...
 339   *
 340   */
 341  	function view() {
 342          $this->checkArgNumber(1, 'view'); 
 343          $this->checkNodeType();
 344          extract($this->__dataVars());
 345          if (!is_null($this->args[1])) {
 346              $conditions = $this->Acl->{$class}->_resolveID($this->args[1]);
 347          } else {
 348              $conditions = null;
 349          }
 350          $nodes = $this->Acl->{$class}->findAll($conditions, null, 'lft ASC');
 351          if (empty($nodes)) {
 352              $this->displayError($this->args[1]." not found", "No tree returned.");
 353          }
 354          $right = array();
 355  
 356          $this->stdout($class . " tree:\n");
 357          $this->stdout("------------------------------------------------\n");
 358  
 359          for($i = 0; $i < count($nodes); $i++){
 360              if (count($right) > 0){
 361                  while ($right[count($right)-1] < $nodes[$i][$class]['rght']){
 362                      if ($right[count($right)-1]){
 363                          array_pop($right);
 364                      } else {
 365                          break;
 366                      }
 367                  }
 368              }
 369              $this->stdout(str_repeat('  ',count($right)) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias']."\n");
 370              $right[] = $nodes[$i][$class]['rght'];
 371          }
 372          $this->stdout("------------------------------------------------\n");
 373      }
 374  /**
 375   * Enter description here...
 376   *
 377   */
 378  	function initdb() {
 379          $db =& ConnectionManager::getDataSource($this->dataSource);
 380          $this->stdout("Initializing Database...\n");
 381          $this->stdout("Creating access control objects table (acos)...\n");
 382          $sql = " CREATE TABLE ".$db->fullTableName('acos')." (
 383                  ".$db->name('id')." ".$db->column($db->columns['primary_key']).",
 384                  ".$db->name('object_id')." ".$db->column($db->columns['integer'])." default NULL,
 385                  ".$db->name('alias')." ".$db->column($db->columns['string'])." NOT NULL default '',
 386                  ".$db->name('lft')." ".$db->column($db->columns['integer'])." default NULL,
 387                  ".$db->name('rght')." ".$db->column($db->columns['integer'])." default NULL,
 388                  PRIMARY KEY  (".$db->name('id').")
 389                  );";
 390          if ($db->query($sql) === false) {
 391              die("Error: " . $db->lastError() . "\n\n");
 392          }
 393  
 394          $this->stdout("Creating access request objects table (aros)...\n");
 395          $sql2 = "CREATE TABLE ".$db->fullTableName('aros')." (
 396                  ".$db->name('id')." ".$db->column($db->columns['primary_key']).",
 397                  ".$db->name('foreign_key')." ".$db->column($db->columns['integer'])." default NULL,
 398                  ".$db->name('alias')." ".$db->column($db->columns['string'])." NOT NULL default '',
 399                  ".$db->name('lft')." ".$db->column($db->columns['integer'])." default NULL,
 400                  ".$db->name('rght')." ".$db->column($db->columns['integer'])." default NULL,
 401                  PRIMARY KEY  (".$db->name('id').")
 402                  );";
 403          if ($db->query($sql2) === false) {
 404              die("Error: " . $db->lastError() . "\n\n");
 405          }
 406  
 407          $this->stdout("Creating relationships table (aros_acos)...\n");
 408          $sql3 = "CREATE TABLE ".$db->fullTableName('aros_acos')." (
 409                  ".$db->name('id')." ".$db->column($db->columns['primary_key']).",
 410                  ".$db->name('aro_id')." ".$db->column($db->columns['integer'])." default NULL,
 411                  ".$db->name('aco_id')." ".$db->column($db->columns['integer'])." default NULL,
 412                  ".$db->name('_create')." ".$db->column($db->columns['integer'])." NOT NULL default '0',
 413                  ".$db->name('_read')." ".$db->column($db->columns['integer'])." NOT NULL default '0',
 414                  ".$db->name('_update')." ".$db->column($db->columns['integer'])." NOT NULL default '0',
 415                  ".$db->name('_delete')." ".$db->column($db->columns['integer'])." NOT NULL default '0',
 416                  PRIMARY KEY  (".$db->name('id').")
 417                  );";
 418          if ($db->query($sql3) === false) {
 419              die("Error: " . $db->lastError() . "\n\n");
 420          }
 421  
 422          $this->stdout("\nDone.\n");
 423      }
 424  
 425  /**
 426   * Enter description here...
 427   *
 428   */
 429  	function upgradedb() {
 430          $db =& ConnectionManager::getDataSource($this->dataSource);
 431          $this->stdout("Initializing Database...\n");
 432          $this->stdout("Upgrading table (aros)...\n");
 433          $sql = "ALTER TABLE ".$db->fullTableName('aros')."
 434                  CHANGE ".$db->name('user_id')."
 435                  ".$db->name('foreign_key')."
 436                  INT( 10 ) UNSIGNED NULL DEFAULT NULL;";
 437          $sql .= "ALTER TABLE " . $db->name('aros_acos') . " CHANGE " . $db->name('_create') 
 438                  . " " . $db->name('_create') . " CHAR(2) NOT NULL DEFAULT '0';";
 439          $sql .= "ALTER TABLE " . $db->name('aros_acos') . " CHANGE " . $db->name('_update') 
 440                  . " " . $db->name('_update') . " CHAR(2) NOT NULL DEFAULT '0';";
 441          $sql .= "ALTER TABLE " . $db->name('aros_acos') . " CHANGE " . $db->name('_read') 
 442                  . " " . $db->name('_read') . " CHAR(2) NOT NULL DEFAULT '0';";
 443          $sql .= "ALTER TABLE " . $db->name('aros_acos') . " CHANGE " . $db->name('_delete') 
 444                  . " " . $db->name('_delete') . " CHAR(2) NOT NULL DEFAULT '0';";
 445          if ($db->query($sql) === false) {
 446              die("Error: " . $db->lastError() . "\n\n");
 447          }
 448          $this->stdout("\nDatabase upgrade is complete.\n");
 449      }
 450  
 451  /**
 452   * Enter description here...
 453   *
 454   */
 455  	function help() {
 456          $out = "Usage: php acl.php <command> <arg1> <arg2>...\n";
 457          $out .= "-----------------------------------------------\n";
 458          $out .= "Commands:\n";
 459          $out .= "\n";
 460          $out .= "\tcreate aro|aco <link_id> <parent_id> <alias>\n";
 461          $out .= "\t\tCreates a new ACL object under the parent specified by <parent_id>, an id/alias (see\n";
 462          $out .= "\t\t'view'). The link_id allows you to link a user object to Cake's\n";
 463          $out .= "\t\tACL structures. The alias parameter allows you to address your object\n";
 464          $out .= "\t\tusing a non-integer ID. Example: \"\$php acl.php create aro 57 0 John\"\n";
 465          $out .= "\t\twould create a new ARO object at the root of the tree, linked to 57\n";
 466          $out .= "\t\tin your users table, with an internal alias 'John'.";
 467          $out .= "\n";
 468          $out .= "\n";
 469          $out .= "\tdelete aro|aco <id>\n";
 470          $out .= "\t\tDeletes the ACL object with the specified ID (see 'view').\n";
 471          $out .= "\n";
 472          $out .= "\n";
 473          $out .= "\tsetParent aro|aco <id> <parent_id>\n";
 474          $out .= "\t\tUsed to set the parent of the ACL object specified by <id> to the ID\n";
 475          $out .= "\t\tspecified by <parent_id>.\n";
 476          $out .= "\n";
 477          $out .= "\n";
 478          $out .= "\tgetPath aro|aco <id>\n";
 479          $out .= "\t\tReturns the path to the ACL object specified by <id>. This command is\n";
 480          $out .= "\t\tis useful in determining the inhertiance of permissions for a certain\n";
 481          $out .= "\t\tobject in the tree.\n";
 482          $out .= "\n";
 483          $out .= "\n";
 484          $out .= "\tgrant <aro_id> <aco_id> <aco_action>\n";
 485          $out .= "\t\tUse this command to grant ACL permissions. Once executed, the ARO\n";
 486          $out .= "\t\tspecified (and its children, if any) will have ALLOW access to the\n";
 487          $out .= "\t\tspecified ACO action (and the ACO's children, if any).\n";
 488          $out .= "\n";
 489          $out .= "\n";
 490          $out .= "\tdeny <aro_id> <aco_id> <aco_action>\n";
 491          $out .= "\t\tUse this command to deny ACL permissions. Once executed, the ARO\n";
 492          $out .= "\t\tspecified (and its children, if any) will have DENY access to the\n";
 493          $out .= "\t\tspecified ACO action (and the ACO's children, if any).\n";
 494          $out .= "\n";
 495          $out .= "\n";
 496          $out .= "\tinherit <aro_id> <aco_id> <aco_action> \n";
 497          $out .= "\t\tUse this command to force a child ARO object to inherit its\n";
 498          $out .= "\t\tpermissions settings from its parent.\n";
 499          $out .= "\n";
 500          $out .= "\n";
 501          $out .= "\tview aro|aco [id]\n";
 502          $out .= "\t\tThe view command will return the ARO or ACO tree. The optional\n";
 503          $out .= "\t\tid/alias parameter allows you to return only a portion of the requested\n";
 504          $out .= "\t\ttree.\n";
 505          $out .= "\n";
 506          $out .= "\n";
 507          $out .= "\tinitdb\n";
 508          $out .= "\t\tUse this command to create the database tables needed to use DB ACL.\n";
 509          $out .= "\n";
 510          $out .= "\n";
 511          $out .= "\thelp\n";
 512          $out .= "\t\tDisplays this help message.\n";
 513          $out .= "\n";
 514          $out .= "\n";
 515          $this->stdout($out);
 516      }
 517  /**
 518   * Enter description here...
 519   *
 520   * @param unknown_type $title
 521   * @param unknown_type $msg
 522   */
 523  	function displayError($title, $msg) {
 524          $out = "\n";
 525          $out .= "Error: $title\n";
 526          $out .= "$msg\n";
 527          $out .= "\n";
 528          $this->stdout($out);
 529          exit();
 530      }
 531  
 532  /**
 533   * Enter description here...
 534   *
 535   * @param unknown_type $expectedNum
 536   * @param unknown_type $command
 537   */
 538  	function checkArgNumber($expectedNum, $command) {
 539          if (count($this->args) < $expectedNum) {
 540              $this->displayError('Wrong number of parameters: '.count($this->args), 'Please type \'php acl.php help\' for help on usage of the '.$command.' command.');
 541          }
 542      }
 543  /**
 544   * Enter description here...
 545   *
 546   */
 547  	function checkNodeType() {
 548          if ($this->args[0] != 'aco' && $this->args[0] != 'aro') {
 549              $this->displayError("Missing/Unknown node type: '".$this->args[0]."'", 'Please specify which ACL object type you wish to create.');
 550          }
 551      }
 552  /**
 553   * Enter description here...
 554   *
 555   * @param unknown_type $type
 556   * @param unknown_type $id
 557   * @return unknown
 558   */
 559  	function nodeExists($type, $id) {
 560          //$this->stdout("Check to see if $type with ID = $id exists...\n");
 561          extract($this->__dataVars($type));
 562          $conditions = $this->Acl->{$class}->_resolveID($id);
 563          $possibility = $this->Acl->{$class}->findAll($conditions);
 564          return $possibility;
 565      }
 566  
 567  /**
 568   * Enter description here...
 569   *
 570   * @param unknown_type $type
 571   * @return unknown
 572   */
 573  	function __dataVars($type = null) {
 574          if ($type == null) {
 575              $type = $this->args[0];
 576          }
 577  
 578          $vars = array();
 579          $class = ucwords($type);
 580          $vars['secondary_id'] = ($class == 'aro' ? 'foreign_key' : 'object_id');
 581          $vars['data_name'] = $type;
 582          $vars['table_name'] = $type . 's';
 583          $vars['class'] = $class;
 584          return $vars;
 585      }
 586  /**
 587   * Database configuration setup.
 588   *
 589   */
 590  	function doDbConfig() {
 591          $this->hr();
 592          $this->stdout('Database Configuration:');
 593          $this->hr();
 594  
 595          $driver = '';
 596  
 597          while ($driver == '') {
 598              $driver = $this->getInput('What database driver would you like to use?', array('mysql','mysqli','mssql','sqlite','postgres', 'odbc'), 'mysql');
 599              if ($driver == '') {
 600                  $this->stdout('The database driver supplied was empty. Please supply a database driver.');
 601              }
 602          }
 603  
 604          switch($driver) {
 605              case 'mysql':
 606              $connect = 'mysql_connect';
 607              break;
 608              case 'mysqli':
 609              $connect = 'mysqli_connect';
 610              break;
 611              case 'mssql':
 612              $connect = 'mssql_connect';
 613              break;
 614              case 'sqlite':
 615              $connect = 'sqlite_open';
 616              break;
 617              case 'postgres':
 618              $connect = 'pg_connect';
 619              break;
 620              case 'odbc':
 621              $connect = 'odbc_connect';
 622              break;
 623              default:
 624              $this->stdout('The connection parameter could not be set.');
 625              break;
 626          }
 627  
 628          $host = '';
 629  
 630          while ($host == '') {
 631              $host = $this->getInput('What is the hostname for the database server?', null, 'localhost');
 632              if ($host == '') {
 633                  $this->stdout('The host name you supplied was empty. Please supply a hostname.');
 634              }
 635          }
 636          $login = '';
 637  
 638          while ($login == '') {
 639              $login = $this->getInput('What is the database username?', null, 'root');
 640  
 641              if ($login == '') {
 642                  $this->stdout('The database username you supplied was empty. Please try again.');
 643              }
 644          }
 645          $password = '';
 646          $blankPassword = false;
 647  
 648          while ($password == '' && $blankPassword == false) {
 649              $password = $this->getInput('What is the database password?');
 650              if ($password == '') {
 651                  $blank = $this->getInput('The password you supplied was empty. Use an empty password?', array('y', 'n'), 'n');
 652                  if($blank == 'y')
 653                  {
 654                      $blankPassword = true;
 655                  }
 656              }
 657          }
 658          $database = '';
 659  
 660          while ($database == '') {
 661              $database = $this->getInput('What is the name of the database you will be using?', null, 'cake');
 662  
 663              if ($database == '')  {
 664                  $this->stdout('The database name you supplied was empty. Please try again.');
 665              }
 666          }
 667  
 668          $prefix = '';
 669  
 670          while ($prefix == '') {
 671              $prefix = $this->getInput('Enter a table prefix?', null, 'n');
 672          }
 673          if(low($prefix) == 'n') {
 674              $prefix = '';
 675          }
 676  
 677          $this->stdout('');
 678          $this->hr();
 679          $this->stdout('The following database configuration will be created:');
 680          $this->hr();
 681          $this->stdout("Driver:        $driver");
 682          $this->stdout("Connection:    $connect");
 683          $this->stdout("Host:          $host");
 684          $this->stdout("User:          $login");
 685          $this->stdout("Pass:          " . str_repeat('*', strlen($password)));
 686          $this->stdout("Database:      $database");
 687          $this->stdout("Table prefix:  $prefix");
 688          $this->hr();
 689          $looksGood = $this->getInput('Look okay?', array('y', 'n'), 'y');
 690  
 691          if (low($looksGood) == 'y' || low($looksGood) == 'yes') {
 692              $this->bakeDbConfig($driver, $connect, $host, $login, $password, $database, $prefix);
 693          } else {
 694              $this->stdout('Bake Aborted.');
 695          }
 696      }    
 697  /**
 698   * Creates a database configuration file for Bake.
 699   *
 700   * @param string $host
 701   * @param string $login
 702   * @param string $password
 703   * @param string $database
 704   */
 705  	function bakeDbConfig( $driver, $connect, $host, $login, $password, $database, $prefix) {
 706          $out = "<?php\n";
 707          $out .= "class DATABASE_CONFIG {\n\n";
 708          $out .= "\tvar \$default = array(\n";
 709          $out .= "\t\t'driver' => '{$driver}',\n";
 710          $out .= "\t\t'connect' => '{$connect}',\n";
 711          $out .= "\t\t'host' => '{$host}',\n";
 712          $out .= "\t\t'login' => '{$login}',\n";
 713          $out .= "\t\t'password' => '{$password}',\n";
 714          $out .= "\t\t'database' => '{$database}', \n";
 715          $out .= "\t\t'prefix' => '{$prefix}' \n";
 716          $out .= "\t);\n";
 717          $out .= "}\n";
 718          $out .= "?>";
 719          $filename = CONFIGS.'database.php';
 720          $this->__createFile($filename, $out);
 721      }
 722  /**
 723   * Prompts the user for input, and returns it.
 724   *
 725   * @param string $prompt Prompt text.
 726   * @param mixed $options Array or string of options.
 727   * @param string $default Default input value.
 728   * @return Either the default value, or the user-provided input.
 729   */
 730  	function getInput($prompt, $options = null, $default = null) {
 731          if (!is_array($options)) {
 732              $print_options = '';
 733          } else {
 734              $print_options = '(' . implode('/', $options) . ')';
 735          }
 736  
 737          if($default == null) {
 738              $this->stdout('');
 739              $this->stdout($prompt . " $print_options \n" . '> ', false);
 740          } else {
 741              $this->stdout('');
 742              $this->stdout($prompt . " $print_options \n" . "[$default] > ", false);
 743          }
 744          $result = trim(fgets($this->stdin));
 745  
 746          if($default != null && empty($result)) {
 747              return $default;
 748          } else {
 749              return $result;
 750          }
 751      }
 752  /**
 753   * Outputs to the stdout filehandle.
 754   *
 755   * @param string $string String to output.
 756   * @param boolean $newline If true, the outputs gets an added newline.
 757   */
 758  	function stdout($string, $newline = true) {
 759          if ($newline) {
 760              fwrite($this->stdout, $string . "\n");
 761          } else {
 762              fwrite($this->stdout, $string);
 763          }
 764      }
 765  /**
 766   * Outputs to the stderr filehandle.
 767   *
 768   * @param string $string Error text to output.
 769   */
 770  	function stderr($string) {
 771          fwrite($this->stderr, $string);
 772      }
 773  /**
 774   * Outputs a series of minus characters to the standard output, acts as a visual separator.
 775   *
 776   */
 777      function hr() {
 778          $this->stdout('---------------------------------------------------------------');
 779      }
 780  /**
 781   * Creates a file at given path.
 782   *
 783   * @param string $path        Where to put the file.
 784   * @param string $contents Content to put in the file.
 785   * @return Success
 786   */
 787  	function __createFile ($path, $contents) {
 788          $path = str_replace('//', '/', $path);
 789          echo "\nCreating file $path\n";
 790          if (is_file($path) && $this->interactive === true) {
 791              fwrite($this->stdout, "File exists, overwrite?" . " {$path} (y/n/q):");
 792              $key = trim(fgets($this->stdin));
 793  
 794              if ($key=='q') {
 795                  fwrite($this->stdout, "Quitting.\n");
 796                  exit;
 797              } elseif ($key == 'a') {
 798                  $this->dont_ask = true;
 799              } elseif ($key == 'y') {
 800              } else {
 801                  fwrite($this->stdout, "Skip" . " {$path}\n");
 802                  return false;
 803              }
 804          }
 805  
 806          if ($f = fopen($path, 'w')) {
 807              fwrite($f, $contents);
 808              fclose($f);
 809              fwrite($this->stdout, "Wrote" . "{$path}\n");
 810              return true;
 811          } else {
 812              fwrite($this->stderr, "Error! Could not write to" . " {$path}.\n");
 813              return false;
 814          }
 815      }
 816  }
 817  ?>


Généré le : Sun Feb 25 19:27:47 2007 par Balluche grâce à PHPXref 0.7