function com_install($mypath = '') { error_reporting(E_ALL ^ E_NOTICE); global $database; if (is_callable(array('JFactory', 'getDBO'))) { $database = JFactory::getDBO(); } if ($mypath == '') { $mypath = dirname(__FILE__); } require_once $mypath . "/include/functions.php"; require_once $mypath . "/libraries/Archive/archive.php"; ext_RaiseMemoryLimit('50M'); $archive_name = $mypath . '/scripts.tar.gz'; $extract_dir = $mypath . '/'; $result = extArchive::extract($archive_name, $extract_dir); if (!@PEAR::isError($result)) { unlink($archive_name); } else { echo '<pre style="color:white; font-weight:bold; background-color:red;">Error! ' . $result->getMessage() . ' </pre>'; } if (!is_callable(array($database, 'loadNextRow'))) { $database->setQuery("SELECT id FROM #__components WHERE admin_menu_link = 'option=com_extplorer'"); $id = $database->loadResult(); //add new admin menu images $database->setQuery("UPDATE #__components SET admin_menu_img = '../administrator/components/com_extplorer/images/x_icon.png', admin_menu_link = 'option=com_extplorer' WHERE id={$id}"); $database->query(); } }
function execAction($dir, $item) { if (!ext_isArchive($item)) { ext_Result::sendResult('archive', false, $item . ': ' . ext_Lang::err('extract_noarchive')); } else { // CSRF Security Check if (!ext_checkToken($GLOBALS['__POST']["token"])) { ext_Result::sendResult('tokencheck', false, 'Request failed: Security Token not valid.'); } $archive_name = realpath(get_abs_item($dir, $item)); if (empty($dir)) { $extract_dir = realpath($GLOBALS['home_dir']); } else { $extract_dir = realpath($GLOBALS['home_dir'] . "/" . $dir); } require_once _EXT_PATH . '/libraries/Archive/archive.php'; $res = extArchive::extract($archive_name, $extract_dir); if (PEAR::isError($res)) { ext_Result::sendResult('extract', false, ext_Lang::err('extract_failure') . ' - ' . $res->getMessage()); } if ($res === false) { ext_Result::sendResult('extract', false, ext_Lang::err('extract_failure')); } else { ext_Result::sendResult('extract', true, ext_Lang::msg('extract_success')); } ext_Result::sendResult('extract', true, ext_Lang::msg('extract_success')); } }
function execAction($dir, $item) { if (!ext_isArchive($item)) { ext_Result::sendResult('archive', false, $item . ': ' . ext_Lang::err('extract_noarchive')); } else { $archive_name = realpath(get_abs_item($dir, $item)); if (empty($dir)) { $extract_dir = realpath($GLOBALS['home_dir']); } else { $extract_dir = realpath($GLOBALS['home_dir'] . "/" . $dir); } require_once _EXT_PATH . '/libraries/Archive/archive.php'; $res = extArchive::extract($archive_name, $extract_dir); if (PEAR::isError($res)) { ext_Result::sendResult('extract', false, ext_Lang::err('extract_failure') . ' - ' . $res->getMessage()); } if ($res === false) { ext_Result::sendResult('extract', false, ext_Lang::err('extract_failure')); } else { ext_Result::sendResult('extract', true, ext_Lang::msg('extract_success')); } ext_Result::sendResult('extract', true, ext_Lang::msg('extract_success')); } }
$text = str_replace('&&', '*--*', $text); $text = str_replace('&#', '*-*', $text); $text = str_replace('&', '&', $text); $text = preg_replace('|&(?![\\w]+;)|', '&', $text); $text = str_replace('*-*', '&#', $text); $text = str_replace('*--*', '&&', $text); return $text; } $mainframe = new extMainFrame(); $mypath = realpath(dirname(__FILE__) . '/..'); $archive_name = $mypath . '/scripts.tar.gz'; if (file_exists($archive_name) && !file_exists($mypath . '/scripts/functions.js.php')) { require_once $mypath . "/include/functions.php"; require_once $mypath . "/libraries/Archive/archive.php"; ext_RaiseMemoryLimit('16M'); error_reporting(E_ALL ^ E_NOTICE); $extract_dir = $mypath . '/'; $result = extArchive::extract($archive_name, $extract_dir); if (!PEAR::isError($result)) { unlink($archive_name); } else { die('<html><head><title>eXtplorer - Error!</title></head> <body><h2>Installation needs to be completed!</h2> <p>To complete the eXtplorer Installation you need to extract the contents of the file <strong>scripts.zip</strong> (you can find this file in the extplorer package) and upload it to the subdirectory <strong>/scripts</strong> of your eXtplorer installation. <br/> Please just upload the contents of the extracted folder "/scripts" into the subdirectory <strong>/scripts</strong> and do not create a subdirectory like "/scripts/scripts/". </p> </body></html>'); } }
function execAction($dir) { if (($GLOBALS["permissions"] & 01) != 01) { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["accessfunc"]); } if (!$GLOBALS["zip"] && !$GLOBALS["tgz"]) { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["miscnofunc"]); } $allowed_types = array('zip', 'tgz', 'tbz', 'tar'); // If we have something to archive, let's do it now if (extGetParam($_POST, 'confirm') == 'true') { $saveToDir = utf8_decode($GLOBALS['__POST']['saveToDir']); if (!file_exists(get_abs_dir($saveToDir))) { ext_Result::sendResult('archive', false, ext_Lang::err('archive_dir_notexists')); } if (!is_writable(get_abs_dir($saveToDir))) { ext_Result::sendResult('archive', false, ext_Lang::err('archive_dir_unwritable')); } require_once _EXT_PATH . '/libraries/Archive/archive.php'; if (!in_array(strtolower($GLOBALS['__POST']["type"]), $allowed_types)) { ext_Result::sendResult('archive', false, ext_Lang::err('extract_unknowntype') . ': ' . htmlspecialchars($GLOBALS['__POST']["type"])); } // This controls how many files are processed per Step (it's split up into steps to prevent time-outs) $files_per_step = 2000; $cnt = count($GLOBALS['__POST']["selitems"]); $abs_dir = get_abs_dir($dir); $name = basename(stripslashes($GLOBALS['__POST']["name"])); if ($name == "") { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["miscnoname"]); } $startfrom = extGetParam($_REQUEST, 'startfrom', 0); $dir_contents_cache_name = 'ext_' . md5(implode(null, $GLOBALS['__POST']["selitems"])); $dir_contents_cache_file = _EXT_FTPTMP_PATH . '/' . $dir_contents_cache_name . '.txt'; $archive_name = get_abs_item($saveToDir, $name); $fileinfo = pathinfo($archive_name); if (empty($fileinfo['extension'])) { $archive_name .= "." . $GLOBALS['__POST']["type"]; $fileinfo['extension'] = $GLOBALS['__POST']["type"]; foreach ($allowed_types as $ext) { if ($GLOBALS['__POST']["type"] == $ext && @$fileinfo['extension'] != $ext) { $archive_name .= "." . $ext; } } } if ($startfrom == 0) { for ($i = 0; $i < $cnt; $i++) { $selitem = stripslashes($GLOBALS['__POST']["selitems"][$i]); if ($selitem == 'ext_root') { $selitem = ''; } if (is_dir(utf8_decode($abs_dir . "/" . $selitem))) { $items = extReadDirectory(utf8_decode($abs_dir . "/" . $selitem), '.', true, true); foreach ($items as $item) { if (is_dir($item) || !is_readable($item) || $item == $archive_name) { continue; } $v_list[] = str_replace('\\', '/', $item); } } else { $v_list[] = utf8_decode(str_replace('\\', '/', $abs_dir . "/" . $selitem)); } } if (count($v_list) > $files_per_step) { if (file_put_contents($dir_contents_cache_file, implode("\n", $v_list)) == false) { ext_Result::sendResult('archive', false, 'Failed to create a temporary list of the directory contents'); } } } else { $file_list_string = file_get_contents($dir_contents_cache_file); if (empty($file_list_string)) { ext_Result::sendResult('archive', false, 'Failed to retrieve the temporary list of the directory contents'); } $v_list = explode("\n", $file_list_string); } $cnt_filelist = count($v_list); // Now we go to the right range of files and "slice" the array $v_list = array_slice($v_list, $startfrom, $files_per_step - 1); $remove_path = $GLOBALS["home_dir"]; if ($dir) { $remove_path .= $dir; } $remove_path = str_replace('\\', '/', realpath($remove_path)) . '/'; $debug = 'Starting from: ' . $startfrom . "\n"; $debug .= 'Files to process: ' . $cnt_filelist . "\n"; $debug .= implode("\n", $v_list); //file_put_contents( 'log.txt', $debug, FILE_APPEND ); // Do some setup stuff ini_set('memory_limit', '128M'); @set_time_limit(0); //error_reporting( E_ERROR | E_PARSE ); $result = extArchive::create($archive_name, $v_list, $GLOBALS['__POST']["type"], '', $remove_path); if (PEAR::isError($result)) { ext_Result::sendResult('archive', false, $name . ': ' . ext_Lang::err('archive_creation_failed') . ' (' . $result->getMessage() . $archive_name . ')'); } $classname = class_exists('ext_Json') ? 'ext_Json' : 'Services_JSON'; $json = new $classname(); if ($cnt_filelist > $startfrom + $files_per_step) { $response = array('startfrom' => $startfrom + $files_per_step, 'totalitems' => $cnt_filelist, 'success' => true, 'action' => 'archive', 'message' => sprintf(ext_Lang::msg('processed_x_files'), $startfrom + $files_per_step, $cnt_filelist)); } else { @unlink($dir_contents_cache_file); if ($GLOBALS['__POST']["type"] == 'tgz' || $GLOBALS['__POST']["type"] == 'tbz') { chmod($archive_name, 0644); } $response = array('action' => 'archive', 'success' => true, 'message' => ext_Lang::msg('archive_created'), 'newlocation' => ext_make_link('download', $dir, basename($archive_name))); } echo $json->encode($response); ext_exit(); } $default_archive_type = 'zip'; ?> { "xtype": "form", "id": "simpleform", "height": "200", "width": "350", "labelWidth": 125, "url":"<?php echo basename($GLOBALS['script_name']); ?> ", "dialogtitle": "<?php echo $GLOBALS["messages"]["actarchive"]; ?> ", "frame": true, "items": [{ "xtype": "textfield", "fieldLabel": "<?php echo ext_Lang::msg('archive_name', true); ?> ", "name": "name", "value": "<?php echo $GLOBALS['item'] . '.' . $default_archive_type; ?> ", "width": "200" }, { "xtype": "combo", "fieldLabel": "<?php echo ext_Lang::msg('typeheader', true); ?> ", "store": [ ['zip', 'Zip (<?php echo ext_Lang::msg('normal_compression', true); ?> )'], ['tgz', 'Tar/Gz (<?php echo ext_Lang::msg('good_compression', true); ?> )'], <?php if (extension_loaded("bz2")) { echo "['tbz', 'Tar/Bzip2 (" . ext_Lang::msg('best_compression', true) . ")'],"; } ?> ['tar', 'Tar (<?php echo ext_Lang::msg('no_compression', true); ?> )'] ], "displayField":"typename", "valueField": "type", "name": "type", "value": "<?php echo $default_archive_type; ?> ", "triggerAction": "all", "hiddenName": "type", "disableKeyFilter": "true", "editable": "false", "mode": "local", "allowBlank": "false", "selectOnFocus":"true", "width": "200", "listeners": { "select": { fn: function(o, record ) { form = Ext.getCmp("simpleform").getForm(); var nameField = form.findField("name").getValue(); if( nameField.indexOf( '.' ) > 0 ) { form.findField('name').setValue( nameField.substring( 0, nameField.indexOf('.')+1 ) + o.getValue() ); } else { form.findField('name').setValue( nameField + '.'+ o.getValue()); } } } } }, { "xtype": "textfield", "fieldLabel": "<?php echo ext_Lang::msg('archive_saveToDir', true); ?> ", "name": "saveToDir", "value": "<?php echo str_replace("'", "\\'", $dir); ?> ", "width": "200" },{ "xtype": "checkbox", "fieldLabel": "<?php echo ext_Lang::msg('downlink', true); ?> ?", "name": "download", "checked": "true" } ], "buttons": [{ "text": "<?php echo ext_Lang::msg('btncreate', true); ?> ", "type": "submit", "handler": function() { Ext.ux.OnDemandLoad.load( "<?php echo $GLOBALS['script_name']; ?> ?option=com_extplorer&action=include_javascript&file=archive.js", function(options) { submitArchiveForm(0) } ); } },{ "text": "<?php echo ext_Lang::msg('btncancel', true); ?> ", "handler": function() { Ext.getCmp("dialog").destroy() } }] } <?php }
function unzip_item($dir) { _debug("unzip_item({$dir})"); global $home_dir; // copy and move are only allowed if the user may read and change files if (!permissions_grant_all($dir, NULL, array("read", "create"))) { show_error($GLOBALS["error_msg"]["accessfunc"]); } // Vars $new_dir = isset($GLOBALS['__POST']["new_dir"]) ? stripslashes($GLOBALS['__POST']["new_dir"]) : $dir; $_img = $GLOBALS["baricons"]["unzip"]; // Get Selected Item if (!isset($GLOBALS['__POST']["item"]) && isset($GLOBALS['__GET']["item"])) { $s_item = $GLOBALS['__GET']["item"]; } elseif (isset($GLOBALS['__POST']["item"])) { $s_item = $GLOBALS['__POST']["item"]; } $dir_extract = "{$home_dir}/{$new_dir}"; if ($new_dir != "") { $dir_extract .= "/"; } $zip_name = "{$home_dir}/{$dir}/{$s_item}"; // Get New Location & Names if (!isset($GLOBALS['__POST']["confirm"]) || $GLOBALS['__POST']["confirm"] != "true") { show_header($GLOBALS["messages"]["actunzipitem"]); // JavaScript for Form: // Select new target directory / execute action ?> <script language="JavaScript1.2" type="text/javascript"> <!-- function NewDir(newdir) { document.selform.new_dir.value = newdir; document.selform.submit(); } function Execute() { document.selform.confirm.value = "true"; } //--> </script><?php // "Copy / Move from .. to .." $s_dir = $dir; if (strlen($s_dir) > 40) { $s_dir = "..." . substr($s_dir, -37); } $s_ndir = $new_dir; if (strlen($s_ndir) > 40) { $s_ndir = "..." . substr($s_ndir, -37); } echo "<!-- dirextr = " . $dir_extract . " -->\n"; echo "<!-- zipname = " . $zip_name . " -->\n"; echo "<CENTER><BR><BR><IMG SRC=\"" . $_img . "\" align=\"ABSMIDDLE\" ALT=\"\"> "; echo "<IMG SRC=\"" . $GLOBALS["baricons"]["unzipto"] . "\" align=\"ABSMIDDLE\" ALT=\"\">\n"; // Form for Target Directory & New Names echo "<BR><BR><FORM name=\"selform\" method=\"post\" action=\""; echo make_link("post", $dir, NULL) . "\"><TABLE>\n"; echo "<INPUT type=\"hidden\" name=\"do_action\" value=\"" . $GLOBALS["action"] . "\">\n"; echo "<INPUT type=\"hidden\" name=\"confirm\" value=\"false\">\n"; //echo "<INPUT type=\"hidden\" name=\"dir\" value=\"n\">\n"; echo "<INPUT type=\"hidden\" name=\"new_dir\" value=\"" . $new_dir . "\">\n"; // List Directories to select Target dir_print(dir_list($new_dir), $new_dir); echo "</TABLE><BR><TABLE>\n"; // Print Text Inputs to change Names echo "<TR><TD><IMG SRC=\"" . $GLOBALS["baricons"]["zip"] . "\" align=\"ABSMIDDLE\" ALT=\"\">"; echo "<INPUT type=\"hidden\" name=\"item\" value=\"" . $s_item . "\"> " . $s_item . " "; // Submit & Cancel echo "</TABLE><BR><TABLE><TR>\n<TD>"; echo "<INPUT type=\"submit\" value=\""; echo $GLOBALS["messages"]["btnunzip"]; echo "\" onclick=\"javascript:Execute();\"></TD>\n<TD>"; echo "<input type=\"button\" value=\"" . $GLOBALS["messages"]["btncancel"]; echo "\" onClick=\"javascript:location='" . make_link("list", $dir, NULL); echo "';\"></TD>\n</TR></FORM></TABLE><BR><BR><BR>\n"; return; } // DO COPY/MOVE // ALL OK? if (!@file_exists(get_abs_dir($new_dir))) { show_error($new_dir . ": " . $GLOBALS["error_msg"]["targetexist"]); } if (!get_show_item($new_dir, "")) { show_error($new_dir . ": " . $GLOBALS["error_msg"]["accesstarget"]); } if (!down_home(get_abs_dir($new_dir))) { show_error($new_dir . ": " . $GLOBALS["error_msg"]["targetabovehome"]); } // copy / move files $err = false; /*for($i=0;$i<$cnt;++$i) { $tmp = stripslashes($GLOBALS['__POST']["selitems"][$i]); $new = basename(stripslashes($GLOBALS['__POST']["newitems"][$i])); $abs_item = get_abs_item($dir,$tmp); $abs_new_item = get_abs_item($new_dir,$new); $items[$i] = $tmp; // Check if($new=="") { $error[$i]= $GLOBALS["error_msg"]["miscnoname"]; $err=true; continue; } if(!@file_exists($abs_item)) { $error[$i]= $GLOBALS["error_msg"]["itemexist"]; $err=true; continue; } if(!get_show_item($dir, $tmp)) { $error[$i]= $GLOBALS["error_msg"]["accessitem"]; $err=true; continue; } if(@file_exists($abs_new_item)) { $error[$i]= $GLOBALS["error_msg"]["targetdoesexist"]; $err=true; continue; } */ // Copy / Move //if($GLOBALS["action"]=="copy") { //if($GLOBALS["action"]=="unzip") { /* if(@is_link($abs_item) || @is_file($abs_item)) { // check file-exists to avoid error with 0-size files (PHP 4.3.0) $ok=@copy($abs_item,$abs_new_item); //||@file_exists($abs_new_item); } elseif(@is_dir($abs_item)) { $ok=copy_dir($abs_item,$abs_new_item); } */ //---------------------------------- print_r($GLOBALS); _debug("unzip_item(): Extracting {$zip_name} to {$dir_extract}"); //$dir_extract[0]='/'; //$dir_extract = '.'. $dir_extract; //------------------------------------------------------echo $zip_name.' aa'.$dir_extract.'aa'; $exx = pathinfo($zip_name, PATHINFO_EXTENSION); if ($exx == 'zip') { $zip = new ZipArchive(); $res = $zip->open($zip_name); if ($res === TRUE) { $zip->extractTo($dir_extract); $zip->close(); } else { } } else { // gz, tar, bz2, .... include_once './_lib/archive.php'; extArchive::extract($zip_name, $dir_extract); } // FIXME $i is not set anymore.. remove code? if (!isset($i)) { $i = 0; } if ($res == false) { $error[$i] = $GLOBALS["error_msg"]["unzip"]; $err = true; continue; } $error[$i] = NULL; if ($err) { // there were errors $err_msg = ""; for ($i = 0; $i < $cnt; ++$i) { if ($error[$i] == NULL) { continue; } $err_msg .= $items[$i] . " : " . $error[$i] . "<BR>\n"; } show_error($err_msg); } header("Location: " . make_link("list", $dir, NULL)); }
function execAction($dir) { if (($GLOBALS["permissions"] & 01) != 01) { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["accessfunc"]); } if (!$GLOBALS["zip"] && !$GLOBALS["tgz"]) { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["miscnofunc"]); } $allowed_types = array('zip', 'tgz', 'tbz', 'tar'); // If we have something to archive, let's do it now if (extGetParam($_POST, 'confirm') == 'true') { $saveToDir = utf8_decode($GLOBALS['__POST']['saveToDir']); if (!file_exists(get_abs_dir($saveToDir))) { ext_Result::sendResult('archive', false, ext_Lang::err('archive_dir_notexists')); } if (!is_writable(get_abs_dir($saveToDir))) { ext_Result::sendResult('archive', false, ext_Lang::err('archive_dir_unwritable')); } require_once _EXT_PATH . '/libraries/Archive/archive.php'; if (!in_array(strtolower($GLOBALS['__POST']["type"]), $allowed_types)) { ext_Result::sendResult('archive', false, ext_Lang::err('extract_unknowntype') . ': ' . htmlspecialchars($GLOBALS['__POST']["type"])); } // This controls how many files are processed per Step (it's split up into steps to prevent time-outs) $files_per_step = 2000; $cnt = count($GLOBALS['__POST']["selitems"]); $abs_dir = get_abs_dir($dir); $name = basename(stripslashes($GLOBALS['__POST']["name"])); if ($name == "") { ext_Result::sendResult('archive', false, $GLOBALS["error_msg"]["miscnoname"]); } $startfrom = extGetParam($_REQUEST, 'startfrom', 0); $dir_contents_cache_name = 'ext_' . md5(implode(null, $GLOBALS['__POST']["selitems"])); $dir_contents_cache_file = _EXT_FTPTMP_PATH . '/' . $dir_contents_cache_name . '.txt'; $archive_name = get_abs_item($saveToDir, $name); $fileinfo = pathinfo($archive_name); if (empty($fileinfo['extension'])) { $archive_name .= "." . $GLOBALS['__POST']["type"]; $fileinfo['extension'] = $GLOBALS['__POST']["type"]; foreach ($allowed_types as $ext) { if ($GLOBALS['__POST']["type"] == $ext && @$fileinfo['extension'] != $ext) { $archive_name .= "." . $ext; } } } if ($startfrom == 0) { for ($i = 0; $i < $cnt; $i++) { $selitem = stripslashes($GLOBALS['__POST']["selitems"][$i]); if ($selitem == 'ext_root') { $selitem = ''; } if (is_dir(utf8_decode($abs_dir . "/" . $selitem))) { $items = extReadDirectory(utf8_decode($abs_dir . "/" . $selitem), '.', true, true); foreach ($items as $item) { if (is_dir($item) || !is_readable($item) || $item == $archive_name) { continue; } $v_list[] = str_replace('\\', '/', $item); } } else { $v_list[] = utf8_decode(str_replace('\\', '/', $abs_dir . "/" . $selitem)); } } if (count($v_list) > $files_per_step) { if (file_put_contents($dir_contents_cache_file, implode("\n", $v_list)) == false) { ext_Result::sendResult('archive', false, 'Failed to create a temporary list of the directory contents'); } } } else { $file_list_string = file_get_contents($dir_contents_cache_file); if (empty($file_list_string)) { ext_Result::sendResult('archive', false, 'Failed to retrieve the temporary list of the directory contents'); } $v_list = explode("\n", $file_list_string); } $cnt_filelist = count($v_list); // Now we go to the right range of files and "slice" the array $v_list = array_slice($v_list, $startfrom, $files_per_step - 1); $remove_path = $GLOBALS["home_dir"]; if ($dir) { $remove_path .= $dir; } $debug = 'Starting from: ' . $startfrom . "\n"; $debug .= 'Files to process: ' . $cnt_filelist . "\n"; $debug .= implode("\n", $v_list); //file_put_contents( 'log.txt', $debug, FILE_APPEND ); // Do some setup stuff ini_set('memory_limit', '128M'); @set_time_limit(0); error_reporting(E_ERROR | E_PARSE); $result = extArchive::create($archive_name, $v_list, $GLOBALS['__POST']["type"], '', $remove_path); if (PEAR::isError($result)) { ext_Result::sendResult('archive', false, $name . ': ' . ext_Lang::err('archive_creation_failed') . ' (' . $result->getMessage() . $archive_name . ')'); } $json = new ext_Json(); if ($cnt_filelist > $startfrom + $files_per_step) { $response = array('startfrom' => $startfrom + $files_per_step, 'totalitems' => $cnt_filelist, 'success' => true, 'action' => 'archive', 'message' => sprintf(ext_Lang::msg('processed_x_files'), $startfrom + $files_per_step, $cnt_filelist)); } else { @unlink($dir_contents_cache_file); if ($GLOBALS['__POST']["type"] == 'tgz' || $GLOBALS['__POST']["type"] == 'tbz') { chmod($archive_name, 0644); } $response = array('action' => 'archive', 'success' => true, 'message' => ext_Lang::msg('archive_created'), 'newlocation' => make_link('download', $dir, basename($archive_name))); } echo $json->encode($response); ext_exit(); } ?> <div style="width:auto;"> <div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div> <div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"> <h3 style="margin-bottom:5px;"><?php echo $GLOBALS["messages"]["actarchive"]; ?> </h3> <div id="adminForm"></div> </div></div></div> <div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div> </div> <script type="text/javascript"> var comprTypes = new Ext.data.SimpleStore({ fields: ['type', 'typename'], data : [ ['zip', 'Zip (<?php echo ext_Lang::msg('normal_compression', true); ?> )'], ['tgz', 'Tar/Gz (<?php echo ext_Lang::msg('good_compression', true); ?> )'], <?php if (extension_loaded("bz2")) { echo "['tbz', 'Tar/Bzip2 (" . ext_Lang::msg('best_compression', true) . ")'],"; } ?> ['tar', 'Tar (<?php echo ext_Lang::msg('no_compression', true); ?> )'] ] }); var form = new Ext.form.Form({ labelWidth: 125, // label settings here cascade unless overridden url:'<?php echo basename($GLOBALS['script_name']); ?> ' }); var combo = new Ext.form.ComboBox({ fieldLabel: '<?php echo ext_Lang::msg('typeheader', true); ?> ', store: comprTypes, displayField:'typename', valueField: 'type', name: 'type', value: 'zip', triggerAction: 'all', hiddenName: 'type', disableKeyFilter: true, editable: false, mode: 'local', allowBlank: false, selectOnFocus:true, width: 200 }); form.add( new Ext.form.TextField({ fieldLabel: '<?php echo ext_Lang::msg('archive_name', true); ?> ', name: 'name', width: 200 }), combo, new Ext.form.TextField({ fieldLabel: '<?php echo ext_Lang::msg('archive_saveToDir', true); ?> ', name: 'saveToDir', value: '<?php echo str_replace("'", "\\'", $dir); ?> ', width: 200 }), new Ext.form.Checkbox({ fieldLabel: '<?php echo ext_Lang::msg('downlink', true); ?> ?', name: 'download', checked: true }) ); combo.on('select', function(o, record ) { var nameField = form.findField('name').getValue(); if( nameField.indexOf( '.' ) > 0 ) { form.findField('name').setValue( nameField.substring( 0, nameField.indexOf('.')+1 ) + record.get('type') ); } else { form.findField('name').setValue( nameField + '.'+ record.get('type')); } }); form.addButton({text: '<?php echo ext_Lang::msg('btncreate', true); ?> ', type: 'submit' }, function() { formSubmit(0) }); form.addButton('<?php echo ext_Lang::msg('btncancel', true); ?> ', function() { dialog.hide();dialog.destroy(); } ); form.render('adminForm'); function formSubmit( startfrom, msg ) { if( startfrom == 0 ) { Ext.MessageBox.show({ title: 'Please wait', msg: msg ? msg : '<?php echo ext_Lang::msg('creating_archive', true); ?> ', progressText: 'Initializing...', width:300, progress:true, closable:false, }); } form.submit({ reset: false, success: function(form, action) { if( !action.result ) return; if( action.result.startfrom > 0 ) { formSubmit( action.result.startfrom, action.result.message ); i = action.result.startfrom/action.result.totalitems; Ext.MessageBox.updateProgress(i, action.result.startfrom + " of "+action.result.totalitems + " (" + Math.round(100*i)+'% completed)'); return } else { if( form.findField('download').getValue() ) { datastore.reload(); location.href = action.result.newlocation; dialog.hide(); dialog.destroy(); } else { Ext.MessageBox.alert('<?php echo ext_Lang::msg('success', true); ?> !', action.result.message); datastore.reload(); dialog.hide(); dialog.destroy(); } return; } }, failure: function(form, action) { if( action.result ) { Ext.MessageBox.alert('<?php echo ext_Lang::err('error', true); ?> ', action.result.error); } }, scope: form, // add some vars to the request, similar to hidden fields params: {option: 'com_extplorer', action: 'archive', dir: '<?php echo stripslashes($GLOBALS['__POST']["dir"]); ?> ', 'selitems[]': [ '<?php echo implode("','", $GLOBALS['__POST']["selitems"]); ?> ' ], startfrom: startfrom, confirm: 'true'} }); } </script> <?php }
/** * @param string The name of the archive file * @param string Directory to unpack into * @return boolean True for success */ function extract($archivename, $extractdir) { require_once dirname(__FILE__) . '/file.php'; require_once dirname(__FILE__) . '/folder.php'; $untar = false; $result = false; $ext = extFile::getExt(strtolower($archivename)); // check if a tar is embedded...gzip/bzip2 can just be plain files! if (extFile::getExt(extFile::stripExt(strtolower($archivename))) == 'tar') { $untar = true; } switch ($ext) { case 'zip': $adapter =& extArchive::getAdapter('zip'); if ($adapter) { $result = $adapter->extract($archivename, $extractdir); } break; case 'tar': $adapter =& extArchive::getAdapter('tar'); if ($adapter) { $result = $adapter->extract($archivename, $extractdir); } break; case 'tgz': $untar = true; // This format is a tarball gzip'd // This format is a tarball gzip'd case 'gz': // This may just be an individual file (e.g. sql script) // This may just be an individual file (e.g. sql script) case 'gzip': $adapter =& extArchive::getAdapter('gzip'); if ($adapter) { $tmpfname = (defined('_EXT_FTPTMP_PATH') ? _EXT_FTPTMP_PATH . '/' : $extractdir) . uniqid('gzip'); $gzresult = $adapter->extract($archivename, $tmpfname); if (!$gzresult) { unlink($tmpfname); return false; } if ($untar) { // Try to untar the file $tadapter =& extArchive::getAdapter('tar'); if ($tadapter) { $result = $tadapter->extract($tmpfname, $extractdir); } } else { $path = extPath::clean($extractdir); mkdir($path); $result = copy($tmpfname, $path . DS . extFile::stripExt(extFile::getName(strtolower($archivename)))); } @unlink($tmpfname); } break; case 'tbz2': $untar = true; // This format is a tarball bzip2'd // This format is a tarball bzip2'd case 'bz2': // This may just be an individual file (e.g. sql script) // This may just be an individual file (e.g. sql script) case 'bzip2': $adapter =& extArchive::getAdapter('bzip2'); if ($adapter) { $tmpfname = _EXT_FTPTMP_PATH . '/' . uniqid('bzip2'); $bzresult = $adapter->extract($archivename, $tmpfname); if (!$bzresult) { @unlink($tmpfname); return false; } if ($untar) { // Try to untar the file $tadapter =& extArchive::getAdapter('tar'); if ($tadapter) { $result = $tadapter->extract($tmpfname, $extractdir); } } else { $path = extPath::clean($extractdir); mkdir($path); $result = copy($tmpfname, $path . DS . extFile::stripExt(extFile::getName(strtolower($archivename)))); } @unlink($tmpfname); } break; default: return PEAR::raiseError('Unknown Archive Type: ' . $ext); break; } return $result; }
/** * @param string The name of the archive * @param mixed The name of a single file or an array of files * @param string The compression for the archive * @param string Path to add within the archive * @param string Path to remove within the archive * @param boolean Automatically append the extension for the archive * @param boolean Remove for source files */ function create($archive, $files, $compress = 'tar', $addPath = '', $removePath = '', $autoExt = false) { $compress = strtolower($compress); if ($compress == 'tgz' || $compress == 'tbz' || $compress == 'tar') { require_once _EXT_PATH . '/libraries/Tar.php'; if (is_string($files)) { $files = array($files); } if ($autoExt) { $archive .= '.' . $compress; } if ($compress == 'tgz') { $compress = 'gz'; } if ($compress == 'tbz') { $compress = 'bz2'; } $tar = new Archive_Tar($archive, $compress); $tar->setErrorHandling(PEAR_ERROR_PRINT); $result = $tar->addModify($files, $addPath, $removePath); return $result; } elseif ($compress == 'zip') { $adapter =& extArchive::getAdapter('zip'); if ($adapter) { $result = $adapter->create($archive, $files, array('remove_path' => $removePath)); } if ($result == false) { return PEAR::raiseError('Unrecoverable ZIP Error'); } } }