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>
