activeRecord) { $objDC->activeRecord = $this->getActiveRecord($objDC->table, $objDC->id); } //check if custom element has wrapper config $type = $objDC->activeRecord->type; $config = $this->getWrapperStartConfig($type); if ($config) { $wrapperClose = $config['wrapperClose']; //create wrapper stop if entry is new if ($objDC->activeRecord->rsce_data == null) { $this->createRsceDatabaseEntry($objDC, $wrapperClose); } } } /** * Creates a wrapper-stop element at copy-action of a single wrapper-start element * * @param $id * @param $objDC */ public function createWrapperStopOnCopy($id, DC_Table $objDC) { if (Input::get('act') == "copy") { //get active record of copied entry $objDC->activeRecord = $this->getActiveRecord($objDC->table, $id); //check if custom element has wrapper config $type = $objDC->activeRecord->type; $config = $this->getWrapperStartConfig($type); if ($config) { $wrapperClose = $config['wrapperClose']; //create wrapper stop $this->createRsceDatabaseEntry($objDC, $wrapperClose); } } } /** * Returns the database entry of the active record * * @param $table * @param $id * @return Database\Result */ private function getActiveRecord($table, $id) { return Database::getInstance() ->prepare("SELECT * FROM " . $table . " WHERE id=?") ->limit(1)->execute($id); } /** * Gets the config of a start wrapper, if it contains a wrapperClose definition * * @param $type * @return array|bool|null */ private function getWrapperStartConfig($type) { //check if element is rocksolid custom element if (preg_match("/^rsce_/", $type)) { $config = CustomElements::getConfigByType($type); $wrapperType = $config['wrapper']; if ($wrapperType['type'] == 'start' && isset($config['wrapperClose'])) { return $config; } } return false; } /** * Creates a new database entry after the newly created element * * @param $objDC * @param $type * @param string $rsceData * @return Database\Result */ private function createRsceDatabaseEntry($objDC, $type, $rsceData = "") { $objDB = Database::getInstance(); //set sorting to value between current and next entry $startWrapperSorting = $objDC->activeRecord->sorting; $nextSorting = $objDB->prepare('SELECT sorting FROM tl_content WHERE sorting > ? AND pid = ? AND ptable = ? ORDER BY sorting LIMIT 1') ->execute($startWrapperSorting, $objDC->activeRecord->pid, $objDC->activeRecord->ptable)->fetchRow()[0]; $newSorting = (($nextSorting - $startWrapperSorting) / 2 + $startWrapperSorting); //create database entry return Database::getInstance() ->prepare( "INSERT INTO " . $objDC->table . " (pid, ptable, tstamp, type, sorting, invisible, rsce_data) VALUES (?,?,?,'$type',?,?,?)" ) ->execute( $objDC->activeRecord->pid, $objDC->activeRecord->ptable, time(), $newSorting, $objDC->activeRecord->invisible, json_encode($rsceData) ); } }