Exemplo n.º 1
0
 /**
  * @param \Mageplaza\Blog\Model\Topic $topic
  * @return $this
  */
 protected function savePostRelation(\Mageplaza\Blog\Model\Topic $topic)
 {
     $topic->setIsChangedPostList(false);
     $id = $topic->getId();
     $posts = $topic->getPostsData();
     if ($posts === null) {
         return $this;
     }
     $oldPosts = $topic->getPostsPosition();
     $insert = array_diff_key($posts, $oldPosts);
     $delete = array_diff_key($oldPosts, $posts);
     $update = array_intersect_key($posts, $oldPosts);
     $_update = [];
     foreach ($update as $key => $settings) {
         if (isset($oldPosts[$key]) && $oldPosts[$key] != $settings['position']) {
             $_update[$key] = $settings;
         }
     }
     $update = $_update;
     $adapter = $this->getConnection();
     if (!empty($delete)) {
         $condition = ['post_id IN(?)' => array_keys($delete), 'topic_id=?' => $id];
         $adapter->delete($this->topicPostTable, $condition);
     }
     if (!empty($insert)) {
         $data = [];
         foreach ($insert as $postId => $position) {
             $data[] = ['topic_id' => (int) $id, 'post_id' => (int) $postId, 'position' => (int) $position['position']];
         }
         $adapter->insertMultiple($this->topicPostTable, $data);
     }
     if (!empty($update)) {
         foreach ($update as $postId => $position) {
             $where = ['topic_id = ?' => (int) $id, 'post_id = ?' => (int) $postId];
             $bind = ['position' => (int) $position['position']];
             $adapter->update($this->topicPostTable, $bind, $where);
         }
     }
     if (!empty($insert) || !empty($delete)) {
         $postIds = array_unique(array_merge(array_keys($insert), array_keys($delete)));
         $this->eventManager->dispatch('mageplaza_blog_topic_change_posts', ['topic' => $topic, 'post_ids' => $postIds]);
     }
     if (!empty($insert) || !empty($update) || !empty($delete)) {
         $topic->setIsChangedPostList(true);
         $postIds = array_keys($insert + $delete + $update);
         $topic->setAffectedPostIds($postIds);
     }
     return $this;
 }
 /**
  * Add Topic id to error message
  *
  * @param \Mageplaza\Blog\Model\Topic $topic
  * @param string $errorText
  * @return string
  */
 protected function getErrorWithTopicId(\Mageplaza\Blog\Model\Topic $topic, $errorText)
 {
     return '[Topic ID: ' . $topic->getId() . '] ' . $errorText;
 }