Files
monpas/application/models/monpas/Maakinhoudnieuw_model.php
T
2021-07-13 12:53:03 +02:00

237 lines
10 KiB
PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Maakinhoudnieuw_model extends MY_Model{
protected $tablename = 'tb_sopinhouden';
function __construct(){
parent::__construct();
$models = array("monpas/Ambities_model",
'shared/Users_model',
'monpas/Diversiteits_model',
'monpas/Filledversions_model',
'monpas/Groepen_model',
'monpas/Hoofdstukken_model',
'monpas/Labels_model',
'monpas/Ondersteuningtijden_model',
'monpas/Orgversies_model',
'monpas/Schooldetails_model',
'shared/Schooljaren_model',
'monpas/Scores_model',
'monpas/Sop_model',
'monpas/Standaardteksten_model',
'monpas/Wenssituaties_model',
'monpas/Hoofdstukken_model');
$this->load->model($models);
$this->load->library('monpas/kleurcodes');
}
function maakEnSaveInleiding($profielid, $chapterid,$orgversieid){
$content = $this->maakInleiding($profielid, $chapterid);
$this->SaveContent($profielid, $chapterid,$orgversieid, $content,10);
}
function maakInleiding($profielid, $chapterid){
$content = $this->Standaardteksten_model->get(['chapter_id' =>$chapterid],'content' , true);
$org = $this->Organisaties_model->get(['id' => $this->globorgid], false, true);
$bg = $this->Organisaties_model->get_fieldvalue(["id" => $org->valtonder_id], "naam");
$orgdetails = $this->Schooldetails_model->get_details($this->globorgid);
$specialfields = $this->Sopviews_model->get(['soort' => "INLEIDING"], false,false);
$data = [ 'bevoegdgezag' => $bg,
'schoolnaam' => $org->naam,
'details' => $orgdetails];
foreach ($specialfields as $specialfielddefinitie) {
$fieldhtml = $this->load->view("monpas/sopkeuze/" . $specialfielddefinitie->pad, ['data' => $data], TRUE);
$content = $this->vervangSpecialField($specialfielddefinitie, $content , $fieldhtml);
}
return $content;
} // maak inleiding
function vervangSpecialField($definitie, $content, $fieldhtml){
$vervang = $definitie->vervangingscode;
$pos = strpos($content, $vervang);
if ($pos) {
$lengte = strlen($vervang) + 3;
$content = substr_replace($content, $fieldhtml, $pos, $lengte);
}// if strpos
return $content;
}
function SaveContent($profielid, $chapterid, $orgversieid, $content, $volgorde){
$sopinhoudid = $this->Sopinhouden_model->get(['profiel_id'=> $profielid, 'chapter_id' =>$chapterid], false, true);
if ($sopinhoudid){
$this->Sopinhouden_model->update_record(['content' =>$content, 'volgorde' =>$volgorde], $sopinhoudid);
} else{
$data=['profiel_id' => $profielid,
'chapter_id' => $chapterid,
'content' => $content,
'orgversieid' => $orgversieid,
'volgorde' => $volgorde];
$this->Sopinhouden_model->insert_record($data);
}
}
function fVervers($chapterID, $sopinhoudid, $orgversieid, $wat, $vergelijkingen){
list($newContent, $orgversieid, $error) = $this->fVerversContent($chapterID, $sopinhoudid,$orgversieid,$wat, $vergelijkingen);
if (! $error){
$this->Sopinhouden_model->update_record(['content' =>$newContent, 'orgversieid'=>$orgversieid ], $sopinhoudid);
}
return $error;
}
function fVerversContent($chapterID, $sopinhoudid, $orgversieid, $wat, $vergelijkingen){
$inhoudrecord = $this->Sopinhouden_model->get(['id' =>$sopinhoudid], false ,true);
if (! $orgversieid || $orgversieid == 0) $orgversieid = $inhoudrecord->orgversieid;
if ($wat == "TABELLEN") $content = $inhoudrecord->content;
else $content = $this->Standaardteksten_model->get(['chapter_id' =>$chapterID],'content', true);
$error = false;
if (! $content){
$error = "Er zijn nog geen standaardteksten gemaakt voor dit hoofdstuk. Neem contact op met de helpdesk.";
return [$content, $orgversieid, $error];
}
if ($chapterID == 49){
$data = $this->CreateDataInleiding();
$soort = $data['soort'];
}
elseif ($chapterID == 56 || $chapterID == 57){
$soort = 'ALLEENTEKST';
}
else {
$dataArray = $this->CreateData($chapterID, $orgversieid, $vergelijkingen);
$soort = $dataArray['soort'];
$data = $dataArray['data'];
if ( isset($data['lijsten']) )
if (! $data['lijsten'][0]->scores){
$error = "Er zijn geen ingevulde lijsten (meer) bij de gekozen versie van dit instrument.";
return [$content, $orgversieid, $error];
}
if (isset($data['oordelen']))
if (! $data['oordelen']){
$error = "Er zijn geen ingevulde lijsten (meer) bij de gekozen versie van dit instrument.";
return [$content, $orgversieid, $error];
}
if (! isset($data['oordelen']) && ! isset($data['lijsten']) && ! $dataArray['soort']=="DIVERSITEIT"){
$error = "Er zijn geen ingevulde lijsten (meer) bij de gekozen versie van dit instrument.";
return [$content, $orgversieid, $error];
}
if (! isset($data['versie']) ) $data['versie'] = $this->setVersie($orgversieid);
if (! isset($data['school']) ) $data['school'] = $this->Organisaties_model->get_record_by_id($this->globorgid);
}
$specialfields = $this->Sopviews_model->get(['soort' => $soort], false,false);
if ($specialfields) {
foreach ($specialfields as $specialfielddefinitie) {
$fieldhtml = $this->load->view("monpas/sopkeuze/" . $specialfielddefinitie->pad, ['data' => $data], TRUE);
if ($specialfielddefinitie->type == "GRA") {
$afbeelding = $this->MaakAfbeelding($fieldhtml, $specialfielddefinitie->tabelid); // was imagecode
list($content, $error) = $this->resetSpecialField($specialfielddefinitie, $content, $afbeelding);
} else {
list($content, $error) = $this->resetSpecialField($specialfielddefinitie, $content , $fieldhtml);
}
}
} // if specialfields
return [$content, $orgversieid, $error];
}
function MaakAfbeelding($fieldhtml, $idnaam){
$image = $this->Phantom_model->create_img($fieldhtml, 'test', FALSE, FALSE, array(650, 0));
$image = "<img src='data:image/png;base64," .$image. "' id='" . $idnaam . "' />";
return $image;
}
function CreateDataInleiding(){
$org = $this->Organisaties_model->get(['id' => $this->globorgid], false, true);
$bg = $this->Organisaties_model->get_fieldvalue(["id" => $org->valtonder_id], "naam");
$orgdetails = $this->Schooldetails_model->get_details($this->globorgid);
$data = [ 'bevoegdgezag' => $bg,
'schoolnaam' => $org->naam,
'details' => $orgdetails,
'soort' => 'INLEIDING'];
return $data;
}
function createData($chapterID, $orgversieID, $vergelijkingen){
$hoofdstukkeuze = new Hoofdstukkeuze($chapterID, $orgversieID, $vergelijkingen);
return $hoofdstukkeuze->getHoofdstukKeuze();
}
function resetSpecialField($definitie, $content, $fieldhtml){
$error = false;
$html = new DomDocument();
libxml_use_internal_errors(true);
//$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// bovenstaande removes de closing </h1> tag op de eerst regel. Weird
$html->loadHTML($content);
$book = $html->getElementsByTagName('body');
if (isset($book->parentNode)) $book->parentNode->removeChild($book); // dit werkt blijkbaar niet omdat $book dan geen parentNode heeft
$book = $html->getElementsByTagName('html');
if (isset($book->parentNode)) $book->parentNode->removeChild($book);
$html->removeChild($html->doctype);
if (libxml_get_errors()) {
log_message('error', 'HTML error in the document');
$error= "Maken/verversen van het hoofdstuk is niet gelukt.";
libxml_clear_errors();
return [$content, $error];
}
if( $html->getElementById($definitie->tabelid) ){
$book = $html->getElementById($definitie->tabelid);
$book->parentNode->removeChild($book);
}
try{
$sxe = simplexml_load_string($fieldhtml);
$dom_sxe = dom_import_simplexml($sxe);
$dom_sxe = $html->importNode($dom_sxe, true);
if ($html->getElementById($definitie->vervangingscode) )
$html->getElementById($definitie->vervangingscode)->appendChild($dom_sxe);
// onderstaande else kan niet omdat niet altijd alle vervangingscodes worden gebruikt
// als niet gebruikt dan moeten ze worden overgeslagen
//else $html->appendChild($dom_sxe);
} catch(Exception $e) {
log_message('error', 'Error while parsing the document');
$error= "Maken/verversen van het hoofdstuk is niet gelukt.";
return [$content, $error];
}
$content = $html->saveHTML();
return [$content, $error];
}
function getVolgnummer($profielID){
$this->sql = "SELECT MAX(volgorde) + 10 as volgnummer
FROM tb_sopinhouden
WHERE profiel_id= {$profielID}";
return $this->get_query_row('volgnummer');
}
function setVersie($orgversieid){
$orgversie = $this->Orgversies_model->get_record_by_id($orgversieid);
$versie = $this->Versies_model ->get_record_by_id($orgversie->versie_id);
$versie->naam = $versie->naam . ', periode: ' . $orgversie->periodenummer . ': ' . $orgversie->geldigvanaf . ' - ' . $orgversie->geldigtm;
return $versie;
}
}