j2Mantis – Joomla mit Mantis verbinden
Mantis ist ein leistungsstarker Task- und Bugtracker. Joomla ein oft verwendetes CMS-System. Beide Anwendungssysteme sind Open Source Software. Hat man beide im Einsatz, wünscht man sich vielleicht beide miteinander zu integrieren. Vor allem Anfragen aus Joomla direkt in Mantis zu überführen wäre eine wünschenswerte Funktion. Bis jetzt gab es dafür noch keine Lösung, auch wenn seit einiger Zeit Mantis eine SOA Schnittstelle fest integriert hat.
Da wir die oben beschrieben Funktionalität für den Betrieb benötigen, stellen wir nun ein Joomla Plugin zur Verfügung das diese Lücke schliessen soll.
Das Plugin ist eine erste Version. Zur Zeit ist es möglich die Bugs eines Projektes aufzulisten, Bugs hinzufügen, Details von Bugs anzuzeigen sowie Notizen und Dateien zu Bugs hinzuzufügen. Es arbeitet auch mit dem ReCatchup Plugin von Joomla zusammen.
Wenn sie die weitere Entwicklung mit eigenen Ideen unterstützen wollen oder Patches einreichen wollen, sind sie herzlich dazu eingeladen. Jedwedes Anwenderfeedback ist ebenso herzlich willkommen, wie helfende Hände bei der Entwicklung.
Plugin: “Seminar für Joomla” heiratet jEvent
Das Plugin Seminar für Joomla ist eine schicke Sache, leider bringt es kein Kalenderübersicht mit sich. Auf der anderen Seite gibt es dafür tolle Plugins, die einen tollen Kalender liefern. Eins davon ist jEvents. Eine Möglichkeit wäre es jetzt alle Termine zu übertragen, aber das ist natürlich aufwendig und macht kein Spaß, jeden Termin neu einzutragen. Ausserdem kann man dann nicht die Registrierungsfunktion von Seminar für Joomla benutzen.
Deshalb haben wir jEvents so modifiziert, dass es auch die Einträge von Seminar für Joomla anzeigt.
/components/com_jevents/controllers/icalrepeat.php
38 39 40 41 | if($evid < 0){ $this->setRedirect( 'index.php?option=com_seminar&task=3&cid=1&dateid='.($evid*-1) ); return; } |
/components/com_jevents/libraries/dbmodel.php
288 289 290 291 292 293 294 | $first = $this->_cachedlistIcalEvents($query, $langtag); $query ="SELECT id as eventid, id as eventdetail_id, ( id * -1) as rp_id, shortdesc as description, place as location,title as summary, begin as startrepeat, end as endrepeat, publisher as created_by, 'http://schnueptus.de/' as url , YEAR(begin) as yup, MONTH(begin ) as mup, DAYOFMONTH(begin ) as dup , YEAR(end ) as ydn, MONTH(end ) as mdn, DAYOFMONTH(end ) as ddn , HOUR(begin) as hup, MINUTE(begin ) as minup, SECOND(begin ) as sup , HOUR(end ) as hdn, MINUTE(end) as mindn, SECOND(end) as sdn FROM #__seminar j LIMIT 0,1000"; $second = $this->_cachedlistIcalEvents($query, $langtag); $first = array_merge($first, $second); return $first; |
Die Zeilen beziehen sich auf jEvent Version 1.5.1 und getestet wurde das mit “Seminar für Joomla” 1.29
BashScript: Alle Probleme optimieren
Wenn man mehrerer Probleminstanzen hat und diese gerne optimieren möchte, dann kann das schon viel Aufwand sein immer wieder per Konsole manuell auszuführen. Im Nachfolgenden findet sich ein kleines Bashscript welches Zimpl Dateien aus ein Verzeichnis liest, umwandelt und anschließend in Cplex optimiert. Dabei werden die Ergebnisse in en Logfile geschrieben und der Optimale Wert aller Instanzen in einer Datei “result” gesammelt. Natürlich werden alle anderen Datei im Verzeichnis ignoriert.
#!/bin/bash # http://www.opensource.org/licenses/bsd-license.php # M. Schneider, 2009, compserve24.de if [ -n "$1" ] then directory=$1 # If directory name given as a script argument... else directory=$PWD # Otherwise use current working directory. fi for file in $directory/* # Filename globbing. do if [ ${file##*.} == "zpl" ]; then # only zpl file we need BASENAME=${file##*/} filename=${BASENAME%.*} # Strip ".zpl" suffix off filename zimpl $file echo -e "set logfile $filename.log \nread $filename.lp \noptimize \ndisplay solution variables - \nquit" > command cplex < command > "$filename.solve" VALUE=$(cat "$filename.solve" | grep "Integer optimal solution"| cut -c 43- ) echo "$filename: $VALUE" >> result else echo $file "ignored" #do nothing fi done exit 0
Erfahrungsbericht: Evolution unter Windows 7
Im Zuge der täglichen Arbeit testen die Mitarbeiter von Compserve24 öfters Open-Source-Software auf ihr Alltagstauglichkeit. Diemal soll der E-Mail-Client/PIM-Software Evolution nicht unter seinem angestammten Betriebsystem Linux, sondern in Windows 7 getestet werden.
Die Installation erfolgt durch ein Standard MSI-Paket der Firma DIP Consultants, LLC die die relativ aktuelle Version 2.26.2-2 anbieten. Die Installation erfolgte mit dem InstallShield Wizard innerhalb von drei Klicks wie ein Standard Windows Programm.
Durch das Startmenü startet Evolution innerhalb weniger Sekunden und präsentiert einen Setup-Assistenten. Ein kleines Manko ist das Fehlen der Übersetzungen, da der Assistent in Englisch gehalten ist.
In den nächsten Schritten des Wizard erfolg die Abfrage, ob man Evolution aus einem Backup wiederherstellen möchte und wie der vollständige Name des Besitzers und dessen E-Mail-Adresse ist. Die dritte Seite fragt nach dem zu nutzenden Protokoll. Die Asuwahl ist erstaunlich groß. So existieren Einträge für POP3, IMAP, einen Lokalen Ordner, das Usenet und die proprietärem Lösungen Novell Groupwise und Microsoft Exchange.
Nach Eingabe der E-Mail-Kontodaten folgen einige Fragen bzgl. des Abfrageintervalls, ob der Spam-Filter genutzt werden soll und eine Syncronisierung stattfinden soll.
Der zu nutzende SMTP-Server mit zugehörigen Kontodaten wird danach ebenso wie der Name des Accounts im Programm abgefragt. Die Auswahl der Zeitzone im nächsten Schritt hätte man sich durch auslesen der Systeminformation ersparen können. Danach ist der Setup-Wizard abgeschlossen und Evolution startet.
Nach dem Akzeptieren von SSL-Zertifikaten erscheint Evolutions Hauptfenster.
Die Voreinstellungen sind leider schlecht getroffen. Das Fenster ist viel zu klein und noch nicht einmal die Ordneransicht ist aktiviert. Nachdem unter View -> Layout die Toolbar, Statusbar und Sidebar aktiviert wurden, sieht Evolution den Screenshoots schon viel ähnlicher. Durch die Aktivierung der Vorschau (View -> Preview -> Show Message Preview) kann man die Begrüßungsmail der Evolution Entwickler im Lokalen Posteingang direkt im Hauptfenster bewundern.
Das Laden des eingetragenden IMAP-Postfaches geschieht rasend schnell und die Präsentation ist ansprechend. Es fällt dabei auf, das Evolution nicht den GTK-Windows-Theme nutzt. In den Einstellungen besteht auch keine Möglichkeit das Theme zu ändern.
Erfreulich ist das Evolution nach einigen Minuten Benutzung nur 45 MB Speicher verbraucht und recht schnell auf Eingaben reagiert. Evolution macht bis auf die Schwäche bei der Lokalisierung und dem nicht verwendeten nativen Theme ein sehr positiven Eindruck.
In einiger Zeit wird einen weiteren Artikel zum Thema Evolution geben, in dem die Eindrücke nach einiger Zeit der Benutzung geschildert werden.
Update: Wenn in der Datei “C:\Program Files\DIP Consultants, LLC\Evolution\etc\gtk-2.0\gtkrc” das Theme durch die Zeile:
gtk-theme-name = “MS-Windows”
gesetzt ist, erfolgt eine native Darstellung.
sql2json() – Konvertiert SQL in JSON Strings
Auf der Seite: http://www.bin-co.com/php/scripts/sql2json/ findet man ein kleines PHP Script was Datenbankabfragen in JSON Objekte umwandelt.
Das Orginal ist für MySQL aber mit ein paar Anpassungen ist es ebenfalls für MSSQL verwendbar:
function sql2json($query) { $data_sql = mssql_query($query) or die("'';//" . mssql_error());// If an error has occurred, // make the error a js comment so that a javascript error will NOT be invoked $json_str = ""; //Init the JSON string. if($total = mssql_num_rows($data_sql)) { //See if there is anything in the query $json_str .= "[\n"; $row_count = 0; while($data = mssql_fetch_assoc($data_sql)) { if(count($data) > 1) $json_str .= "{\n"; $count = 0; foreach($data as $key => $value) { //If it is an associative array we want it in the format of "key":"value" if(count($data) > 1) $json_str .= "\"$key\":\"$value\""; else $json_str .= "\"$value\""; //Make sure that the last item don't have a ',' (comma) $count++; if($count < count($data)) $json_str .= ",\n"; } $row_count++; if(count($data) > 1) $json_str .= "}\n"; //Make sure that the last item don't have a ',' (comma) if($row_count < $total) $json_str .= ",\n"; } $json_str .= "]\n"; } //Replace the '\n's - make it faster - but at the price of bad redability. $json_str = str_replace("\n","",$json_str); //Comment this out when you are debugging the script //Finally, output the data return $json_str; }
In den meisten Fällen ist die MSSQL Datenbank nicht UTF-8 kodiert. Soll die Ausgabe entsprechend umkodiert werden, hilft ein folgender Befehl:
$string = iconv('cp1252','utf-8',$string);
Natürlich muss die Ausgabe ebenfalls in UTF-8 geschehen. Der HTTP-Header der den Content-Type und das Encoding angibt wird durch die PHP header-Funktion gesetzt:
header("Content-Type: text/html; charset=utf-8");
Joomla: Border bei leeren Tabellenzellen im IE
Die CSS Eigenschaft empty-cellls ist ab CSS 2.1 spezifiziert. Der Internet Explorer interpretiert sie leider nicht und ignoriert sie stillschweigend. Dies hat zur Folge, das leere Tabellenzellen keinen Rahmen besitzen. Ab und zu möchte man, vor allem zur Erhöhung der Leserlichkeit, das der Rahmen auch bei leeren Zellen angezeigt wird.
Nun gibt es dafür mehre Möglichkeiten. So kann man in jede leere Zelle ein (kodiertes Leerzeichen) einfügen. Das ist natürlich sehr aufwendig und macht bedeutet manuelle Arbeit. Es existiert auch im Netz JavaScript-Code der das automatisch erledigt. Da dies auf der Client-Seite geschieht ist es eine suboptimale Lösung. Wir bieten deshalb eine dritte Möglichkeit an: Ein Joomla Plugin. Es basiert auf Regular-Expressions, die die Arbeit erledigen. Der Download existiert hier:
Einfach installieren, aktivieren und das Problem löst sich in Luft auf.
Postgresql LDAP Authentifizierung mittels PAM
In Postgresql 8.3 ist die Authentifizierung von Benutzer mittels LDAP sehr rudimentär umgesetzt. Es ist z.B. nicht möglich Filter anzugeben und damit Benutzer einer Gruppe oder eines Hostes zu authentifizieren. Um dies zu erreichen muss ein Umweg über PAM genommen werden.
Folgende Voraussetzungen müssen erfüllt sein:
- LDAP Authentifizierung mittels PAM funktioniert bereits
- Postgresql ist installiert und kann angesprochen werden
Es muss eine Datei /etc/pam.d/postgresql mit dem Inhalt:
auth required pam_ldap.so auth required pam_succeed_if.so quiet_success user ingroup pguser
angelegt werden. Die zweite Zeile sagt aus, das nur Benutzer als authentifiziert gelten, die sich in der Gruppe “pguser” befinden.
Die Datei pg_hba.comf muss jetzt nur noch mit der Zeile:
host all all 192.168.0.0/16 pam postgresql
ergänzt werden. Das Anpassen der IP Adresse ist natürlich noch erforderlich. Das ende der Zeile “pam postgresql” gibt das PAM Profil an mit dem sich authentifiziert wird (den Namen der ersten Datei die angelegt wurde)



