Advertisement
wzline

Генерация сущностей для ORM Bitrix

Oct 5th, 2017
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.75 KB | None | 0 0
  1. <?
  2. use
  3.     Bitrix\Main\Loader,
  4.     Bitrix\Main\Entity\ExpressionField,
  5.     Bitrix\Forum\TopicTable,
  6.  
  7.     Bitrix\Main\Entity\Base;
  8.  
  9. require($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
  10.  
  11. Loader::includeModule('bizproc');
  12. Loader::includeModule('forum');
  13.  
  14. $params = array(
  15.     'filter' => array(
  16.         '=ID' => 63,
  17.         'XML_ID' => 'WF_%',
  18.         '=FORUM_XML_ID' => 'bizproc_workflow',
  19.         '!BP_WF.ID' => false
  20.     ),
  21.     'select' => array(
  22.         'ID',
  23.         'FORUM_XML_ID' => 'FORUM.XML_ID',
  24.         new ExpressionField('BP_ID', 'REPLACE(%s, "WF_", "")', array('XML_ID'))
  25.     ),
  26.     'runtime' => array(
  27.         'FORUM' => array(
  28.             'data_type' => 'Bitrix\\Forum\\ForumTable',
  29.             'reference' => array('=this.FORUM_ID' => 'ref.ID')
  30.         ),
  31.         'BP_WF' => array(
  32.             'data_type' => 'Bitrix\\Bizproc\\WorkflowInstanceTable',
  33.             'reference' => array('=this.BP_ID' => 'ref.ID')
  34.         )
  35.     ),
  36.     'limit' => 1
  37. );
  38.  
  39. $topicInfo = TopicTable::getList($params)->fetch();
  40.  
  41. echo "<pre>";print_r(TopicTable::query()->getLastQuery());echo "</pre>";
  42. echo "<pre>";print_r($topicInfo);echo "</pre>";
  43.  
  44. $bpTaskEntityType = 'BpTaskTable';
  45. $bpTaskTableName = array('table_name' => 'b_bp_task');
  46. $bpTaskFields = getFieldMap4Table($bpTaskTableName['table_name']);
  47. $eTaskTable = Base::compileEntity($bpTaskEntityType, $bpTaskFields, $bpTaskTableName);
  48.  
  49. $bpTaskUserEntityType = 'BpTaskUserTable';
  50. $bpTaskUserTableName = array('table_name' => 'b_bp_task_user');
  51. $bpTasksFields = getFieldMap4Table($bpTaskUserTableName['table_name']);
  52. $eTaskUserTable = Base::compileEntity($bpTaskUserEntityType, $bpTasksFields, $bpTasksTableName);
  53.  
  54. $taskUser = $eTaskUserTable->getDataClass();
  55. $params = array(
  56.     'select' => array(
  57.         'USER_ID'      
  58.     ),
  59.     'filter' => array(
  60.         '=BP_TASK.WORKFLOW_ID' => $topicInfo['BP_ID'],
  61.         '=BP_TASK.ACTIVITY' => 'ApproveActivity',
  62.         '!@USER_ID' => array('482')
  63.     ),
  64.     'runtime' => array(
  65.         'BP_TASK' => array(
  66.             'data_type' => $eTaskTable->getDataClass(),
  67.             'reference' => array('=ref.ID' => 'this.TASK_ID')
  68.         )
  69.     )
  70. );
  71. $r = $taskUser::getList($params)->fetchAll();
  72.  
  73. echo "<pre>";print_r($taskUser::query()->getLastQuery());echo "</pre>";
  74. echo "<pre>";print_r($r);echo "</pre>";
  75.  
  76. function getFieldMap4Table($tableName)
  77. {
  78.     global $DB;
  79.     $fields = array();
  80.     $q = "describe {$tableName};";
  81.     $r = $DB->Query($q);
  82.     while ($f = $r->Fetch())
  83.     {
  84.         $_f = array();
  85.        
  86.         if ($f['Key'] == 'Pri')
  87.         {
  88.             $_f['primary'] = true;
  89.         }
  90.         if ($f['Null'] == 'NO')
  91.         {
  92.             $_f['required'] = true;
  93.         }
  94.        
  95.        
  96.         $type = 'string';
  97.         if (substr($f['Type'], 0, 4) === 'int(')
  98.             $type = 'integer';
  99.         elseif ($f['Type'] === 'datetime')
  100.             $type = 'datetime';
  101.         elseif ($f['Type'] === 'text')
  102.             $type = 'text';
  103.        
  104.         $_f['data_type'] = $type;
  105.        
  106.         $fields[$f['Field']] = $_f;
  107.     }
  108.     return $fields;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement