'; $o .= '
'; $o .= '

' . t('Documentation Search') . ' - ' . htmlspecialchars($_REQUEST['search']) . '

'; $o .= '
'; $o .= '
'; $r = search_doc_files($_REQUEST['search']); if ($r) { $o .= ''; $o .= '
'; $o .= ''; } return $o; } if (argc() > 2 && argv(argc() - 2) === 'assets') { $path = ''; for ($x = 1; $x < argc(); $x++) { if (strlen($path)) { $path .= '/'; } $path .= argv($x); } $realpath = 'doc/' . $path; //Set the content-type header as appropriate $imageInfo = getimagesize($realpath); switch ($imageInfo[2]) { case IMAGETYPE_JPEG: header("Content-Type: image/jpeg"); break; case IMAGETYPE_GIF: header("Content-Type: image/gif"); break; case IMAGETYPE_PNG: header("Content-Type: image/png"); break; default: break; } header("Content-Length: " . filesize($realpath)); // dump the picture and stop the script readfile($realpath); killme(); } $heading = ''; if (argc() === 1) { $cmd = 'doc'; } else { $cmd = str_replace('help/', 'doc/', App::$cmd); } if (! is_dir($cmd)) { $content = get_help_content(); } else { $files = self::listdir($cmd); if ($files) { usort($files, ['self', 'usort_basename']); foreach ($files as $file) { $language = ''; if ((!strpos($file, '/site/')) && file_exists(str_replace('doc/', 'doc/site/', $file))) { $file = str_replace('doc/', 'doc/site/', $file); } if (!is_dir($file) && !str_contains(z_mime_content_type($file), 'text')) { continue; } if (strpos($file, 'README')) { continue; } if (preg_match('/\/(..|..-..)\//', $file, $matches)) { $language = $matches[1]; if ($language === substr(App::$language, 0, 2)) { $language = ''; } } $link = str_replace(['doc/', '.mc', '.txt'], ['help/', '', ''], $file); $displayName = str_replace('_', ' ', $link); if (str_contains($link, '/global/') || str_contains($link, '/media/')) { continue; } $content .= '' . EOL; } } } return replace_macros(Theme::get_template('help.tpl'), [ '$title' => t('$Projectname Documentation'), '$tocHeading' => t('Contents'), '$content' => $content, '$heading' => $heading, '$language' => $language ]); } public static function usort_basename($a,$b) { return strcasecmp(basename($a), basename($b)); } public static function listdir($path) { $results = []; $handle = opendir($path); if (!$handle) { return $results; } if ($path === 'doc') { return ['doc/guide', 'doc/develop', 'doc/site']; } while (false !== ($file = readdir($handle))) { if ($file === '.' || $file === '..') { continue; } $fileName = $path . '/' . $file; if (is_dir($fileName)) { $results = array_merge($results, self::listdir($fileName)); } else { $results[] = $fileName; } } closedir($handle); return $results; } }