Add markdown editor so anyone can test it. Fix explode on tags.pull/9/head
| @ -0,0 +1,32 @@ | |||
| A javascript port of Markdown, as used on Stack Overflow | |||
| and the rest of Stack Exchange network. | |||
| Largely based on showdown.js by John Fraser (Attacklab). | |||
| Original Markdown Copyright (c) 2004-2005 John Gruber | |||
| <http://daringfireball.net/projects/markdown/> | |||
| Original Showdown code copyright (c) 2007 John Fraser | |||
| Modifications and bugfixes (c) 2009 Dana Robinson | |||
| Modifications and bugfixes (c) 2009-2013 Stack Exchange Inc. | |||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| of this software and associated documentation files (the "Software"), to deal | |||
| in the Software without restriction, including without limitation the rights | |||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| copies of the Software, and to permit persons to whom the Software is | |||
| furnished to do so, subject to the following conditions: | |||
| The above copyright notice and this permission notice shall be included in | |||
| all copies or substantial portions of the Software. | |||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| THE SOFTWARE. | |||
| @ -0,0 +1,141 @@ | |||
| body { | |||
| font-family: sans-serif; | |||
| } | |||
| blockquote { | |||
| border-left: 2px dotted #888; | |||
| padding-left: 5px; | |||
| background: #d0f0ff; | |||
| } | |||
| .wmd-panel{ | |||
| width: 46%; | |||
| float:left; | |||
| padding:2%; | |||
| } | |||
| .wmd-button-bar { | |||
| background-color: #FEFEFE; | |||
| padding: 5px 0; | |||
| margin-bottom:10px; | |||
| width: 100%; | |||
| } | |||
| .wmd-input { | |||
| height: 300px; | |||
| width: 96%; | |||
| background-color: #FFFFFF; | |||
| border:none; | |||
| padding: 2%; | |||
| } | |||
| .wmd-preview { | |||
| background-color: #c0e0ff; | |||
| width: 46%; | |||
| float:left; | |||
| padding:2%; | |||
| } | |||
| .wmd-button-row { | |||
| position: relative; | |||
| margin:0px; | |||
| padding: 0px; | |||
| height: 20px; | |||
| } | |||
| .wmd-spacer{ | |||
| width: 1px; | |||
| height: 20px; | |||
| margin-left: 14px; | |||
| position: absolute; | |||
| background-color: Silver; | |||
| display: inline-block; | |||
| list-style: none; | |||
| } | |||
| .wmd-button { | |||
| width: 20px; | |||
| height: 20px; | |||
| padding-left: 2px; | |||
| padding-right: 3px; | |||
| position: absolute; | |||
| display: inline-block; | |||
| list-style: none; | |||
| cursor: pointer; | |||
| } | |||
| .wmd-button > span { | |||
| background-image: url(../img/wmd-buttons.png); | |||
| background-repeat: no-repeat; | |||
| background-position: 0px 0px; | |||
| width: 20px; | |||
| height: 20px; | |||
| display: inline-block; | |||
| } | |||
| .wmd-spacer1{ | |||
| left: 50px; | |||
| } | |||
| .wmd-spacer2{ | |||
| left: 175px; | |||
| } | |||
| .wmd-spacer3{ | |||
| left: 300px; | |||
| } | |||
| .wmd-prompt-background{ | |||
| background-color: Black; | |||
| } | |||
| .wmd-prompt-dialog{ | |||
| border: 1px solid #999999; | |||
| background-color: #F5F5F5; | |||
| } | |||
| .wmd-prompt-dialog > div { | |||
| font-size: 0.8em; | |||
| font-family: arial, helvetica, sans-serif; | |||
| } | |||
| .wmd-prompt-dialog > form > input[type="text"] { | |||
| border: 1px solid #999999; | |||
| color: black; | |||
| } | |||
| .wmd-prompt-dialog > form > input[type="button"]{ | |||
| border: 1px solid #888888; | |||
| font-family: trebuchet MS, helvetica, sans-serif; | |||
| font-size: 0.8em; | |||
| font-weight: bold; | |||
| } | |||
| pre { | |||
| margin: 1em 0; | |||
| overflow: auto; | |||
| background: #F1F1FF; | |||
| } | |||
| pre code { | |||
| color: #333333; | |||
| display: block; | |||
| font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif; | |||
| font-size: 14px; | |||
| padding: 5px 10px; | |||
| } | |||
| @media all and (max-width: 980px) { | |||
| .wmd-panel, .wmd-preview { | |||
| width: 96%; | |||
| float:left; | |||
| padding:2%; | |||
| } | |||
| pre { | |||
| white-space: pre-wrap; | |||
| word-wrap:break-word; | |||
| } | |||
| } | |||
| @ -0,0 +1,108 @@ | |||
| (function () { | |||
| var output, Converter; | |||
| if (typeof exports === "object" && typeof require === "function") { // we're in a CommonJS (e.g. Node.js) module | |||
| output = exports; | |||
| Converter = require("./Markdown.Converter").Converter; | |||
| } else { | |||
| output = window.Markdown; | |||
| Converter = output.Converter; | |||
| } | |||
| output.getSanitizingConverter = function () { | |||
| var converter = new Converter(); | |||
| converter.hooks.chain("postConversion", sanitizeHtml); | |||
| converter.hooks.chain("postConversion", balanceTags); | |||
| return converter; | |||
| } | |||
| function sanitizeHtml(html) { | |||
| return html.replace(/<[^>]*>?/gi, sanitizeTag); | |||
| } | |||
| // (tags that can be opened/closed) | (tags that stand alone) | |||
| var basic_tag_whitelist = /^(<\/?(b|blockquote|code|del|dd|dl|dt|em|h1|h2|h3|i|kbd|li|ol|p|pre|s|sup|sub|strong|strike|ul)>|<(br|hr)\s?\/?>)$/i; | |||
| // <a href="url..." optional title>|</a> | |||
| var a_white = /^(<a\shref="((https?|ftp):\/\/|\/)[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+"(\stitle="[^"<>]+")?\s?>|<\/a>)$/i; | |||
| // <img src="url..." optional width optional height optional alt optional title | |||
| var img_white = /^(<img\ssrc="(https?:\/\/|\/)[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+"(\swidth="\d{1,3}")?(\sheight="\d{1,3}")?(\salt="[^"<>]*")?(\stitle="[^"<>]*")?\s?\/?>)$/i; | |||
| function sanitizeTag(tag) { | |||
| if (tag.match(basic_tag_whitelist) || tag.match(a_white) || tag.match(img_white)) | |||
| return tag; | |||
| else | |||
| return ""; | |||
| } | |||
| /// <summary> | |||
| /// attempt to balance HTML tags in the html string | |||
| /// by removing any unmatched opening or closing tags | |||
| /// IMPORTANT: we *assume* HTML has *already* been | |||
| /// sanitized and is safe/sane before balancing! | |||
| /// | |||
| /// adapted from CODESNIPPET: A8591DBA-D1D3-11DE-947C-BA5556D89593 | |||
| /// </summary> | |||
| function balanceTags(html) { | |||
| if (html == "") | |||
| return ""; | |||
| var re = /<\/?\w+[^>]*(\s|$|>)/g; | |||
| // convert everything to lower case; this makes | |||
| // our case insensitive comparisons easier | |||
| var tags = html.toLowerCase().match(re); | |||
| // no HTML tags present? nothing to do; exit now | |||
| var tagcount = (tags || []).length; | |||
| if (tagcount == 0) | |||
| return html; | |||
| var tagname, tag; | |||
| var ignoredtags = "<p><img><br><li><hr>"; | |||
| var match; | |||
| var tagpaired = []; | |||
| var tagremove = []; | |||
| var needsRemoval = false; | |||
| // loop through matched tags in forward order | |||
| for (var ctag = 0; ctag < tagcount; ctag++) { | |||
| tagname = tags[ctag].replace(/<\/?(\w+).*/, "$1"); | |||
| // skip any already paired tags | |||
| // and skip tags in our ignore list; assume they're self-closed | |||
| if (tagpaired[ctag] || ignoredtags.search("<" + tagname + ">") > -1) | |||
| continue; | |||
| tag = tags[ctag]; | |||
| match = -1; | |||
| if (!/^<\//.test(tag)) { | |||
| // this is an opening tag | |||
| // search forwards (next tags), look for closing tags | |||
| for (var ntag = ctag + 1; ntag < tagcount; ntag++) { | |||
| if (!tagpaired[ntag] && tags[ntag] == "</" + tagname + ">") { | |||
| match = ntag; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| if (match == -1) | |||
| needsRemoval = tagremove[ctag] = true; // mark for removal | |||
| else | |||
| tagpaired[match] = true; // mark paired | |||
| } | |||
| if (!needsRemoval) | |||
| return html; | |||
| // delete all orphaned tags from the string | |||
| var ctag = 0; | |||
| html = html.replace(re, function (match) { | |||
| var res = tagremove[ctag] ? "" : match; | |||
| ctag++; | |||
| return res; | |||
| }); | |||
| return html; | |||
| } | |||
| })(); | |||
| @ -0,0 +1,43 @@ | |||
| // Usage: | |||
| // | |||
| // var myConverter = new Markdown.Editor(myConverter, null, { strings: Markdown.local.fr }); | |||
| (function () { | |||
| Markdown.local = Markdown.local || {}; | |||
| Markdown.local.fr = { | |||
| bold: "Gras <strong> Ctrl+B", | |||
| boldexample: "texte en gras", | |||
| italic: "Italique <em> Ctrl+I", | |||
| italicexample: "texte en italique", | |||
| link: "Hyperlien <a> Ctrl+L", | |||
| linkdescription: "description de l'hyperlien", | |||
| linkdialog: "<p><b>Insérer un hyperlien</b></p><p>http://example.com/ \"titre optionnel\"</p>", | |||
| quote: "Citation <blockquote> Ctrl+Q", | |||
| quoteexample: "Citation", | |||
| code: "Extrait de code <pre><code> Ctrl+K", | |||
| codeexample: "votre extrait de code", | |||
| image: "Image <img> Ctrl+G", | |||
| imagedescription: "description de l'image", | |||
| imagedialog: "<p><b>Insérer une image</b></p><p>http://example.com/images/diagram.jpg \"titre optionnel\"<br><br><a href='http://www.google.com/search?q=free+image+hosting' target='_blank'>Vous chercher un hébergement d'image grauit ?</a></p>", | |||
| olist: "Liste numérotée <ol> Ctrl+O", | |||
| ulist: "Liste à point <ul> Ctrl+U", | |||
| litem: "Elément de liste", | |||
| heading: "Titre <h1>/<h2> Ctrl+H", | |||
| headingexample: "Titre", | |||
| hr: "Trait horizontal <hr> Ctrl+R", | |||
| undo: "Annuler - Ctrl+Z", | |||
| redo: "Refaire - Ctrl+Y", | |||
| redomac: "Refaire - Ctrl+Shift+Z", | |||
| help: "Aide sur Markdown" | |||
| }; | |||
| })(); | |||
| @ -0,0 +1,2 @@ | |||
| exports.Converter = require("./Markdown.Converter").Converter; | |||
| exports.getSanitizingConverter = require("./Markdown.Sanitizer").getSanitizingConverter; | |||
| @ -0,0 +1,12 @@ | |||
| { | |||
| "name": "pagedown", | |||
| "version": "1.1.0", | |||
| "description": "markdown converter, based on showdown", | |||
| "repository": { "type": "hg", "url": "https://code.google.com/p/pagedown/" }, | |||
| "keywords": ["markdown"], | |||
| "license": "MIT", | |||
| "files": ["Markdown.Converter.js", "Markdown.Sanitizer.js", "node-pagedown.js"], | |||
| "main": "node-pagedown.js", | |||
| "bugs": "http://code.google.com/p/pagedown/issues/list", | |||
| "homepage": "http://code.google.com/p/pagedown/wiki/PageDown" | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| <div id="login"> | |||
| <?php if (login()) { ?> | |||
| <div class="nav"> | |||
| <a href="<?php echo config('site.url');?>/admin">Admin</a> | |||
| <a href="includes/create_post.php">Create post</a> | |||
| <a href="includes/logout.php">Logout</a> | |||
| <span class="welcome">Welcome <?php echo $_SESSION['user'];?>!</span> | |||
| </div> | |||
| <?php include 'includes/post_list.php';?> | |||
| <?php } else {?> | |||
| <?php include 'includes/login.php';?> | |||
| <?php } ?> | |||
| </div> | |||
| @ -0,0 +1,80 @@ | |||
| <?php | |||
| // Change this to your timezone | |||
| date_default_timezone_set('Asia/Jakarta'); | |||
| require '../../system/includes/dispatch.php'; | |||
| config('source', '../../admin/config.ini'); | |||
| include '../includes/session.php'; | |||
| ?> | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>Create post</title> | |||
| <link rel="stylesheet" type="text/css" href="../resources/style.css" /> | |||
| <link rel="stylesheet" type="text/css" href="../editor/css/editor.css" /> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Converter.js"></script> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Sanitizer.js"></script> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Editor.js"></script> | |||
| </head> | |||
| <body> | |||
| <div class="wrapper-outer"> | |||
| <div class="wrapper-inner"> | |||
| <?php if (login()) { ?> | |||
| <div class="nav"> | |||
| <a href="<?php echo config('site.url');?>/admin">Admin</a> | |||
| <a href="../includes/logout.php">Logout</a> | |||
| <span class="welcome">Welcome <?php echo $_SESSION['user'];?>!</span> | |||
| </div> | |||
| <?php | |||
| if(isset($_POST['submit'])) { | |||
| $post_date = date('Y-m-d-H'); | |||
| $post_tag = $_POST['tag']; | |||
| $post_url = $_POST['url']; | |||
| $post_content = $_POST['content']; | |||
| } | |||
| if(!empty($post_tag) && !empty($post_url) && !empty($post_content)) { | |||
| $user = $_SESSION['user']; | |||
| $filename = $post_date . '_' . $post_tag . '_' . $post_url . '.md'; | |||
| $dir = '../../content/' . $user. '/blog/'; | |||
| if(is_dir($dir)) { | |||
| file_put_contents($dir . $filename, print_r($post_content, true)); | |||
| } | |||
| else { | |||
| mkdir($dir, 0777, true); | |||
| file_put_contents($dir . $filename, print_r($post_content, true)); | |||
| } | |||
| header('location: ../index.php'); | |||
| } | |||
| ?> | |||
| <?php } else {?> | |||
| <?php header('location: ../index.php');?> | |||
| <?php } ?> | |||
| <div class="wmd-panel"> | |||
| <form method="POST"> | |||
| Tag: <br><input type="text" name="tag"/><br><br> | |||
| Url: <br><input type="text" name="url"/><br><br> | |||
| <div id="wmd-button-bar" class="wmd-button-bar"></div> | |||
| <textarea id="wmd-input" class="wmd-input" name="content" cols="20" rows="10"></textarea><br/> | |||
| <input type="submit" name="submit" value="Publish"/> | |||
| </form> | |||
| </div> | |||
| <div id="wmd-preview" class="wmd-panel wmd-preview"></div> | |||
| <script type="text/javascript"> | |||
| (function () { | |||
| var converter = Markdown.getSanitizingConverter(); | |||
| converter.hooks.chain("preBlockGamut", function (text, rbg) { | |||
| return text.replace(/^ {0,3}""" *\n((?:.*?\n)+?) {0,3}""" *$/gm, function (whole, inner) { | |||
| return "<blockquote>" + rbg(inner) + "</blockquote>\n"; | |||
| }); | |||
| }); | |||
| var editor = new Markdown.Editor(converter); | |||
| editor.run(); | |||
| })(); | |||
| </script> | |||
| </div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,72 @@ | |||
| <?php | |||
| // Change this to your timezone | |||
| date_default_timezone_set('Asia/Jakarta'); | |||
| require '../../system/includes/dispatch.php'; | |||
| config('source', '../../admin/config.ini'); | |||
| include '../includes/session.php';; | |||
| if(isset($_GET['url'])) { | |||
| $url = $_GET['url']; | |||
| } | |||
| else { | |||
| header('location: ../index.php'); | |||
| } | |||
| ?> | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>Edit post</title> | |||
| <link rel="stylesheet" type="text/css" href="../resources/style.css" /> | |||
| <link rel="stylesheet" type="text/css" href="../editor/css/editor.css" /> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Converter.js"></script> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Sanitizer.js"></script> | |||
| <script type="text/javascript" src="../editor/js/Markdown.Editor.js"></script> | |||
| </head> | |||
| <body> | |||
| <div class="wrapper-outer"> | |||
| <div class="wrapper-inner"> | |||
| <?php if (login()) { ?> | |||
| <div class="nav"> | |||
| <a href="<?php echo config('site.url');?>/admin">Admin</a> | |||
| <a href="../includes/create_post.php">Create post</a> | |||
| <a href="../includes/logout.php">Logout</a> | |||
| <span class="welcome">Welcome <?php echo $_SESSION['user'];?>!</span> | |||
| </div> | |||
| <?php } else {?> | |||
| <?php header('location: ../index.php');?> | |||
| <?php } ?> | |||
| <?php | |||
| if(isset($_POST['submit'])) { | |||
| $post_content = $_POST['content']; | |||
| } | |||
| if(!empty($post_content)) { | |||
| file_put_contents('../'. $url, print_r($post_content, true)); | |||
| header('location: ../index.php'); | |||
| } | |||
| ?> | |||
| <div class="wmd-panel"> | |||
| <form method="POST"> | |||
| <div id="wmd-button-bar" class="wmd-button-bar"></div> | |||
| <textarea id="wmd-input" class="wmd-input" name="content" cols="20" rows="10"><?php echo file_get_contents('../' . $url)?></textarea><br> | |||
| <input type="submit" name="submit" value="Submit"/> | |||
| </form> | |||
| </div> | |||
| <div id="wmd-preview" class="wmd-panel wmd-preview"></div> | |||
| <script type="text/javascript"> | |||
| (function () { | |||
| var converter = Markdown.getSanitizingConverter(); | |||
| converter.hooks.chain("preBlockGamut", function (text, rbg) { | |||
| return text.replace(/^ {0,3}""" *\n((?:.*?\n)+?) {0,3}""" *$/gm, function (whole, inner) { | |||
| return "<blockquote>" + rbg(inner) + "</blockquote>\n"; | |||
| }); | |||
| }); | |||
| var editor = new Markdown.Editor(converter); | |||
| editor.run(); | |||
| })(); | |||
| </script> | |||
| </div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,32 @@ | |||
| <?php | |||
| if(isset($_POST['submit'])) { | |||
| $user = $_POST['user']; | |||
| $user_file = 'users/' . $user . '.txt'; | |||
| $pass = $_POST['password']; | |||
| $user_pass = @file_get_contents($user_file); | |||
| if(file_exists($user_file)) { | |||
| if($pass === $user_pass) { | |||
| $_SESSION['user'] = $user; | |||
| header('location: index.php'); | |||
| } | |||
| else { | |||
| echo 'Username and password not match!'; | |||
| } | |||
| } | |||
| else { | |||
| echo 'Please create username.txt inside "admin/users" folder and put your password inside it.'; | |||
| } | |||
| } | |||
| ?> | |||
| <p>Login Form</p> | |||
| <form method="POST"> | |||
| User:<br> | |||
| <input type="text" name="user"/><br><br> | |||
| Pass:<br> | |||
| <input type="password" name="password"/><br><br> | |||
| <input type="submit" name="submit" value="Login"/> | |||
| </form> | |||
| @ -0,0 +1,9 @@ | |||
| <?php | |||
| include 'session.php'; | |||
| session_destroy(); | |||
| header('location: ../index.php'); | |||
| ?> | |||
| @ -0,0 +1,134 @@ | |||
| <?php | |||
| // Get blog post with more info about the path. Sorted by filename. | |||
| function admin_get_post(){ | |||
| static $tmp= array(); | |||
| static $_cache = array(); | |||
| if(empty($_cache)){ | |||
| // Get the names of all the posts | |||
| $tmp = glob('../content/*/blog/*.md', GLOB_NOSORT); | |||
| foreach($tmp as $file) { | |||
| $_cache[] = pathinfo($file); | |||
| } | |||
| } | |||
| usort($_cache, "sortfile"); | |||
| return $_cache; | |||
| } | |||
| // usort function. Sort by filename. | |||
| function sortfile($a, $b) { | |||
| return $a['filename'] == $b['filename'] ? 0 : ( $a['filename'] < $b['filename'] ) ? 1 : -1; | |||
| } | |||
| // Return blog posts. | |||
| function get_posts($posts, $page = 1, $perpage = 0){ | |||
| if(empty($posts)) { | |||
| $posts = admin_get_post(); | |||
| } | |||
| $tmp = array(); | |||
| // Extract a specific page with results | |||
| $posts = array_slice($posts, ($page-1) * $perpage, $perpage); | |||
| foreach($posts as $index => $v){ | |||
| $post = new stdClass; | |||
| $filepath = $v['dirname'] . '/' . $v['basename']; | |||
| // Extract the date | |||
| $arr = explode('_', $filepath); | |||
| // Replaced string | |||
| $replaced = substr($arr[0], 0,strrpos($arr[0], '/')) . '/'; | |||
| // Author string | |||
| $str = explode('/', $replaced); | |||
| $author = $str[count($str)-3]; | |||
| // The post author + author url | |||
| $post->author = $author; | |||
| $post->authorurl = site_url() . 'author/' . $author; | |||
| // The post date | |||
| $post->date = strtotime(str_replace($replaced,'',$arr[0])); | |||
| // The archive per day | |||
| $post->archive = site_url(). 'archive/' . date('Y-m-d', $post->date) ; | |||
| // The post URL | |||
| $post->url = site_url().date('Y/m', $post->date).'/'.str_replace('.md','',$arr[2]); | |||
| // The post tag | |||
| $post->tag = str_replace($replaced,'',$arr[1]); | |||
| // The post tag url | |||
| $post->tagurl = site_url(). 'tag/' . $arr[1]; | |||
| $post->file = $filepath; | |||
| // Get the contents and convert it to HTML | |||
| // $content = file_get_contents($filepath); | |||
| // $post->content = $content; | |||
| $tmp[] = $post; | |||
| } | |||
| return $tmp; | |||
| } | |||
| // Return posts list on profile. | |||
| function get_profile($profile, $page, $perpage){ | |||
| $posts = admin_get_post(); | |||
| $tmp = array(); | |||
| foreach ($posts as $index => $v) { | |||
| $url = $v['dirname']; | |||
| $str = explode('/', $url); | |||
| $author = $str[count($str)-2]; | |||
| if($profile === $author){ | |||
| $tmp[] = $v; | |||
| } | |||
| } | |||
| if(empty($tmp)) { | |||
| echo '<tr><td>No posts found!</td></tr>'; | |||
| return; | |||
| } | |||
| return $tmp = get_posts($tmp, $page, $perpage); | |||
| } | |||
| ?> | |||
| <table> | |||
| <?php | |||
| $posts = get_profile($_SESSION['user'], null, null); | |||
| if(!empty($posts)) { | |||
| foreach($posts as $p) { | |||
| echo '<tr>'; | |||
| echo '<td>' . $p->file . '</td>'; | |||
| echo '<td><form method="GET" action="includes/edit_post.php"><input type="submit" name="submit" value="Edit"/><input type="hidden" name="url" value="' . $p->file . '"/></form></td>'; | |||
| echo '</tr>'; | |||
| } | |||
| } | |||
| ?> | |||
| </table> | |||
| @ -0,0 +1,16 @@ | |||
| <?php | |||
| session_start(); | |||
| function login() { | |||
| if(isset($_SESSION['user']) && !empty($_SESSION['user'])) { | |||
| return true; | |||
| } | |||
| else { | |||
| return false; | |||
| } | |||
| } | |||
| ?> | |||
| @ -0,0 +1,20 @@ | |||
| <?php | |||
| date_default_timezone_set('Asia/Jakarta'); | |||
| require '../system/includes/dispatch.php'; | |||
| config('source', '../admin/config.ini'); | |||
| include 'includes/session.php'; | |||
| ?> | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>Admin Panel</title> | |||
| <link rel="stylesheet" type="text/css" href="resources/style.css" /> | |||
| </head> | |||
| <body> | |||
| <div class="wrapper-outer"> | |||
| <div class="wrapper-inner"> | |||
| <?php include 'includes/auth.php'; ?> | |||
| </div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,42 @@ | |||
| body { | |||
| font-size: 16px; | |||
| font-family: Arial, Verdana; | |||
| margin:0 auto; | |||
| padding:0; | |||
| background: none repeat scroll 0 0 #F9F9F9; | |||
| width:100%; | |||
| } | |||
| .wrapper-outer { | |||
| float:left; | |||
| position:relative; | |||
| width:100%; | |||
| } | |||
| .wrapper-inner { | |||
| margin:0 auto; | |||
| width:980px; | |||
| } | |||
| .nav { | |||
| width: 96%; | |||
| padding:2%; | |||
| } | |||
| table { | |||
| border: 1px solid #ccc; | |||
| } | |||
| table td { | |||
| border: 1px solid #ccc; | |||
| background: #ddd; | |||
| } | |||
| @media all and (max-width: 980px) { | |||
| .wrapper-inner { | |||
| margin:0 auto; | |||
| width:100%; | |||
| } | |||
| } | |||
| @ -0,0 +1 @@ | |||
| deny from all | |||