433 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			433 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
| 
 | |
| Copyright 2018 Murray Hayes
 | |
| 
 | |
| Redistribution and use in source and binary forms, with or without
 | |
| modification, are permitted provided that the following conditions
 | |
| are met:
 | |
| 
 | |
| 1. Redistributions of source code must retain the above copyright
 | |
| notice, this list of conditions and the following disclaimer.
 | |
| 
 | |
| 2. Redistributions in binary form must reproduce the above copyright
 | |
| notice, this list of conditions and the following disclaimer in the
 | |
| documentation and/or other materials provided with the distribution.
 | |
| 
 | |
| 3. Neither the name of the copyright holder nor the names of its
 | |
| contributors may be used to endorse or promote products derived from
 | |
| this software without specific prior written permission.
 | |
| 
 | |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | |
| FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 | |
| COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | |
| BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | |
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | |
| ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
| POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| session_start();
 | |
| 
 | |
| include_once "utils.php";
 | |
| include_once "DOMUtils.php";
 | |
| include_once "consts.php";
 | |
| include_once "database.php";
 | |
| include_once "adminUtils.php";
 | |
| include_once "trainingUtils.php";
 | |
| 
 | |
| $doc = returnDoc();
 | |
| $root = returnRoot($doc);
 | |
| 
 | |
| //if (!isset($_SESSION['login']) || !isset($_SESSION['MemberID']))
 | |
| if (!validateSession())
 | |
|   if (!isset($_SESSION['cookieMonster']))
 | |
|     generateCookieMonster();
 | |
|   else
 | |
|     generateLoginRedirect();
 | |
| else
 | |
|   if (($_SESSION['login'] === TRUE) && returnAdminStatus($_SESSION['MemberID']))
 | |
|   {
 | |
|     if ($_SERVER['REQUEST_METHOD'] == 'POST')
 | |
|     {
 | |
|       /*
 | |
|        *  validate form data.
 | |
|        */
 | |
|       if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['description'])) 
 | |
|         try
 | |
|         {
 | |
|           $insert = TRUE;
 | |
|           //print_r(PDO::getAvailableDrivers());
 | |
|           $dbh = returnDatabaseHandel();
 | |
|           //$dbh->beginTransaction();
 | |
|           $sth = $dbh->prepare("SELECT * FROM courses");
 | |
|           $count = 0;
 | |
|           if ($sth->execute())
 | |
|           {
 | |
|             while ($row = $sth->fetch(PDO::FETCH_ASSOC))
 | |
|             {
 | |
|               if ($row['id'] === $_POST['id'])
 | |
|               {
 | |
|                 $insert = FALSE;
 | |
|               }
 | |
|             }
 | |
|             //echo "here";
 | |
|             if ($insert)
 | |
|             {
 | |
|               $sth = $dbh->prepare("INSERT INTO courses (id, name, description) values (?, ?, ?)");
 | |
|               $sth->execute(array($_POST['id'], $_POST['name'], $_POST['description']));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|               $dbh->beginTransaction();
 | |
|               $sth = $dbh->prepare("UPDATE courses SET name = ?, description = ? WHERE id = ?");
 | |
|               $sth->execute(array($_POST['name'], $_POST['description'], $_POST['id']));
 | |
|               //print_r($sth->errorInfo());
 | |
|               $dbh->commit();
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|         catch (Exception $e)
 | |
|         {
 | |
|           print ("Fail! " . $e->getMessage() . "\n");
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     $root = $doc->appendChild($root);
 | |
|     $root->appendChild(generateHead($doc));
 | |
|     
 | |
|     $body = $doc->createElement('body');
 | |
|     $root->appendChild($body);
 | |
|     
 | |
|     //$body->appendChild(generateMastHead($doc, $baseDir));
 | |
|     
 | |
|     //$body->appendChild($doc->createElement('hr'));
 | |
|     /*
 | |
|     $body->appendChild(generateMemberNavigationBar($doc));
 | |
|     if (returnInstructorStatus($_SESSION['MemberID']))
 | |
|       if ($_SESSION['sub_nav'] === "Admin")
 | |
|         $body->appendChild(generateAdminNavigationBar($doc));
 | |
|       else
 | |
|         if ($_SESSION['sub_nav'] === "Director")
 | |
|           $body->appendChild(generateDirectorNavigationBar($doc));
 | |
|         else
 | |
|           $body->appendChild(generateTrainingNavigationBar($doc));
 | |
|     else 
 | |
|       if (returnAdminStatus($_SESSION['memberID']))
 | |
|         $body->appendChild(generateAdminNavigationBar($doc));
 | |
|     */
 | |
|       
 | |
|     /*
 | |
|      * do not set session sub nav
 | |
|      */
 | |
|     
 | |
|     //$body->appendChild(generateSelectedMenuBar($doc));
 | |
|       
 | |
|     $body->appendChild(generateTopStickyDiv($doc, $baseDir));
 | |
|     
 | |
|     /*
 | |
|      *  Insert content here.
 | |
|      */
 | |
|     
 | |
|     $bodyDiv = $doc->createElement('div');
 | |
|     $bodyDiv->setAttribute('class', 'BodyDiv');
 | |
|     
 | |
|     /*
 | |
|     $tableDiv = $doc->createElement('div');
 | |
|     //$tableDiv->setAttribute('display', 'block');
 | |
|     $tableDiv->setAttribute('class', 'FloatLeft50Div');
 | |
|     $table = $doc->createElement('table');
 | |
|     //$table.setAttribute('class'
 | |
|     //$table->setAttribute('class', 'FloatLeft50Div');
 | |
|     $thead = $doc->createElement('thead');
 | |
|     $tr = $doc->createElement('tr');
 | |
|     
 | |
|     $th = $doc->createElement('th');
 | |
|     $a = $doc->createElement('a');
 | |
|     $a->appendChild($doc->createTextNode('ID'));
 | |
|     $th->appendChild($a);
 | |
|     $tr->appendChild($th);
 | |
|     
 | |
|     $th = $doc->createElement('th');
 | |
|     $a = $doc->createElement('a');
 | |
|     $a->appendChild($doc->createTextNode('Course Name'));
 | |
|     $th->appendChild($a);
 | |
|     $tr->appendChild($th);
 | |
|     
 | |
|     $th = $doc->createElement('th');
 | |
|     $a = $doc->createElement('a');
 | |
|     $a->appendChild($doc->createTextNode('Description'));
 | |
|     $th->appendChild($a);
 | |
|     $tr->appendChild($th);
 | |
|   
 | |
|     $thead->appendChild($tr);
 | |
|     $table->appendChild($thead);
 | |
|     
 | |
|     $tbody = $doc->createElement('tbody');
 | |
|     
 | |
|     $tint = false;
 | |
|     
 | |
|     $edit = NULL;
 | |
|     $highestID = 0;
 | |
|     
 | |
|     try
 | |
|     {
 | |
|       //print_r(PDO::getAvailableDrivers());
 | |
|       $dbh = new PDO($dsn, $dbUserName, $dbPassWord, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
 | |
|       $dbh->beginTransaction();
 | |
|       $sth = $dbh->prepare("SELECT * FROM courses"); 
 | |
|       $count = 0;
 | |
| 
 | |
|       if ($sth->execute())
 | |
|       {
 | |
|         while ($row = $sth->fetch(PDO::FETCH_ASSOC))
 | |
|         {
 | |
|           if (isset($_GET['id']))
 | |
|             if ($row['id'] === $_GET['id'])
 | |
|               $edit = $row;
 | |
|               
 | |
|           $count++;
 | |
|           if ($row['id'] > $highestID)
 | |
|             $highestID = $row['id'];
 | |
|           
 | |
|           $tr = $doc->createElement('tr');
 | |
|           
 | |
|           if ($tint === true)
 | |
|           {
 | |
|             $tr->setAttribute('class', 'AlternateRow');
 | |
|           }
 | |
|           
 | |
|           $td = $doc->createElement('td');
 | |
|           $rr = $doc->createElement('a');
 | |
|           $rr->setAttribute('href', "courseEditor.php?id=${row['id']}");
 | |
|           $rr->appendChild($doc->createTextNode($row['id']));
 | |
|           $td->appendChild($rr);
 | |
|           $tr->appendChild($td);
 | |
|                         
 | |
|           $td = $doc->createElement('td');
 | |
|           $td->appendChild($doc->createTextNode($row['name']));
 | |
|           $tr->appendChild($td);
 | |
|           
 | |
|           $td = $doc->createElement('td');
 | |
|           $td->appendChild($doc->createTextNode($row['description']));
 | |
|           $tr->appendChild($td);
 | |
|           
 | |
|           $tbody->appendChild($tr);
 | |
|         }
 | |
|       }
 | |
|       $table->appendChild($tbody);
 | |
|       $tableDiv->appendChild($table);
 | |
|     }
 | |
|     catch (Exception $e)
 | |
|     {
 | |
|       echo "Failed!" . $e->getMessage() . "\n";
 | |
|     }*/
 | |
|     if (isset($_GET['id']))
 | |
|       $edit = getCourseRowByID($_GET['id']);
 | |
|     else
 | |
|       $edit = NULL;
 | |
|     $highestID = getHighestCourseID();
 | |
|     
 | |
|     $bodyDiv->appendChild(generateCourseTable($doc));
 | |
|     
 | |
|     
 | |
|     if (!($edit === NULL))
 | |
|     {
 | |
|       $editorDiv = $doc->createElement('div');
 | |
|       $editorDiv->setAttribute('id', 'CourseEditorDiv');
 | |
|       $form = $doc->createElement('form');
 | |
|       $form->setAttribute('action', 'courseEditor.php');
 | |
|       $form->setAttribute('method', 'post');
 | |
|       $label = $doc->createElement('H3');
 | |
|       $label->appendChild($doc->createTextNode("Course ID: " . $edit['id']));
 | |
|       $form->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'hidden');
 | |
|       $input->setAttribute('name', 'id');
 | |
|       $input->setAttribute('readonly', 'readonly');
 | |
|       $input->setAttribute('value', $edit['id']);
 | |
|       $form->appendChild($input);
 | |
|       $fieldSet = $doc->createElement('fieldset');
 | |
|       //$fieldSet->setAttribute('style', 'width:200px; max-width:300px;'); //margin-top:0.5em;');
 | |
|       $fieldSetDiv = $doc->createElement('div');
 | |
|       
 | |
|       $label = $doc->createElement('label', 'Course Name:');
 | |
|       $label->setAttribute('for', 'name');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'name');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       if (isset($edit['name']))
 | |
|         $input->setAttribute('value', $edit['name']);
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|   
 | |
|       /*
 | |
|       $label = $doc->createElement('label', 'Description:');
 | |
|       $label->setAttribute('for', 'description');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'description');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       if (isset($edit['description']))
 | |
|         $input->setAttribute('value', $edit['description']);
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       */
 | |
|       
 | |
|       $label = $doc->createElement('label', 'Description:');
 | |
|       $label->setAttribute('for', 'description');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('textarea');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'description');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('rows', '6');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       if (isset($edit['description']))
 | |
|         $input->appendChild($doc->createTextNode($edit['description']));
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|         
 | |
|       
 | |
|       $fieldSet->appendChild($fieldSetDiv);
 | |
|       
 | |
|       $form->appendChild($fieldSet);
 | |
|       
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'reset');
 | |
|       $form->appendChild($input);
 | |
|       
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'submit');
 | |
|       $form->appendChild($input);
 | |
|       $editorDiv->appendChild($form);
 | |
|       $bodyDiv->appendChild($editorDiv);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       $nextHighestID = $highestID + 1;
 | |
|       $editorDiv = $doc->createElement('div');
 | |
|       $editorDiv->setAttribute('id', 'CourseEditorDiv');
 | |
|       $editorDiv->setAttribute('class', 'sticky');
 | |
|       $form = $doc->createElement('form');
 | |
|       $form->setAttribute('action', 'courseEditor.php');
 | |
|       $form->setAttribute('method', 'POST');
 | |
|       $form->setAttribute('enctype', 'multipart/form-data');
 | |
|       $label = $doc->createElement('H3');
 | |
|       $label->appendChild($doc->createTextNode("Add New Course"));
 | |
|       $form->appendChild($label);
 | |
|       $fieldSet = $doc->createElement('fieldset');
 | |
|       //$fieldSet->setAttribute('style', 'width:200px; max-width:300px;'); //margin-top:0.5em;');
 | |
|       $fieldSetDiv = $doc->createElement('div');
 | |
|       
 | |
|       $fieldSet->appendChild($fieldSetDiv);
 | |
|       
 | |
|       $label = $doc->createElement('label', 'Course ID:');
 | |
|       $label->setAttribute('for', 'id');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'number');
 | |
|       $input->setAttribute('name', 'id');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       $input->setAttribute('value', "$nextHighestID");
 | |
|       $input->setAttribute('min', "$nextHighestID");
 | |
|       $input->setAttribute('step', '1');
 | |
|       $fieldSetDiv->appendChild($input);      
 | |
|       
 | |
|       $label = $doc->createElement('label', 'Course Name:');
 | |
|       $label->setAttribute('for', 'name');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'name');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
| 
 | |
|       /*
 | |
|       $label = $doc->createElement('label', 'Description:');
 | |
|       $label->setAttribute('for', 'description');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'description');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       */
 | |
|       
 | |
|       $label = $doc->createElement('label', 'Description:');
 | |
|       $label->setAttribute('for', 'description');
 | |
|       $label->setAttribute('class', 'CourseEditorInputLabel');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       $input = $doc->createElement('textarea');
 | |
|       $input->setAttribute('type', 'text');
 | |
|       $input->setAttribute('name', 'description');
 | |
|       $input->setAttribute('autocomplete', 'off');
 | |
|       $input->setAttribute('rows', '6');
 | |
|       $input->setAttribute('required', 'required');
 | |
|       $input->appendChild($doc->createTextNode("")); /* a child node is needed to close the textarea */
 | |
|       $fieldSetDiv->appendChild($input);
 | |
|       $label = $doc->createElement('br');
 | |
|       $fieldSetDiv->appendChild($label);
 | |
|       
 | |
|       
 | |
|       $form->appendChild($fieldSet);
 | |
|       
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'reset');
 | |
|       $form->appendChild($input);
 | |
|       
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'submit');
 | |
|       $form->appendChild($input);
 | |
|       $input = $doc->createElement('input');
 | |
|       $input->setAttribute('type', 'hidden');
 | |
|       $input->setAttribute('value', 'Add');
 | |
|       $input->setAttribute('name', 'action');
 | |
|       $input->setAttribute('readonly', 'readonly');
 | |
|       $form->appendChild($input);
 | |
|       
 | |
|       $editorDiv->appendChild($form);
 | |
|       //$bodyDiv->appendChild($editorDiv);
 | |
|       $body->appendChild($editorDiv); // Needs to be in the body for sticky
 | |
|     }
 | |
|     
 | |
|     $body->appendChild($bodyDiv);
 | |
|     $body->appendChild(generateFooter($doc));
 | |
|     if ($prettyPretty)
 | |
|       $doc->formatOutput = true;
 | |
|     echo $doc->saveXML();
 | |
|   }
 | |
| else
 | |
|   generateIndexRedirect();
 | |
|       
 | |
| ?>
 |