urlbase(), 'ajax/ajax.php?id={0}&source=documents__files&func=file&name=download'); JavaScript::instance()->file('lib/ricoTableColumnDB.js'); Actions::instance()->addLink(new Link(array('id' => 'btn_clear', 'icon' => Hallinta::instance()->urlbase().'images/icons/clean.png', 'title' => 'Clear selection', 'function' => 'clear_selection'))); Actions::instance()->addLink(new Link(array('id' => 'btn_archive', 'icon' => Hallinta::instance()->urlbase().'images/icons/download16.png', 'title' => 'Download as ZIP', 'function' => 'name_popup_open'))); $jscode = <<add($jscode); $sql_download = " CASE WHEN substring(lower(path),length(path)-3+1) = 'png' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'pdf' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'zip' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'csv' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'odt' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'doc' THEN '' WHEN substring(lower(path),length(path)-4+1) = 'docx' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'xls' THEN '' WHEN substring(lower(path),length(path)-4+1) = 'xlsx' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'ods' THEN '' WHEN substring(lower(path),length(path)-8+1) = 'gnumeric' THEN '' WHEN substring(lower(path),length(path)-6+1) = 'tar.gz' THEN '' WHEN substring(lower(path),length(path)-7+1) = 'tar.bz2' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'gif' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'tex' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'sql' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'txt' THEN '' WHEN substring(lower(path),length(path)-3+1) = 'jpg' THEN '' WHEN substring(lower(path),length(path)-4+1) = 'epub' THEN '' WHEN substring(lower(path),length(path)-4+1) = 'html' THEN '' ELSE '' END "; $sql_download = str_replace('IMGPATH', Hallinta::instance()->urlbase().'images/icons', $sql_download); $mask = array( 'table' => 'doc_files', 'title' => 'Dokumente', 'list' => array( 'id' => array( 'name' => 'ID', 'visible' => false, ), 'owner' => array( 'name' => 'Besitzer', 'sqltype' => 'int', 'width' => 90, 'filter' => 's', 'specs' => array('ClassName' => 'aligncenter'), 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('doc_owner','id','name').", 0, '')", 'distinct' => "SELECT DISTINCT owner,name FROM doc_files JOIN doc_owner ON owner = doc_owner.id ORDER BY name", ), 'type' => array( 'name' => 'Typ', 'sqltype' => 'int', 'width' => 90, 'filter' => 's', 'specs' => array('ClassName' => 'aligncenter'), 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('doc_types','id','name').", 0, '')", 'distinct' => "SELECT DISTINCT type,name FROM doc_files JOIN doc_types ON type = doc_types.id ORDER BY name", ), 'extract(year from date)' => array( 'name' => 'Jahr', 'sqltype' => 'int', 'specs' => array('ClassName' => 'aligncenter'), 'filter' => 's', 'width' => 50, 'distinct' => "SELECT DISTINCT extract(year from date) AS year FROM doc_files ORDER BY year DESC", ), 'date' => array( 'name' => 'Datum', 'sqltype' => 'date', 'filter' => 't^8', 'width' => 85, ), 'title' => array( 'name' => 'Titel', 'width' => 345, 'filter' => 't', ), 'path' => array( 'name' => 'Pfad', 'width' => 250, 'filter' => 't', 'visible' => false, ), 'download' => array( 'name' => 'DL', 'width' => 25, 'specs' => array('ClassName' => 'aligncenter', 'canSort' => false), 'control' => $href, 'sql' => $sql_download, ), 'selected' => array( 'name' => 'Sel', 'width' => 40, 'sql' => '(SELECT count(*) FROM doc_files_selection WHERE user_ = ' . intval($_SESSION['sys']['uid']) . ' AND file = doc_files.id)', 'control' => "new Rico.TableColumn.checkboxDB(0, 'ajax/ricoUpdateConnection.php')", 'filter' => 'c', 'specs' => array('ClassName' => 'aligncenter has-checkbox', 'canSort' => false), 'update' => array('table' => 'doc_files_selection', 'basecol' => 'user_', 'baseval' => $_SESSION['sys']['uid'], 'refcol' => 'file', 'reftable' => 'doc_files', 'refid' => 'doc_files.id', ), ), ), 'files' => array( 'download' => process_download, 'archive' => process_archive, ), 'callbacks' => array( 'clear' => cb_clear, 'archive' => cb_archive, ), ); function mk_tempdir() { $tmpdir = sprintf("%sarchive/%s/%s", $_SESSION['sys']['basedir'], MODULE, md5(date('c'))); mkdir($tmpdir,0777); return $tmpdir; } function rm_tempdir($dir) { system(sprintf("rm -rf %s", $dir)); } function process_download() { global $mask; download_file($mask['table'],'path',MODULE,$_GET['id']); } function process_archive() { $fname = $_SESSION['files_zipfile']; if (!file_exists($fname) || !is_file($fname)) return 'File not found'; send_file($fname); rm_tempdir($_SESSION['files_tmpdir']); unset($_SESSION['files_tmpdir']); unset($_SESSION['files_zipfile']); } function cb_clear() { global $db; return $db->execute(sprintf("DELETE FROM doc_files_selection WHERE user_ = %d", $_SESSION['sys']['uid'])); } function cb_archive() { global $db; $sql = sprintf("SELECT date,title,path FROM doc_files JOIN doc_files_selection ON file = doc_files.id WHERE user_ = %d ORDER BY date, doc_files.id", $_SESSION['sys']['uid']); $tmpdir = mk_tempdir(); chdir($tmpdir.'/..'); $zipfile = $tmpdir.'/'.$_POST['name'].'.zip'; $cmd = sprintf("zip -q -u --names-stdin %s", escapeshellarg($zipfile)); error_log($cmd); $p = popen($cmd, 'w'); if (!$p) return array('error' => 'Kann ZIP nicht aufrufen'); $text = ''; foreach ($db->fetchObjectList($sql) as $row) { fwrite($p, $row->path . "\n"); $text .= sprintf("%s %-60s %s\n", $row->date, $row->title, $row->path); } if (strlen($text)) $text = sprintf("%s %-60s %s\n", 'Date', 'Description', 'Path') . $text; $f = fopen('content.txt', 'w'); if ($f !== false) { fwrite($f, $text); fclose($f); fwrite($p, "content.txt\n"); } pclose($p); if (file_exists('content.txt')) unlink('content.txt'); $_SESSION['files_tmpdir'] = $tmpdir; $_SESSION['files_zipfile'] = $zipfile; return true; }