Panel/ControlPanel/modules/litefm/fm_dir.php
2025-09-11 13:29:15 -04:00

608 lines
23 KiB
PHP

<?php
/*
*
* OGP - Open Game Panel
* Copyright (C) 2008 - 2018 The OGP Development Team
*
* http://www.opengamepanel.org/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
require_once(MODULES."/litefm/functions.php");
require_once(MODULES."/litefm/litefm.php");
function exec_ogp_module()
{
$home_id = $_REQUEST['home_id'];
if (empty($home_id))
{
print_failure( get_lang("home_id_missing") );
return;
}
global $db, $view, $settings;
$isAdmin = $db->isAdmin( $_SESSION['user_id'] );
if($isAdmin)
$home_cfg = $db->getGameHome($home_id);
else
$home_cfg = $db->getUserGameHome($_SESSION['user_id'],$home_id);
if ($home_cfg === FALSE)
{
print_failure( get_lang("no_access_to_home") );
return;
}
if ( preg_match("/f/",$home_cfg['access_rights']) != 1 )
{
print_failure( get_lang("no_rights") );
echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=".$home_cfg['home_id']."'><< ". get_lang("back") ."</a></td></tr></table>";
return;
}
litefm_check($home_id);
$remote = new OGPRemoteLibrary($home_cfg['agent_ip'], $home_cfg['agent_port'], $home_cfg['encryption_key'], $home_cfg['timeout']);
$os_string = $remote->what_os();
$os = preg_match("/Linux/i", $os_string) ? "linux" : "windows";
// We must always add the home directory to the fm_cwd so that user
// can not go out of the homedir.
$path = clean_path($home_cfg['home_path']."/".@$_SESSION['fm_cwd_'.$home_id]);
if (!$remote->rfile_exists($path))
{
while(!$remote->rfile_exists($path))
{
$_SESSION['fm_cwd_'.$home_id] = dirname($_SESSION['fm_cwd_'.$home_id]);
$path = clean_path($home_cfg['home_path']."/".@$_SESSION['fm_cwd_'.$home_id]);
if($path == clean_path($home_cfg['home_path']."/"))
{
print_failure(get_lang_f("dir_not_found",$path));
echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=".$home_cfg['home_id']."'><< ". back ."</a></td></tr></table>";
return;
}
}
}
// Get File Operations Keys
$fo_keys = get_file_operations_keys();
// Get File Operations Settings
$fo = get_fo_settings($settings,$fo_keys);
$upload_folder_path = "modules/litefm/uploads/home_id_$home_id";
// PHP post_max_size handling
$PMS_bytes = return_bytes(ini_get('post_max_size'));
if(isset($_SERVER['CONTENT_LENGTH']) AND $_SERVER['CONTENT_LENGTH'] > $PMS_bytes and $fo['upload'] == "1")
{
$error['post_max_size'] = "The uploaded file(s) size exceed the post_max_size directive in php.ini (".ini_get('post_max_size').").";
echo json_encode( array( 'error' => $error ) );
}
// Get web to agent transfer progress
elseif( isset( $_GET['pid'] ) and $_GET['pid'] != "" and $fo['upload'] == "1" )
{
$bytes = $_GET['size'];
$totalsize = $bytes / 1024;
$filename = $_GET['filename'];
$kbytes = $remote->rsync_progress( clean_path( $path."/".$filename ) );
list($totalsize,$mbytes,$pct) = explode(";",do_progress($kbytes,$totalsize));
$totalmbytes = round($totalsize / 1024, 2);
$pct = $pct > 100 ? 100 : $pct;
$complete = false;
if ( $remote->is_file_download_in_progress( $_GET['pid'] ) == 0 )
{
$dest_file_path = clean_path( $upload_folder_path . "/" . $filename . ".txt" );
unlink($dest_file_path);
$directory = dir($upload_folder_path);
$directory_empty = TRUE;
while ((FALSE !== ($item = $directory->read())) && ( ! isset($directory_not_empty)))
{
if ($item != '.' && $item != '..')
{
$directory_empty = FALSE;
}
}
$directory->close();
if( $directory_empty )
rmdir( $upload_folder_path );
$db->logger(get_lang("upload_complete") . ": " . clean_path( $path . "/" . $filename ));
$complete = true;
}
echo json_encode(array('pct' => $pct,
'complete' => $complete));
}
// Upload File(s)
elseif( isset( $_POST['upload'] ) and $fo['upload'] == "1" )
{
$error = FALSE;
foreach ( $_FILES['files']['error'] as $i => $error_code )
{
if($error_code > 0)
{
$error['error_message'][$i] = codeToMessage($error_code,$_FILES['files']['name'][$i]);
}
}
if( is_array($error) )
{
echo json_encode( array( 'error' => $error ) );
}
// Save uploaded file to the website and start file download from the agent
else
{
if( ! file_exists( $upload_folder_path ) )
{
if( ! mkdir($upload_folder_path, 0777, true) )
{
echo json_encode(array('error' => get_lang_f('can_not_create_upload_folder_path', "\n(".$upload_folder_path.")" )));
return;
}
}
$count = 0;
$s = ( isset($_SERVER['HTTPS']) and get_true_boolean($_SERVER['HTTPS']) ) ? "s" : "";
$p = (isset($_SERVER['SERVER_PORT']) and $_SERVER['SERVER_PORT'] != "80") ? ":".$_SERVER['SERVER_PORT'] : "";
$url = 'http'.$s.'://'.$_SERVER['SERVER_NAME'].$p.$_SERVER['SCRIPT_NAME'];
// loop all files
foreach ( $_FILES['files']['name'] as $i => $name )
{
// if file not uploaded then skip it
if ( !is_uploaded_file($_FILES['files']['tmp_name'][$i]) )
continue;
// now we can move uploaded files
$bad_chars = preg_replace( "/([[:alnum:]_\.-]*)/", "", $_FILES['files']['name'][$i] );
$bad_arr = str_split( $bad_chars );
$filename = str_replace( $bad_arr, "", $_FILES['files']['name'][$i] );
$dest_file_path = clean_path( $upload_folder_path . "/" . $filename . ".txt" );
$file_url = str_replace( "home.php", $dest_file_path, $url );
if( file_exists( $dest_file_path ) )
unlink($dest_file_path);
if( move_uploaded_file( $_FILES["files"]["tmp_name"][$i], $dest_file_path ) )
{
$remote_file_path = clean_path( $path . "/" . $filename );
if( $remote->rfile_exists($remote_file_path) )
$remote->shell_action('remove_file', $remote_file_path);
$pid = $remote->start_file_download( $file_url, $path, $filename );
$files[$count] = array('filename' => $filename,
'size' => $_FILES['files']['size'][$i],
'pid' => $pid);
$count++;
}
}
echo json_encode(array('count' => $count,
'files' => $files));
}
}
// Create Folder
elseif( isset( $_POST['create_folder'] ) and $fo['create_folder'] == "1" )
{
$folder_name = stripslashes($_POST['folder_name']);
$folder_path = clean_path( $path . "/" . $folder_name );
$remote->shell_action('create_dir', $folder_path);
$db->logger( get_lang("create_folder") . ": " . $folder_path );
}
// Delete File(s)
elseif( isset( $_POST['remove'] ) and $fo['remove'] == "1" )
{
if( isset($_SESSION['fm_files_'.$home_id]) and !empty($_SESSION['fm_files_'.$home_id]) )
{
$files = "";
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$files .= $item_path.";";
}
}
echo $files;
if($files != "")
{
$remote->shell_action('remove_recursive', $files);
$files = str_replace('" "','"<br>"',$files);
$db->logger( get_lang("remove") . ": ${files}" );
}
}
}
// Rename File(s)/Folder(s)
elseif( isset( $_POST['rename'] ) and $fo['rename'] == "1" )
{
if( isset($_SESSION['fm_files_'.$home_id]) and !empty($_SESSION['fm_files_'.$home_id]) )
{
foreach($_POST['items'] as $i => $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$new_item = removeInvalidFileNameCharacters(stripslashes($_POST['values'][$i]));
$new_item_path = clean_path( $path . "/" . $new_item );
if ($item_path != $new_item_path)
{
$remote->shell_action('rename', "$item_path;$new_item_path");
$db->logger( get_lang("rename") . ": $item_path " . get_lang("to") . " $new_item_path" );
}
}
}
}
}
// Move Files/Folders
elseif( isset( $_POST['move'] ) and $fo['move'] == "1" )
{
$selected_path = preg_replace("#[/\.\./]+#","/", stripslashes($_POST['selected_path']));
$destination = clean_path($home_cfg['home_path']. "/" . $selected_path);
if($path != $destination)
{
if($remote->rfile_exists($destination))
{
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$destination = clean_path($destination . "/.");
$remote->shell_action('move', "$item_path;$destination");
$db->logger( get_lang("move") . ": $item_path " . get_lang("to") . " $destination" );
}
}
}
}
}
// Copy Files/Folders
elseif( isset( $_POST['copy'] ) and $fo['copy'] == "1" )
{
$selected_path = preg_replace("#[/\.\./]+#","/", stripslashes($_POST['selected_path']));
$destination = clean_path($home_cfg['home_path']. "/" . $selected_path);
if($path != $destination)
{
if($remote->rfile_exists($destination))
{
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$destination = clean_path($destination . "/.");
$remote->shell_action('copy', "$item_path;$destination");
$db->logger( get_lang("copy") . ": $item_path " . get_lang("to") . " $destination" );
}
}
}
}
}
// Compress Files/Folders
elseif( isset( $_POST['compress'] ) and $fo['compress'] == "1" )
{
$files_w_path = '';
$items = '';
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$files_w_path .= $item_path.'<br>';
$items .= $_SESSION['fm_files_'.$home_id][$item].'\n';
}
}
if($items != '')
{
$remote->compress_files($items,$path,$_POST['archive_name'],$_POST['archive_type']);
$db->logger( get_lang("compress") . " " . $_POST['archive_type'] . ":<br>$files_w_path" );
}
}
// uncompress
elseif( isset( $_POST['uncompress'] ) and $fo['uncompress'] == "1" )
{
$selected_path = preg_replace("#[/\.\./]+#","/", stripslashes($_POST['selected_path']));
$destination = clean_path($home_cfg['home_path']. "/" . $selected_path);
if($remote->rfile_exists($destination))
{
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$file_location = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$remote->uncompress_file($file_location, $destination);
$db->logger( get_lang("uncompress") . ": $file_location " . to . " $destination." );
}
}
}
}
// Create file
elseif( isset( $_POST['create_file'] ) and $fo['create_file'] == "1" )
{
$file_name = removeInvalidFileNameCharacters(stripslashes($_POST['file_name']));
$destination = clean_path( $path . "/" . $file_name);
$remote->shell_action('touch', $destination);
$db->logger( get_lang("create_file") . ": $destination" );
}
// Send by email
elseif( isset( $_POST['send_by_email'] ) and $fo['send_by_email'] == "1" )
{
$archive_name = $_POST['archive_name'];
$archive_type = $_POST['archive_type'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$dest_email = $_POST['dest_email'];
$items = '';
foreach($_POST['items'] as $item)
{
if(isset($_SESSION['fm_files_'.$home_id][$item]))
{
$item_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$item] );
$items .= $_SESSION['fm_files_'.$home_id][$item].'\n';
}
}
if($items != '')
{
$retval = $remote->compress_files($items,$path,$archive_name,$archive_type);
$archive = clean_path( "${path}/${archive_name}.${archive_type}" );
if( $retval == 0 )
{
do{
$size1 = $remote->shell_action('size', $archive);
sleep( 2 );
$size2 = $remote->shell_action('size', $archive);
}while($size1 != $size2);
}
if( $retval != -1 and $remote->rfile_exists($archive) )
{
$mail_retval = $remote->exec( "(echo '" . esc_squote($message) . "' | mutt -a '" . esc_squote($archive) . "' -s '" . esc_squote($subject) . "' -- '" . esc_squote($dest_email) . "');echo \$?" );
if($mail_retval == 0)
{
echo get_lang("mail_sent_successfully");
$db->logger( get_lang("send_by_email") . ": '$archive'<br>Subject: '$subject'<br>to: '$dest_email'" );
}
else
{
echo "The email could not be sent,\n".
"the package mutt or mutt-patched (a mail client)\n".
"must be installed, and postfix should be configured\n".
"in order to send large files.";
}
}
}
}
// Secure File
elseif( isset( $_POST['secure_file'] ) and $isAdmin )
{
if(isset($_SESSION['fm_files_'.$home_id][$_POST['item']]))
{
if($_POST['set_attr'] == '+i' or $_POST['set_attr'] == '-i')
{
$type = $_POST['set_attr'] == '+i' ? get_lang("chattr_locked") : get_lang("chattr_unlocked");
$action = "chattr".$_POST['set_attr'];
$file_path = clean_path( $path . "/" . $_SESSION['fm_files_'.$home_id][$_POST['item']] );
$remote->secure_path($action, $file_path);
$db->logger( "$type: $file_path" );
}
}
}
else
{
?>
<script type="text/javascript" src="js/jquery/plugins/jquery.form.min.js"></script>
<script type="text/javascript" src="js/zlib/zlib.min.js"></script>
<script type="text/javascript" src="js/modules/litefm.js"></script>
<?php
echo "<h2>";
echo empty($home_cfg['home_name']) ? get_lang("not_available") : htmlentities($home_cfg['home_name']);
echo "</h2>";
$_SESSION['fm_files_'.$home_id] = array();
$show_path = (isset($_SESSION['fm_cwd_'.$home_id])) ? clean_path($_SESSION['fm_cwd_'.$home_id]) : "/";
if($isAdmin)
$show_path = clean_path($home_cfg['home_path'].$show_path);
echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=".$home_cfg['home_id']."'><< ". get_lang("back") ."</a></td></tr></table>";
if ($remote->rfile_exists($path))
{
echo "<table class='center' style='width:100%;' ><tr>\n".
"<td colspan='3' ><h3>".
get_lang_f('currently_viewing',$show_path)."</h3></td>".
"</tr></table>\n";
echo "<div class='file-operations' >\n";
foreach($fo_keys as $key)
{
if($fo[$key] == "1")
echo "<div class='operations-button' id='$key'><img src='" . check_theme_image("modules/litefm/action-images/$key.gif") . "' /><div>&nbsp;".get_lang($key)."</div></div>\n";
}
echo "</div>\n";
$dirlist = $remote->remote_dirlistfm($path);
if (!is_array($dirlist))
{
if(isset($_SESSION['fm_cwd_'.$home_id]))
{
unset($_SESSION['fm_cwd_'.$home_id]);
$view->refresh("?m=litefm&amp;home_id=$home_id",0);
return;
}
else
{
print_failure( get_lang("failed_list") );
return;
}
}
if ( empty($dirlist) )
{
echo "<table class='center' style='width:100%;' >\n".
show_back($home_id)."</table>";
echo "<p>" . get_lang("empty_directory") . "</p>";
}
else
{
echo "<table class='center' style='width:100%;' >\n"
.show_back($home_id).
"<tr>\n<td style='width:10px;' >".
"<input type=checkbox name='switch' id='switch_check' />".
"</td>\n<td align=left>".
get_lang("filename") ."</td>\n";
if( $os == "linux" )
echo "<td>". get_lang("filesecure") ."</td>\n";
echo "<td>". get_lang("filesize") ." [". get_lang("bytes") ."]</td>\n<td>".
get_lang("owner") ." ". get_lang("group") ."</td>\n</tr>\n";
$i = 0;
if(isset($dirlist['directorys']) and is_array($dirlist['directorys']))
{
$dirlist['directorys'] = array_orderby($dirlist['directorys'], 'filename', SORT_ASC);
foreach($dirlist['directorys'] as $directory)
{
$directory['filename'] = removeInvalidFileNameCharacters($directory['filename']);
echo "<tr>\n".
"<td>".
"<input type=checkbox name='folder' data-item='$i' value=\"" . str_replace('"', "&quot;", $directory['filename']) . "\" class='item' />\n".
"</td>".
"<td align=left>".
"<img class=\"viewitem\" src=\"" . check_theme_image("images/folder.png") . "\" alt=\"Directory\" /> ".
"<a href=\"?m=litefm&amp;home_id=$home_id&amp;item=$i&amp;name=" . urlencode($directory['filename']) . "&amp;type=directory\">".
$directory['filename'] . "</a></td>";
if( $os == "linux" )
echo "<td>-</td>";
echo "<td>-</td> <td>" . $directory['user'] . " " . $directory['group']. "</td>\n".
"</tr>\n";
$_SESSION['fm_files_'.$home_id][$i] = $directory['filename'];
$i++;
}
}
if(isset($dirlist['files']) and is_array($dirlist['files']))
{
$dirlist['files'] = array_orderby($dirlist['files'], 'filename', SORT_ASC);
foreach($dirlist['files'] as $file)
{
$file['filename'] = removeInvalidFileNameCharacters($file['filename']);
if( $os == "linux" )
{
if($isAdmin){
$secureFile = "<td><div data-item='$i' data-file_name=\"" . str_replace('"', "&quot;", $file['filename']) . "\" class='chattrButton ";
if( preg_match( "/i/", $file['attr'] ) ){
$secureFile .= "locked' data-set_attr='-i' ><i></i><span>". get_lang("chattr_no");
}else{
$secureFile .= "unlocked' data-set_attr='+i' ><i></i><span>". get_lang("chattr_yes");
}
$secureFile .= "</span></div></td>\n";
}else{
$secureFile = "<td><span class=";
if( preg_match( "/i/", $file['attr'] ) ){
$secureFile .= "'chattrLock'>". get_lang("chattr_locked");
}else{
$secureFile .= "'chattrUnlock'>". get_lang("chattr_unlocked");
}
$secureFile .= "</span></td>\n";
}
}
else
$secureFile = "";
echo "<tr>\n".
"<td>".
"<input type=checkbox name='file' data-item='$i' value=\"" . str_replace('"', "&quot;", $file['filename']) . "\" class='item' />\n".
"</td>".
"<td align=left id='fileid$i' >";
echo "<img class=\"viewitem\" src=\"" . check_theme_image("images/txt.png") . "\" alt=\"Text file\" /> ".
"<a href=\"?m=litefm&amp;home_id=$home_id&amp;item=$i&amp;p=read_file&amp;name=" . urlencode($file['filename']) . "&amp;type=file\">". get_lang("button_edit") ."</a>".
"<a href=\"javascript:downloadFile($home_id, $i, {$file['size']}, '".str_replace("'", "\'", $file['filename'])."');\" id=\"jsDwl$i\" >" .$file['filename'] . "</a>&nbsp;".
"</td>$secureFile<td>" . $file['size'] . "</td> <td>" . $file['user'] . " " . $file['group']. "</td>\n";
echo "</tr>\n";
$_SESSION['fm_files_'.$home_id][$i] = $file['filename'];
$i++;
}
}
if(isset($dirlist['binarys']) and is_array($dirlist['binarys']))
{
$dirlist['binarys'] = array_orderby($dirlist['binarys'], 'filename', SORT_ASC);
foreach($dirlist['binarys'] as $binary)
{
$binary['filename'] = removeInvalidFileNameCharacters($binary['filename']);
if( $os == "linux" )
{
if($isAdmin){
$secureFile = "<td><div data-item='$i' data-file_name=\"" . str_replace('"', "&quot;", $binary['filename']) . "\" class='chattrButton ";
if( preg_match( "/i/", $binary['attr'] ) ){
$secureFile .= "locked' data-set_attr='-i' ><i></i><span>". get_lang("chattr_no");
}else{
$secureFile .= "unlocked' data-set_attr='+i' ><i></i><span>". get_lang("chattr_yes");
}
$secureFile .= "</span></div></td>\n";
}else{
$secureFile = "<td><span class=";
if( preg_match( "/i/", $binary['attr'] ) ){
$secureFile .= "'chattrLock'>". get_lang("chattr_locked");
}else{
$secureFile .= "'chattrUnlock'>". get_lang("chattr_unlocked");
}
$secureFile .= "</span></td>\n";
}
}
else
$secureFile = "";
echo "<tr>\n".
"<td>".
"<input type=checkbox name='binary' data-item='$i' value=\"" . str_replace('"', "&quot;", $binary['filename']) . "\" class='item' />\n".
"</td>".
"<td align=left id='fileid$i' >";
echo "<img class=\"viewitem\" src=\"" . check_theme_image("images/exec.png") . "\" alt=\"Binary file\" /> ".
"<a href=\"javascript:downloadFile($home_id, $i, {$binary['size']}, '".str_replace("'", "\'", $binary['filename'])."');\" id=\"jsDwl$i\" >" .$binary['filename'] . "</a>&nbsp;".
"</td>$secureFile<td>" . $binary['size'] . "</td><td>" . $binary['user'] . " " . $binary['group']. "</td>\n";
echo "</tr>\n";
$_SESSION['fm_files_'.$home_id][$i] = $binary['filename'];
$i++;
}
}
echo "</table>\n";
}
}
echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=".$home_cfg['home_id']."'><< ". get_lang("back") ."</a></td></tr></table>";
// Dialog translation && info
$user = $db->getUserById($_SESSION['user_id']);
echo "<div id='dialog' ".
"data-folder=\"" . clean_path("/".str_replace('"', "&quot;", @$_SESSION['fm_cwd_'.$home_id])) . "\" " .
"data-select_at_least_one_item='" . get_lang("select_at_least_one_item") . "' " .
"data-ask_delete='" . get_lang("delete_item") . "' " .
"data-ask_rename='" . get_lang("rename_item") . "' " .
"data-ask_move='" . get_lang("move_item") . "' " .
"data-ask_copy='" . get_lang("copy_item") . "' " .
"data-ask_compress='" . get_lang("compress_item") . "' " .
"data-ask_uncompress='" . get_lang("uncompress_item") . "' " .
"data-archive_name='" . get_lang("archive_name") . "' " .
"data-archive_type='" . get_lang("archive_type") . "' " .
"data-file_name='" . get_lang("file_name") . "' " .
"data-folder_name='" . get_lang("folder_name") . "' " .
"data-compresses_files_separately='" . get_lang("compresses_files_separately") . "' " .
"data-to='" . get_lang("to") . "' " .
"data-yes='" . get_lang("yes") . "' " .
"data-no='" . get_lang("no") . "' " .
"data-max_file_uploads='" . ini_get('max_file_uploads') . "' " .
"data-upload_to_web='" . get_lang("upload_to_web") . "' " .
"data-transfer_to_server='" . get_lang("transfer_to_server") . "' " .
"data-upload='" . get_lang("upload") . "' " .
"data-ask_send_by_email='" . get_lang("send_item_by_email") . "' " .
"data-subject='" . get_lang("subject") . "' " .
"data-message='" . get_lang("message") . "' " .
"data-dest_email='" . get_lang("dest_email") . "' " .
"data-user_email='" . $user['users_email'] . "' ";
if($isAdmin)
echo "data-ask_change_attr=\"" . get_lang_f( 'secure_item', clean_path( str_replace('"', "&quot;", $path) . "/%file_name%" ) ) . "\" ";
echo "></div>";
}
}
?>