3 && time() - $log[$_SERVER['REMOTE_ADDR']]['time'] < 86400) { die("
'.$letter.'
'; foreach($files as $file) { $ext=pathinfo($file); $content.=''; } } break; } if ($quit) { print($content); exit; } else return $content; } function plan($path){ $dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $files = $matches = array(); while($dir->valid()) { $dir->next(); if (!$dir->isDot()) { $ext = pathinfo($dir->getSubPathName()); if ($ext['extension']=="md" && $ext['dirname']!='special') { array_push($files,$dir->getSubPathName()); } } } ksort($files); return $files; } function glossary($path){ $dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $files = $matches = array(); while($dir->valid()) { $dir->next(); if (!$dir->isDot()) { $ext = pathinfo($dir->getSubPathName()); if ($ext['extension']=="md" && $ext['dirname']!='special') { $letter=strtoupper(substr($ext['filename'],0,1)); if (!array_key_exists($letter,$files)) $files[$letter]=array(); array_push($files[$letter],$dir->getSubPathName()); } } } ksort($files); return $files; } function searchstr($path, $string){ $dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $files = array(); $totalFiles = 0; while($dir->valid()) { if (!$dir->isDot()) { $ext = pathinfo($dir->getSubPathName()); if ($ext['extension']=="md") { $content = file_get_contents(CONTENT_DIR.$dir->getSubPathName()); $pos=strpos($content, $string); if ($pos > 0) { $posmin=$pos-150; $quantity=300; if ($posmin<0) $posmin=0; $files[$dir->getSubPathName()] = substr(str_replace($string,''.$string."",$content), $posmin, $quantity); $totalFiles++; } } } $dir->next(); } ksort($files); return array('files' => $files, 'totalFiles' => $totalFiles); } function loadlang($language) { global $LANG,$JSLANG; $JSLANG=file_get_contents(ROOT_DIR."lang/".$language.".json"); $LANG=json_decode($JSLANG,true); } function history($file) { if (is_numeric(MAX_HISTORY_FILES) && MAX_HISTORY_FILES > 0) { $file_dir = str_replace(CONTENT_DIR,"",dirname($file)."/"); $file_name = basename($file); $file_history_dir = HISTORY_DIR . $file_dir; foreach ([HISTORY_DIR, $file_history_dir] as $dir) { if (file_exists($dir) === false || is_dir($dir) === false) { mkdir($dir,0755,true); } } $history_files = scandir($file_history_dir); foreach ($history_files as $key => $history_file) { if (in_array($history_file, ['.', '..', '.DS_Store'])) { unset($history_files[$key]); } } $history_files = array_values($history_files); if (count($history_files) >= MAX_HISTORY_FILES) { foreach ($history_files as $key => $history_file) { if ($key < 1) { unlink($file_history_dir . '/' . $history_file); unset($history_files[$key]); } else { $newfile_name=pathinfo(basename($history_file))['filename']; rename($file_history_dir . '/' . $history_file, $file_history_dir . '/' . $newfile_name . '.' . ($key - 1)); } } } copy($file, $file_history_dir . '/' . $file_name . '.' . count($history_files)); } } function delcontent($url) { global $LANG; $file = CONTENT_DIR.$url; if (is_writable($file)) { history($file); unlink($file); $content='success|'.$LANG['DELETED']; } else if (!is_writable($file)) $content='danger|'.$LANG['PROTECTED']; else $content='danger|'.$LANG['INDETERMINED']; return $content; } function rencontent($url,$url2) { global $LANG; $file = CONTENT_DIR.$url; $file2 = CONTENT_DIR.$url2; if (is_writable($file)) { history($file); rename($file,$file2); $content='success|'.$LANG['RENAMED']; } else if (!is_writable($file)) $content='danger|'.$LANG['PROTECTED']; else $content='danger|'.$LANG['INDETERMINED']; return $content; } function setcontent($url,$data) { global $LANG; $file = CONTENT_DIR.$url; if (!file_exists($file)) { file_put_contents($file, $data); $content='success|'.$LANG['CREATED']; } else if (is_writable($file)) { file_put_contents($file, $data); history($file); $content='success|'.$LANG['SAVED']; } else if (!is_writable($file)) $content='danger|'.$LANG['PROTECTED']; else $content='danger|'.$LANG['INDETERMINED']; return $content; } function getcontent($url,$md=true,$header=false) { global $LANG; $file = CONTENT_DIR.$url; if (file_exists($file)) $content=file_get_contents($file); else { http_response_code(404); if (file_exists(CONTENT_DIR . "special/404.md")) $content=getcontent("special/404.md"); else $content='**'.$LANG['404X2'].'**'; } if ($header) header('Content-type: '.mime_content_type($file),true); if ($md==true) { $extra = new ParsedownExtraplus(); return $extra->text($content); } else return $content; } function sortByOption($a, $b) { return strcmp($a['text'], $b['text']); } function filesJSON($path,$all,$first=true) { $alldata = array(); $dir= new DirectoryIterator($path); foreach($dir as $node) { if ( ($node->getFilename() == ".") || ($node->getFilename() == "..") ) continue; if ( (!isset($_SESSION['md_admin'])) && (($node->getFilename() =="images") || ($node->getFilename() =="documents") || ($node->getFilename() =="special") || (SHOW_HIDDEN_FILES === false && substr($node->getFilename(), 0, 1) === '.') || ($node->getExtension() != VIEWABLE_FORMAT && $all==false && $node->isFile()))) continue; $data = array(); if ( $node->isDir() && !$node->isDot() ) { $data['text'] = $node->getFilename(); $data['children'] = filesJSON($path.$node->getFilename()."/",$all,false); $data['icon'] = "far fa-folder"; } else { if ($all) { $data['text'] = $node->getFilename(); if ($node->getExtension() == VIEWABLE_FORMAT) $data['icon'] = "fas fa-book"; else if (strpos(IMAGE_EXT,$node->getExtension())>=0) $data['icon'] = "far fa-images"; else $data['icon'] = "far fa-file"; } else { $file = pathinfo($node->getFilename()); $data['text'] = $file['filename']; $data['icon'] = "fas fa-book"; } } $alldata[]=$data; } usort($alldata, 'sortByOption'); if ($first) return array('icon'=>"fas fa-atlas",'text'=>$_SERVER['SERVER_NAME'],'children'=>array_values($alldata),'state' => array('opened'=>true)); else return array_values($alldata); } function getnav() { global $LANG; $menu=getcontent("special/nav.md"); $menuitems=explode("\n",$menu); $data=""; foreach($menuitems as $item) { $item=str_replace("","",str_replace("","",$item)); $a = new SimpleXMLElement($item); $data.=''.$a[0].''; } $data.=''.$LANG['MARKDOC'].''; return $data; }