Plugin in PHP – Klasse in OOP

Wie ich angekündigt habe, möchte ich euch meine Pluginklasse erneut vorstellen.
Diesmal aber in OOP.

Damit jedes Plugin verbindliche Klassen zur Verfügung stellt, erstellen wir ein Interface:

Datei IgPlugin.php

<?php
	interface IgPlugin
	{

		public function getName();
		public function setName($name);

		public function getVersion();
		public function setVersion();

		public function getAutor();
		public function setAutor();

		public function install();
		public function update($version);
		public function unistall();

		public function run();
	}
?>

Das Plugin ist dann folgendermaßen aufgebaut:

</pre>
<?php

	require_once("class/IgPlugin.php");
	
	class test implements IgPlugin
	{
		private $name = "TestPlugin";
	
		public function getName() { return $this->name; }
		public function setName($name){}
		
		public function getVersion(){}
		public function setVersion(){}
		
		public function getAutor(){}
		public function setAutor(){}
		
		public function install(){}
		public function update($version){}
		public function unistall(){}
		
		public function run(){ echo "Plugin l&auml;uft"; }
	}
	
?>

Die Datei gPlugin.php ist nun die Klasse für das Laden der Plugins:


<?php
	
	/**
	 * Klasse gPlugin
	 *
	 * Klasse zum Starten, Installieren, Updaten und Deinstallieren
	 * von Plugins
	 *
	 * @author Alexander Grüßung
	 * @version 2.0
	 */
	 
	class gPlugin
	{
		/**
		 * private field
		 */
		private $pluginName;
		
		/**
		 * private field
		 */
		private $pluginInstance;
	
		/**
		 * Konstruktor lädt Plugin in den Speicher
		 */
		public function __construct($pluginName)
		{
			$this->setPluginName($pluginName);
			$this->loadPlugin();
		}
		
		//Getter und Setter für PluginName
		private function setPluginName($pN) { $this->pluginName = $pN; }
		private function getPluginName() { return $this->pluginName; }
		
		//Getter und Setter für PluginInstance
		private function setPluginInstance($instance) { $this->pluginInstance = $instance; }
		private function getPluginInstance() { return $this->pluginInstance; }
	
		/**
		 * Funktion bindet Plugindatei ein und
		 * lädt Instanz in den Speicher
		 */
		private function loadPlugin()
		{
			if (file_exists($this->getPluginName().".php"))
			{
				require_once($this->getPluginName().".php");
				$name = $this->getPluginName();
				$this->setPluginInstance(new $name());
				
				if ( ($this->getPluginInstance() instanceof IgPlugin) == false)
				{
				 trigger_error("Interner Pluginfehler: Interface wird nicht implementiert", E_USER_ERROR);
				}
				
			}
			else
			{
				trigger_error("Plugin nicht gefunden", E_USER_ERROR);
			}
		}
		
		/**
		 * Plugin starten
		 */
		public function runPlugin()
		{
			//TODO Prüfen ob Plugin installiert ist
			$this->getPluginInstance()->run();
		}
	
	}
?>

Hier eine Beispieleinbindung:

<?php
	require_once("class/gPlugin.php");
	
	$p = new gPlugin("test");
	$p->runPlugin();
	
?>

 
Damit viel Spaß mit der Klasse!

Gründe für Ubuntu GNOME 13.10

Der erste Artikel der neuen Blogserie rund um Ubuntu GNOME 13.04  13.10 beschäftigt sich mit meinen Gründen, die mich bewogen haben das System zu installieren.

Zuerst muss ich sagen das auf meinem Laptop bereits ein Windows 8 läuft. Dieses wollte ich durch eine Linux Distribution ersetzen.
Lange habe ich überlegt: Welche?
Ich bin ein großer GNOME Fan und mochte auch, bis Unity erschien, Ubuntu sehr.
Seitdem Ubuntu auf Unity setzt war Debian mein Favorit – doch die Software ist dort einfach älter, das gefiel mir nicht.

Da las ich durch Zufall einen Artikel über Mageia , wo das UbuntuGnome Projekt querverlinkt war.
Ich schaute mir das Projekt an und fand es wunderbar für mich. Ubuntu gepaart mit den tollen GNOME3 Desktop.

Ein weiterer Grund für Ubuntu ist die offizielle Unterstützung von Steam. Ebenfalls ist Spotify verfügbar.

Was mir an GNOME3 auch gefällt ist das neue Bedienkonzept mit dem „Activity-Overlay“.

Egal was ich suche, ich finde es im Overlay. Sei es ein Programm oder eine Datei.

Activity Overlay
Activity Overlay

Ich bin bespannt, wie sich GNOME3 in Ubuntu integriert und ob alles funktioniert.

Bereits bekannte Bugs sind hier zu finden.

Zur Übersicht der Blogserie

gFramework – aktueller Stand

Ich entwickel seit Jahren an gMoon!ight. Mittlerweile ist dieses Projekt so komplex geworden, dass die Wartung viel zu viel ist.
Deshalb hab ich mir gedacht, schreib ich mir doch ein Rahmensystem, wo sich die versch. Komponenten einlagern.
Da Rahmenwerk auf englisch nunmal Framework heißt, nutz ich den Namen gFramework.
Heißt: Das ist kein Framework, wie Zend o.ä. Es ist der Rahmen für versch. gVisions Produkte, wie gMoon!ight, gBoard, gGuestbook, gUsercenter, gPrivateMessage u.v.m. (werden kommen)
Das Framework ist so gut wie lauffähig. Es fehlen nur noch die Systeme für die Gruppenrechte und für die Menuverwaltung.
Damit ihr euch eine Vorstellung bilden könnt, hier einmal ein paar Screenshots:

Man sieht, dass das Control Panel absichtlich sehr minimal gehalten wurde, um die Übersichtlichkeit zu wahren.
Die einzelnen CP Seiten der Erweiterungen und Styles sind über einen separaten Link zu erreichen (s. Bild 2).
Ich werde die Tage die Roadmap unter http://bug.gvisions.de aktualisieren.

Ich würde mich über Feedback freuen, sei es hier im Blog oder im Bugtracker.