PDF Erstellung – Liste BuddyPress Mitglieder – WordPress

Wer WordPress in Verbindung mit BuddyPress nutzt, um seine Webseiten Benutzer zu verwalten, kann eventuell auf die Idee kommen, die hinterlegten Informationen als druckbares Dokument bereit zu stellen. Dies ist z.B. vorteilhaft für ein Firmen Intranet, in dem die Nutzer gepflegt werden und die Daten auf den Laptops der Mitarbeiter zur Verfügung stehen sollen, falls sie außer Haus sind oder aber eine ausgedruckte Liste besitzen wollen.
Ich habe dies folgendermaßen gelöst:
Ein PHP Skript ließt die Informationen aus der Datenbank der WordPress Instanz aus und kreiert aus den Datensätzen eine statische HTML-Seite, die eine tabellarische Auflistung der Mitarbeiter enthält. Dies dient als als Grundlage für eine Tabelle und ein PDF.

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

<!doctype html>
<html>
 <head>
 </head>
 <body>
<?php
// error_reporting(E_ALL | E_STRICT);
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','ZaaQg7Oo361D564');
define('DBNAME','wordpress');
$con = mysqli_connect(DBHOST,DBUSER,DBPASS);
mysqli_query($con, "set names 'utf8'");
mysqli_select_db($con, DBNAME);


//User_IDs
$sqluser = "SELECT distinct user_id FROM intranet_bp_xprofile_data" ;
$result_user = mysqli_query($con, $sqluser);

if( mysqli_num_rows($result_user) > 0 )
{
echo "<table border=1>";

//Überschriften
$sql_field_ids = "SELECT distinct a.field_id, b.name FROM intranet_bp_xprofile_data a, intranet_bp_xprofile_fields b where a.field_id=b.id" ;
$result_field_ids = mysqli_query($con, $sql_field_ids);
echo "<tr>";
while( $data_field_ids = mysqli_fetch_assoc($result_field_ids) )
{
 extract($data_field_ids);
 echo "<td>$name ($field_id)</td>";
 $l = 0;
}
echo "</tr>";

//Jetzt pro User eine Zeile
while( $data_result_users = mysqli_fetch_assoc($result_user) )
{
 echo "<tr> ";
 //Extract für $user_id
 extract($data_result_users);
 //Werte des jeweiligen Benutzers
 $sql_unique_user = "SELECT * from (SELECT * from intranet_bp_xprofile_data where user_id=$user_id) a right OUTER join (SELECT DISTINCT field_id from intranet_bp_xprofile_data) b on a.field_id=b.field_id" ;
 $result_unique_user = mysqli_query($con, $sql_unique_user);
 while( $data_result_unique_users = mysqli_fetch_assoc($result_unique_user) ){
 extract($data_result_unique_users);
 echo "<td>$value</td>";
 }
 echo "</tr> ";
}
echo "</table>";
}
?>
 </body>
</html>

Wird die Seite im Browser aufgerufen, sieht es so aus:

Mitarbeiterverzeichnis

Um aus diesem Dokument nun ein PDF generieren zu können, braucht man Server seitig das Tool wkhtmltopdf.

Nach der Installation erstellt man ein kleines Shellskript, welches den Befehl ausführt und die Seite als PDF ablegt.

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

#!/bin/bash
rm /var/www/*Telefonliste.pdf
Datum=`date +%y%m%d%H%M%S`
Name='Telefonliste.pdf'
Dateiname=$Datum'_'$Name
xvfb-run /usr/bin/wkhtmltopdf http://localhost/ma.php /var/www/$Dateiname.pdf >> log.tmp

Dadurch wird das PDF generiert und das aktuelle Datum im Dateinamen hinterlegt. Der Vorgang wird in der Logdatei protokolliert.

Wer möchte, kann das als Cronjob hinterlegen und die Datei auf ein gemountetes Share (z.B. vom Fileserver) speichern.

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

*/120 * * * * /Pfad/zum/Skript.sh
*/121 * * * * cp /Pfad/zum/.pdf /Pfad/zum/Share/

Liste-auf-Share[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s