Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/inc/lib/fileDisplay.lib.php

311 lines
8.2 KiB

<?php
/* See license terms in /license.txt */
/**
* This is the file display library for Dokeos.
* Include/require it in your code to use its functionality.
* @todo move this file to DocumentManager
* @package chamilo.library
*/
/* FILE DISPLAY FUNCTIONS */
/**
* Define the image to display for each file extension.
* This needs an existing image repository to work.
*
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be>
* @param string $file_name (string) - Name of a file
* @return string The gif image to chose
*/
function choose_image($file_name)
{
static $type, $image;
/* TABLES INITIALISATION */
if (!$type || !$image) {
$type['word'] = array(
'doc',
'dot',
'rtf',
'mcw',
'wps',
'psw',
'docm',
'docx',
'dotm',
'dotx',
);
$type['web'] = array(
'htm',
'html',
'htx',
'xml',
'xsl',
'php',
'xhtml',
);
$type['image'] = array(
'gif',
'jpg',
'png',
'bmp',
'jpeg',
'tif',
'tiff',
);
$type['image_vect'] = array('svg', 'svgz');
$type['audio'] = array(
'wav',
'mid',
'mp2',
'mp3',
'midi',
'sib',
'amr',
'kar',
'oga',
'au',
'wma',
);
$type['video'] = array(
'mp4',
'mov',
'rm',
'pls',
'mpg',
'mpeg',
'm2v',
'm4v',
'flv',
'f4v',
'avi',
'wmv',
'asf',
'3gp',
'ogv',
'ogg',
'ogx',
'webm',
);
$type['excel'] = array(
'xls',
'xlt',
'xls',
'xlt',
'pxl',
'xlsx',
'xlsm',
'xlam',
'xlsb',
'xltm',
'xltx',
);
$type['compressed'] = array('zip', 'tar', 'rar', 'gz');
$type['code'] = array(
'js',
'cpp',
'c',
'java',
'phps',
'jsp',
'asp',
'aspx',
'cfm',
);
$type['acrobat'] = array('pdf');
$type['powerpoint'] = array(
'ppt',
'pps',
'pptm',
'pptx',
'potm',
'potx',
'ppam',
'ppsm',
'ppsx',
);
$type['flash'] = array('fla', 'swf');
$type['text'] = array('txt', 'log');
$type['oo_writer'] = array('odt', 'ott', 'sxw', 'stw');
$type['oo_calc'] = array('ods', 'ots', 'sxc', 'stc');
$type['oo_impress'] = array('odp', 'otp', 'sxi', 'sti');
$type['oo_draw'] = array('odg', 'otg', 'sxd', 'std');
$type['epub'] = array('epub');
$type['java'] = array('class', 'jar');
$type['freemind'] = array('mm');
$image['word'] = 'word.gif';
$image['web'] = 'file_html.gif';
$image['image'] = 'file_image.gif';
$image['image_vect'] = 'file_svg.png';
$image['audio'] = 'file_sound.gif';
$image['video'] = 'film.gif';
$image['excel'] = 'excel.gif';
$image['compressed'] = 'file_zip.gif';
$image['code'] = 'icons/22/mime_code.png';
$image['acrobat'] = 'file_pdf.gif';
$image['powerpoint'] = 'powerpoint.gif';
$image['flash'] = 'file_flash.gif';
$image['text'] = 'icons/22/mime_text.png';
$image['oo_writer'] = 'file_oo_writer.gif';
$image['oo_calc'] = 'file_oo_calc.gif';
$image['oo_impress'] = 'file_oo_impress.gif';
$image['oo_draw'] = 'file_oo_draw.gif';
$image['epub'] = 'file_epub.gif';
$image['java'] = 'file_java.png';
$image['freemind'] = 'file_freemind.png';
}
$extension = array();
if (!is_array($file_name)) {
if (preg_match('/\.([[:alnum:]]+)(\?|$)/', $file_name, $extension)) {
$extension[1] = strtolower($extension[1]);
foreach ($type as $generic_type => $extension_list) {
if (in_array($extension[1], $extension_list)) {
return $image[$generic_type];
}
}
}
}
return 'defaut.gif';
}
/**
* Get the icon to display for a folder by its path
* @param string $folderPath
* @return string
*/
function chooseFolderIcon($folderPath)
{
if ($folderPath == '/shared_folder') {
return 'folder_users.gif';
}
if (strstr($folderPath, 'shared_folder_session_')) {
return 'folder_users.gif';
}
switch ($folderPath) {
case '/audio';
return 'folder_audio.gif';
case '/flash':
return 'folder_flash.gif';
case '/images';
return 'folder_images.gif';
case '/video':
return 'folder_video.gif';
case '/images/gallery':
return 'folder_gallery.gif';
case '/chat_files':
return 'folder_chat.gif';
case '/learning_path':
return 'folder_learningpath.gif';
}
return 'folder_document.gif';
}
/**
* Transform a UNIX time stamp in human readable format date.
*
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be>
* @param int $date - UNIX time stamp
* @return string A human readable representation of the UNIX date
*/
function format_date($date)
{
return date('d.m.Y', $date);
}
/**
* Transform the file path to a URL.
*
* @param string $file_path (string) - Relative local path of the file on the hard disk
* @return string Relative url
*/
function format_url($file_path)
{
$path_component = explode('/', $file_path);
$path_component = array_map('rawurlencode', $path_component);
return implode('/', $path_component);
}
/**
* Get the total size of a directory.
*
* @param string $dir_name (string) - Path of the dir on the hard disk
* @return int Total size in bytes
*/
function folder_size($dir_name)
{
$size = 0;
if ($dir_handle = opendir($dir_name)) {
while (($entry = readdir($dir_handle)) !== false) {
if ($entry == '.' || $entry == '..') {
continue;
}
if (is_dir($dir_name.'/'.$entry)) {
$size += folder_size($dir_name.'/'.$entry);
} else {
$size += filesize($dir_name.'/'.$entry);
}
}
closedir($dir_handle);
}
return $size;
}
/**
* Calculates the total size of a directory by adding the sizes (that
* are stored in the database) of all files & folders in this directory.
*
* @param string $path
* @param boolean $can_see_invisible
* @return int Total size
*/
function get_total_folder_size($path, $can_see_invisible = false)
{
$table_itemproperty = Database::get_course_table(TABLE_ITEM_PROPERTY);
$table_document = Database::get_course_table(TABLE_DOCUMENT);
$tool_document = TOOL_DOCUMENT;
$course_id = api_get_course_int_id();
$session_id = api_get_session_id();
$session_condition = api_get_session_condition(
$session_id,
true,
true,
'props.session_id'
);
$visibility_rule = ' props.visibility '.($can_see_invisible ? '<> 2' : '= 1');
$sql = "SELECT SUM(table1.size) FROM (
SELECT props.ref, size
FROM $table_itemproperty AS props
INNER JOIN $table_document AS docs
ON (docs.id = props.ref AND docs.c_id = props.c_id)
WHERE
docs.c_id = $course_id AND
docs.path LIKE '$path/%' AND
props.c_id = $course_id AND
props.tool = '$tool_document' AND
$visibility_rule
$session_condition
GROUP BY ref
) as table1";
$result = Database::query($sql);
if ($result && Database::num_rows($result) != 0) {
$row = Database::fetch_row($result);
return $row[0] == null ? 0 : $row[0];
} else {
return 0;
}
}