document = $document; $this->searchable = false; $this->reference = ""; $this->title = "Untitled View"; $this->langModules = array(); $this->loadView = $loadView; } public function getTitle() { return $this->title; } public function getDocument() { return $this->document; } public function isSearchable() { return $this->searchable; } public function getReference() { return $this->reference; } protected function load(string $viewClass) : string { try { $reflectionClass = new \ReflectionClass($viewClass); if ($reflectionClass->isSubclassOf(View::class) && $reflectionClass->isInstantiable()) { $view = $reflectionClass->newInstanceArgs(array($this->getDocument())); $view->loadView(); return $view; } } catch(\ReflectionException $e) { error_log($e->getMessage()); } return ""; } private function loadLanguageModules() { $lang = $this->document->getUser()->getLanguage(); foreach($this->langModules as $langModule) { $lang->loadModule($langModule); } } // Virtual Methods public function loadView() { } public function getCode() { // Load translations $this->loadLanguageModules(); // Load Meta Data + Head (title, scripts, includes, ...) if($this->loadView) { $this->loadView(); } return ''; } // UI Functions private function createList($items, $tag) { if(count($items) === 0) return "<$tag>"; else return "<$tag>
  • " . implode("
  • ", $items) . "
  • "; } public function createOrderedList($items=array()) { return $this->createList($items, "ol"); } public function createUnorderedList($items=array()) { return $this->createList($items, "ul"); } protected function createLink($link, $title=null, $classes="") { if(is_null($title)) $title=$link; if(!empty($classes)) $classes = " class=\"$classes\""; return "$title"; } protected function createExternalLink($link, $title=null) { if(is_null($title)) $title=$link; return "$title"; } protected function createIcon($icon, $type = "fas", $classes = "") { $iconClass = "$type fa-$icon"; if($icon === "spinner" || $icon === "circle-notch") $iconClass .= " fa-spin"; if($classes) $iconClass .= " $classes"; return ""; } protected function createErrorText($text, $id="", $hidden=false) { return $this->createStatusText("danger", $text, $id, $hidden); } protected function createWarningText($text, $id="", $hidden=false) { return $this->createStatusText("warning", $text, $id, $hidden); } protected function createSuccessText($text, $id="", $hidden=false) { return $this->createStatusText("success", $text, $id, $hidden); } protected function createSecondaryText($text, $id="", $hidden=false) { return $this->createStatusText("secondary", $text, $id, $hidden); } protected function createInfoText($text, $id="", $hidden=false) { return $this->createStatusText("info", $text, $id, $hidden); } protected function createStatusText($type, $text, $id="", $hidden=false, $classes="") { if(strlen($id) > 0) $id = " id=\"$id\""; if($hidden) $classes .= " hidden"; if(strlen($classes) > 0) $classes = " $classes"; return "
    $text
    "; } protected function createBadge($type, $text) { $text = htmlspecialchars($text); return "$text"; } protected function createJumbotron(string $content, bool $fluid=false, $class="") { $jumbotronClass = "jumbotron" . ($fluid ? "-fluid" : ""); if (!empty($class)) $jumbotronClass .= " $class"; return "
    $content
    "; } public function createSimpleParagraph(string $content, string $class="") { if($class) $class = " class=\"$class\""; return "$content

    "; } public function createParagraph($title, $id, $content) { $id = replaceCssSelector($id); $iconId = urlencode("$id-icon"); return "

    $title


    $content
    "; } protected function createBootstrapTable($data, string $classes="") { $classes = empty($classes) ? "" : " $classes"; $code = "
    "; foreach($data as $row) { $code .= "
    "; $columnCount = count($row); if($columnCount > 0) { $remainingSize = 12; $columnSize = 12 / $columnCount; foreach($row as $col) { $size = ($columnSize <= $remainingSize ? $columnSize : $remainingSize); $content = $col; $class = ""; $code .= " $val) { if(strcmp($key, "content") === 0) { $content = $val; } else if(strcmp($key, "class") === 0) { $class = " " . $col["class"]; } else if(strcmp($key, "cols") === 0 && is_numeric($val)) { $size = intval($val); } else { $code .= " $key=\"$val\""; } } if(isset($col["class"])) $class = " " . $col["class"]; } if($size <= 6) $class .= " col-md-" . intval($size * 2); $code .= " class=\"col-lg-$size$class\">$content
    "; $remainingSize -= $size; } } $code .= "
    "; } $code .= ""; return $code; } }