AclReinstall.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('Router');
  4. Lib::loadClass('Response');
  5. Lib::loadClass('UI');
  6. Lib::loadClass('SchemaFactory');
  7. class Route_Storage_AclReinstall extends RouteBase {
  8. public function handleAuth() {
  9. if (!User::logged()) {
  10. User::authByRequest();
  11. }
  12. }
  13. public function defaultAction() {
  14. UI::gora();
  15. UI::startContainer();
  16. try {
  17. $namespace = V::get('namespace', '', $_GET);
  18. if (empty($namespace)) throw new Exception("Missing param namespace");
  19. echo UI::h('h3', [], $namespace);
  20. Lib::loadClass('Schema_SystemObjectFieldStorageAcl');
  21. $objFieldAcl = new Schema_SystemObjectFieldStorageAcl();
  22. $objFieldAcl->updateCache($namespace);
  23. DBG::nicePrint([
  24. 'idInstance' => ACL::getInstanceId($namespace),
  25. 'rootInstance' => ACL::getRootNamespace($namespace),
  26. 'conf' => ACL::fetchInstanceConfig($namespace),
  27. 'table' => ACL::getInstanceTable($namespace),
  28. ], "dbg");
  29. {
  30. $item = SchemaFactory::loadDefaultObject('SystemObject')->getItem($namespace, [ 'propertyName' => '*,field' ]);
  31. if ('AntAcl' === $item['_type']) {
  32. $dbName = DB::getPDO()->getDatabaseName();
  33. $sqlFunBody = ACL::generateIsInstanceFunctionBody($namespace, $item);
  34. DBG::nicePrint($sqlFunBody, "\$sqlFunBody");
  35. DB::getPDO()->execSql(" DROP FUNCTION IF EXISTS `{$dbName}`.`isInstance_{$namespace}` ");
  36. // CREATE
  37. // [DEFINER = { user | CURRENT_USER }]
  38. // FUNCTION sp_name ([func_parameter[,...]])
  39. // RETURNS type
  40. // [characteristic ...] routine_body
  41. DB::getPDO()->execSql("
  42. CREATE DEFINER=`root`@`localhost`
  43. FUNCTION `{$dbName}`.`isInstance_{$namespace}` ( pk INT(11) )
  44. RETURNS TINYINT(1)
  45. {$sqlFunBody}
  46. ");
  47. }
  48. }
  49. } catch (Exception $e) {
  50. UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  51. DBG::log($e);
  52. }
  53. UI::endContainer();
  54. UI::dol();
  55. }
  56. }