Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.90 KB | None | 0 0
  1. public static function processCopyTemplate(Objects $object, Template $newTemplate)
  2.     {
  3.         \Yii::$app->db->createCommand("SET FOREIGN_KEY_CHECKS=0;")->execute();
  4.         $tasksForDepends = [];
  5.         $tasksForDependIds = [];
  6.  
  7.         /** @var StageTemplate $stageTemplate */
  8.         $scenars = $object->scenar;
  9.  
  10.         /** @var Scenario $scenar */
  11.         foreach ($scenars as $scenar) {
  12.             $stageTemplate = StageTemplate::find()
  13.                 ->where([
  14.                     'template_id' => $newTemplate->id,
  15.                     'stage_id' => $scenar->stageTemplate->stage_id
  16.                 ])
  17.                 ->one();
  18.  
  19.             if (!$stageTemplate) {
  20.                 continue;
  21.             }
  22.  
  23.             $scenarModel = new Scenario();
  24.             $scenarModel->attributes = $scenar->attributes;
  25.             $scenarModel->stage_template_id = $stageTemplate->id;
  26.             $scenarModel->save(false);
  27.  
  28.             $tasks = $scenar->tasks;
  29.             $scenar->delete();
  30.  
  31.             foreach ($tasks as $keyTask => $task) {
  32.                 if (isset($task->dependents)) {
  33.                     foreach ($task->dependents as $dependent) {
  34.                         $dependent->dependentTask;
  35.                         $dependent->task;
  36.                     }
  37.  
  38.                     if (!in_array($task->id, $tasksForDependIds)) {
  39.                         $tasksForDepends[] = $task;
  40.                         $tasksForDependIds[] = $task->id;
  41.                     }
  42.                 }
  43.  
  44.                 $stageTemplateAction = $stageTemplate->stageTemplateActions[$keyTask] ?? false;
  45.  
  46.                 if ($stageTemplateAction === false) {
  47.                     continue;
  48.                 }
  49.  
  50.                 /** @var Task $task */
  51.                 $taskModel = new Task();
  52.                 $taskModel->attributes = $task->attributes;
  53.                 $taskModel->scenario_id = $scenarModel->id;
  54.                 $taskModel->stage_template_action_id = $stageTemplateAction->id;
  55.                 $taskModel->save(false);
  56.  
  57.                 $notifies = $task->notify;
  58.  
  59.                 /** @var Notifications $notify */
  60.                 foreach ($notifies as $notify) {
  61.                     $notifyModel = new Notifications();
  62.                     $notifyModel->attributes = $notify->attributes;
  63.                     $notifyModel->task_id = $taskModel->id;
  64.                     $notifyModel->save(false);
  65.                 }
  66.             }
  67.         }
  68.  
  69.         foreach ($tasksForDepends as $task) {
  70.             $task->clearDependencies();
  71.             $task->clearNotifies();
  72.             $task->delete();
  73.  
  74.             foreach ($task->dependents as $dependent) {
  75.                 if (empty($dependent->dependentTask) || empty($dependent->task)) {
  76.                     continue;
  77.                 }
  78.  
  79.                 $dependKey = $dependent->dependentTask->user_id . '-' . $dependent->dependentTask->object_id . '-' . $dependent->dependentTask->title . '-' . $dependent->dependentTask->status . '-' . $dependent->dependentTask->type;
  80.                 $key = $dependent->task->user_id . '-' . $dependent->task->object_id . '-' . $dependent->task->title . '-' . $dependent->task->status . '-' . $dependent->task->type;
  81.  
  82.                 if ($dependKey === $key) {
  83.                     continue;
  84.                 }
  85.  
  86.                 $tmpTask = Task::findTaskByKey($tasksForDepends, $key);
  87.                 $tmpDepend = Task::findTaskByKey($tasksForDepends, $dependKey);
  88.  
  89.                 if (empty($tmpTask) || empty($tmpDepend)) {
  90.                     continue;
  91.                 }
  92.  
  93.                 $dependTask = Task::find()->where([
  94.                     'user_id' => $tmpDepend->user_id,
  95.                     'object_id' => $tmpDepend->object_id,
  96.                     'title' => $tmpDepend->title,
  97.                     'status' => $tmpDepend->status,
  98.                     'type' => $tmpDepend->type
  99.                 ])
  100.                     ->orderBy(['id' => SORT_DESC])
  101.                     ->one();
  102.  
  103.                 $newTask = Task::find()->where([
  104.                     'user_id' => $tmpTask->user_id,
  105.                     'object_id' => $tmpTask->object_id,
  106.                     'title' => $tmpTask->title,
  107.                     'status' => $tmpTask->status,
  108.                     'type' => $tmpTask->type
  109.                 ])
  110.                     ->orderBy(['id' => SORT_DESC])
  111.                     ->one();
  112.  
  113.                 if ($dependTask && $newTask)
  114.                 {
  115.                     $dependModel = new TasksDependencies();
  116.                     $dependModel->task_id = $newTask->id;
  117.                     $dependModel->dependent_task_id = $dependTask->id;
  118.                     $dependModel->save(false);
  119.                 }
  120.             }
  121.         }
  122.  
  123.         $object->objectTemplate->template_id = $newTemplate->id;
  124.         $object->objectTemplate->save();
  125.  
  126.         \Yii::$app->db->createCommand("SET FOREIGN_KEY_CHECKS=1;")->execute();
  127.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement