Преглед на файлове

Feature: Export LPs (htmls only) to PDF.
Adding new "pdf class" (just a wrapper of mpdf) in main/inc/pdf.lib.php, adding new course and platform setting (database changes) see BT#1617

Julio Montoya преди 14 години
родител
ревизия
78ed989e1d

+ 2 - 0
main/inc/lib/add_course.lib.inc.php

@@ -2177,6 +2177,8 @@ function fill_Db_course($course_db_name, $course_repository, $language, $default
     Database::query("INSERT INTO `".$TABLESETTING . "`(variable,value,category) VALUES ('display_info_advance_inside_homecourse',1,'thematic_advance')");
     Database::query("INSERT INTO `".$TABLESETTING . "`(variable,value,category) VALUES ('email_alert_students_on_new_homework',0,'work')");
     Database::query("INSERT INTO `".$TABLESETTING . "`(variable,value,category) VALUES ('enable_lp_auto_launch',0,'learning_path')");
+    Database::query("INSERT INTO `".$TABLESETTING . "`(variable,value,category) VALUES ('pdf_export_watermark_text','','learning_path')");
+                
 
     /*    Course homepage tools for platform admin only */
     /*    Group tool */

+ 21 - 0
main/inc/lib/document.lib.php

@@ -986,6 +986,27 @@ class DocumentManager {
 		}
 		return false;
 	}
+    
+    /**
+     * Gets the document data with a given id
+     *
+     * @param array $_course
+     * @param string $path
+     * @return int id of document / false if no doc found
+     */
+    public static function get_document_data_by_id($id,$course_code) {
+        $course_info = api_get_course_info($course_code);
+        $TABLE_DOCUMENT = Database :: get_course_table(TABLE_DOCUMENT, $course_info['dbName']);
+        $id = intval($id);
+        $sql = "SELECT * FROM $TABLE_DOCUMENT WHERE id  = $id";
+        $result = Database::query($sql);
+        if ($result && Database::num_rows($result) == 1) {
+            $row = Database::fetch_array($result,'ASSOC');
+            return $row;
+        }
+        return false;
+    }
+    
 
 	/**
 	 * Allow to set a specific document as a new template for FCKEditor for a particular user in a particular course

+ 1 - 1
main/inc/lib/export.lib.inc.php

@@ -1,7 +1,7 @@
 <?php
 /* See license terms in /license.txt */
 /**
-*	This is the export library for Dokeos.
+*	This is the export library for Chamilo.
 *	Include/require it in your code to use its functionality.
 *
 *	Several functions below are adaptations from functions distributed by www.nexen.net

+ 1 - 0
main/inc/lib/main_api.lib.php

@@ -1034,6 +1034,7 @@ function api_get_cidreq() {
  */
 function api_get_course_info($course_code = null) {
     if (!empty($course_code)) {
+        //global $_course;var_dump($_course);
         $course_code = Database::escape_string($course_code);
         $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
         $course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY);

+ 286 - 0
main/inc/lib/pdf.lib.php

@@ -0,0 +1,286 @@
+<?php
+/* See license terms in /license.txt */
+/**
+*   @package chamilo.library
+*/
+define('_MPDF_PATH', api_get_path(LIBRARY_PATH).'mpdf/');
+require_once _MPDF_PATH.'mpdf.php';
+
+class PDF {
+
+    private function __construct() {
+        
+    }
+    
+    
+    /**
+     * Converts an html file to a pdf
+     * @param   mixed  could be an html path or an array with html paths   
+     * @param   string  course code 
+     * @return  string  the pdf path
+     */    
+    public function html_to_pdf($html_file_array, $course_code = null) {  
+        
+        if (empty($html_file_array)) {
+        	return false;
+        }        
+        if (is_array($html_file_array)) {
+            if (count($html_file_array) == 0)
+        	   return false;
+        } else {
+            if (!file_exists($html_file_array)) {
+                return false;
+            }
+            //Converting the string into an array
+            $html_file_array = array($html_file_array);
+        }
+        
+        if (!empty($course_code)) {
+        	$course_data = api_get_course_info($course_code);
+        }
+        
+        //clean styles and javascript document
+        $clean_search = array (
+            '@<script[^>]*?>.*?</script>@si',
+            '@<style[^>]*?>.*?</style>@siU'
+            );
+        //mPDF($codepage='win-1252',$format='A4',$default_font_size=0,$default_font='',$mgl=15,$mgr=15,$mgt=16,$mgb=16,$mgh=9,$mgf=9, $orientation='P')         
+        $pdf = new mPDF('UTF-8', 'A4', '', '', 30, 20, 27, 25, 16, 13, 'P');
+        
+       // $pdf->SetBasePath($basehref);
+               
+        $pdf->directionality = api_get_text_direction(); // TODO: To be read from the html document.        
+        $pdf->useOnlyCoreFonts = true;        
+        $pdf->mirrorMargins = 1;            // Use different Odd/Even headers and footers and mirror margins
+                
+        $pdf->defaultheaderfontsize = 10;   // in pts
+        $pdf->defaultheaderfontstyle = BI;   // blank, B, I, or BI
+        $pdf->defaultheaderline = 1;        // 1 to include line below header/above footer        
+        
+        
+        $my_header = self::get_header($course_code);
+        $pdf->SetHeader($my_header);// ('{DATE j-m-Y}|{PAGENO}/{nb}|'.$title);
+        
+        $pdf->defaultfooterfontsize = 12;   // in pts
+        $pdf->defaultfooterfontstyle = B;   // blank, B, I, or BI
+        $pdf->defaultfooterline = 1;        // 1 to include line below header/above footer
+                
+        //@todo remove this and use a simpler way
+        $footer = array (
+          'odd' => array (
+            'L' => array (
+              'content' => '',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'C' => array (
+              'content' => '',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'R' => array (
+              'content' => '{PAGENO}',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'line' => 1,
+          ),
+         'even' => array (
+            'L' => array (
+              'content' => '',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'C' => array (
+              'content' => '',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'R' => array (
+              'content' => '{PAGENO}',
+              'font-size' => 10,
+              'font-style' => 'B',
+              'font-family' => 'serif',
+              'color'=>'#000000'
+            ),
+            'line' => 1,
+          ),
+        );       
+        
+        $pdf->SetFooter($footer);      // defines footer for Odd and Even Pages - placed at Outer margin http://mpdf1.com/manual/index.php?tid=151&searchstring=setfooter
+
+        if (api_get_setting('pdf_export_watermark_enable') == 'true') {
+            $watermark_file = self::get_watermark($course_code);
+            if (!empty($watermark_file)) {
+                //http://mpdf1.com/manual/index.php?tid=269&searchstring=watermark
+                $pdf->SetWatermarkImage($watermark_file);
+                $pdf->showWatermarkImage = true;
+            }
+        }
+       
+        /*$pdf->SetAuthor('Documents Chamilo');
+        $pdf->SetTitle('title');
+        $pdf->SetSubject('Exported from Chamilo Documents');
+        $pdf->SetKeywords('Chamilo Documents');
+        */        
+        foreach ($html_file_array as $html_file) {            
+            if (!file_exists($html_file)) {
+            	continue;
+            }
+            $file_info = pathinfo($html_file);
+            $dirname = str_replace("\\", '/', $file_info['dirname']);
+            $filename = $file_info['basename'];
+            $filename =str_replace('_',' ',$filename);
+            $extension = $file_info['extension'];        
+            if (!($extension == 'html' || $extension == 'htm')) {
+                return false;
+            }        
+            if ($extension == 'html'){
+                $filename =basename($filename,'.html');
+            } elseif($extension == 'htm'){
+                $filename =basename($filename,'.htm');
+            }
+            
+            $document_html = @file_get_contents($html_file);
+            $document_html = preg_replace($clean_search, '', $document_html);   
+            
+            //absolute path for frames.css //TODO: necessary?
+            $absolute_css_path=api_get_path(WEB_CODE_PATH).'css/'.api_get_setting('stylesheets').'/frames.css';
+            $document_html=str_replace('href="./css/frames.css"',$absolute_css_path, $document_html);
+            
+            //$document_html=str_replace('<link rel="stylesheet" http://my.chamilo.net/main/css/chamilo/frames.css type="text/css" />','', $document_html);
+
+            $document_html= str_replace('../','',$document_html);            
+            $document_path = api_get_path(WEB_COURSE_PATH).$course_data['path'].'/document/';
+                       
+            $doc = new DOMDocument();           
+            $result = @$doc->loadHTML($document_html);
+                                 
+            //Fixing only images @todo do the same thing with other elements
+            $elements = $doc->getElementsByTagName('img');
+            $replace_img_elements = array();
+            if (!empty($elements)) {
+                foreach($elements as $item) {                    
+                    $old_src = $item->getAttribute('src');
+                    //$old_src= str_replace('../','',$old_src);
+                    if (strrpos('http', $old_src) === false) {
+                        $document_html= str_replace($old_src, $document_path.$old_src, $document_html);                                                       	
+                    }               
+                }
+            }
+              
+            //replace relative path by absolute path for resources
+            //$document_html= str_replace('src="/chamilo/main/default_course_document/', 'temp_template_path', $document_html);// before save src templates not apply
+            //$document_html= str_replace('src="/', 'temp_template_path', $document_html);// before save src templates not apply
+            //$document_html= str_replace('src="/chamilo/main/default_course_document/', 'temp_template_path', $document_html);// before save src templates not apply
+            
+            //$src_http_www= 'src="'.api_get_path(WEB_COURSE_PATH).$course_data['path'].'/document/';
+            //$document_html= str_replace('src="',$src_http_www, $document_html);
+            //$document_html= str_replace('temp_template_path', 'src="/main/default_course_document/', $document_html);// restore src templates
+            
+            api_set_encoding_html($document_html, 'UTF-8'); // The library mPDF expects UTF-8 encoded input data.        
+            $title = api_get_title_html($document_html, 'UTF-8', 'UTF-8');  // TODO: Maybe it is better idea the title to be passed through
+                                                                            // $_GET[] too, as it is done with file name.
+                                                                            // At the moment the title is retrieved from the html document itself.
+            if (empty($title)) {
+                $title = $filename; // Here file name is expected to contain ASCII symbols only.
+            }            
+            //var_dump($document_html);
+            $pdf->WriteHTML($document_html,2);
+        }
+        $output_file = 'pdf_'.date('Y-m-d-his').'.pdf';
+        $result = $pdf->Output($output_file, 'D');       /// F to save the pdf in a file              
+        exit;
+    }    
+    
+    /**
+     * Gets the watermark from the platform or a course
+     * @param   string  course code (optional)
+     * @param   mixed   web path of the watermark image, false if there is nothing to return
+     */
+    public function get_watermark($course_code = null) {
+      $web_path = false;
+      if (!empty($course_code) && api_get_setting('pdf_export_watermark_by_course') == 'true') {
+            $course_info = api_get_course_info($course_code);
+            $store_path = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/pdf_watermark.png';   // course path
+            if (file_exists($store_path))
+                $web_path   = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/pdf_watermark.png';
+        } else {
+            $store_path = api_get_path(SYS_CODE_PATH).'default_course_document/pdf_watermark.png';   // course path
+            if (file_exists($store_path))                   
+                $web_path   = api_get_path(WEB_CODE_PATH).'default_course_document/pdf_watermark.png';
+        }
+        return $store_path;        
+    }
+    
+    /**
+     * Uploads the pdf watermark 
+     */
+    public function upload_watermark($filename, $source_file, $course_code = null) {        
+        if (!empty($course_code) && api_get_setting('pdf_export_watermark_by_course') == 'true') {
+            $course_info = api_get_course_info($course_code);
+            $store_path = api_get_path(SYS_COURSE_PATH).$course_info['path'];   // course path
+            $web_path   = api_get_path(WEB_COURSE_PATH).$course_info['path'].'pdf_watermark.png';
+        } else {
+            $store_path = api_get_path(SYS_CODE_PATH).'default_course_document';   // course path	
+            $web_path   = api_get_path(WEB_CODE_PATH).'default_course_document/pdf_watermark.png';
+        }
+        
+        $course_image = $store_path.'/pdf_watermark.png';
+        $extension = strtolower(substr(strrchr($filename, '.'), 1));
+        $result = false;
+        $allowed_picture_types = array ('jpg', 'jpeg', 'png', 'gif');
+        if (in_array($extension, $allowed_picture_types)) {
+            if (file_exists($course_image)) {
+                @unlink($course_image);
+            }            
+            if ($extension != 'png') {
+                // convert image to png extension
+                if ($extension == 'jpg' || $extension == 'jpeg') {
+                    $image = imagecreatefromjpeg($source_file);
+                } else {
+                    $image = imagecreatefromgif($source_file);
+                }
+                ob_start();
+                imagepng($image);
+                $imagevariable = ob_get_contents();
+                ob_end_clean();
+                // save picture
+                if (@file_put_contents($course_image, $imagevariable)) {
+                    $result = true;
+                }
+            } else {
+                $result = @move_uploaded_file($source_file, $course_image);
+            }
+        }
+        if ($result) {
+        	$result = $web_path;
+        }
+        return $result;
+    }
+    /**
+     * Returns the default header
+     */
+    public function get_header($course_code = null) {
+        $header = '';
+        
+    	if (!empty($course_code) && api_get_setting('pdf_export_watermark_by_course') == 'true') {
+            $header = api_get_course_setting('pdf_export_watermark_text');                
+        } else {
+        	$header = api_get_setting('pdf_export_watermark_text');
+        }
+        return $header;
+        
+    } 
+}
+?>

+ 1 - 3
main/inc/lib/xht.lib.php

@@ -7,7 +7,6 @@
 */
 
 /**
-==============================================================================
 *	This is an XML HTML template library.
 *	Include/require it in your code to use its functionality.
 *
@@ -20,8 +19,7 @@
 *   Assign xht_xmldoc (, xht_get_lang, xht_resource, xht_dbgn)
 *   before calling the class methods.
 *
-*	@package dokeos.library
-==============================================================================
+*	@package chamilo.library
 */
 
 

+ 1 - 3
main/inc/lib/xmd.lib.php

@@ -7,13 +7,11 @@
 */
 
 /**
-==============================================================================
 *	This is the XML Dom library for Dokeos.
 *	Include/require it in your code to use its functionality.
 *
 *	@author René Haentjens
-*	@package dokeos.library
-==============================================================================
+*	@package chamilo.library
 */
 
 class xmddoc

+ 9 - 2
main/install/db_main.sql

@@ -776,7 +776,10 @@ VALUES
 ('force_wiki_paste_as_plain_text',NULL,'radio','Editor','true','ForceWikiPasteAsPlainTextTitle','ForceWikiPasteAsPlainTextComment',NULL,NULL, 0),
 ('enabled_googlemaps',NULL,'radio','Editor','true','EnabledGooglemapsTitle','EnabledGooglemapsComment',NULL,NULL, 0),
 ('enabled_imgmap',NULL,'radio','Editor','true','EnabledImageMapsTitle','EnabledImageMapsComment',NULL,NULL, 0),
-('enabled_support_svg',NULL,'radio','Tools','true','EnabledSVGTitle','EnabledSVGComment',NULL,NULL, 0),
+('enabled_support_svg',				NULL,'radio',		'Tools',	'true',	'EnabledSVGTitle','EnabledSVGComment',NULL,NULL, 0),
+('pdf_export_watermark_enable',		NULL,'radio',		'Platform',	'false','PDFExportWatermarkEnableTitle',	'PDFExportWatermarkEnableComment',	'platform',NULL, 1),
+('pdf_export_watermark_by_course',	NULL,'radio',		'Platform',	'false','PDFExportWatermarkByCourseTitle',	'PDFExportWatermarkByCourseComment','platform',NULL, 1),
+('pdf_export_watermark_text',		NULL,'textfield',	'Platform',	'',		'PDFExportWatermarkTextTitle',		'PDFExportWatermarkTextComment',	'platform',NULL, 1),
 ('chamilo_database_version', NULL, 'textfield', NULL, '1.8.8.13050', 'DokeosDatabaseVersion', '', NULL, NULL, 0);
 
 
@@ -1011,7 +1014,11 @@ VALUES
 ('enabled_imgmap','true','Yes'),
 ('enabled_imgmap','false','No'),
 ('enabled_support_svg','true','Yes'),
-('enabled_support_svg','false','No');
+('enabled_support_svg','false','No'),
+('pdf_export_watermark_enable','true','Yes'),
+('pdf_export_watermark_enable','false','No'),
+('pdf_export_watermark_by_course','true','Yes'),
+('pdf_export_watermark_by_course','false','No');
 
 UNLOCK TABLES;
 

+ 14 - 0
main/install/migrate-db-1.8.7-1.8.8-pre.sql

@@ -70,6 +70,18 @@ INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_im
 INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_support_svg',NULL,'radio','Editor','true','EnabledSVGTitle','EnabledSVGComment',NULL,NULL, 0);
 INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_svg', 'true', 'Yes');
 INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_svg', 'false', 'No');
+
+INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_enable',	NULL,'radio',		'Platform',	'false','PDFExportWatermarkEnableTitle',	'PDFExportWatermarkEnableComment','platform',NULL,  1);
+INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_enable','true','Yes');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_enable','false','No');
+
+INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_by_course',	NULL,'radio',		'Platform',	'false','PDFExportWatermarkByCourseTitle',	'PDFExportWatermarkByCourseComment','platform',NULL, 1);
+INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_by_course','true','Yes');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_by_course','false','No');
+
+INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_text',		NULL,'textfield',	'Platform',	'',		'PDFExportWatermarkTextTitle',		'PDFExportWatermarkTextComment','platform',NULL, 	1);
+
+
 ALTER TABLE personal_agenda ADD PRIMARY KEY (id);
 
 -- xxSTATSxx
@@ -92,3 +104,5 @@ ALTER TABLE tool MODIFY COLUMN category varchar(20) not null default 'authoring'
 ALTER TABLE lp ADD COLUMN autolunch INT DEFAULT 0;
 
 INSERT INTO course_setting(variable,value,category) VALUES ('enable_lp_auto_launch',0,'learning_path');
+INSERT INTO course_setting(variable,value,category) VALUES ('pdf_export_watermark_text','','course');
+

+ 36 - 3
main/newscorm/learnpath.class.php

@@ -19,7 +19,7 @@
 class learnpath {
 
     public $attempt = 0; // The number for the current ID view.
-    public $cc; // Course (code) this learnpath is located in.
+    public $cc; // Course (code) this learnpath is located in. @todo change name for something more comprensible ...
     public $current; // Id of the current item the user is viewing.
     public $current_score; // The score of the current item.
     public $current_time_start; // The time the user loaded this resource (this does not mean he can see it yet).
@@ -8356,6 +8356,37 @@ EOD;
 
         DocumentManager::file_send_for_download($temp_zip_file, true, $name);
     }
+    
+    public function scorm_export_to_pdf($lp_id) {
+        $lp_id = intval($lp_id);
+        $files_to_export = array();
+        $course_data = api_get_course_info($this->cc);
+        
+        $scorm_path = api_get_path(SYS_COURSE_PATH).$course_data['path'].'/scorm/'.$this->path;
+        require_once api_get_path(LIBRARY_PATH).'document.lib.php';
+        foreach($this->items as $item) {            
+            //Getting documents from a LP with chamilo documents
+            switch ($item->type) {
+                case 'document':
+                    $file_data = DocumentManager::get_document_data_by_id($item->path, $this->cc);
+                    $file_path = api_get_path(SYS_COURSE_PATH).$course_data['path'].'/document'.$file_data['path'];
+                    if (file_exists($file_path)) {               
+                        $files_to_export[] = $file_path;
+                    }
+                    break;
+                case 'sco':             
+                    $file_path = $scorm_path.'/'.$item->path;
+                    if (file_exists($file_path)) {               
+                        $files_to_export[] = $file_path;
+                    }
+                    break;
+                    
+            }
+        }
+        require_once api_get_path(LIBRARY_PATH).'pdf.lib.php';      
+        $result = PDF::html_to_pdf($files_to_export, $this->cc);
+        return $result;
+    }
 
     /**
      * Temp function to be moved in main_api or the best place around for this. Creates a file path
@@ -8496,11 +8527,13 @@ EOD;
         
         //Setting everything to autolunch = 0
         $attributes['autolunch'] = 0;
-        Database::update_query($lp_table, $attributes);
+        $where = array('session_id = ? '=> api_get_session_id());
+        Database::update_query($lp_table, $attributes,$where);
         if ($status == 1) {
             //Setting my lp_id to autolunch = 1        
             $attributes['autolunch'] = 1;
-            Database::update_query($lp_table, $attributes, " id = $lp_id" );
+            $where = array('id = ? AND session_id = ? '=> array($lp_id, api_get_session_id()));
+            Database::update_query($lp_table, $attributes, $where );
         }
     }
 }

+ 2 - 1
main/newscorm/learnpathList.class.php

@@ -92,7 +92,8 @@ class learnpathList {
                 'lp_scorm_debug'    => $row['debug'],
                 'lp_display_order'  => $row['display_order'],
                 'lp_preview_image'  => stripslashes($row['preview_image']),
-                'autolaunch'        => $row['autolunch']
+                'autolaunch'        => $row['autolunch'],
+                'session_id'        => $row['session_id']
                 );
             $names[$row['name']] = $row['id'];
            }

+ 31 - 44
main/newscorm/lp_controller.php

@@ -197,6 +197,7 @@ $is_allowed_to_edit = api_is_allowed_to_edit(null, true);
 
 $action = (!empty($_REQUEST['action']) ? $_REQUEST['action'] : '');
 switch ($action) {
+    
     case 'add_item':
 
         if (!$is_allowed_to_edit) {
@@ -283,27 +284,36 @@ switch ($action) {
         break;
 
     case 'admin_view':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
         }
-
         if ($debug > 0) error_log('New LP - admin_view action triggered', 0);
-
         if (!$lp_found) { error_log('New LP - No learnpath given for admin_view', 0); require 'lp_list.php'; }
         else {
             $_SESSION['refresh'] = 1;
             require 'lp_admin_view.php';
         }
-
-        break;
-
+        break;       
+         
+    case 'auto_launch':
+        if (api_get_course_setting('enable_lp_auto_launch')) {  
+            if (!$is_allowed_to_edit) {
+                api_not_allowed(true);
+            }
+            if ($debug > 0) error_log('New LP - export action triggered', 0);
+            if (!$lp_found) { error_log('New LP - No learnpath given for set_autolunch', 0); require 'lp_list.php'; }
+            else {            
+                $_SESSION['oLP']->set_autolunch($_GET['lp_id'], $_GET['status']);            
+                require 'lp_list.php';
+                exit;
+            }
+        }
+    break;
+    
     case 'build':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
         }
-
         if ($debug > 0) error_log('New LP - build action triggered', 0);
 
         if (!$lp_found) { error_log('New LP - No learnpath given for build', 0); require 'lp_list.php'; }
@@ -311,47 +321,37 @@ switch ($action) {
             $_SESSION['refresh'] = 1;
             require 'lp_build.php';
         }
-
         break;
 
     case 'delete_item':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
         }
-
         if ($debug > 0) error_log('New LP - delete item action triggered', 0);
-
         if (!$lp_found) { error_log('New LP - No learnpath given for delete item', 0); require 'lp_list.php'; }
         else {
             $_SESSION['refresh'] = 1;
-
             if (is_numeric($_GET['id'])) {
                 $_SESSION['oLP']->delete_item($_GET['id']);
                 $is_success = true;
             }
-
             if (isset($_GET['view']) && $_GET['view'] == 'build') {
                 require 'lp_build.php';
             } else {
                 require 'lp_admin_view.php';
             }
         }
-
         break;
-
+        
     case 'edit_item':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
-        }
-
+        }        
         if ($debug > 0) error_log('New LP - edit item action triggered', 0);
 
         if (!$lp_found) { error_log('New LP - No learnpath given for edit item', 0); require 'lp_list.php'; }
         else {
             $_SESSION['refresh'] = 1;
-
             if (isset($_POST['submit_button']) && !empty($_POST['title'])) {
                 //$_SESSION['oLP']->edit_item($_GET['id'], $_POST['parent'], $_POST['previous'], $_POST['title'], $_POST['description'], $_POST['prerequisites']);
                 // TODO: mp3 edit
@@ -364,22 +364,18 @@ switch ($action) {
                 }
                 $is_success = true;
             }
-
             if (isset($_GET['view']) && $_GET['view'] == 'build') {
                 require 'lp_edit_item.php';
             } else {
                 require 'lp_admin_view.php';
             }
         }
-
         break;
 
     case 'edit_item_prereq':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
         }
-
         if ($debug > 0) error_log('New LP - edit item prereq action triggered', 0);
 
         if (!$lp_found) { error_log('New LP - No learnpath given for edit item prereq', 0); require 'lp_list.php'; }
@@ -390,26 +386,21 @@ switch ($action) {
             }
             require 'lp_edit_item_prereq.php';
         }
-
         break;
 
     case 'move_item':
-
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
         }
-
         if ($debug > 0) error_log('New LP - move item action triggered', 0);
 
         if (!$lp_found) { error_log('New LP - No learnpath given for move item', 0); require 'lp_list.php'; }
         else {
             $_SESSION['refresh'] = 1;
-
             if (isset($_POST['submit_button'])) {
                 $_SESSION['oLP']->edit_item($_GET['id'], $_POST['parent'], $_POST['previous'], $_POST['title'], $_POST['description']);
                 $is_success = true;
             }
-
             if (isset($_GET['view']) && $_GET['view'] == 'build') {
                 require 'lp_move_item.php';
             } else {
@@ -422,9 +413,7 @@ switch ($action) {
                 require 'lp_admin_view.php';
             }
         }
-
         break;
-
     case 'view_item':
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);
@@ -463,22 +452,20 @@ switch ($action) {
             //require 'lp_list.php';
         }
         break;
-        
-    case 'auto_launch':
-        if (api_get_course_setting('enable_lp_auto_launch')) {  
-            if (!$is_allowed_to_edit) {
-                api_not_allowed(true);
-            }
-            if ($debug > 0) error_log('New LP - export action triggered', 0);
-            if (!$lp_found) { error_log('New LP - No learnpath given for set_autolunch', 0); require 'lp_list.php'; }
-            else {            
-                $_SESSION['oLP']->set_autolunch($_GET['lp_id'], $_GET['status']);            
-                require 'lp_list.php';
-                exit;
+    case 'export_to_pdf':
+        if (!$is_allowed_to_edit) {
+            api_not_allowed(true);
+        }
+        if ($debug > 0) error_log('New LP - export action triggered', 0);
+        if (!$lp_found) { error_log('New LP - No learnpath given for export_to_pdf', 0); require 'lp_list.php'; }
+        else {
+            $result = $_SESSION['oLP']->scorm_export_to_pdf($_GET['lp_id']);
+            if (!$result) {
+                require 'lp_list.php';            	
             }
+            exit;
         }
         break;
-
     case 'delete':
         if (!$is_allowed_to_edit) {
             api_not_allowed(true);

+ 9 - 4
main/newscorm/lp_list.php

@@ -165,7 +165,6 @@ if (is_array($flat_list)) {
     $current        = 0;
     $autolunch_exists = false;
     foreach ($flat_list as $id => $details) {
-        
         // Validacion when belongs to a session
         $session_img = api_get_session_image($details['lp_session'], $_user['status']);
 
@@ -416,8 +415,7 @@ if (is_array($flat_list)) {
             
             /* Auto Lunch LP code*/
             $lp_auto_lunch_icon = '';            
-            if (api_get_course_setting('enable_lp_auto_launch')) {   
-                            
+            if (api_get_course_setting('enable_lp_auto_launch')) {                            
                 if ($details['autolaunch'] == 1 && $autolunch_exists == false) {  
                     $autolunch_exists = true;                            
                     $lp_auto_lunch_icon = '<a href="'.api_get_self().'?'.api_get_cidreq().'&action=auto_launch&status=0&lp_id='.$id.'">
@@ -427,7 +425,14 @@ if (is_array($flat_list)) {
                         <img src="../img/launch_na.png" border="0" title="'.get_lang('EnableLPAutoLaunch').'" /></a>'; 
                 }   
             }
+            
+            if (api_get_setting('pdf_export_watermark_enable') == 'true') {
+            	  $export_icon = '<a href="'.api_get_self().'?'.api_get_cidreq().'&action=export_to_pdf&lp_id='.$id.'"><img src="../img/file_pdf.gif" border="0" title="'.get_lang('ExportToPDF').'" /></a>'; 
+            }
+            
+            
             /* COLUMN ORDER	 */
+            
             // Only active while session mode is not active
 
             if ($current_session == 0) {
@@ -456,7 +461,7 @@ if (is_array($flat_list)) {
             }
         } // end if ($is_allowedToEdit)
         
-        echo $dsp_line.$dsp_progress.$dsp_desc.$dsp_export.$dsp_edit.$dsp_build.$dsp_visible.$dsp_publish.$dsp_reinit.$dsp_default_view.$dsp_debug.$dsp_edit_lp.$dsp_delete.$dsp_disk.$lp_auto_lunch_icon.$dsp_order.$dsp_edit_close;
+        echo $dsp_line.$dsp_progress.$dsp_desc.$dsp_export.$dsp_edit.$dsp_build.$dsp_visible.$dsp_publish.$dsp_reinit.$dsp_default_view.$dsp_debug.$dsp_edit_lp.$dsp_delete.$dsp_disk.$lp_auto_lunch_icon.$export_icon.$dsp_order.$dsp_edit_close;
 
         echo "</tr>\n";
         $current ++; //counter for number of elements treated