237 lines
10 KiB
PHP
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;
|
|
}
|
|
|
|
} |