/**
  * 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;
 }
Пример #2
0
 /**
  * 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&amp;mode=2&amp;after=0&amp;pid=0&amp;id=%s&amp;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&amp;mode=2&amp;after=0&amp;pid=0&amp;id=%s&amp;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() . '&amp;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?
     }
 }