* @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ /** * Include parent class */ //require_once("class.Bootstrap.php"); /** * Class which outputs the html page for Calendar view * * @category DMS * @package SeedDMS * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann * @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ class SeedDMS_View_Calendar extends SeedDMS_Theme_Style { function iteminfo() { /* {{{ */ $dms = $this->params['dms']; $document = $this->params['document']; $version = $this->params['version']; $event = $this->params['event']; $strictformcheck = $this->params['strictformcheck']; $cachedir = $this->params['cachedir']; $conversionmgr = $this->params['conversionmgr']; $previewconverters = $this->params['previewConverters']; $previewwidthlist = $this->params['previewWidthList']; $previewwidthdetail = $this->params['previewWidthDetail']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; if($document) { print $this->folderListHeader(); print "\n"; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile); if($conversionmgr) $previewer->setConversionMgr($conversionmgr); else $previewer->setConverters($previewconverters); $document->verifyLastestContentExpriry(); echo $this->documentListRow($document, $previewer); echo "\n\n"; } if($event) { // print_r($event); $this->contentHeading(getMLText('edit_event')); ?>
"> contentContainerStart(); $this->formField( getMLText("from"), $this->getDateChooser(getReadableDate($event["start"]), "from") ); $this->formField( getMLText("to"), $this->getDateChooser(getReadableDate($event["stop"]-86400), "to") ); $this->formField( getMLText("name"), array( 'element'=>'input', 'type'=>'text', 'name'=>'name', 'value'=>htmlspecialchars($event["name"]) ) ); $this->formField( getMLText("comment"), array( 'element'=>'textarea', 'name'=>'comment', 'rows'=>4, 'cols'=>80, 'value'=>htmlspecialchars($event["comment"]), 'required'=>$strictformcheck ) ); if($euser = $dms->getUser($event['userID'])) { $this->formField( getMLText("user"), array( 'element'=>'plain', 'value'=>htmlspecialchars($euser->getFullName()) ) ); } $this->contentContainerEnd(); $this->formSubmit(" ".getMLText('save')); ?>
contentHeading(getMLText('rm_event')); $this->contentContainerStart(); ?>
">

htmlspecialchars($event["name"])));?>

formSubmit(" ".getMLText('delete'),'','','danger'); ?>
contentContainerEnd(); } } /* }}} */ function itemsperday() { /* {{{ */ $dms = $this->params['dms']; $start = explode('-', $this->params['start']); $cachedir = $this->params['cachedir']; $conversionmgr = $this->params['conversionmgr']; $previewconverters = $this->params['previewConverters']; $previewwidthlist = $this->params['previewWidthList']; $previewwidthdetail = $this->params['previewWidthDetail']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; if($this->params['start']) { $from = makeTsFromLongDate($this->params['start'].' 00:00:00'); } else { $from = time(); } if($data = $dms->getTimeline($from)) { $this->contentHeading(getReadableDate($from)); print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile); if($conversionmgr) $previewer->setConversionMgr($conversionmgr); else $previewer->setConverters($previewconverters); foreach($data as $i=>$item) { /* Filter out timeline events for the documents not happened on the * selected day */ if(substr($item['date'], 0, 10) == $this->params['start']) if($item['document']) { echo $this->documentListRow($item['document'], $previewer); } } echo "\n
".getMLText("name")."".getMLText("status")."".getMLText("action")."
\n"; } } /* }}} */ function events() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $calendar = $this->params['calendar']; $eventtype = $this->params['eventtype']; $start = explode('-', $this->params['start']); $end = explode('-', $this->params['end']); $arr = array(); switch($eventtype) { case 'regular': $events = $calendar->getEventsInInterval(mktime(0,0,0, $start[1], $start[2], $start[0]), mktime(23,59,59, $end[1], $end[2], $end[0])); foreach ($events as $event){ $arr[] = array( 'start'=>date('Y-m-d', $event["start"]), 'end'=>date('Y-m-d', $event["stop"]), 'title'=>$event["name"].($event['comment'] ? "\n".$event['comment'] : ''), 'eventid'=>$event["id"], 'eventtype'=> $eventtype, ); } break; case 'expires': if(mktime(23,59,59, $end[1], $end[2], $end[0]) > time()) { $documents = $dms->getDocumentsExpired($this->params['end']); foreach ($documents as $document){ if($document->getAccessMode($user) >= M_READ) { $arr[] = array( 'start'=>date('Y-m-d', $document->getExpires()), 'allDay'=>true, 'color'=>'#ff4455', 'title'=>$document->getName()."\nexpires", 'documentid'=> $document->getID(), 'eventtype'=> $eventtype, ); } } } break; case 'attrdate': if(mktime(23,59,59, $end[1], $end[2], $end[0]) > time()) { $attrdefs = $dms->getAllAttributeDefinitions(\SeedDMS_Core_AttributeDefinition::objtype_document); foreach($attrdefs as $attrdef) { if($attrdef->getType() == \SeedDMS_Core_AttributeDefinition::type_date) { $documents = $attrdef->getObjects($this->params['start'], 0, O_GTEQ); foreach ($documents['docs'] as $document){ if($document->getAccessMode($user) >= M_READ) { $arr[] = array( 'start'=>$document->getAttribute($attrdef)->getValue(), 'allDay'=>true, 'color'=>'#4455ff', 'title'=>$document->getName()."\n".$attrdef->getName(), 'documentid'=> $document->getID(), 'eventtype'=> $eventtype, ); } } } } } break; case 'action': /* These are all operations which added a new version, an attachment * or any kind of status change */ if($this->params['start']) { $from = makeTsFromLongDate($this->params['start'].' 00:00:00'); } else { $from = time()-7*86400; } if($this->params['end']) { $to = makeTsFromLongDate($this->params['end'].' 23:59:59'); } else { $to = time(); } if($data = $dms->getTimeline($from, $to)) { foreach($data as $i=>$item) { switch($item['type']) { case 'add_version': $color = '#20a820'; break; case 'add_file': $color = '#c3bf00'; break; case 'status_change': if($item['status'] == S_RELEASED) $color = '#129a02'; else $color = '#a8a8a8'; break; default: $color = '#20a8a8'; } if ($item['document']->getAccessMode($user) >= M_READ) $arr[] = array( 'start'=>$item['date'], 'title'=>$item['document']->getName().(isset($item['version']) ? " (".$item['version'].")" : "").(isset($item['status']) ? "\n".getOverallStatusText($item['status']) : ''), 'allDay'=>isset($item['allday']) ? $item['allday'] : false, 'color'=>$color, 'type'=>$item['type'], 'documentid'=> (int) $item['document']->getID(), 'version'=> isset($item['version']) ? (int) $item['version'] : '', 'statusid'=> isset($item['statusid']) ? (int) $item['statusid'] : '', 'statuslogid'=> isset($item['statuslogid']) ? (int) $item['statuslogid'] : '', 'fileid'=> isset($item['fileid']) ? (int) $item['fileid'] : '', 'eventtype'=> $eventtype, ); } } break; } header('Content-Type: application/json'); echo json_encode($arr); } /* }}} */ function js() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $strictformcheck = $this->params['strictformcheck']; $day = $this->params['day']; $year = $this->params['year']; $month = $this->params['month']; header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('js_form_error', 'js_form_errors')); $query = ''; if($day && $year && $month) $query = http_build_query(['day'=>$day, 'year'=>$year, 'month'=>$month]); ?> $(document).ready(function() { $('#calendar').fullCalendar({ height: $(window).height()-210, locale: 'params['session']->getLanguage(), 0, 2); ?>', isGuest()) { ?> customButtons: { addEventButton: { text: '', click: function() { // alert('clicked the custom button!'); document.location.href = '../out/out.AddEvent.php'; } } }, header: { left: 'prev,next today addEventButton', center: 'title', right: 'month,agendaWeek,agendaDay,listWeek' }, defaultDate: '', navLinks: true, // can click day/week names to navigate views editable: false, weekNumbers: true, eventLimit: true, // allow "more" link when too many events eventDrop: function(event, delta, revertFunc) { // if (!confirm("Are you sure about this change?")) { // revertFunc(); // } var fd = new FormData(); fd.append('formtoken', ''); fd.append('eventid', event.eventid); fd.append('documentid', event.documentid); fd.append('from', event.start.format()); fd.append('ajax', 1); fd.append('eventtype', event.eventtype); $.post("../op/op.EditEvent.php", // fd, "formtoken=&eventid="+event.eventid+"&documentid="+event.documentid+"&from="+event.start.format()+"&ajax=1&eventtype="+event.eventtype, function(response) { noty({ text: response.message, type: response.success === true ? 'success' : 'error', dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', timeout: 1500, }); $('#calendar').fullCalendar('refetchEvents'); }, "json"); }, eventSources: [ { url: 'out.Calendar.php?action=events', editable: true, eventStartEditable: false }, { url: 'out.Calendar.php?action=events&eventtype=action', editable: false }, { url: 'out.Calendar.php?action=events&eventtype=attrdate', editable: false }, { url: 'out.Calendar.php?action=events&eventtype=expires', editable: true } ], eventClick: function(event, element) { $('div.ajax.iteminfo').trigger('update', { documentid: event.documentid, version: event.version, eventid: event.eventid, statusid: event.statusid, statuslogid: event.statuslogid, fileid: event.fileid, callback: function() { $("#form1").validate({ debug: false, submitHandler: function(form) { $.post("../op/op.EditEvent.php", $(form).serialize()+"&ajax=1", function(response) { noty({ text: response.message, type: response.success === true ? 'success' : 'error', dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', timeout: 1500, }); $('#calendar').fullCalendar('refetchEvents'); }, "json"); }, messages: { name: "", comment: "" }, }); $('#fromdate, #todate') .datepicker() .on('changeDate', function(ev){ $(ev.currentTarget).datepicker('hide'); }); } }); $('div.ajax.itemsperday').html(''); }, dayClick: function(date, jsEvent, view) { $('div.ajax.itemsperday').trigger('update', {start: date.format()}); $('div.ajax.iteminfo').html(''); } }); }); /* function checkForm() { msg = new Array() if (document.form1.name.value == "") msg.push(""); if (document.form1.comment.value == "") msg.push(""); if (msg != "") { noty({ text: msg.join('
'), type: 'error', dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', _timeout: 1500, }); return false; } else return true; } $(document).ready(function() { $('body').on('submit', '#form1', function(ev){ if(checkForm()) return; ev.preventDefault(); }); }); */ printClickDocumentJs(); } /* }}} */ function show() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'css'); $this->htmlAddHeader(''."\n", 'css'); $this->htmlStartPage(getMLText("calendar")); $this->globalNavigation(); $this->contentStart(); // $this->pageNavigation("", "calendar", array()); $this->rowStart(); $this->columnStart(8); ?>
'ff4455', 'text'=>'expired']; $legend[] = ['color'=>'20a820', 'text'=>'updated']; $legend[] = ['color'=>'c3bf00', 'text'=>'timeline_add_file']; $legend[] = ['color'=>'129a02', 'text'=>'released']; $legend[] = ['color'=>'a8a8a8', 'text'=>'status_change']; $legend[] = ['color'=>'20a8a8', 'text'=>'undefined']; $legend[] = ['color'=>'3a87ad', 'text'=>'event']; foreach($legend as $item) { echo " ".getMLText($item['text']).""; } ?>
columnEnd(); $this->columnStart(4); ?>
columnEnd(); $this->rowEnd(); $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ } ?>