Bug #19980 » 0010372.diff
t3lib/class.t3lib_frontendedit.php (working copy) | ||
---|---|---|
unset($this->TSFE_EDIT['cmd']);
|
||
} else {
|
||
$cmd = (string) $this->TSFE_EDIT['cmd'];
|
||
if (($cmd != 'edit' || (is_array($this->TSFE_EDIT['data']) && ($this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']))) && $cmd != 'new') {
|
||
// $cmd can be a command like "hide" or "move". If $cmd is "edit" or "new" it's an indication to show the formfields. But if data is sent with update-flag then $cmd = edit is accepted because edit may be sendt because of .keepGoing flag.
|
||
if (($cmd != 'edit' || (is_array($this->TSFE_EDIT['data']) && ($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']))) && $cmd != 'new') {
|
||
// $cmd can be a command like "hide" or "move". If $cmd is "edit" or "new" it's an indication to show the formfields. But if data is sent with update-flag then $cmd = edit is accepted because edit may be sent because of .keepGoing flag.
|
||
return true;
|
||
}
|
||
}
|
||
... | ... | |
// Commands:
|
||
list($table, $uid) = explode(':', $this->TSFE_EDIT['record']);
|
||
$cmd = $this->TSFE_EDIT['cmd'];
|
||
|
||
// Look for some TSFE_EDIT data that indicates we should save.
|
||
if (($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']) && is_array($this->TSFE_EDIT['data'])) {
|
||
$cmd = 'save';
|
||
}
|
||
if ($cmd && $table && $uid && isset($GLOBALS['TCA'][$table])) {
|
||
// Hook for defining custom editing actions. Naming is incorrect, but preserves compatibility.
|
||
... | ... | |
t3lib_div::callUserFunction($_funcRef, $_params, $this);
|
||
}
|
||
}
|
||
// Perform the requested editing command.
|
||
if (is_callable(array($this, $cmd))) {
|
||
$this->$cmd($table, $uid);
|
||
$cmdAction = 'do' . ucwords($cmd);
|
||
if (is_callable(array($this, $cmdAction))) {
|
||
$this->$cmdAction($table, $uid);
|
||
} else {
|
||
throw new UnexpectedValueException(
|
||
'The specified frontend edit command (' . $cmd . ') is not valid.',
|
||
... | ... | |
);
|
||
}
|
||
}
|
||
// Data:
|
||
if (($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']) && is_array($this->TSFE_EDIT['data'])) {
|
||
$this->save($this->TSFE_EDIT['data']);
|
||
// pass this on if needed
|
||
if ($newuid = $this->tce->substNEWwithIDs['NEW']) {
|
||
$this->TSFE_EDIT['newUID'] = $newuid;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Hides a specific record.
|
||
*
|
||
... | ... | |
* @param integer The UID for the record to hide.
|
||
* @return void
|
||
*/
|
||
public function hide($table, $uid) {
|
||
public function doHide($table, $uid) {
|
||
$hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
|
||
if ($hideField) {
|
||
$recData = array();
|
||
... | ... | |
* @param integer The UID for the record to unhide.
|
||
* @return void
|
||
*/
|
||
public function unhide($table, $uid) {
|
||
public function doUnhide($table, $uid) {
|
||
$hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
|
||
if ($hideField) {
|
||
$recData = array();
|
||
... | ... | |
* @param integer The UID for the record to hide.
|
||
* @return void
|
||
*/
|
||
public function up($table, $uid) {
|
||
public function doUp($table, $uid) {
|
||
$this->move($table, $uid, 'up');
|
||
}
|
||
... | ... | |
* @param integer The UID for the record to move.
|
||
* @return void
|
||
*/
|
||
public function down($table, $uid) {
|
||
public function doDown($table, $uid) {
|
||
$this->move($table, $uid, 'down');
|
||
}
|
||
/**
|
||
* Moves a record in the specified direction.
|
||
* Moves a record after a given element. Used for drag.
|
||
*
|
||
* @param string The table name for the record to move.
|
||
* @param integer The UID for the record to move.
|
||
* @param string The direction to move, either 'up' or 'down'.
|
||
* @return void
|
||
*/
|
||
protected function move($table, $uid, $direction) {
|
||
public function doMoveAfter($table, $uid) {
|
||
$afterUID = $GLOBALS['BE_USER']->frontendEdit->TSFE_EDIT['moveAfter'];
|
||
$this->move($table, $uid, '', $afterUID);
|
||
}
|
||
/**
|
||
* Moves a record
|
||
*
|
||
* @param string The table name for the record to move.
|
||
* @param integer The UID for the record to move.
|
||
* @param string The direction to move, either 'up' or 'down'.
|
||
* @param integer The UID of record to move after. This is specified for dragging only.
|
||
* @return void
|
||
*/
|
||
protected function move($table, $uid, $direction='', $afterUID=0) {
|
||
$cmdData = array();
|
||
if ($direction == 'up') {
|
||
$operator = '<';
|
||
$order = 'DESC';
|
||
} else {
|
||
$operator = '>';
|
||
$order = 'ASC';
|
||
}
|
||
$sortField = $GLOBALS['TCA'][$table]['ctrl']['sortby'];
|
||
if ($sortField) {
|
||
// Get self:
|
||
... | ... | |
$ignore = array('starttime'=>1, 'endtime'=>1, 'disabled'=>1, 'fe_group'=>1);
|
||
}
|
||
if ($GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields']) {
|
||
$cAFields = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'], false);
|
||
$cAFields = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'], true);
|
||
foreach($cAFields as $fieldName) {
|
||
$copyAfterFieldsQuery .= ' AND ' . $fieldName . '="' . $row[$fieldName] . '"';
|
||
}
|
||
}
|
||
if (!empty($direction)) {
|
||
if ($direction == 'up') {
|
||
$operator = '<';
|
||
$order = 'DESC';
|
||
} else {
|
||
$operator = '>';
|
||
$order = 'ASC';
|
||
}
|
||
$sortCheck = ' AND ' . $sortField . $operator . intval($row[$sortField]);
|
||
}
|
||
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
|
||
'uid,pid',
|
||
$table,
|
||
'pid=' . intval($row['pid']) .
|
||
' AND ' . $sortField . $operator . intval($row[$sortField]) .
|
||
$sortCheck .
|
||
$copyAfterFieldsQuery .
|
||
$GLOBALS['TSFE']->sys_page->enableFields($table, '', $ignore),
|
||
'',
|
||
... | ... | |
'2'
|
||
);
|
||
if ($row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
|
||
if ($direction == 'down') {
|
||
if ($afterUID) {
|
||
$cmdData[$table][$uid]['move'] = -$afterUID;
|
||
}
|
||
elseif ($direction == 'down') {
|
||
$cmdData[$table][$uid]['move'] = -$row2['uid'];
|
||
} elseif ($row3 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // Must take the second record above...
|
||
}
|
||
elseif ($row3 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // Must take the second record above...
|
||
$cmdData[$table][$uid]['move'] = -$row3['uid'];
|
||
} else { // ... and if that does not exist, use pid
|
||
}
|
||
else { // ... and if that does not exist, use pid
|
||
$cmdData[$table][$uid]['move'] = $row['pid'];
|
||
}
|
||
} elseif ($direction == 'up') {
|
||
$cmdData[$table][$uid]['move'] = $row['pid'];
|
||
}
|
||
}
|
||
if (count($cmdData)) {
|
||
if (!empty($cmdData)) {
|
||
$this->tce->start(array(), $cmdData);
|
||
$this->tce->process_cmdmap();
|
||
}
|
||
... | ... | |
* @param integer The UID for the record to delete.
|
||
* @return void
|
||
*/
|
||
public function delete($table, $uid) {
|
||
public function doDelete($table, $uid) {
|
||
$cmdData[$table][$uid]['delete'] = 1;
|
||
if (count($cmdData)) {
|
||
$this->tce->start(array(), $cmdData);
|
||
... | ... | |
/**
|
||
* Saves a record based on its data array.
|
||
*
|
||
* @param array Array of record data to be saved.
|
||
* @param string The table name for the record to save.
|
||
* @param integer The UID for the record to save.
|
||
* @return void
|
||
*/
|
||
public function save(array $data) {
|
||
$this->tce->start($data, array());
|
||
$this->tce->process_uploads($_FILES);
|
||
$this->tce->process_datamap();
|
||
public function doSave($table, $uid) {
|
||
$data = $this->TSFE_EDIT['data'];
|
||
if (!empty($data)) {
|
||
$this->tce->start($data, array());
|
||
$this->tce->process_uploads($_FILES);
|
||
$this->tce->process_datamap();
|
||
// Save the new UID back into TSFE_EDIT
|
||
$newUID = $this->tce->substNEWwithIDs['NEW'];
|
||
if ($newUID) {
|
||
$GLOBALS['BE_USER']->frontendEdit->TSFE_EDIT['newUID'] = $newUID;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Stub for closing a record. No real functionality needed since content
|
||
* element rendering will take care of everything.
|
||
*
|
||
* @param string The table name for the record to close.
|
||
* @param integer The UID for the record to close.
|
||
* @return void
|
||
*/
|
||
public function doClose($table, $uid) {
|
||
// Do nothing.
|
||
}
|
||
/**
|
||
* Checks whether the user has access to edit the language for the
|