array ( 'dataContainer' => 'Table', 'ptable' => 'tl_member', 'closed' => true, 'ondelete_callback' => array ( array('tl_member_secureDownloads','deleteFileCallback') ), 'sql' => array ( 'keys' => array ( 'id' => 'primary', 'pid' => 'index' ) ) ), // List 'list' => array ( 'sorting' => array ( 'mode' => 4, 'fields' => array('ctime'), 'headerFields' => array('firstname','lastname', 'username','memberno'), 'disableGrouping' => false, 'flag' => 6, 'panelLayout' => 'filter;sort,search,limit', 'child_record_callback' => array('tl_member_secureDownloads','listDownloads') ), 'global_operations' => array ( ), 'operations' => array ( 'edit' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_member_secureDownloads']['edit'], 'href' => 'act=edit', 'icon' => 'edit.gif', 'button_callback' => array('tl_member_secureDownloads', 'editFile') ), 'delete' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_member_secureDownloads']['delete'], 'href' => 'act=delete', 'icon' => 'delete.gif', 'button_callback' => array('tl_member_secureDownloads', 'deleteFile') ), 'show' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_member_secureDownloads']['show'], 'icon' => 'show.gif', 'button_callback' => array('tl_member_secureDownloads', 'showFile') ), ) ), // Palettes 'palettes' => array ( 'default' => '{sec_dl_legend},name' ), // Subpalettes 'subpalettes' => array ( ), // Fields 'fields' => array ( 'id' => array ( 'sql' => "int(10) unsigned NOT NULL auto_increment" ), 'pid' => array ( 'foreignKey' => 'tl_member.name', 'sql' => "int(10) unsigned NOT NULL default '0'", 'relation' => array('type'=>'belongsTo', 'load'=>'lazy') ), 'uuid' => array ( 'foreignKey' => 'tl_files.name', 'sql' => "binary(16) NULL", 'relation' => array('type'=>'belongsTo', 'load'=>'eager', 'field'=>'uuid') ), 'tstamp' => array ( 'sql' => "int(10) unsigned NOT NULL default '0'" ), 'ctime' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_member_secureDownloads']['ctime'], 'sorting' => true, 'flag' => 6, 'sql' => "int(10) unsigned NOT NULL default '0'" ), 'name' => array ( 'exclude' => true, 'label' => &$GLOBALS['TL_LANG']['tl_member_secureDownloads']['name'], 'sorting' => true, 'flag' => 1, 'inputType' => 'text', 'eval' => array('mandatory'=>true, 'maxlength'=>255, 'decodeEntities'=>true, 'doNotSaveEmpty'=>true), 'load_callback' => array ( array('tl_member_secureDownloads', 'getFilename') ), 'save_callback' => array ( array('tl_member_secureDownloads', 'checkFilename') ), // 'sql' => "varchar(255) NOT NULL default ''" ), /*'path' => array ( 'sql' => "varchar(1022) NOT NULL default ''", ),*/ 'nc_sent' => array ( 'sql' => "char(1) NOT NULL default ''" ), ) ); class tl_member_secureDownloads extends \Backend { /** * Import the back end user object */ public function __construct() { parent::__construct(); $this->import('BackendUser', 'User'); } public function listDownloads($arrRow) { $objSecFile = \SecureDownloadsModel::findByPk($arrRow['id']); $objFile = $objSecFile->getRelated('uuid'); return '
' . ($objFile !== null ? $objFile->name : '') . ' [' . Date::parse(Config::get('datimFormat'), $arrRow['ctime']) . ']
'; } public function editFile($row, $href, $label, $title, $icon, $attributes) { if (!$this->User->isAdmin && !$this->User->hasAccess(1,'sec_dl_access')) { return ''; } $objSecFile = \SecureDownloadsModel::findByPk($row['id']); $objFile = $objSecFile->getRelated('uuid'); $title = sprintf($GLOBALS['TL_LANG']['tl_member_secureDownloads']['edit'][1],$objFile->name); $href .= '&id='.$row['id']; return ''.Image::getHtml($icon, $label).' '; } public function deleteFile($row, $href, $label, $title, $icon, $attributes) { if (!$this->User->isAdmin && !$this->User->hasAccess(1,'sec_dl_access')) { return ''; } $objSecFile = \SecureDownloadsModel::findByPk($row['id']); $objFile = $objSecFile->getRelated('uuid'); $attributes = ' onclick="if(!confirm(\'' . sprintf($GLOBALS['TL_LANG']['MSC']['deleteConfirmFile'],$objFile->name) . '\'))return false;Backend.getScrollOffset()"'; $title = sprintf($GLOBALS['TL_LANG']['tl_member_secureDownloads']['delete'][1],$objFile->name); $href .= '&id='.$row['id']; return ''.Image::getHtml($icon, $label).' '; } public function showFile($row, $href, $label, $title, $icon, $attributes) { if (Input::get('popup')) { return ''; } else { $objSecFile = \SecureDownloadsModel::findByPk($row['id']); $objFile = $objSecFile->getRelated('uuid'); $title = sprintf($GLOBALS['TL_LANG']['tl_member_secureDownloads']['show'][1],$objFile->name); if ($objFile !== null) { return 'name, false, true)).'\',\'url\':this.href,\'height\':300});return false">'.Image::getHtml($icon, $label).' '; } else { return ''; } } } public function deleteFileCallback(DataContainer $dc) { $objSecFile = \SecureDownloadsModel::findByPk($dc->id); $objFile = $objSecFile->getRelated('uuid'); if ($objFile !== null) { $File = new \File($objFile->path,true); $File->delete(); } } public function getFilename($varValue, DataContainer $dc) { $objSecFile = \SecureDownloadsModel::findByPk($dc->id); $objFile = $objSecFile->getRelated('uuid'); if ($objFile !== null) { return $objFile->name; } return null; } /** * Check a file name and romanize it * * @param string $varValue * @param DataContainer|DC_Folder $dc * * @return mixed * * @throws Exception */ public function checkFilename($varValue, DataContainer $dc) { $varValue = utf8_romanize($varValue); $varValue = str_replace('"', '', $varValue); if (strpos($varValue, '/') !== false || preg_match('/\.$/', $varValue)) { throw new Exception($GLOBALS['TL_LANG']['ERR']['invalidName']); } // Check the length without the file extension if ($dc->activeRecord && $varValue != '') { $intMaxlength = $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['maxlength']; if ($dc->activeRecord->type == 'file') { $intMaxlength -= (strlen($dc->activeRecord->extension) + 1); } if ($intMaxlength && utf8_strlen($varValue) > $intMaxlength) { throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['maxlength'], $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['label'][0], $intMaxlength)); } } $objSecFile = \SecureDownloadsModel::findByPk($dc->id); $objFile = $objSecFile->getRelated('uuid'); $File = new \File($objFile->path,true); if (!$File->exists()) { throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['invalidFile'],'1'.$varValue)); } $strDirectory = dirname($objFile->path); if (!$File->renameTo($strDirectory.'/'.$varValue)) { throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['invalidFile'],'2'.$varValue)); } if (($objFile = $File->getModel()) !== null) { $objSecFile = \SecureDownloadsModel::findByPk($dc->id); if ($objSecFile !== null){ $objSecFile->uuid = $objFile->uuid; $objSecFile->save(); } } return null; } }