/** * Get a list with all needed fields for the models. * * @param InterfaceGeneralModel $objModel * @param string $strDstTable * * @return array A list with all needed values. */ protected function calcNeededFields(InterfaceGeneralModel $objModel, $strDstTable) { $arrFields = $this->calcLabelFields($strDstTable); $arrChildCond = $this->getDC()->getChildCondition($objModel, $strDstTable); foreach ($arrChildCond as $arrCond) { if ($arrCond['property']) { $arrFields[] = $arrCond['property']; } } // Add some default values, if we have this values in DB. if ($this->objDC->getDataProvider($strDstTable)->fieldExists('enabled')) { $arrFields[] = 'enabled'; } return $arrFields; }
/** * Return the paste page button * @param DataContainer * @param array * @param string * @param boolean * @param array * @return string */ public function pasteButton(DC_General $objDC, $arrRow, $strTable, $cr, $arrClipboard = false) { $disablePA = true; $disablePI = true; // FIXME: whoa, this is hacky, the DC should provide a better way to obtain all of this. $objSrcProvider = $objDC->getDataProvider($strTable); if ($this->Input->get('source')) { $objModel = $objSrcProvider->fetch($objSrcProvider->getEmptyConfig()->setId($this->Input->get('source'))); } else { $objModel = null; } if ($objModel && isset($arrRow['id']) && strlen($arrRow['id']) && $arrRow['id'] != $objModel->getID()) { // Insert a varbase after any other varbase, for sorting. if ($objModel->getProperty('varbase') == 1 && $arrRow['id'] != $objModel->getID() && $arrRow['varbase'] != 0) { $disablePA = false; } else { if ($objModel->getProperty('varbase') == 0 && $arrRow['vargroup'] == $objModel->getProperty('vargroup') && $arrRow['varbase'] != 1) { $disablePA = false; } } } else { $disablePA = false; $disablePI = !($arrRow['varbase'] == 1); } // Return the buttons $imagePasteAfter = $this->generateImage('pasteafter.gif', sprintf($GLOBALS['TL_LANG'][$strTable]['pasteafter'][1], $arrRow['id']), 'class="blink"'); $imagePasteInto = $this->generateImage('pasteinto.gif', sprintf($GLOBALS['TL_LANG'][$strTable]['pasteinto'][1], $arrRow['id']), 'class="blink"'); $strAdd2UrlAfter = sprintf('act=%s&mode=1&pid=%s&after=%s&source=%s&childs=%s', $arrClipboard['mode'], $arrClipboard['id'], $arrRow['id'], $arrClipboard['source'], $arrClipboard['childs']); $strAdd2UrlInto = sprintf('act=%s&mode=2&pid=%s&after=%s&source=%s&childs=%s', $arrClipboard['mode'], $arrClipboard['id'], $arrRow['id'], $arrClipboard['source'], $arrClipboard['childs']); if ($arrClipboard['pdp'] != '') { $strAdd2UrlAfter .= '&pdp=' . $arrClipboard['pdp']; $strAdd2UrlInto .= '&pdp=' . $arrClipboard['pdp']; } if ($arrClipboard['cdp'] != '') { $strAdd2UrlAfter .= '&cdp=' . $arrClipboard['cdp']; $strAdd2UrlInto .= '&cdp=' . $arrClipboard['cdp']; } $strPasteBtn = ''; if ($disablePA) { $strPasteBtn = $this->generateImage('pasteafter_.gif', '', 'class="blink"') . ' '; } else { $strPasteBtn = sprintf(' <a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a> ', $this->addToUrl($strAdd2UrlAfter), specialchars($GLOBALS['TL_LANG'][$strTable]['pasteafter'][0]), $imagePasteAfter); } if ($disablePI) { $strPasteBtn .= $this->generateImage('pasteinto_.gif', '', 'class="blink"') . ' '; } else { $strPasteBtn .= sprintf(' <a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a> ', $this->addToUrl($strAdd2UrlInto), specialchars($GLOBALS['TL_LANG'][$strTable]['pasteinto'][0]), $imagePasteInto); } // special case, the root paste into. if (!(isset($arrRow['id']) && strlen($arrRow['id']))) { if ($objModel && $objModel->getProperty('varbase') == 1) { $strPasteBtn = sprintf(' <a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a> ', $this->addToUrl(sprintf('act=%s&mode=2&after=0&pid=0&id=%s&childs=%s', $arrClipboard['mode'], $arrClipboard['id'], $arrClipboard['childs'])), specialchars($GLOBALS['TL_LANG'][$strTable]['pasteinto'][0]), $imagePasteInto); } elseif (!$objModel) { $strPasteBtn = sprintf(' <a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a> ', $this->addToUrl(sprintf('act=%s&mode=2&after=0&pid=0&id=%s&childs=%s', $arrClipboard['mode'], $arrClipboard['id'], $arrClipboard['childs'])), specialchars($GLOBALS['TL_LANG'][$strTable]['pasteinto'][0]), $imagePasteInto); } else { $strPasteBtn = $this->generateImage('pasteinto_.gif', '', 'class="blink"') . ' '; } } return $strPasteBtn; }
/** * Create a variant of the model currently loaded. * * @param DC_General $objDC The data container holding the current model. * * @return void */ public function createvariant(DC_General $objDC) { // Check if table is editable. if (!$objDC->isEditable()) { $this->log('Table ' . $objDC->getTable() . ' is not editable', 'DC_General - Controller - edit()', TL_ERROR); $this->redirect('contao/main.php?act=error'); } // Load fields. $objDC->loadEditableFields(); $objDC->setWidgetID($objDC->getId()); // Check if we have fields. if (!$objDC->hasEditableFields()) { $this->redirect($this->getReferer()); } // Load rich text editor. $objDC->preloadTinyMce(); // Set buttons. $objDC->addButton('save'); $objDC->addButton('saveNclose'); // Load record from data provider. $objDBModel = $objDC->getDataProvider()->createVariant($objDC->getDataProvider()->getEmptyConfig()->setId($objDC->getId())); if ($objDBModel == null) { $objDBModel = $objDC->getDataProvider()->getEmptyModel(); } $objDC->setCurrentModel($objDBModel); // Check if we have a auto submit. if ($objDC->isAutoSubmitted()) { // Process input and update changed properties. foreach (array_keys($objDC->getFieldList()) as $key) { $varNewValue = $objDC->processInput($key); if ($objDBModel->getProperty($key) != $varNewValue) { $objDBModel->setProperty($key, $varNewValue); } } $objDC->setCurrentModel($objDBModel); } // Check submit. if ($objDC->isSubmitted() == true) { // @codingStandardsIgnoreStart - we know that access to $_POST is discouraged. if (isset($_POST['save'])) { $this->getDC()->updateModelFromPOST(); // Process input and update changed properties. if ($this->doSave($objDC) !== false) { // Call the on create callbacks. $objDC->getCallbackClass()->oncreateCallback($objDBModel->getID(), $objDBModel->getPropertiesAsArray()); // Log the creation. $this->log(sprintf('A new entry in table "%s" has been created (ID: %s)', $objDC->getTable(), $objDBModel->getID()), 'DC_General - Controller - createvariant()', TL_GENERAL); // Redirect to edit mode. $this->redirect($this->addToUrl('id=' . $objDBModel->getID() . '&act=edit')); } } elseif (isset($_POST['saveNclose'])) { $this->getDC()->updateModelFromPOST(); // Process input and update changed properties. if ($this->doSave($objDC) !== false) { setcookie('BE_PAGE_OFFSET', 0, 0, '/'); // @codingStandardsIgnoreStart - we know that access to $_SESSION is discouraged. $_SESSION['TL_INFO'] = array(); $_SESSION['TL_ERROR'] = array(); $_SESSION['TL_CONFIRM'] = array(); // @codingStandardsIgnoreEnd $this->redirect($this->getReferer()); } } // Maybe Callbacks? } }