-
Notifications
You must be signed in to change notification settings - Fork 1
Example Plugin
philcali edited this page Dec 12, 2011
·
5 revisions
In this section, I will create a fictitious plugin that reads in enrollment information from a set of pipe delimited files.
For convenience sake, I'll put the processors in processors.php and the provider in provider.php.
<?php
abstract class file_source {
var $row_count;
function __construct($path) {
if (empty($this->row_count))
throw new Exception("Source initialization exception in " . get_called_class());
$this->file = $path;
}
abstract function transform($extracted);
function extract($line) {
return array_map("trim", explode("|", $line));
}
function is_valid($extracted) {
return $this->row_count == count($line);
}
function process() {
$lines = file($this->path);
$transformed = array();
foreach ($lines as $line) {
$extracted = $this->extract($line);
if (!$this->is_valid($extracted)) {
continue;
}
$transformed[] = $this->transform($extracted);
}
return $transformed;
}
}
class file_semesters extends file_source implements semester_processor {
var $row_count = 5;
function transform($extracted) {
$semester = new stdClass;
$semester->year = $extracted[0];
$semester->name = $extracted[1];
$semester->classes_start = $extracted[2];
$semester->grades_due = $extracted[3];
$semester->session_key = $extracted[4];
return $semester;
}
function semesters($time) {
return $this->process();
}
}
// Fill in other onesI've intentionally left out the rest of the processors, because I think you can get the idea.
class file_provider extends enrollment_provider {
function __construct() {
$files = array_keys($this->settings());
foreach ($files as $filekey) {
if (!file_exists($this->get_setting($filekey)))
throw new Exception("File was not found for $filekey");
}
}
function settings() {
return array(
"semesters" => "/path/to/semesters.txt",
"courses" => "/path/to/courses.txt",
"teachers" => "/path/to/teachers.txt",
"students" => "/path/to/students.txt"
);
}
function semester_source() {
return new file_semesters($this->get_setting("semesters"));
}
function course_source() {
return new file_courses($this->get_setting("courses"));
}
// etc
}I've left out filling out teacher and student source, because the developer can choose either. Take a peek at the plugin API for more details regarding that.