Voor een klant had ik de uitdaging het volgende te maken.
De klant krijgt per mail opdrachten binnen die dienen te worden bevestigd per mail en een PDF bijlage waarin de opdracht wordt bevestigd.
Hiervoor dienen meerdere handeling te worden verricht
- Word document maken en opslaan als PDF
- Mail opstellen en PDF bijlage mee sturen
- Online het logboek updaten en PDF bijlage uploaden
De wens is om dit alles te doen via het online logboek systeem
Dit betekend dat het volgende gedaan dient te worden:
- Node aanmaken en opslaan
- PDF opslaan met huisstijl en standaard tekst
- Mail versturen naar opdrachtgever met bevestigingstekst en PDF als bijlage
De uitdaging was om slechts met enkele klikjes de node aan te maken en de teksten te laten genereren door het systeem,
Het recept
De benodigde modules om dit te kunnen bouwen zijn:
- Views
- Views PDF
- Rules
- PHP
1: View aanmaken
- Met Views en Views PDF maak je een PDF pagina aan.
- Filter het content type dat je wilt gebruiken
- Zet het contextual filter in op content:NID , standaard waarde en onbewerkte waarde uit URL.
- Stel bij PDF Template Settings de achtergrond in.
2.1: Rules, opslaan van PDF op je server
maak een nieuwe regel met als voorwaarde na opslaan van Node
maak een actie: Save PDF as file on server, kies de net gemaakte view en zet views arguments op [node:nid].
Vul dan het pad in waar je het PDF bestand wilt opslaan path/[node:title]
- opslaan -
2.2 Rules versturen van mail met PDF
Maak een nieuwe actie Send HTML e-mail en vul de gegevens in. Let op bij de bijlagen. Geef hier het pad op[ dat je net hebt gemaakt inclusief pdf extensie: path/[node:title].pdf
- opslaan -
2.3 Rules PDF opslaan in een filefield
Nieuwe actie Eigen PHP code uitvoeren
global $user;
$uid = $user->uid;
$nid = $node->nid;$source_node = node_load($nid);
$filename = '[node:nid].pdf'; //your specific filename
$dir = 'public://'.$filename; //path to specific file with name
$file_size = filesize($dir);
$source_node->type = 'node_type'; //EntityMalformedException when not active//New file object
$file = new stdClass;
//$file->uid = $source_node->uid;
$file->uid = $uid;
$file->filename = $filename; //your file name;
$file->uri = $dir;
$file->filemime = file_get_mimetype($dir);
// Make it permanent, otherwise it will get deleted later.
$file->status = FILE_STATUS_PERMANENT;
// Save file object to make it a 'managed file'.
$file_obj = file_copy($file, 'public://', FILE_EXISTS_REPLACE);
$file->type = 'document';$source_node->field_custom['und'][0] = array(
'fid' => $file_obj->fid,
'uid' => $file_obj->uid,
'filename' => $file_obj->filename,
'uri' => $file_obj->uri,
'filemime' => $file_obj->filemime,
'filesize' => $file_obj->filesize,
'status' => 1,
'display' => 1,
'description' => '',
);node_save($source_node);
file_usage_add($file_obj, 'file', 'node', $source_node->nid);
En Voila. Je hebt nu een node aangemaakt waarna ene mail wordt verstuurd met een PDF bijlage en deze bijlage wordt en een filefield in je node opgeslagen
- Login om te reageren
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo invent