WordPress: Artikel umhängen

Wenn die Notwendikeit besteht, Artikel einem anderen Benutzer zuzuordnen, weil man zum Beispiel über Monate hinweg neue Artikel als Administrator verfaßt hat, und nun erkennt, daß /wp_admin/ zum festen Bestandteil der URL der Autoren geworden ist, kann man diese Anpassungen direkt in der Datenbank vornehmen.

Bei der Neuanlage eines Benutzers, zum Beispiel als Redakteur, fällt auf, daß die E-Mail-Adresse nicht doppelt vorkommen darf. Die weiteren Schritte sind selbsterklärend. Ein neuer Benutzer wird in der Tabelle wp_users mit einer neuen ID hinterlegt. Diese IDs werden in den Tabellen wp_posts vollständig und wp_postmeta teilweise referenziert. Zunächst kann man sich sehr einfach einen Überblick über die verschiedenen Post-Typen und Post-Stati der Tabelle wp_posts verschaffen:

Abfrage:

SELECT post_status, post_type, COUNT(*) AS 'Anzahl'
FROM wp_posts
GROUP BY post_status, post_type;

Ausgabe:

post_status post_type Anzahl  
auto-draft post 3  
inherit attachment 36  
inherit revision 10  
publish nav_menu_item 6  
publish page 5  
publish post 32  

Die echten, veröffentlichten Artikel verfügen also über die Merkmale »publish« und »post« und sollten in der Anzahl mit den tatsächlichen Posts übereinstimmen. Auch Einträge wie Seiten und Menus haben einen Benutzerbezug. Die Attachments sind die Bilder/Dateien aus der Mediathek.

In der Tabelle wp_postmeta wird neben der ID des Posts unter anderem der Benutzer festgehalten, der zuletzt einen Post modifiziert hat. Enthält das Feld wp_postmeta.meta_key den Schlüssel »_edit_last«, dann weist das Feld wp_postmeta.meta_value auf die ID des Benutzers. Die Systemrelevanz ist an dieser Stelle nicht klar, aber bei Änderungen in der Tabelle wp_posts sollten auch hier entsprechende Anpassungen vorgenommen werden. Ebenfalls unklar ist, ob auch die IDs der Datensätze für die Attachments in wp_posts umgelegt werden sollten.

Angenommen, alle Artikel/Posts wurden bisher vom Administrator (ID = 1) geschrieben und sollen jetzt an den neu erstellten Redakteur (ID = 2) umgehängt werden, dann würde das in zwei Schritten erfolgen. Die Feldinhalte wp_posts.post_author müssen auf die neue ID 2 eingestellt werden, sofern Post-Status und Post-Type auf »publish« und »post« stehen:

UPDATE wp_posts SET post_author = 2
WHERE post_author = 1 AND
(post_status = 'publish' AND post_type = 'post');

Als nächstes wird noch die Tabelle wp_postmeta angepaßt. Dies ist etwas aufwendiger, da nur die »_edit_last« Positionen korrigiert werden sollen, deren post_id auf einen Datensatz in der wp_posts zeigen, die die Post-Status und Post-Type Eigenschaften »publish« und »post« erfüllen. Zunächst erst mal nachsehen:

SELECT pome.* FROM wp_postmeta AS pome
LEFT JOIN wp_posts AS po ON pome.post_id = po.ID
WHERE pome.meta_key = '_edit_last' AND
pome.meta_value = '1' AND
po.post_status = 'publish' AND
po.post_type = 'post';

Wenn dieser SQL-Query das gewünschte Resultat geliefert hat, dann kann ein entsprechendes Update durchgeführt werden:

UPDATE wp_postmeta AS pome 
LEFT JOIN wp_posts AS po ON pome.post_id = po.ID
SET pome.meta_value = '2'
WHERE pome.meta_key = '_edit_last' AND
pome.meta_value = '1' AND
po.post_status = 'publish' AND
po.post_type = 'post';

rh2011-08-002

Daily PuTTY

Das Anfertigen einer Datensicherung wird meist völlig zurecht als störend empfunden. Es unterbricht oder hemmt den normalen Arbeitsablauf für Minuten oder sogar Stunden. Vielleicht überlegt man überdies zuvor noch einen Virencheck durchführen zu lassen, um zumindest eine saubere Kopie zu erzeugen. Dann dauert der ganze Prozeß nochmals länger. Und wann hat man jemals eine Datensicherung aufgrund von plötzlichem Datenverlust benötigt? Bisher wurde doch eine Sicherung mit anschließender Rücksicherung nur im Migrationsfall oder einem geplanten prophylaktischen HD-Tausch durchgeführt. Wie auch immer, Kopienahme der Datenbestände hat auch etwas beruhigendes.

Bei WordPress bezieht sich die Datensicherung auf zwei Bereiche. Da ist zum einen die MySQL Datenbank für WordPress mit seinen elf Tabellen (das entspricht der aktuellen WP-Standardinstallation). Dort werden die Artikel, Kommentare, Bezüge und strukturelle Daten abgelegt. Dieses Datenzentrum verdient natürlich sicherungstechnisch die höchste Aufmerksamkeit. An die Datenbank und seine Tabellen gelangt man mittels geeigneter MySQL-Clients. Das könnte zum Beispiel phpMyAdmin sein.

Der zweite Bereich betrifft die WordPress Installation. Eigentlich den variablen Teil davon. WordPress selbst ist ja jederzeit in der aktuellsten Version verfügbar und somit aus dem Stand wiederherstellbar. Individuelle Daten liegen aber beispielsweise in dem Ordner mit den eigenen Themen, und dem Ordner mit den sogenannten Multimedia-Daten. Für die Sicherung der gesamten WordPress Installation oder Teilen davon würde man zum Beispiel auf einen FTP-Client wie Filezilla zurückgreifen müssen.

Wie, was und wann man auch immer sichern mag, in der Regel benötigt man zwei verschiedene Abläufe und das ist für eine regelmäßige Datensicherung nicht gerade förderlich. Einige Web-Hoster bieten ihren Kunden einen SSH-Zugang (Secure Shell) zu ihrem reservierten Datenbereich an. Mittels eines geeigneten SSH-Clients kann man vom lokalen Arbeitsplatz auf den SSH-Server des Hosters und damit auf die eigenen Datenstrukturen und verfügbaren Programme zugreifen. Ein gut nutzbarer SSH-Client ist zum Beispiel PuTTY.

PuTTY selbst als GUI, bringt auch einige Kommandozeilen Tools mit, die es dem Anwender gestatten eine Sicherung beider Datenbereiche zusammenzufassen und über eine Batch-Datei (Windows) automatisiert ablaufen zu lassen. Hier zunächst exemplarisch der Aufruf von PuTTY auf der Kommandozeile eines Terminalfensters:

> c:\"program files (x86)"\putty\putty
  -ssh -P 22 -l ssh-user -pw ssh-password
  hostname_oder_ip

Die beiden Informationen zu ssh-user und ssh-password wurden natürlich zuvor vom Web-Hoster bekanntgegeben. An dieser Stelle sei ausdrücklich angemerkt, daß es selbstverständlich nicht state of the art ist, sich, wie in diesem Beispiel, durch die Mitgabe eines gewöhnlichen Paßworts beim Server zu authentifizieren. Richtig, weil sicherer, wäre die Public-Key-Authentifizierung mit privatem und öffentlichem Schlüssel. Aber das ist ein anderes Thema.

Mit dem vorstehenden PuTTY-Befehl hat man sich jetzt also erfolgreich in den Server eingewählt. Für eine Online-Session ist das bestens geeignet, aber für einen Batch-Ablauf vollkommen unbrauchbar. Hierfür gibt es das Kommandozeilen-Tool plink:

> c:\"program files (x86)"\putty\plink
  -ssh -P 22 -l ssh-user -pw ssh-password
  hostname_oder_ip
  /usr/bin/program_to_run

Das Tool plink ist sozusagen das Gegenstück zu putty für die Kommandozeile. Es verbindet sich in gleicher Weise mit dem Server, und setzt einen Befehl ab. Alle Ausgaben der aufgerufenen Programme auf STDOUT/STDERR erfolgen natürlich, wie bei putty auch, auf dem SSH-Client, also dem lokalen Arbeitsplatz. Anschließend wird die Verbindung wieder beendet.

Über diesen Weg gibt es also die Möglichkeit die Datenbank mittels mysqldump zu sichern. Bleibt noch die Aufgabe gezielt Dateien oder ganze Verzeichnisse auf den Client zu ziehen. Das Tool pscp, das gemeinsam mit PuTTY ausgeliefert wird, leistet genau diese Arbeit:

> c:\"program files (x86)"\putty\pscp
  -l ssh-user -pw ssh-password
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress
  c:\users\win-user\wordpress

Hier kopiert pscp das Host-Verzeichnis …/wordpress rekursiv (-r) und speichert es im Verzeichnis des Windows-Users ebenfalls unter …\wordpress ab. Die Dokumentation zu PuTTY und den Tools ist sehr ausführlich und somit zur Lektüre empfohlen.

Jetzt bleibt nur noch das Ganze sinnvoll in einem Skript oder einer Batch-Datei zusammenzufügen. Eine grobe Struktur ist nachfolgend dargestellt:

@echo off
::
:: 1. Sicherungsordner (S_jjjjmmtt_hhmmss) anlegen
::
for /f "tokens=1-3 delims=/.- " %%A in ('date /T') do (
    set TT=%%A& set MM=%%B& set JJJJ=%%C)
set Datum=%JJJJ%%MM%%TT%
for /f "tokens=1-3 delims=:, " %%A in ('echo %time%') do (
    set hh=%%A& set mm=%%B& set ss=%%C)
set Uhrzeit=%hh%%mm%%ss%
set Verzeichnis=S_%Datum%_%Uhrzeit%
mkdir c:\users\win-user\%Verzeichnis%
::
:: 2. Servereinwahl und Ausführung des Befehls 'mysqldump'
::
c:\"program files (x86)"\putty\plink -ssh -P 22 ^
  -l ssh-user -pw ssh-password ^
  hostname_oder_ip ^
  /usr/bin/mysqldump -u mysql-user -pmysql-password ^
  --opt ^
  --skip-extended-insert ^
  --databases ^
    wordpress ^
  --tables ^
    wp_commentmeta ^
    wp_comments ^
    wp_links ^
    wp_options ^
    wp_postmeta ^
    wp_posts ^
    wp_terms ^
    wp_term_relationships ^
    wp_term_taxonomy ^
    wp_usermeta ^
    wp_users ^
  > c:\users\win-user\%Verzeichnis%\blogdump.sql
::
:: 3. Download Dateien/Verzeichnisse
::
c:\"program files (x86)"\putty\pscp ^
  -l ssh-user -pw ssh-password ^
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress/wp-content/themes/my-themes ^
  c:\users\win-user\%Verzeichnis%
::
c:\"program files (x86)"\putty\pscp ^
  -l ssh-user -pw ssh-password ^
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress/my-media ^
  c:\users\win-user\%Verzeichnis%
::

Im ersten Schritt wird im aktuellen Client-Verzeichnis ein Ordner zur Aufnahme der Sicherungsdateien erstellt. Dieser Ordner erhält einen Namen bestehend aus dem Präfix »S«, dem aktuellen Datum gefolgt von der aktuellen Uhrzeit. Im zweiten Schritt erfolgt der Dump der WordPress Datenbank für ausgewählte Tabellen. Die Ausgabe (STDOUT) von mysqldump wird in den zuvor erstellten Sicherungsordner umgeleitet. Im dritten Schritt werden noch einige Verzeichnisse in den Sicherungsordner kopiert. Weitere Dateien/Verzeichnisse könnten hier noch folgen. Für einen Echteinsatz müßten unbedingt noch die Errorlevel abgeprüft werden. Außerdem könnte der Aufruf parametrisiert erfolgen, um den Umfang der Sicherungsmaßnahme zu steuern.
rh2011-08-001

Mobilcom-Debitel flexibles Vertragsende

Mobilcom-Debitel flexibles VertragsendeVerträge, die mit einer Einstandsgebühr beginnen, nachträglich freie Leistungen berechnen und ein Vertragsende festlegen, bei dessen Terminfindung der Kunde übervorteilt werden soll, sind sicher nicht die Regel. In bestimmten Branchen sind sie jedoch scheinbar überdurchschnittlich häufig anzutreffen, zumindest, wenn man den öffentlichen Medien und einschlägigen Internet-Foren Glauben schenken will. Im Rahmen einer Neustrukturierung unserer Telekommunikationsverträge wurde unter anderem auch ein Mobilfunk/UMTS Vertrag mit der Mobilcom-Debitel GmbH gekündigt.

Dieser Vertrag wurde am 8. Januar 2009 mit der Debitel AG – die später in die Mobilcom-Debitel GmbH über ging – geschlossen, und beinhaltet eine UMTS Flatrate, 24 Monate Mindestvertragslaufzeit und eine monatliche Finanzamt taugliche Papierrechnung. Bereits die erste Rechnung enthielt eine Position Anschluß Data Card. Auf telefonische Nachfrage wurde mitgeteilt, daß diese Position auf Kulanz erstattet werden könne, wenn bei Vertragsabschluß hierüber keine Aufklärung erfolgt sei.

Mit der Rechnung für November 2009 tauchte unter Sonstige Gebühren/Gutschriften die Position Gebühr Papierrechnung auf. Dies wiederholte sich mit der Dezember Rechnung 2009 und verschwand, so wie es gekommen war, mit der Januar Rechnung 2010. Man verspürte keine Neigung über die Hintergründe mehr erfahren zu wollen oder gar eine Erstattung anzustreben.

Per Einschreiben/Rückschein vom 20. Juni 2011 wurde der Mobilfunkvertrag zum nächstmöglichen Zeitpunkt gegenüber der Mobilcom-Debitel GmbH gekündigt. Mit Antwortschreiben vom 22. Juni 2011 kam die Bestätigung der Kündigung:

»… wunschgemäß bestätigen wir Ihnen hiermit die Kündigung Ihres Mobilfunk-Anschlusses. Gemäß unseren Allgemeinen Geschäftsbedingungen endet Ihr Vertrag am 31.01.2012

Zu erwarten war eigentlich ein Vertragsende zum 7. Januar 2012, also nach genau 36 Monaten. Ein Blick in die AGBs sowohl der Debitel AG als auch der Mobilcom-Debitel GmbH brachten diesbezüglich nichts Erhellendes. Eine kurze schriftliche Rückfrage brachte ein neues Antwortschreiben hervor. Mobilcom-Debitel antwortete darin am 14. Juli 2011, so, als sei es das Erstschreiben:

»… wunschgemäß bestätigen wir Ihnen hiermit die Kündigung Ihres Mobilfunk-Anschlusses. Gemäß unseren Allgemeinen Geschäftsbedingungen endet Ihr Vertrag am 31.12.2011

Ein Vertragsende/Kontenabschluß scheint also nur per ultimo möglich zu sein. Untaugliches Vorschieben der AGBs, wie hier sichtbar wird, ist mehr als fragwürdig. Wahrscheinlich soll es diejenigen beeindrucken, die sich in solchen Fragen nicht so sicher sind.

Bei diesem Vorgang geht es vordergründig nicht um die Kontrolle, ob hier mal 20 EUR, dann 5 EUR und dort noch 30 EUR vermeintlich zuviel gezahlt wurde. Es geht zum einen um die Feststellung, daß Unternehmen, deren Kundenzahl im sechs oder siebenstelligen Bereich liegt, den Vertragspartner häufig nicht mehr als Kunden im klassischen Sinn sehen, sondern als einfachen Wirtschaftsfaktor. Dieser Faktor soll zahlen und seine vertragsbestimmten Leistungen beziehen. Alles Weitere wird als Störung empfunden. Nur so läßt sich erklären, daß die Kontaktdaten, zum Beispiel auf Rechnungen, kleiner gedruckt sind als die Zutatenliste auf einer Dose Unkrautvernichtungsmittel. Zum anderen wird deutlich, daß der Kunde, der sich ein-/durchsetzt, durchaus zu seinem Recht kommen kann. Diese Erkenntnis wird bei Kunden immer stärker Platz greifen und weiter kommuniziert werden. Unternehmen werden langfristig reagieren müssen, da sie wissen, daß die Rückgewinnung eines verlorenen Kunden ungleich aufwendiger ist, als die Neukundengewinnung.

Am Ende stellt sich die Frage, warum man jemals wieder einen neuen Vertrag mit genau dieser Firma abschließen sollte. Eine Antwort könnte heute lauten: »Weil die anderen auch nicht besser sind.«
rh2011-07-006

Lebensmittel Wahrheit und Klarheit

Lebensmittel Wahrheit und KlarheitWer hätte das gedacht. Frau Aigner, ihres Zeichens Bundesministerin für Ernährung, Landwirtschaft und Verbraucherschutz, traut sich was. Nach ihrem eher schwachen Verhalten während der letzten Futter- und Lebensmittelskandale überrascht sie nun mit der Einrichtung eines neuen Internetportals, das dem Verbraucherschutz dienen und die Verbraucherrechte stärken soll. Unter dem etwas sperrigen Namen lebensmittelklarheit.de, öffnete das Portal am 20. Juli 2011 erstmals seine Pforten. Die Ministerin, der von Gegnern ihre Nähe zur Industrie vorgeworfen wird, stellt sich mit diesem Projekt eindeutig auf die Seite der Verbraucher, auch wenn die Verantwortung bei den Verbraucherzentralen liegt und das Ministerium mit knapp 800 TEUR nur als Finanzier auftritt.

Der Web-Auftritt selbst strahlt eine gewisse Betulichkeit aus und erzeugt eine Mit-Zamek-fängt-die-Mahlzeit-an Gewinnspielatmosphäre. Er scheint kein Ort dynamischer Interaktion zu sein an dem Verbraucher ihre Erfahrungen bekanntgeben und austauschen können. Dennoch geht dieser erste Schritt mit Sicherheit in die richtige Richtung. Verbraucher können Produkte, bei denen sie sich getäuscht fühlen, melden und öffentlich machen. Die öffentliche Aufmerksamkeit war bereits vor Eröffnung des Internet-Portals überaus groß und der Zusammenbruch der Sever am Eröffnungstag, von Kritikern mit Häme bedacht, könnte auch positiv als Zeichen überdurchschnittlichen Interesses verstanden werden. Dies wird die Zukunft zeigen.

Drei Punkte aber kann man aber bereits jetzt schon festmachen:

  • Es ist erfreulich zu sehen, daß es noch Politiker gibt, die bereit, sind sich gegen starke Lobbygruppen zu stellen und damit vielleicht sogar den Unmut weiter Kreise innerhalb ihrer eigenen Partei auf sich zu ziehen. Selbstverständlich ist dieses Verhalten – klare Position zu beziehen – heute jedenfalls nicht mehr.
  • Einen wichtigen Beitrag haben die Lebensmittelindustrie und ihre Bundesvereinigung (BVE) mit ihrer knallharten Kritik und Klageandrohung selbst geliefert. Gemeinsam haben sie dem Verbraucher zu verstehen gegeben, wie sie sich innerhalb der Gesellschaft positionieren. Demnach geht es ihnen vordergründig nicht um Wahrheit und Klarheit, das Wohl des Verbrauchers, und die öffentliche Benennung schwarzer Schafe in den eigenen Reihen, sondern um die Wahrung unternehmerischer Stabilität. Vertrauensbildend ist so ein Verhalten nicht.
  • Der Verbraucher hat jetzt schon gewonnen. Er muß seine Kritik zukünftig nicht mehr in den eher dunkleren Ecken des Internets verbreiten, sondern kann dies nun mit staatlicher Erlaubnis und der Benennung von Roß und Reiter an prominenter und qualifizierter Stelle tun. Da die Nachhaltigkeit der dort platzierten Mißstände groß ist (das Internet vergißt nichts), darf erwartet werden, daß die Industrie in berechtigten Fällen im Sinne des Verbrauchers reagiert.

Kritik an dem Projekt gab es aber auch aus den politischen Reihen. Die FDP, zu deren Klientel nicht nur Hoteliers gehören, äußerte diffuse Kritik an der angstfördernden Wirkung des Portals auf Verbraucher. Und selbst die Grünen, Frau Höhn, maßregelte Frau Aigner, die ihre Verantwortung zur Kontrolle nicht auf die Verbraucher schieben dürfe. Diese Kritik enttäuscht in zweierlei Hinsicht: Sie stellt die Grünen wieder einmal als ideenlose Berufsnörgler hin, und läßt die Unterstützung auf einem Sachgebiet vermissen, das eigentlich auch von den Grünen besetzt sein sollte. In ihrer Kritik übersieht Frau Höhn, daß der Hebel von Millionen Verbrauchern, richtig angesetzt, eine ungleich größere Kraft entfalten kann, als ein Ministerium dies jemals leisten könnte.

Verbrauchern und Portalbetreibern ist zu wünschen, daß sie dieses Portal verantwortlich nutzen, unbeeinflußt von Interessengruppen weiterentwickeln, und damit zu einem Zentrum für den Verbraucherschutz machen. Eine zentrale Anlaufstelle, die sich zukünftig auch auf weitere Produktgruppen und Dienstleistungen erstrecken wird. Und es wäre zu wünschen, daß sie ideologiefreie Unterstüzung von den Organisationen erhalten, die sich den Verbraucherschutz auf die Fahne geschrieben haben.
rh2011-07-005