<?php /* For licensing terms, see /license.txt */ /** * @author Patrick Cool patrick.cool@UGent.be Ghent University Mai 2004 * @author Julio Montoya Lots of improvements, cleaning, adding security * @author Juan Carlos RaƱa Trabado herodoto@telefonica.net January 2008 * @package chamilo.document */ require_once '../inc/global.inc.php'; api_protect_course_script(); $noPHP_SELF = true; $path = Security::remove_XSS($_GET['curdirpath']); $pathurl = urlencode($path); $slide_id = isset($_GET['slide_id']) ? Security::remove_XSS($_GET['slide_id']) : null; if (empty($slide_id)) { $edit_slide_id = 1; } else { $edit_slide_id = $slide_id; } if ($path != '/') { $folder = $path.'/'; } else { $folder = '/'; } $sys_course_path = api_get_path(SYS_COURSE_PATH); // Including the functions for the slideshow require_once 'slideshow.inc.php'; // Breadcrumb navigation $url = 'document.php?curdirpath='.$pathurl; $originaltoolname = get_lang('Documents'); $_course = api_get_course_info(); $interbreadcrumb[] = array('url' => Security::remove_XSS($url), 'name' => $originaltoolname); $originaltoolname = get_lang('SlideShow'); Display :: display_header($originaltoolname, 'Doc'); // Loading the slides from the session if (isset($_SESSION['image_files_only'])) { $image_files_only = $_SESSION['image_files_only']; } // Calculating the current slide, next slide, previous slide and the number of slides $slide = null; if ($slide_id != 'all') { $slide = $slide_id ? $slide_id : 0; $previous_slide = $slide - 1; $next_slide = $slide + 1; } $total_slides = count($image_files_only); ?> <script type="text/javascript"> function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features); } </script> <div class="actions"> <?php if ($slide_id != 'all') { $image = null; if (isset($image_files_only[$slide])) { $image = $sys_course_path . $_course['path'] . '/document' . $folder . $image_files_only[$slide]; } if (file_exists($image)) { echo '<div class="actions-pagination">'; // Back forward buttons if ($slide == 0) { $imgp = 'action_prev_na.png'; $first = '<img src="'.api_get_path(WEB_IMG_PATH).'action_first_na.png">'; } else { $imgp = 'action_prev.png'; $first = '<a href="slideshow.php?slide_id=0&curdirpath='.$pathurl.'"> <img src="'.api_get_path(WEB_IMG_PATH).'action_first.png" title="'.get_lang('FirstSlide').'" alt="'.get_lang('FirstSlide').'"></a>'; } // First slide echo $first; // Previous slide if ($slide > 0) { echo '<a href="slideshow.php?slide_id='.$previous_slide.'&curdirpath='.$pathurl.'">'; } echo '<img src="'.api_get_path(WEB_IMG_PATH).$imgp.'" title="'.get_lang('Previous').'" alt="'.get_lang('Previous').'">'; if ($slide > 0) { echo '</a>'; } // Divider echo ' [ '.$next_slide.'/'.$total_slides.' ] '; // Next slide if ($slide < $total_slides - 1) { echo '<a href="slideshow.php?slide_id='.$next_slide.'&curdirpath='.$pathurl.'">'; } if ($slide == $total_slides - 1) { $imgn = 'action_next_na.png'; $last = '<img src="'.api_get_path(WEB_IMG_PATH).'action_last_na.png" title="'.get_lang('LastSlide').'" alt="'.get_lang('LastSlide').'">'; } else { $imgn = 'action_next.png'; $last = '<a href="slideshow.php?slide_id='.($total_slides-1).'&curdirpath='.$pathurl.'"><img src="'.api_get_path(WEB_IMG_PATH).'action_last.png" title="'.get_lang('LastSlide').'" alt="'.get_lang('LastSlide').'"></a>'; } echo '<img src="'.api_get_path(WEB_IMG_PATH).$imgn.'" title="'.get_lang('Next').'" alt="'.get_lang('Next').'">'; if ($slide > 0) { echo '</a>'; } // Last slide echo $last; echo '</div>'; } } // Exit the slideshow echo '<a href="document.php?action=exit_slideshow&curdirpath='.$pathurl.'&'.api_get_cidreq().'">'. Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('DocumentsOverview'),'',ICON_SIZE_MEDIUM).'</a>'; // Show thumbnails if ($slide_id != 'all') { echo '<a href="slideshow.php?slide_id=all&curdirpath='.$pathurl.'&'.api_get_cidreq().'">'. Display::return_icon('thumbnails.png',get_lang('ShowThumbnails'),'',ICON_SIZE_MEDIUM).'</a>'; } else { echo Display::return_icon('thumbnails_na.png',get_lang('ShowThumbnails'),'',ICON_SIZE_MEDIUM); } // Slideshow options echo '<a href="slideshowoptions.php?curdirpath='.$pathurl.'&'.api_get_cidreq().'">'. Display::return_icon('settings.png',get_lang('SetSlideshowOptions'),'',ICON_SIZE_MEDIUM).'</a>'; ?> </div> <?php echo '<br />'; /* TREATING THE POST DATA FROM SLIDESHOW OPTIONS */ // If we come from slideshowoptions.php we sessionize (new word !!! ;-) the options if (isset($_POST['Submit'])) { // We come from slideshowoptions.php //$_SESSION["auto_image_resizing"]=Security::remove_XSS($_POST['auto_radio_resizing']); $_SESSION["image_resizing"] = Security::remove_XSS($_POST['radio_resizing']); if ($_POST['radio_resizing'] == "resizing" && $_POST['width'] != '' && $_POST['height'] != '') { //echo "resizing"; $_SESSION["image_resizing_width"] = Security::remove_XSS($_POST['width']); $_SESSION["image_resizing_height"] = Security::remove_XSS($_POST['height']); } else { //echo "unsetting the session heighte and width"; $_SESSION["image_resizing_width"] = null; $_SESSION["image_resizing_height"] = null; } } $target_width = $target_height = null; // The target height and width depends if we choose resizing or no resizing if (isset($_SESSION["image_resizing"]) && $_SESSION["image_resizing"] == "resizing") { $target_width = $_SESSION["image_resizing_width"]; $target_height = $_SESSION["image_resizing_height"]; } /* THUMBNAIL VIEW */ // This is for viewing all the images in the slideshow as thumbnails. $image_tag = array (); if ($slide_id == 'all') { // Config for make thumbnails $allowed_thumbnail_types = array('jpg', 'jpeg', 'gif', 'png'); $max_thumbnail_width = 100; $max_thumbnail_height = 100; $png_compression = 0;//0(none)-9 $jpg_quality = 75;//from 0 to 100 (default is 75). More quality less compression $directory_thumbnails = $sys_course_path.$_course['path'].'/document'.$folder.'.thumbs/'; //Other parameters only for show tumbnails $row_items = 4;//only in slideshow.php $number_image = 7;//num icons cols to show $thumbnail_width_frame=$max_thumbnail_width;//optional $max_thumbnail_width+x $thumbnail_height_frame=$max_thumbnail_height; // Create the template_thumbnails folder (if no exist) if (!file_exists($directory_thumbnails)) { @mkdir($directory_thumbnails, api_get_permissions_for_new_directories()); } // check files and thumbnails if (is_array($image_files_only)) { foreach ($image_files_only as $one_image_file) { $image = $sys_course_path.$_course['path'].'/document'.$folder.$one_image_file; $image_thumbnail= $directory_thumbnails.'.'.$one_image_file; if (file_exists($image)) { //check thumbnail $imagetype = explode(".", $image); //or check $imagetype = image_type_to_extension(exif_imagetype($image), false); $imagetype = strtolower($imagetype[count($imagetype)-1]); if(in_array($imagetype,$allowed_thumbnail_types)) { if (!file_exists($image_thumbnail)){ //run each once we view thumbnails is too heavy, then need move into !file_exists($image_thumbnail, and only run when haven't the thumbnail $original_image_size = api_getimagesize($image); switch($imagetype) { case 'gif': $source_img = imagecreatefromgif($image); break; case 'jpg': $source_img = imagecreatefromjpeg($image); break; case 'jpeg': $source_img = imagecreatefromjpeg($image); break; case 'png': $source_img = imagecreatefrompng($image); break; } $new_thumbnail_size = api_calculate_image_size( $original_image_size['width'], $original_image_size['height'], $max_thumbnail_width, $max_thumbnail_height ); if($max_thumbnail_width>$original_image_size['width'] && $max_thumbnail_height>$original_image_size['height']){ $new_thumbnail_size['width']=$original_image_size['width']; $new_thumbnail_size['height']=$original_image_size['height']; } $crop = imagecreatetruecolor($new_thumbnail_size['width'], $new_thumbnail_size['height']); // preserve transparency if($imagetype == "png"){ imagesavealpha($crop, true); $color = imagecolorallocatealpha($crop,0x00,0x00,0x00,127); imagefill($crop, 0, 0, $color); } if ($imagetype == "gif") { $transindex = imagecolortransparent($source_img); $palletsize = imagecolorstotal($source_img); //GIF89a for transparent and anim (first clip), either GIF87a if ($transindex >= 0 && $transindex < $palletsize){ $transcol = imagecolorsforindex($source_img, $transindex); $transindex = imagecolorallocatealpha($crop, $transcol['red'], $transcol['green'], $transcol['blue'], 127); imagefill($crop, 0, 0, $transindex); imagecolortransparent($crop, $transindex); } } //resampled image imagecopyresampled( $crop, $source_img, 0, 0, 0, 0, $new_thumbnail_size['width'], $new_thumbnail_size['height'], $original_image_size['width'], $original_image_size['height'] ); switch ($imagetype) { case 'gif': imagegif($crop,$image_thumbnail); break; case 'jpg': imagejpeg($crop,$image_thumbnail,$jpg_quality); break; case 'jpeg': imagejpeg($crop,$image_thumbnail,$jpg_quality); break; case 'png': imagepng($crop,$image_thumbnail,$png_compression); break; } //clean memory imagedestroy($crop); }//end !exist thumbnail //show thumbnail and link $one_image_thumbnail_file='.thumbs/.'.$one_image_file;//get path thumbnail $doc_url = ($path && $path !== '/') ? $path.'/'.$one_image_thumbnail_file : $path.$one_image_thumbnail_file; $image_tag[] = '<img src="download.php?doc_url='.$doc_url.'" border="0" title="'.$one_image_file.'">'; } else { //if images aren't support by gd (not gif, jpg, jpeg, png) if ($imagetype=="bmp") { // use getimagesize instead api_getimagesize($image); becasuse api_getimagesize doesn't support bmp files. Put here for each show, only for a few bmp files isn't heavy $original_image_size = getimagesize($image); if ($max_thumbnail_width<$original_image_size[0] || $max_thumbnail_height<$original_image_size[1]){ $thumbnail_size=api_calculate_image_size($original_image_size[0], $original_image_size[1], $max_thumbnail_width, $max_thumbnail_height);//don't use resize_image because doesn't run with bmp files $image_height = $thumbnail_size['height']; $image_width = $thumbnail_size['width']; } else { $image_height=$original_image_size[0]; $image_width=$original_image_size[1]; } } else { //example for svg files,... $image_width=$max_thumbnail_width; $image_height=$max_thumbnail_height; } $doc_url = ($path && $path !== '/') ? $path.'/'.$one_image_file : $path.$one_image_file; $image_tag[] = '<img src="download.php?doc_url='.$doc_url.'" border="0" width="'.$image_width.'" height="'.$image_height.'" title="'.$one_image_file.'">'; }//end allowed image types }//end if exist file image }//end foreach }//end image files only // Creating the table $html_table = ''; $i = 0; $count_image = count($image_tag); $number_iteration = ceil($count_image/$number_image); $p = 0; echo '<ul class="thumbnails">'; for ($k = 0; $k < $number_iteration; $k++) { for ($i = 0; $i < $number_image; $i++) { if (isset($image_tag[$p])) { echo '<li class="span4"> <div class="thumbnail">'; echo '<a href="slideshow.php?slide_id='.$p.'&curdirpath='.$pathurl.'">'.$image_tag[$p].'</a>'; echo '</div>'; echo '</li>'; } $p++; } } echo '</ul>'; }//end slide==all /* ONE AT A TIME VIEW */ $course_id = api_get_course_int_id(); // This is for viewing all the images in the slideshow one at a time. if ($slide_id != 'all' && !empty($image_files_only)) { if (file_exists($image) && is_file($image)) { $image_height_width = resize_image($image, $target_width, $target_height); $image_height = $image_height_width[0]; $image_width = $image_height_width[1]; $height_width_tags = null; if (isset($_SESSION['image_resizing']) && $_SESSION['image_resizing'] == 'resizing') { $height_width_tags = 'width="'.$image_width.'" height="'.$image_height.'"'; } // This is done really quickly and should be cleaned up a little bit using the API functions $tbl_documents = Database::get_course_table(TABLE_DOCUMENT); if ($path == '/') { $pathpart = '/'; } else { $pathpart = $path.'/'; } $sql = "SELECT * FROM $tbl_documents WHERE c_id = $course_id AND path='".Database::escape_string($pathpart.$image_files_only[$slide])."'"; $result = Database::query($sql); $row = Database::fetch_array($result); echo '<table align="center" border="0" cellspacing="10">'; echo '<tr>'; echo '<td id="td_image" align="center">'; if ($slide < $total_slides - 1 && $slide_id != 'all') { echo "<a href='slideshow.php?slide_id=".$next_slide."&curdirpath=$pathurl'>"; } else { echo "<a href='slideshow.php?slide_id=0&curdirpath=$pathurl'>"; } if ($path == '/') { $path = ''; } list($width, $height) = getimagesize($image); // Auto resize if (isset($_SESSION["image_resizing"]) && $_SESSION["image_resizing"] == 'resizing') { ?> <script type="text/javascript"> var initial_width='<?php echo $width; ?>'; var initial_height='<?php echo $height; ?>'; var height = window.innerHeight -320; var width = window.innerWidth -360; if (initial_height>height || initial_width>width) { start_width=width; start_height=height; } else { start_width=initial_width; start_height=initial_height; } document.write('<img id="image" src="<?php echo 'download.php?doc_url='.$path.'/'.$image_files_only[$slide]; ?>" width="'+start_width+'" height="'+start_height+'" border="0" alt="<?php echo $image_files_only[$slide] ;?>">'); function resizeImage() { var resize_factor_width = width / initial_width; var resize_factor_height = height / initial_height; var delta_width = width - initial_width * resize_factor_height; var delta_height = height - initial_height * resize_factor_width; if (delta_width > delta_height) { width = Math.ceil(initial_width * resize_factor_height); height= Math.ceil(initial_height * resize_factor_height); } else if(delta_width < delta_height) { width = Math.ceil(initial_width * resize_factor_width); height = Math.ceil(initial_height * resize_factor_width); } else { width = Math.ceil(width); height = Math.ceil(height); } document.getElementById('image').style.height = height +"px"; document.getElementById('image').style.width = width +"px"; document.getElementById('td_image').style.background='none'; document.getElementById('image').style.visibility='visible'; }; if (initial_height>height || initial_width>width) { document.getElementById('image').style.visibility='hidden'; document.getElementById('td_image').style.background='url(../img/loadingAnimation.gif) center no-repeat'; document.getElementById('image').onload = resizeImage; window.onresize = resizeImage; } </script> <?php } else { echo "<img src='download.php?doc_url=$path/".$image_files_only[$slide]."' alt='".$image_files_only[$slide]."' border='0'".$height_width_tags.">"; } echo '</a>'; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'; echo $row['comment']; echo '</td>'; echo '<tr>'; echo '<td style="padding:10px;" align="center">'; echo Display::tag('h3', $row['title']); echo '</td>'; echo '</tr>'; echo '</tr>'; echo '</table>'; echo '<table align="center" border="0">'; if (api_is_allowed_to_edit(null, true)) { $aux = explode('.', htmlspecialchars($image_files_only[$slide])); $ext = $aux[count($aux) - 1]; if ($_SESSION['image_resizing'] == 'resizing') { $resize_info = get_lang('Resizing').'<br />'; $resize_widht = $_SESSION["image_resizing_width"].' x '; $resize_height = $_SESSION['image_resizing_height']; } elseif($_SESSION['image_resizing'] != 'noresizing'){ $resize_info = get_lang('Resizing').'<br />'; $resize_widht = get_lang('Auto').' x '; $resize_height = get_lang('Auto'); } else { $resize_info = get_lang('NoResizing').'<br />'; } echo '<tr>'; echo '<td align="center">'; echo '<a href="edit_document.php?'.api_get_cidreq().'&id='.$row['id'].'&origin=slideshow&origin_opt='.$edit_slide_id.'&"> <img src="../img/edit.gif" border="0" title="'.get_lang('Modify').'" alt="'.get_lang('Modify').'" /></a><br />'; echo $image_files_only[$slide].' <br />'; echo $width.' x '.$height.' <br />'; echo round((filesize($image)/1024), 2).' KB'; echo ' - '.$ext; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td align="center">'; echo $resize_info; echo $resize_widht; echo $resize_height; echo '</td>'; echo '</tr>'; } echo '</table>'; } else { Display::display_warning_message(get_lang('FileNotFound')); } } else { if ($slide_id != 'all') { Display::display_warning_message(get_lang('NoDataAvailable')); } } Display :: display_footer();