Example #1
0
 /**
  * @param int $oldRevisionId
  * @param int $newRevisionId
  */
 public static function duplicateRevision($oldRevisionId, $newRevisionId)
 {
     $widgetTable = ipTable('widget');
     $sql = "\n            SELECT *\n            FROM\n                {$widgetTable}\n            WHERE\n                `revisionId` = ? AND\n                `isDeleted` = 0\n            ORDER BY `position` ASC\n        ";
     $widgets = ipDb()->fetchAll($sql, array($oldRevisionId));
     $widgetIdTransition = array();
     foreach ($widgets as $widget) {
         $widgetObject = Model::getWidgetObject($widget['name']);
         $oldWidgetId = $widget['id'];
         unset($widget['id']);
         $widget['revisionId'] = $newRevisionId;
         $newWidgetId = ipDb()->insert('widget', $widget);
         if ($widgetObject) {
             $decodedData = json_decode($widget['data'], true);
             $newData = $widgetObject->duplicate($oldWidgetId, $newWidgetId, $decodedData);
         }
         self::updateWidget($newWidgetId, array('data' => $newData));
         $widgetIdTransition[$oldWidgetId] = $newWidgetId;
     }
     foreach ($widgetIdTransition as $oldId => $newId) {
         $sql = "\n            UPDATE\n                {$widgetTable}\n            SET\n                `blockName` = REPLACE(`blockName`, 'column" . (int) $oldId . "_', 'column" . (int) $newId . "_')\n            WHERE\n                `revisionId` = :newRevisionId\n            ";
         ipDb()->execute($sql, array('newRevisionId' => $newRevisionId));
         ipEvent('ipWidgetDuplicated', array('oldWidgetId' => $oldId, 'newWidgetId' => $newId));
     }
 }