/lib/jelix-scripts/commands/initadmin.cmd.php

https://bitbucket.org/doubleface/jelix-jpu · PHP · 242 lines · 222 code · 12 blank · 8 comment · 8 complexity · 903024efc77aa1ee836c58d81c4e7377 MD5 · raw file

  1. <?php
  2. /**
  3. * @package jelix-scripts
  4. * @author Laurent Jouanneau
  5. * @contributor
  6. * @copyright 2008 Laurent Jouanneau
  7. * @link http://jelix.org
  8. * @licence GNU General Public Licence see LICENCE file or http://www.gnu.org/licenses/gpl.html
  9. */
  10. class initadminCommand extends JelixScriptCommand {
  11. public $name = 'initadmin';
  12. public $allowed_options=array('-noauthdb'=>false,
  13. '-noacl2db'=>false,
  14. '-profile'=>true);
  15. public $allowed_parameters=array('entrypoint'=>true);
  16. public $syntaxhelp = "[-noauthdb] [-noacl2db] [-profile a_jdb_profile] entrypoint";
  17. public $help='';
  18. function __construct(){
  19. $this->help= array(
  20. 'fr'=>"
  21. Initialise l'application avec interface d'administration en utilisant
  22. le module master_admin ainsi que jAuth et jAcl.
  23. Les options -noauthdb et -noacl2db indiquent de ne pas utiliser et configurer
  24. respectivement le driver db pour jAuth et le driver db pour jAcl2. La configuration
  25. de jAcl2 et de jAuth pour l'accés à l'administration sera donc à votre charge.
  26. L'option -profile permet d'indiquer le profil jDb à utiliser pour les drivers
  27. db de jAuth et jAcl2.
  28. L'argument entrypoint permet d'indique le point d'entrée qui sera utilisé pour
  29. l'administration. Attention, si le point d'entrée existe déjà, il sera reconfiguré.
  30. ",
  31. 'en'=>"
  32. Initialize the application with a web interface for administration, by activating
  33. the module master_admin and configuring jAuth and jAcl.
  34. Options -noauthdb and -noacl2db indicate to not use and configure the driver 'db'
  35. of jAuth and the driver 'db' of jAcl2. So you will have to configure jAuth and/or jAcl2
  36. by yourself.
  37. The argument 'entrypoint' indicates the entry point to use for the administration.
  38. Carefull : if the entry point already exists, its configuration will be changed.
  39. ",
  40. );
  41. }
  42. public function run(){
  43. jxs_init_jelix_env();
  44. $entrypoint = $this->getParam('entrypoint');
  45. if (!file_exists(JELIX_APP_WWW_PATH.$entrypoint.'.php')) {
  46. try {
  47. $cmd = jxs_load_command('createentrypoint');
  48. $cmd->init(array(),array('name'=>$entrypoint));
  49. $cmd->run();
  50. } catch (Exception $e) {
  51. echo "The entrypoint has not been created because of this error: ".$e->getMessage().". No other files have been created.";
  52. }
  53. }
  54. $inifile = new jIniMultiFilesModifier(JELIX_APP_CONFIG_PATH.'defaultconfig.ini.php',
  55. JELIX_APP_CONFIG_PATH.$entrypoint.'/config.ini.php');
  56. $inifile->setValue('html', 'adminHtmlResponse', 'responses');
  57. $inifile->setValue('htmlauth', 'adminLoginHtmlResponse', 'responses');
  58. $inifile->setValue('auth', $entrypoint.'/auth.coord.ini.php', 'coordplugins');
  59. $inifile->setValue('jacl2', $entrypoint.'/jacl2.coord.ini.php', 'coordplugins');
  60. $inifile->setValue('startModule', 'master_admin');
  61. $inifile->setValue('startAction', 'default:index');
  62. $modulePath = $inifile->getValue("modulesPath");
  63. if(strpos($modulePath, 'lib:jelix-admin-modules')===false){
  64. $inifile->setValue('modulesPath', 'lib:jelix-admin-modules/,'.$modulePath);
  65. }
  66. $inifile->setValue('driver','db','acl2');
  67. $urlconf = $inifile->getValue($entrypoint, 'simple_urlengine_entrypoints', null, true);
  68. if($urlconf === null || $urlconf == '') {
  69. // in defaultconfig
  70. $inifile->setValue($entrypoint, 'jacl2db_admin~*@classic, jauthdb_admin~*@classic, master_admin~*@classic', 'simple_urlengine_entrypoints', null, true);
  71. // in the config of the entry point
  72. $inifile->setValue($entrypoint, 'jacl2db~*@classic, jauth~*@classic, jacl2db_admin~*@classic, jauthdb_admin~*@classic, master_admin~*@classic', 'simple_urlengine_entrypoints');
  73. }
  74. else {
  75. $urlconf2 = $inifile->getValue($entrypoint, 'simple_urlengine_entrypoints');
  76. if(strpos($urlconf, 'jacl2db_admin~*@classic') === false)
  77. $urlconf .= ',jacl2db_admin~*@classic';
  78. if(strpos($urlconf, 'jauthdb_admin~*@classic') === false)
  79. $urlconf .= ',jauthdb_admin~*@classic';
  80. if(strpos($urlconf, 'master_admin~*@classic') === false)
  81. $urlconf .= ',master_admin~*@classic';
  82. if(strpos($urlconf2, 'jacl2db_admin~*@classic') === false)
  83. $urlconf2 .= ',jacl2db_admin~*@classic';
  84. if(strpos($urlconf2, 'jauthdb_admin~*@classic') === false)
  85. $urlconf2 .= ',jauthdb_admin~*@classic';
  86. if(strpos($urlconf2, 'master_admin~*@classic') === false)
  87. $urlconf2 .= ',master_admin~*@classic';
  88. if(strpos($urlconf2, 'jacl2db~*@classic') === false)
  89. $urlconf2 .= ',jacl2db~*@classic';
  90. if(strpos($urlconf2, 'jauth~*@classic') === false)
  91. $urlconf2 .= ',jauth~*@classic';
  92. $inifile->setValue($entrypoint, $urlconf, 'simple_urlengine_entrypoints', null, true);
  93. $inifile->setValue($entrypoint, $urlconf2, 'simple_urlengine_entrypoints');
  94. }
  95. if(null == $inifile->getValue($entrypoint, 'basic_significant_urlengine_entrypoints', null, true)) {
  96. $inifile->setValue($entrypoint, '1', 'basic_significant_urlengine_entrypoints',null,true);
  97. }
  98. $params = array();
  99. $this->createFile(JELIX_APP_PATH.'responses/adminHtmlResponse.class.php','responses/adminHtmlResponse.class.php.tpl',$params);
  100. $this->createFile(JELIX_APP_PATH.'responses/adminLoginHtmlResponse.class.php','responses/adminLoginHtmlResponse.class.php.tpl',$params);
  101. $this->createFile(JELIX_APP_PATH.'var/config/'.$entrypoint.'/auth.coord.ini.php','var/config/auth.coord.ini.php.tpl',$params);
  102. $this->createFile(JELIX_APP_PATH.'var/config/'.$entrypoint.'/jacl2.coord.ini.php','var/config/jacl2.coord.ini.php.tpl',$params);
  103. $authini = new jIniFileModifier(JELIX_APP_CONFIG_PATH.$entrypoint.'/auth.coord.ini.php');
  104. $authini->setValue('after_login','master_admin~default:index');
  105. $authini->setValue('timeout','30');
  106. $profile = $this->getOption('-profile');
  107. if (!$this->getOption('-noauthdb')) {
  108. $authini->setValue('dao','jauth~jelixuser', 'Db');
  109. $authini->setValue('form','jauthdb_admin~jelixuser', 'Db');
  110. if ($profile != '')
  111. $authini->setValue('profile',$profile, 'Db');
  112. $tools = jDb::getTools($profile);
  113. $db = jDb::getConnection($profile);
  114. $path = JELIX_LIB_PATH.'core-modules/jelix/install/sql/';
  115. if(file_exists($path.'install_jauth.schema.'.$db->dbms.'.sql')) {
  116. try {
  117. $tools->execSQLScript($path.'install_jauth.schema.'.$db->dbms.'.sql');
  118. $rs = $db->query("SELECT usr_login FROM jlx_user WHERE usr_login='admin'");
  119. if(!$rs || !$rs->fetch())
  120. $db->exec("INSERT INTO jlx_user (usr_login , usr_password , usr_email) VALUES ('admin', '".md5('admin')."', 'admin@localhost.localdomain')");
  121. $rs = null;
  122. } catch(Exception $e) {
  123. echo "An error has occured during the execution of SQL script to install jAuth: ".$e->getMessage();
  124. }
  125. }
  126. else {
  127. echo "Tables and datas for jAuth.db couldn't be created because SQL scripts are not available for the database declared in the profile.\nYou should initialize the database by hand.";
  128. }
  129. }
  130. else {
  131. $inifile->setValue('unusedModules', $inifile->getValue('unusedModules').', jauthdb_admin');
  132. }
  133. if (!$this->getOption('-noacl2db')) {
  134. $tools = jDb::getTools($profile);
  135. $db = jDb::getConnection($profile);
  136. $path = JELIX_LIB_PATH.'core-modules/jelix/install/sql/';
  137. $tables = $tools->getTableList();
  138. if (in_array('jacl2_rights', $tables)) {
  139. ob_start();
  140. try {
  141. $cmd = jxs_load_command('acl2group');
  142. $cmd->init(array(),array('action'=>'createuser', '...'=>array('admin')));
  143. $cmd->run();
  144. } catch(Exception $e) { }
  145. try {
  146. $cmd = jxs_load_command('acl2group');
  147. $cmd->init(array(),array('action'=>'adduser', '...'=>array('admins','admin')));
  148. $cmd->run();
  149. } catch(Exception $e) { }
  150. $subjects = array(
  151. 'auth.users.list'=> 'jelix~auth.acl.users.list',
  152. 'auth.users.view'=> 'jelix~auth.acl.users.view',
  153. 'auth.users.modify'=> 'jelix~auth.acl.users.modify',
  154. 'auth.users.create'=> 'jelix~auth.acl.users.create',
  155. 'auth.users.delete'=> 'jelix~auth.acl.users.delete',
  156. 'auth.users.change.password'=> 'jelix~auth.acl.users.change.password',
  157. 'auth.user.view'=> 'jelix~auth.acl.user.view',
  158. 'auth.user.modify'=> 'jelix~auth.acl.user.modify',
  159. 'auth.user.change.password'=> 'jelix~auth.acl.user.change.password'
  160. );
  161. foreach ($subjects as $subject=>$label) {
  162. try {
  163. $cmd = jxs_load_command('acl2right');
  164. $cmd->init(array(),array('action'=>'subject_create', '...'=>array($subject,$label)));
  165. $cmd->run();
  166. } catch(Exception $e) { }
  167. }
  168. $rights = array(
  169. array('auth.users.list', 'admins'),
  170. array('auth.users.view', 'admins'),
  171. array('auth.users.modify', 'admins'),
  172. array('auth.users.create', 'admins'),
  173. array('auth.users.delete', 'admins'),
  174. array('auth.users.change.password', 'admins'),
  175. array('auth.user.view', 'admins'),
  176. array('auth.user.modify', 'admins'),
  177. array('auth.user.change.password', 'admins'),
  178. array('auth.user.view', 'users'),
  179. array('auth.user.modify', 'users'),
  180. array('auth.user.change.password', 'users')
  181. );
  182. foreach ($rights as $right) {
  183. try {
  184. $cmd = jxs_load_command('acl2right');
  185. $cmd->init(array(),array('action'=>'add', '...'=>array($right[1],$right[0])));
  186. $cmd->run();
  187. } catch(Exception $e) { }
  188. }
  189. ob_end_clean();
  190. }
  191. else {
  192. if(file_exists($path.'install_jauth.schema.'.$db->dbms.'.sql')) {
  193. try {
  194. $tools->execSQLScript($path.'install_jacl2.schema.'.$db->dbms.'.sql');
  195. $tools->execSQLScript($path.'install_jacl2.data.'.$db->dbms.'.sql');
  196. } catch(Exception $e) {
  197. echo "An error has occured during the execution of SQL script to install jAcl2.db: ".$e->getMessage();
  198. }
  199. }
  200. else {
  201. echo "Tables and datas for jAcl2.db couldn't be created because SQL scripts are not available for the database declared in the profile.\nYou should initialize the database by hand.";
  202. }
  203. }
  204. }
  205. else {
  206. $inifile->setValue('unusedModules', $inifile->getValue('unusedModules').', jacl2db_admin');
  207. }
  208. $authini->save();
  209. $inifile->save();
  210. }
  211. }