/Main_Page

::You must have ninja focus to complete your mission::NinjaFocus::

Meta

Views:


This is Out Of Date and Will Not Be Updated. Ever!!!

IS Dept Wiki Meta

/srv/www/is/wiki mysql://localhost/isWiki https://is.varndean.ac.uk/wiki

apache conf : php_admin_value openbasedir (usual + /usr/bin/convert:/usr/bin/clamscan)

# mv images files

Contents

LocalSettings.php Customisations

include_once "extensions/HammerStatus.php";
include_once "extensions/Calendar.php";
include_once "extensions/Tasks.php";

include_once "extensions/Flash.php";

$wgLogo             = "/isdept/wiki/ninja-wiki.JPG";

$wgUploadPath       = "$wgScriptPath/files";
$wgUploadDirectory  = "$IP/files";

$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

  $wgGroupPermissions['*']['block'] = false;
  $wgGroupPermissions['*']['bot'] = false; 
  $wgGroupPermissions['*']['createaccount'] = false;
  $wgGroupPermissions['*']['delete'] = false; 
  $wgGroupPermissions['*']['edit'] = false;
  $wgGroupPermissions['*']['editinterface'] = false;
  $wgGroupPermissions['*']['move'] = false;
  $wgGroupPermissions['*']['patrol'] = false;
  $wgGroupPermissions['*']['protect'] = false;
  $wgGroupPermissions['*']['read'] = true;
  $wgGroupPermissions['*']['rollback'] = false;
  $wgGroupPermissions['*']['siteadmin'] = false;
  $wgGroupPermissions['*']['undelete'] = false;
  $wgGroupPermissions['*']['upload'] = false;
  $wgGroupPermissions['*']['userrights'] = false;
  
  $wgGroupPermissions['user']['block'] = false;
  $wgGroupPermissions['user']['bot'] = false; 
  $wgGroupPermissions['user']['createaccount'] = false;
  $wgGroupPermissions['user']['delete'] = false; 
  $wgGroupPermissions['user']['edit'] = true;
  $wgGroupPermissions['user']['editinterface'] = false;
  $wgGroupPermissions['user']['move'] = true;
  $wgGroupPermissions['user']['patrol'] = false;
  $wgGroupPermissions['user']['protect'] = false;
  $wgGroupPermissions['user']['read'] = true;
  $wgGroupPermissions['user']['rollback'] = true;
  $wgGroupPermissions['user']['siteadmin'] = false;
  $wgGroupPermissions['user']['undelete'] = false;
  $wgGroupPermissions['user']['upload'] = true;
  $wgGroupPermissions['user']['userrights'] = false;
 
  $wgGroupPermissions['ninja']['block'] = false;
  $wgGroupPermissions['ninja']['bot'] = false; 
  $wgGroupPermissions['ninja']['createaccount'] = false;
  $wgGroupPermissions['ninja']['delete'] = true; 
  $wgGroupPermissions['ninja']['edit'] = true;
  $wgGroupPermissions['ninja']['editinterface'] = false;
  $wgGroupPermissions['ninja']['move'] = true;
  $wgGroupPermissions['ninja']['patrol'] = true;
  $wgGroupPermissions['ninja']['protect'] = true;
  $wgGroupPermissions['ninja']['read'] = true;
  $wgGroupPermissions['ninja']['rollback'] = true;
  $wgGroupPermissions['ninja']['siteadmin'] = false;
  $wgGroupPermissions['ninja']['undelete'] = false;
  $wgGroupPermissions['ninja']['upload'] = true;
  $wgGroupPermissions['ninja']['userrights'] = false;
  
  $wgGroupPermissions['sysop']['block'] = true;
  $wgGroupPermissions['sysop']['bot'] = true;
  $wgGroupPermissions['sysop']['createaccount'] = true; 
  $wgGroupPermissions['sysop']['delete'] = true; 
  $wgGroupPermissions['sysop']['edit'] = true;
  $wgGroupPermissions['sysop']['editinterface'] = true;
  $wgGroupPermissions['sysop']['move'] = true;
  $wgGroupPermissions['sysop']['patrol'] = true;
  $wgGroupPermissions['sysop']['protect'] = true;
  $wgGroupPermissions['sysop']['read'] = true;
  $wgGroupPermissions['sysop']['rollback'] = true;
  $wgGroupPermissions['sysop']['siteadmin'] = true;
  $wgGroupPermissions['sysop']['undelete'] = true;
  $wgGroupPermissions['sysop']['upload'] = true;
  $wgGroupPermissions['sysop']['userrights'] = true;

### KJW Added config for LDAP Authentication
require_once( 'LdapAuthentication.php' );
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array(
  "IS Department"
  );
$wgLDAPServerNames = array(
  "IS Department"=>"127.0.0.1"
  );
$wgLDAPSearchStrings = array(
  "IS Department"=>"cn=USER-NAME,ou=SUPPORT,o=VSFC"
  );
$wgLDAPUseSSL = false;
$wgLDAPUseLocal = true; //Allow the use of the local database as well as the LDAP database
$wgMinimalPasswordLength = 1;
$wgLDAPAddLDAPUsers=false;
### End KJW LDAP Authentication

### KJW Antivirus setup ###
$wgAntivirus = "clamav";

### KWJ Custom File Uploads
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'ogg', 'zip', 'rar', 'sit', 'gz', 'tgz', 'bz2', 'pdf', 'mov', 'mp4', 'avi', 'swf',);

$wgTrustedMediaFormats[] = "application/x-shockwafe-flash";
$wgTrustedMediaFormats[] = "flash/shockwave";

// One month of recent changes
$wgRCMaxAge = 28 * 24 * 3600;

Extenstions

Custom Extensions

Calendar

extensions/Calendar.php:

<?php

$wgExtensionFunctions[] = "wfExtensionCalendar";
function wfExtensionCalendar() 
{
    global $wgMessageCache;
    $wgMessageCache->addMessages(array('calendar' => 'IS Department Calendar'));
    SpecialPage::addPage(new IncludableSpecialPage('Calendar'));
}

?>

includes/SpecialCalendar.php:

<?php
/* KJW simple calendar extension for the wiki . */

function wfSpecialCalendar($par=NULL, $specialPage)
{
	$calendar = new SpecialCalendar($specialPage);
}


class SpecialCalendar
{

	// PRIVATE PROPERTIES
	var $included = false;
	var $url = NULL;
	var $delete_event = false;
	var $add_heading = "Add New Event";
	var $edit_heading = "Edit Event";
	var $edit_event = false;
	var $event_id = NULL;
	var $start_date = NULL;
	var $form_start_date = NULL;
	var $end_date = NULL;
	var $form_end_date = NULL;
	var $title = NULL;
	var $description = NULL;
	var $setEventFailed = false;
	var $eventForm = '<h2>%s</h2>
	%s
	<form action="%s" method="post">
		<input type="hidden" name="event_id" value="%s" />
		<p>
		<label for="calendartitle">Title</label><br />
			<input type="text" name="calendartitle" id="calendartitle" size="50" value="%s"/>
		</p>
		<p>
		<label for="calendardescription">Description (Optional)</label><br />
			<textarea name="calendardescription" id="calendardescription" rows="5" cols="50" size="200">%s</textarea>
		</p>
		<p>
		<label for="calendarstartdate">Start (dd/mm/yyyy)</label><br />
			<input type="text" name="calendarstartdate" id="calendarstartdate" size="10" value="%s"/>
		</p>
		<p>
		<label for="calendarenddate">End (dd/mm/yyyy - Optional)</label><br />
			<input type="text" name="calendarenddate" id="calendarenddate" size="10" value="%s"/>
		</p>
		<input type="submit" value="Submit" title="Add Event to Calendar" />
	</form>';
	
	// PUBLIC PROPERTIES
	
	
	// METHODS
	
	function AddEvent()
	// Private
	{
		$dbw =& wfGetDB(DB_MASTER);
		$insert = array(
						'start_date' => $this->start_date,
						'end_date' => $this->end_date,
						'title' => $this->title,
						'description' => $this->description,
					);
		$dbw->insert('calendar', $insert);
	}
	
	
	function Calendar()
	// Private
	{
		global $wgOut;
		if ($this->included)
		{
			$wgOut->addHTML('<h2>IS Department Calendar Summary</h2>');
		}
		$dbr =& wfGetDB( DB_SLAVE );
		$options = array('ORDER BY' => 'start_date ASC, end_date ASC');
		if ($this->included)
		{
			$options["LIMIT"] = "7";
			$where[] = 'start_date >= CURDATE() OR end_date <= CURDATE()';
		}
		else
		{
			$where = array();
		}
		$res = $dbr->select('calendar', 
								array(
									'event_id',
									"DATE_FORMAT(start_date,'%e %b %Y') AS uk_start_date",
									"DATE_FORMAT(end_date,'%e %b %Y') AS uk_end_date",
									'title',
									'description',
								), 
					$where, 
					'Database::select',
					$options
				);
		if (!$res) return;
		if ($event = $dbr->fetchRow($res))
		{
			$tableTop = '
<table summary="Upcoming events">
	<thead>
		<tr>
			<th>Date(s)</th>
			<th>Title</th>
			<th>Description</th>
			%s
		</tr>
	</thead>
	<tbody>';
			if ($this->included)
			{
				$tableTop = sprintf($tableTop, '');
			}
			else
			{
				$tableTop = sprintf($tableTop, '<th>Delete</th>');
			}
			$wgOut->addHTML($tableTop);
			do
			{
				$date = $event['uk_start_date'];
				if ($event['uk_end_date'])
				{
					$date .= ' - '.$event['uk_end_date'];
				}
				$description = nl2br(htmlentities($event['description']));
				$title = htmlentities($event['title']);
				$tableRow = '<tr><td>%s</td><td><strong>%s</strong></td><td>%s</td>%s</tr>';
				if ($this->included)
				{
					$tableRow = sprintf($tableRow, $date, $title, $description, '');
				}
				else
				{
					$editLink = "<a href=\"{$this->url}?event_id={$event['event_id']}&edit_event=true\" title=\"Edit $date {$event['title']}\">{$event['title']}</a>";
					$deleteCell = "<td><a href=\"{$this->url}?delete_event=true&event_id={$event['event_id']}\" title=\"Delete $date {$event['title']}\" onclick=\"javascript:return confirm('Are you sure you want to delete this event?')\">Delete</a></td>";
					$tableRow = sprintf($tableRow, $date, $editLink, $description, $deleteCell);
				}
				$wgOut->addHTML($tableRow);
			}
			while ($event = $dbr->fetchRow($res));
			$tableLegs = '</tbody></table>';
			$wgOut->addHTML($tableLegs);
		}
		else
		{
			$wgOut->addHTML('<p>No events found</p>');
		}
		$dbr->freeResult($res);
	}
	
	
	function DeleteEvent()
	// Private
	{
		if ($this->delete_event && $this->event_id)
		{
			$dbw =& wfGetDB(DB_MASTER);
			$dbw->delete ('calendar', array('event_id' => $this->event_id));
		}
	}
	
	
	function EditEvent()
	// Private
	{
		$dbw =& wfGetDB(DB_MASTER);
		$update = array(
						'start_date' => $this->start_date,
						'end_date' => $this->end_date,
						'title' => $this->title,
						'description' => $this->description,
					);
		$event[] = 'event_id = '.$this->event_id;
		$dbw->update('calendar', $update, $event);
	}
	
	
	function EventForm()
	// Private
	{
		global $wgOut;
		// Does the user want to edit an existing event?
		if ($this->edit_event && $this->event_id)
		{
			$event = $this->GetEvent();
			if ($event['end_date'] == '00/00/0000')
			{
				$end_date = '';
			}
			else
			{
				$end_date = $event['end_date'];
			}
			$form = sprintf(
							$this->eventForm,  
							$this->edit_heading,
							'', 
							$this->url, 
							$event['event_id'], 
							$event['title'], 
							$event['description'], 
							$event['start_date'], 
							$end_date
						);
		}
		// Has the user tried & failed to add/update an event? 
		// if so we should display their original input so that they can edit it and try again.
		elseif ($this->setEventFailed)
		{
			$form = sprintf(
							$this->eventForm,
							$this->add_heading,
							'<p><strong>Error: Please check the details and try again</strong></p>',
							$this->url, 
							'', 
							$this->title, 
							$this->description, 
							$this->form_start_date, 
							$this->form_end_date
						);
		}
		// Otherwise we just need to present the user with a blank form, ready to add a new event
		else
		{
			$form = sprintf($this->eventForm,$this->add_heading, '', $this->url, '', '', '', '', '');
		}
		$wgOut->addHTML($form);
	}
	
	
	function GetEvent()
	// Private
	{
		$dbr =& wfGetDB(DB_SLAVE);
		$where[] = 'event_id = '.$this->event_id;
		$res = $dbr->select('calendar', 
								array(
									'event_id',
									"DATE_FORMAT(start_date,'%d/%m/%Y') AS start_date",
									"DATE_FORMAT(end_date,'%d/%m/%Y') AS end_date",
									'title',
									'description',
								), 
					$where, 
					'Database::select'
				);
		if ($res)
		{
			if ($eventRs = $dbr->fetchRow($res)) return $eventRs;
		}
	}
	
	
	function isoDate($ukShortDate)
	// Private
	{
		list($day,$month,$year) = split('/',$ukShortDate);
		$stamp = mktime(0,0,0,$month,$day,$year);
		return date('Y-m-d',$stamp);
	}
	
	
	function SetEvent()
	// Private
	{
		// Check if any information has been submitted
		if ($this->form_start_date || $this->form_end_date || $this->title || $this->description)
		{
			// Check if we have something a valid date
			// start_date is mandatory, end_date is optional (a blank end_date is stored as "0000-00-00" in the database.
			if ($this->ValidUkDate($this->form_start_date))
			{
				$this->start_date = $this->isoDate($this->form_start_date);
			}
			if ($this->ValidUkDate($this->form_end_date))
			{
				$this->end_date = $this->isoDate($this->form_end_date);
			}
			else
			{
				$this->end_date = '0000-00-00';
			}
			// Check we have all the details we need to make a new entry in the calendar
			if (
				// Must have a start date and title at least
				$this->start_date && $this->title 
				&&
				// End date can't come before the start date 
				(
					($this->start_date && ($this->end_date == '0000-00-00')) 
					||
					($this->start_date <= $this->end_date)
				)
			)
			{
				// Are we adding a new event or editing an existing one?
				if ($this->event_id)
				{
					$this->EditEvent();
				}
				else
				{
					$this->AddEvent();
				}
			}
			else
			{
				// We didn't get all the info for the event, or some information had errors (e.g. bad date), flaf this up so it the user can be asked to edit the info and re-submit. 
				$this->setEventFailed = true;
			}
		}
	}


	// DEFAULT INITIALISATION METHOD
	// gets called when ever a new SpecialCalendar Object is created
	function SpecialCalendar($specialPage)
	// Public
	{
		// Have we been included inside another wiki page?
		// or are we being accessed directly via index.php/Special:Calendar ??
		if ($specialPage->including())
		{
			$this->included = true;
			$this->Calendar();
		}
		else
		{
			global $wgRequest;
			$this->event_id = $wgRequest->getVal('event_id');
			$this->form_start_date = $wgRequest->getVal('calendarstartdate');
			$this->form_end_date = $wgRequest->getVal('calendarenddate');
			$this->title = $wgRequest->getVal('calendartitle');
			$this->description = $wgRequest->getVal('calendardescription');
			$this->add_event = $wgRequest->getVal('add_event');
			$this->edit_event = $wgRequest->getVal('edit_event');
			$titleObj = Title::makeTitle(NS_SPECIAL, 'Calendar');
			$this->url = $titleObj->escapeLocalURL();
			$this->delete_event = $wgRequest->getVal('delete_event');
			
			$this->DeleteEvent();
			$this->SetEvent();
			$this->Calendar();
			$this->EventForm();
		}
	}
	
	
	function ValidUkDate($date)
	// Private
	{
		$dateRegex = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(20\d\d)$/';
		if (preg_match($dateRegex,$date))
		{
			list($day, $month, $year) = explode('/', $date);
			return checkdate($month, $day, $year);	
		}
		return false;
	}
	

}
// end: class specialCalendar
?>

MySql Calendar Table Schema:

CREATE TABLE `calendar` (
  `event_id` int(8) unsigned NOT NULL auto_increment,
  `start_date` date NOT NULL default '0000-00-00',
  `end_date` date NOT NULL default '0000-00-00',
  `title` varchar(50) NOT NULL default '',
  `description` varchar(200) default NULL,
  PRIMARY KEY  (`event_id`)
) TYPE=MyISAM AUTO_INCREMENT=15 ;

hammer

extensions/HammerStatus.php:

<?php

$wgExtensionFunctions[] = "wfExtensionHammerStatus";
function wfExtensionHammerStatus() {
    global $wgMessageCache;
    $wgMessageCache->addMessages(array('hammerstatus' => 'Hammer Faults System Status'));
    SpecialPage::addPage( new IncludableSpecialPage( 'HammerStatus' ) );
}
function wfIncludableExtensionHammerStatus()
// ( $name, $restriction = '', $listed = true,  $function = false, $file = 'default' )
{
  //global $wgOut;
  //$wgOut->addHTML('<p>Boom!</p>');
  global $wgMessageCache;
    $wgMessageCache->addMessages(array('hammerstatus' => 'Hammer Faults System Status'));
  SpecialPage::addPage( new IncludableSpecialPage( 'HammerStatus' ) );
}
?>

includes/SpecialHammerStatus.php:

<?php
/* KJW simple hammer status information to be embedded in the wiki. */

ini_set('include_path','/usr/share/php/:'.ini_get('include_path'));
include_once 'HTTP/Client.php';

function wfSpecialHammerStatus()
{
	global $wgOut;
	
	//$hammerStatusHandle = fopen('ssl://online.varndean.ac.uk:443/isdept/feeds/hammer.php', 'r');
	$hammerHttpCon =& new HTTP_Client;
	$hammerHttpCon->get('https://online.varndean.ac.uk/isdept/feeds/hammer.php');
	$hammerHttpResp = $hammerHttpCon->currentResponse();
	if ($hammerHttpResp['code'] == 200)
	{
		$wgOut->addHTML($hammerHttpResp['body']);
	}
}

?>

../feeds/hammer.php:

<?php
ini_set('include_path','/usr/share/php/:'.ini_get('include_path'));
require 'DB.php';

$hammerDsn = array(
				'phptype'  => 'mysql',
				'username' => 'staffhammer',
				'password' => '**************',
				'hostspec' => 'localhost',
				'database' => 'hammer',
			);
$hammerDsnOptions = array(
				'debug' => 2, 
				'autofree' => true, 
			);
$hammerDbc = &DB::connect($hammerDsn, $hammerDsnOptions);
if (PEAR::isError(&$hammerDbc)) 
{
	die($hammerDbc->getMessage());
}
$hammerDbc->setFetchMode(DB_FETCHMODE_ASSOC);

function &hammerDbc_query($query)
{
	global $hammerDbc;
	$res = &$hammerDbc->query($query);
	if (PEAR::isError($res))
	{
		die('<p>db_query</p><p>'.$res->getMessage().'</p><p>'.nl2br($query).'</p>');
	}
	else
	{
		return $res;
	} 
}
function &hammerDbc_query_get_all($query)
{
	global $hammerDbc;
	$res = &$hammerDbc->getAll($query, array());
	if (PEAR::isError($res))
	{
		die('<p>db_query_get_all</p><p>'.$res->getMessage().'</p><p>'.nl2br($query).'</p>');
	}
	else
	{
		return $res;
	} 
}
function &hammerDbc_query_get_assoc($query)
{
	global $hammerDbc;
	$res = &$hammerDbc->getRow($query, array());
	if (PEAR::isError($res))
	{
		die('<p>db_query_get_assoc</p><p>'.$res->getMessage().'</p><p>'.nl2br($query).'</p>');
	}
	else
	{
		return $res;
	} 
}
function hammerDbc_query_get_value($query, $field)
{
	$res = hammerDbc_query_get_assoc($query);
	return $res[$field];
}

function &get_open_faults()
{
	// returns an array of all open faults from hammer
	$openFaults = "SELECT
					faults.faultid, 
					faults.subject, 
					faults.priority,
					DATE_FORMAT(faults.postdate, '%d/%m/%Y') AS date,
					faults_area.title AS area 
					FROM 
					faults, 
					faults_area 
					WHERE 
					faults.areaid = faults_area.areaid
					AND 
					faults.statusid = 1 
					ORDER BY 
					faults.postdate ASC";
	//$openFaults = "SELECT * FROM faults, faults_area WHERE faults.areaid = faults_area.areaid";
	$openFaults =& hammerDbc_query($openFaults);
	return $openFaults;
}
function &get_faults_status()
{
	$faultsStatus = "SELECT 
						faults_status.title, 
						COUNT(faults.statusid) AS count 
						FROM 
						faults, 
						faults_status 
						WHERE 
						faults.statusid = faults_status.statusid 
						GROUP BY 
						faults_status.statusid";
	$faultsStatus =& hammerDbc_query($faultsStatus);
	return $faultsStatus;
}
function &get_latest_staff_news($limit='5')
{
	if (!$limit || !is_numeric($limit)) return false;
	$staffNews = "SELECT 
					DATE_FORMAT(postdate, '%d/%m/%Y') AS date, 
					staff_news.newsid,
					staff_news.title 
					FROM 
					staff_news 
					ORDER BY 
					staff_news.postdate DESC, 
					staff_news.newsid DESC
					LIMIT $limit";
	$staffNews =& hammerDbc_query($staffNews);
	return $staffNews;
}


?> 
<div style="width:40%;float:left">
<h2>Hammer Faults</h2>
<?php
$faultsStatus =& get_faults_status();
if ($faultsStatus->fetchInto($faultsStatusRow))
{ ?>
<ul>
	<?php
	do
	{
		echo "<li>{$faultsStatusRow['title']} Faults: {$faultsStatusRow['count']}</li>";

	}
	while ($faultsStatus->fetchInto($faultsStatusRow));
	?>
</ul>
<?php }?>
<table summary="A list of open faults on the hammer system" border="1" cellspacing="0" cellpadding="5">
	<thead>
		<tr>
			<th>Date</th><th>Priority</th><th>Subject</th><th>Area</th>
		</tr>
	</thead>
	<tbody>
<?php
$allOpenFaults = get_open_faults();
if ($allOpenFaults->fetchInto($openFault))
{
	do
	{
		echo "				<tr><td>{$openFault['date']}</td><td>{$openFault['priority']}</td><td><a href='/hammer/hammer.jsp?action=adminfaults&do=viewopen&faultid={$openFault['faultid']}'>".htmlentities($openFault['subject'])."</a></td><td>{$openFault['area']}</td></tr>\n";
 	}
	while ($allOpenFaults->fetchInto($openFault));
}
else
{ ?>
			<tr><td></td><td></td><td>No Open Faults</td><td></td></tr>
<?php
}?>
	</tbody>
</table>
</div>
<div style="width:40%;clear:right;margin-left:40%">
<h2>Staff News</h2>
<?php
$staffNews =& get_latest_staff_news();
if ($staffNews->fetchInto($staffNewsItem))
{ ?>

<ul style="display:block">
<?php
	do
	{
		echo "<li><a href='/staff/information/news/viewnews.php?newsid={$staffNewsItem['newsid']}'>".htmlentities($staffNewsItem['title'])."</a> {$staffNewsItem['date']}</li>\n";
	}
	while ($staffNews->fetchInto($staffNewsItem));
?>
	<li><strong><a href="/staff/information/news/">View Full News Listing</a></strong></li>
</ul>
<?php
}
else
{
?>
<p>No Staff News</p>
<?php
} ?>
</div>

Main Menu

Personal tools

Toolbox