(no commit message)
authorHarris Wong <hwong@ocad.ca>
Fri, 8 Oct 2010 18:42:19 +0000 (18:42 -0000)
committerHarris Wong <hwong@ocad.ca>
Fri, 8 Oct 2010 18:42:19 +0000 (18:42 -0000)
docs/include/classes/ContentOutputParser.class.php [new file with mode: 0644]

diff --git a/docs/include/classes/ContentOutputParser.class.php b/docs/include/classes/ContentOutputParser.class.php
new file mode 100644 (file)
index 0000000..b756030
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/************************************************************************/
+/* ATutor                                                               */
+/************************************************************************/
+/* Copyright (c) 2002 - 2009                                            */
+/* Inclusive Design Institute                                           */
+/*                                                                      */
+/* 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.                        */
+/************************************************************************/
+// $Id: ContentOutputParser.class.php 10278 2010-10-04 16:47:45Z hwong $
+
+class ContentOutputParser {
+    function ContentOutputParser(){}
+    function openHandler(& $parser,$name,$attrs) {
+               global $my_files;
+
+               $name = strtolower($name);
+               $attrs = array_change_key_case($attrs, CASE_LOWER);
+
+        /*
+            the following resources are to be identified:
+            even if some of these can't be images, they can still be files in the content dir.
+            theoretically the only urls we wouldn't deal with would be for a <!DOCTYPE and <form>
+
+            img                => src
+            a          => href                         // ignore if href doesn't exist (ie. <a name>)
+            object     => data | classid       // probably only want data
+            applet     => classid | archive                    // whatever these two are should double check to see if it's a valid file (not a dir)
+            link       => href
+            script     => src
+            form       => action
+            input      => src
+            iframe     => src
+
+        */
+               $elements = array(      'img'           => 'src',
+                                                       'a'                     => 'href',                              
+                                                       'object'        => array('data', 'classid'),
+                                                       'applet'        => array('classid', 'archive'),
+                                                       'link'          => 'href',
+                                                       'script'        => 'src',
+                                                       'form'          => 'action',
+                                                       'input'         => 'src',
+                                                       'iframe'        => 'src',
+                                                       'embed'         => 'src',
+                                                       'param'         => 'value');
+       
+               /* check if this attribute specifies the files in different ways: (ie. java) */
+               if (is_array($elements[$name])) {
+                       $items = $elements[$name];
+                       foreach ($items as $item) {
+                               if ($attrs[$item] != '') {
+
+                                       /* some attributes allow a listing of files to include seperated by commas (ie. applet->archive). */
+                                       if (strpos($attrs[$item], ',') !== false) {
+                                               $files = explode(',', $attrs[$item]);
+                                               foreach ($files as $file) {
+                                                       $my_files[] = trim($file);
+                                               }
+                                       } else {
+                                               $my_files[] = $attrs[$item];
+                                       }
+                               }
+                       }
+               } else if (isset($elements[$name]) && ($attrs[$elements[$name]] != '')) {
+                       //hack, if param[name]=src or none <param> tag, extract. Skip all other <param> attributes.  
+                       if ($name!='param' || $attrs['name']=='src'){
+                               //skip glossary.html, tweak to accomodate atutor imscp; also skip repeated entries.
+                               //skip javascript: links, void();, #, mailto:
+                               if (strpos($attrs[$elements[$name]], 'glossary.html')===false 
+                                   && !in_array($attrs[$elements[$name]], $my_files)
+                                   && $attrs[$elements[$name]]!='#'
+                                   && strpos($attrs[$elements[$name]], 'javascript:')===false 
+                                   && strpos($attrs[$elements[$name]], 'mailto:')===false 
+                                   && strpos($attrs[$elements[$name]], 'void(')===false 
+                                  ){
+                                       $my_files[] = $attrs[$elements[$name]];
+                               }
+                       }
+               }
+       }
+       
+       function closeHandler(& $parser,$name) { }
+}
+?>
\ No newline at end of file