Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 20.19 KB | None | 0 0
  1. <?PHP
  2.  
  3.   $PASSWORD = $decrypted;
  4. session_start();
  5. if(!$_SESSION['_sfm_allowed']) {
  6.     // sha1, and random bytes to thwart timing attacks.  Not meant as secure hashing.
  7.     $t = bin2hex(openssl_random_pseudo_bytes(10)); 
  8.     if($_POST['p'] && sha1($t.$_POST['p']) === sha1($t.$PASSWORD)) {
  9.         $_SESSION['_sfm_allowed'] = true;
  10.         header('Location: ?');
  11.     }
  12.     echo '<html><body><form action=? method=post>PASSWORD:<input type=password name=p /></form></body></html>';
  13.     echo $PASSWORD;
  14.     exit;
  15. }
  16.  
  17.   setlocale(LC_ALL,'en_US.UTF-8');
  18.  
  19.   $tmp = realpath($_REQUEST['file']);
  20. if($tmp === false)
  21.     err(404,'File or Directory Not Found');
  22. if(substr($tmp, 0,strlen(__DIR__)) !== __DIR__)
  23.     err(403,"Forbidden");
  24. if(!$_COOKIE['_sfm_xsrf'])
  25.     setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16)));
  26. if($_POST) {
  27.     if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf'])
  28.         err(403,"XSRF Failure");
  29. }
  30. $file = $_REQUEST['file'] ?: '.';
  31. if($_GET['do'] == 'list') {
  32.     if (is_dir($file)) {
  33.         $directory = $file;
  34.         $result = array();
  35.         $files = array_diff(scandir($directory), array('.','..'));
  36.         foreach($files as $entry) if($entry !== basename(__FILE__)) {
  37.             $i = $directory . '/' . $entry;
  38.             $stat = stat($i);
  39.             $result[] = array(
  40.                 'mtime' => $stat['mtime'],
  41.                 'size' => $stat['size'],
  42.                 'name' => basename($i),
  43.                 'path' => preg_replace('@^\./@', '', $i),
  44.                 'is_dir' => is_dir($i),
  45.                 'is_deleteable' => (!is_dir($i) && is_writable($directory)) ||
  46.                                    (is_dir($i) && is_writable($directory) && is_recursively_deleteable($i)),
  47.                 'is_readable' => is_readable($i),
  48.                 'is_writable' => is_writable($i),
  49.                 'is_executable' => is_executable($i),
  50.             );
  51.         }
  52.     } else {
  53.         err(412,"Not a Directory");
  54.     }
  55.     echo json_encode(array('success' => true, 'is_writable' => is_writable($file), 'results' =>$result));
  56.     exit;
  57. } elseif ($_POST['do'] == 'delete') {
  58.     rmrf($file);
  59.     exit;
  60. } elseif ($_POST['do'] == 'mkdir') {
  61.     // don't allow actions outside root. we also filter out slashes to catch args like './../outside'
  62.     $dir = $_POST['name'];
  63.     $dir = str_replace('/', '', $dir);
  64.     if(substr($dir, 0, 2) === '..')
  65.         exit;
  66.     chdir($file);
  67.     @mkdir($_POST['name']);
  68.     exit;
  69. } elseif ($_POST['do'] == 'upload') {
  70.     var_dump($_POST);
  71.     var_dump($_FILES);
  72.     var_dump($_FILES['file_data']['tmp_name']);
  73.     var_dump(move_uploaded_file($_FILES['file_data']['tmp_name'], $file.'/'.$_FILES['file_data']['name']));
  74.     exit;
  75. } elseif ($_GET['do'] == 'download') {
  76.     $filename = basename($file);
  77.     header('Content-Type: ' . mime_content_type($file));
  78.     header('Content-Length: '. filesize($file));
  79.     header(sprintf('Content-Disposition: attachment; filename=%s',
  80.         strpos('MSIE',$_SERVER['HTTP_REFERER']) ? rawurlencode($filename) : "\"$filename\"" ));
  81.     ob_flush();
  82.     readfile($file);
  83.     exit;
  84. }
  85. function rmrf($dir) {
  86.     if(is_dir($dir)) {
  87.         $files = array_diff(scandir($dir), array('.','..'));
  88.         foreach ($files as $file)
  89.             rmrf("$dir/$file");
  90.         rmdir($dir);
  91.     } else {
  92.         unlink($dir);
  93.     }
  94. }
  95. function is_recursively_deleteable($d) {
  96.     $stack = array($d);
  97.     while($dir = array_pop($stack)) {
  98.         if(!is_readable($dir) || !is_writable($dir))
  99.             return false;
  100.         $files = array_diff(scandir($dir), array('.','..'));
  101.         foreach($files as $file) if(is_dir($file)) {
  102.             $stack[] = "$dir/$file";
  103.         }
  104.     }
  105.     return true;
  106. }
  107. function err($code,$msg) {
  108.     echo json_encode(array('error' => array('code'=>intval($code), 'msg' => $msg)));
  109.     exit;
  110. }
  111. function asBytes($ini_v) {
  112.     $ini_v = trim($ini_v);
  113.     $s = array('g'=> 1<<30, 'm' => 1<<20, 'k' => 1<<10);
  114.     return intval($ini_v) * ($s[strtolower(substr($ini_v,-1))] ?: 1);
  115. }
  116. $MAX_UPLOAD_SIZE = min(asBytes(ini_get('post_max_size')), asBytes(ini_get('upload_max_filesize')));
  117.  
  118. ?>
  119. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  120. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
  121. <head>
  122.       <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
  123.       <title>Manage Files - My Advena Account</title>
  124.       <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700">
  125.       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  126.       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css">
  127.       <link rel="stylesheet" type="text/css" href="style/fg_membersite.css">
  128.       <script>
  129.       (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  130.       (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  131.       m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  132.       })(window,document,'script','//www.advenacm.com/ga.js','ga');
  133.  
  134.       ga('create', 'UA-74588321-1', 'auto');
  135.       ga('send', 'pageview');
  136.  
  137.     </script>
  138. </head>
  139. <body>
  140. <div id='fg_membersite_content'>
  141. <div class="header">
  142.     <div class="brand"></div><div id="ac_text">My Account</div>
  143.     <div class="acc_bar">
  144.         <div class="acc_usrinfo">
  145.            <div class="dropdown">
  146.              <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
  147.                  <img src="<?php echo $path?>/?d=<?php echo $d?>" class="profilepicture"/><span id="acc_username"><?= $fgmembersite->UserFullName(); ?></span>
  148.                <span class="caret"></span>
  149.              </button>
  150.              <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
  151.                <li><a href="account">My Account</a></li>
  152.                <li><a href="change-pwd">Change Password</a></li>
  153.                <li><a href="support">Get Help</a></li>
  154.                <li role="separator" class="divider"></li>
  155.                <li><a href="logout">Logout</a><i class="fa fa-sign-out" aria-hidden="true" id="logouticon"></i></li>
  156.              </ul>
  157.            </div>
  158.         </div>
  159.     </div>
  160. </div>
  161.  
  162. <div class="title_hdr">
  163.     <div class="title_content">
  164.         <h1 id="tc_h1">Manage Files</h1>
  165.         <p class="tc_p">Manage the Advena.io hosted files for <span class="tc_domain"><?php echo $udww ?></span></p>
  166.     </div>
  167. </div>
  168.  
  169. <div class="page_navbar">
  170.     <div class="pnb_inner">
  171.         <a href="/"><div class="pnb_menuitem"><i class="fa fa-home" aria-hidden="true" id="pnb_icon"></i><br>Dashboard</div></a>
  172.         <a href="files"><div class="pnb_menuitem active"><i class="fa fa-file" aria-hidden="true" id="pnb_icon"></i><br>Manage Files</div></a>
  173.         <a href="billing"><div class="pnb_menuitem"><i class="fa fa-credit-card-alt" aria-hidden="true" id="pnb_icon"></i><br>Billing & Payments</div></a>
  174.         <a href="account"><div class="pnb_menuitem"><i class="fa fa-unlock-alt" aria-hidden="true" id="pnb_icon"></i><br>Account & Security</div></a>
  175.     </div>
  176. </div>
  177.  
  178. <div class="pageinner" style="height: auto">
  179.    
  180.     <style>
  181.  
  182. th {font-weight: normal; color: #1F75CC; background-color: #F0F9FF; padding:.5em 1em .5em .2em;
  183.     text-align: left;cursor:pointer;user-select: none;}
  184. th .indicator {margin-left: 6px }
  185. thead {border-top: 1px solid #82CFFA; border-bottom: 1px solid #96C4EA;border-left: 1px solid #E7F2FB;
  186.     border-right: 1px solid #E7F2FB; }
  187. #top {height:52px;}
  188. #mkdir {display:inline-block;float:right;padding-top:16px;}
  189. label { display:block; font-size:11px; color:#555;}
  190. #file_drop_target {width:500px; padding:12px 0; border: 4px dashed #ccc;font-size:12px;color:#ccc;
  191.     text-align: center;float:right;margin-right:20px;}
  192. #file_drop_target.drag_over {border: 4px dashed #96C4EA; color: #96C4EA;}
  193. #upload_progress {padding: 4px 0;}
  194. #upload_progress .error {color:#a00;}
  195. #upload_progress > div { padding:3px 0;}
  196. .no_write #mkdir, .no_write #file_drop_target {display: none}
  197. .progress_track {display:inline-block;width:200px;height:10px;border:1px solid #333;margin: 0 4px 0 10px;}
  198. .progress {background-color: #82CFFA;height:10px; }
  199. footer {font-size:11px; color:#bbbbc5; padding:4em 0 0;text-align: left;}
  200. footer a, footer a:visited {color:#bbbbc5;}
  201. #breadcrumb { padding-top:34px; font-size:15px; color:#aaa;display:inline-block;float:left;}
  202. #folder_actions {width: 50%;float:right;}
  203. a, a:visited { color:#00c; text-decoration: none}
  204. a:hover {text-decoration: underline}
  205. .sort_hide{ display:none;}
  206. table {border-collapse: collapse;width:100%;}
  207. thead {max-width: 1024px}
  208. td { padding:.2em 1em .2em .2em; border-bottom:1px solid #def;height:30px; font-size:12px;white-space: nowrap;}
  209. td.first {font-size:14px;white-space: normal;}
  210. td.empty { color:#777; font-style: italic; text-align: center;padding:3em 0;}
  211. .is_dir .size {color:transparent;font-size:0;}
  212. .is_dir .size:before {content: "--"; font-size:14px;color:#333;}
  213. .is_dir .download{visibility: hidden}
  214. a.delete {display:inline-block;
  215.     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADtSURBVHjajFC7DkFREJy9iXg0t+EHRKJDJSqRuIVaJT7AF+jR+xuNRiJyS8WlRaHWeOU+kBy7eyKhs8lkJrOzZ3OWzMAD15gxYhB+yzAm0ndez+eYMYLngdkIf2vpSYbCfsNkOx07n8kgWa1UpptNII5VR/M56Nyt6Qq33bbhQsHy6aR0WSyEyEmiCG6vR2ffB65X4HCwYC2e9CTjJGGok4/7Hcjl+ImLBWv1uCRDu3peV5eGQ2C5/P1zq4X9dGpXP+LYhmYz4HbDMQgUosWTnmQoKKf0htVKBZvtFsx6S9bm48ktaV3EXwd/CzAAVjt+gHT5me0AAAAASUVORK5CYII=) no-repeat scroll 0 2px;
  216.     color:#d00; margin-left: 15px;font-size:11px;padding:0 0 0 13px;
  217. }
  218. .name {
  219.     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABAklEQVRIie2UMW6DMBSG/4cYkJClIhauwMgx8CnSC9EjJKcwd2HGYmAwEoMREtClEJxYakmcoWq/yX623veebZmWZcFKWZbXyTHeOeeXfWDN69/uzPP8x1mVUmiaBlLKsxACAC6cc2OPd7zYK1EUYRgGZFkG3/fPAE5fIjcCAJimCXEcGxKnAiICERkSIcQmeVoQhiHatoWUEkopJEkCAB/r+t0lHyVN023c9z201qiq6s2ZYA9jDIwx1HW9xZ4+Ihta69cK9vwLvsX6ivYf4FGIyJj/rg5uqwccd2Ar7OUdOL/kPyKY5/mhZJ53/2asgiAIHhLYMARd16EoCozj6EzwCYrrX5dC9FQIAAAAAElFTkSuQmCC) no-repeat scroll 0px 12px;
  220.     padding:15px 0 10px 40px;
  221. }
  222. .is_dir .name {
  223.     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI0SURBVFiF7Vctb1RRED1nZu5977VQVBEQBKZ1GCDBEwy+ISgCBsMPwOH4CUXgsKQOAxq5CaKChEBqShNK222327f79n0MgpRQ2qC2twKOGjE352TO3Jl76e44S8iZsgOww+Dhi/V3nePOsQRFv679/qsnV96ehgAeWvBged3vXi+OJewMW/Q+T8YCLr18fPnNqQq4fS0/MWlQdviwVqNpp9Mvs7l8Wn50aRH4zQIAqOruxANZAG4thKmQA8D7j5OFw/iIgLXvo6mR/B36K+LNp71vVd1cTMR8BFmwTesc88/uLQ5FKO4+k4aarbuPnq98mbdo2q70hmU0VREkEeCOtqrbMprmFqM1psoYAsg0U9EBtB0YozUWzWpVZQgBxMm3YPoCiLpxRrPaYrBKRSUL5qn2AgFU0koMVlkMOo6G2SIymQCAGE/AGHRsWbCRKc8VmaBN4wBIwkZkFmxkWZDSFCwyommZSABgCmZBSsuiHahA8kA2iZYzSapAsmgHlgfdVyGLTFg3iZqQhAqZB923GGUgQhYRVElmAUXIGGVgedQ9AJJnAkqyClCEkkfdM1Pt13VHdxDpnof0jgxB+mYqO5PaCSDRIAbgDgdpKjtmwm13irsnq4ATdKeYcNvUZAt0dg5NVwEQFKrJlpn45lwh/LpbWdela4K5QsXEN61tytWr81l5YSY/n4wdQH84qjd2J6vEz+W0BOAGgLlE/AMAPQCv6e4gmWYC/QF3d/7zf8P/An4AWL/T1+B2nyIAAAAASUVORK5CYII=) no-repeat scroll 0px 10px;
  224.     padding:15px 0 10px 40px;
  225. }
  226. .download {
  227.     background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB2klEQVR4nJ2ST2sTQRiHn5mdmj92t9XmUJIWJGq9NHrRgxQiCtqbl97FqxgaL34CP0FD8Qv07EHEU0Ew6EXEk6ci8Q9JtcXEkHR3k+zujIdUqMkmiANzmJdnHn7vzCuIWbe291tSkvhz1pr+q1L2bBwrRgvFrcZKKinfP9zI2EoKmm7Azstf3V7fXK2Wc3ujvIqzAhglwRJoS2ImQZMEBjgyoDS4hv8QGHA1WICvp9yelsA7ITBTIkwWhGBZ0Iv+MUF+c/cB8PTHt08snb+AGAACZDj8qIN6bSe/uWsBb2qV24/GBLn8yl0plY9AJ9NKeL5ICyEIQkkiZenF5XwBDAZzWItLIIR6LGfk26VVxzltJ2gFw2a0FmQLZ+bcbo/DPbcd+PrDyRb+GqRipbGlZtX92UvzjmUpEGC0JgpC3M9dL+qGz16XsvcmCgCK2/vPtTNzJ1x2kkZIRBSivh8Z2Q4+VkvZy6O8HHvWyGyITvA1qndNpxfguQNkc2CIzM0xNk5QLedCEZm1VKsf2XrAXMNrA2vVcq4ZJ4DhvCSAeSALXASuLBTW129U6oPrT969AK4Bq0AeWARs4BRgieMUEkgDmeO9ANipzDnH//nFB0KgAxwATaAFeID5DQNatLGdaXOWAAAAAElFTkSuQmCC) no-repeat scroll 0px 5px;
  228.     padding:4px 0 4px 20px;
  229. }
  230. </style>
  231. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  232. <script>
  233. (function($){
  234.     $.fn.tablesorter = function() {
  235.         var $table = this;
  236.         this.find('th').click(function() {
  237.             var idx = $(this).index();
  238.             var direction = $(this).hasClass('sort_asc');
  239.             $table.tablesortby(idx,direction);
  240.         });
  241.         return this;
  242.     };
  243.     $.fn.tablesortby = function(idx,direction) {
  244.         var $rows = this.find('tbody tr');
  245.         function elementToVal(a) {
  246.             var $a_elem = $(a).find('td:nth-child('+(idx+1)+')');
  247.             var a_val = $a_elem.attr('data-sort') || $a_elem.text();
  248.             return (a_val == parseInt(a_val) ? parseInt(a_val) : a_val);
  249.         }
  250.         $rows.sort(function(a,b){
  251.             var a_val = elementToVal(a), b_val = elementToVal(b);
  252.             return (a_val > b_val ? 1 : (a_val == b_val ? 0 : -1)) * (direction ? 1 : -1);
  253.         })
  254.         this.find('th').removeClass('sort_asc sort_desc');
  255.         $(this).find('thead th:nth-child('+(idx+1)+')').addClass(direction ? 'sort_desc' : 'sort_asc');
  256.         for(var i =0;i<$rows.length;i++)
  257.             this.append($rows[i]);
  258.         this.settablesortmarkers();
  259.         return this;
  260.     }
  261.     $.fn.retablesort = function() {
  262.         var $e = this.find('thead th.sort_asc, thead th.sort_desc');
  263.         if($e.length)
  264.             this.tablesortby($e.index(), $e.hasClass('sort_desc') );
  265.        
  266.         return this;
  267.     }
  268.     $.fn.settablesortmarkers = function() {
  269.         this.find('thead th span.indicator').remove();
  270.         this.find('thead th.sort_asc').append('<span class="indicator">&darr;<span>');
  271.         this.find('thead th.sort_desc').append('<span class="indicator">&uarr;<span>');
  272.         return this;
  273.     }
  274. })(jQuery);
  275. $(function(){
  276.     var XSRF = (document.cookie.match('(^|; )_sfm_xsrf=([^;]*)')||0)[2];
  277.     var MAX_UPLOAD_SIZE = <?php echo $MAX_UPLOAD_SIZE ?>;
  278.     var $tbody = $('#list');
  279.     $(window).bind('hashchange',list).trigger('hashchange');
  280.     $('#table').tablesorter();
  281.    
  282.     $('.delete').live('click',function(data) {
  283.         $.post("",{'do':'delete',file:$(this).attr('data-file'),xsrf:XSRF},function(response){
  284.             list();
  285.         },'json');
  286.         return false;
  287.     });
  288.     $('#mkdir').submit(function(e) {
  289.         var hashval = window.location.hash.substr(1),
  290.             $dir = $(this).find('[name=name]');
  291.         e.preventDefault();
  292.         $dir.val().length && $.post('?',{'do':'mkdir',name:$dir.val(),xsrf:XSRF,file:hashval},function(data){
  293.             list();
  294.         },'json');
  295.         $dir.val('');
  296.         return false;
  297.     });
  298.     // file upload stuff
  299.     $('#file_drop_target').bind('dragover',function(){
  300.         $(this).addClass('drag_over');
  301.         return false;
  302.     }).bind('dragend',function(){
  303.         $(this).removeClass('drag_over');
  304.         return false;
  305.     }).bind('drop',function(e){
  306.         e.preventDefault();
  307.         var files = e.originalEvent.dataTransfer.files;
  308.         $.each(files,function(k,file) {
  309.             uploadFile(file);
  310.         });
  311.         $(this).removeClass('drag_over');
  312.     });
  313.     $('input[type=file]').change(function(e) {
  314.         e.preventDefault();
  315.         $.each(this.files,function(k,file) {
  316.             uploadFile(file);
  317.         });
  318.     });
  319.     function uploadFile(file) {
  320.         var folder = window.location.hash.substr(1);
  321.         if(file.size > MAX_UPLOAD_SIZE) {
  322.             var $error_row = renderFileSizeErrorRow(file,folder);
  323.             $('#upload_progress').append($error_row);
  324.             window.setTimeout(function(){$error_row.fadeOut();},5000);
  325.             return false;
  326.         }
  327.        
  328.         var $row = renderFileUploadRow(file,folder);
  329.         $('#upload_progress').append($row);
  330.         var fd = new FormData();
  331.         fd.append('file_data',file);
  332.         fd.append('file',folder);
  333.         fd.append('xsrf',XSRF);
  334.         fd.append('do','upload');
  335.         var xhr = new XMLHttpRequest();
  336.         xhr.open('POST', '?');
  337.         xhr.onload = function() {
  338.             $row.remove();
  339.             list();
  340.         };
  341.         xhr.upload.onprogress = function(e){
  342.             if(e.lengthComputable) {
  343.                 $row.find('.progress').css('width',(e.loaded/e.total*100 | 0)+'%' );
  344.             }
  345.         };
  346.         xhr.send(fd);
  347.     }
  348.     function renderFileUploadRow(file,folder) {
  349.         return $row = $('<div/>')
  350.             .append( $('<span class="fileuploadname" />').text( (folder ? folder+'/':'')+file.name))
  351.             .append( $('<div class="progress_track"><div class="progress"></div></div>')  )
  352.             .append( $('<span class="size" />').text(formatFileSize(file.size)) )
  353.     };
  354.     function renderFileSizeErrorRow(file,folder) {
  355.         return $row = $('<div class="error" />')
  356.             .append( $('<span class="fileuploadname" />').text( 'Error: ' + (folder ? folder+'/':'')+file.name))
  357.             .append( $('<span/>').html(' file size - <b>' + formatFileSize(file.size) + '</b>'
  358.                 +' exceeds max upload size of <b>' + formatFileSize(MAX_UPLOAD_SIZE) + '</b>')  );
  359.     }
  360.     function list() {
  361.         var hashval = window.location.hash.substr(1);
  362.         $.get('?',{'do':'list','file':hashval},function(data) {
  363.             $tbody.empty();
  364.             $('#breadcrumb').empty().html(renderBreadcrumbs(hashval));
  365.             if(data.success) {
  366.                 $.each(data.results,function(k,v){
  367.                     $tbody.append(renderFileRow(v));
  368.                 });
  369.                 !data.results.length && $tbody.append('<tr><td class="empty" colspan=5>This folder is empty</td></tr>')
  370.                 data.is_writable ? $('body').removeClass('no_write') : $('body').addClass('no_write');
  371.             } else {
  372.                 console.warn(data.error.msg);
  373.             }
  374.             $('#table').retablesort();
  375.         },'json');
  376.     }
  377.     function renderFileRow(data) {
  378.         var $link = $('<a class="name" />')
  379.             .attr('href', data.is_dir ? '#' + data.path : './'+data.path)
  380.             .text(data.name);
  381.         var $dl_link = $('<a/>').attr('href','?do=download&file='+encodeURIComponent(data.path))
  382.             .addClass('download').text('download');
  383.         var $delete_link = $('<a href="#" />').attr('data-file',data.path).addClass('delete').text('delete');
  384.         var perms = [];
  385.         if(data.is_readable) perms.push('read');
  386.         if(data.is_writable) perms.push('write');
  387.         if(data.is_executable) perms.push('exec');
  388.         var $html = $('<tr />')
  389.             .addClass(data.is_dir ? 'is_dir' : '')
  390.             .append( $('<td class="first" />').append($link) )
  391.             .append( $('<td/>').attr('data-sort',data.is_dir ? -1 : data.size)
  392.                 .html($('<span class="size" />').text(formatFileSize(data.size))) )
  393.             .append( $('<td/>').attr('data-sort',data.mtime).text(formatTimestamp(data.mtime)) )
  394.             .append( $('<td/>').text(perms.join('+')) )
  395.             .append( $('<td/>').append($dl_link).append( data.is_deleteable ? $delete_link : '') )
  396.         return $html;
  397.     }
  398.     function renderBreadcrumbs(path) {
  399.         var base = "",
  400.             $html = $('<div/>').append( $('<a href=#>Home</a></div>') );
  401.         $.each(path.split('/'),function(k,v){
  402.             if(v) {
  403.                 $html.append( $('<span/>').text(' ▸ ') )
  404.                     .append( $('<a/>').attr('href','#'+base+v).text(v) );
  405.                 base += v + '/';
  406.             }
  407.         });
  408.         return $html;
  409.     }
  410.     function formatTimestamp(unix_timestamp) {
  411.         var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  412.         var d = new Date(unix_timestamp*1000);
  413.         return [m[d.getMonth()],' ',d.getDate(),', ',d.getFullYear()," ",
  414.             (d.getHours() % 12 || 12),":",(d.getMinutes() < 10 ? '0' : '')+d.getMinutes(),
  415.             " ",d.getHours() >= 12 ? 'PM' : 'AM'].join('');
  416.     }
  417.     function formatFileSize(bytes) {
  418.         var s = ['bytes', 'KB','MB','GB','TB','PB','EB'];
  419.         for(var pos = 0;bytes >= 1000; pos++,bytes /= 1024);
  420.         var d = Math.round(bytes*10);
  421.         return pos ? [parseInt(d/10),".",d%10," ",s[pos]].join('') : bytes + ' bytes';
  422.     }
  423. })
  424. </script>
  425. </head><body>
  426. <div id="top">
  427.     <form action="?" method="post" id="mkdir" />
  428.         <label for=dirname>Create New Folder</label><input id=dirname type=text name=name value="" />
  429.         <input type="submit" value="create" />
  430.     </form>
  431.     <div id="file_drop_target">
  432.         Drag Files Here To Upload
  433.         <b>or</b>
  434.         <input type="file" multiple />
  435.     </div>
  436.     <div id="breadcrumb">&nbsp;</div>
  437. </div>
  438.  
  439. <div id="upload_progress"></div>
  440. <table id="table"><thead><tr>
  441.     <th>Name</th>
  442.     <th>Size</th>
  443.     <th>Modified</th>
  444.     <th>Permissions</th>
  445.     <th>Actions</th>
  446. </tr></thead><tbody id="list">
  447.  
  448. </tbody></table>
  449.    
  450.    
  451.    
  452.    
  453.    
  454.    
  455.    
  456.    
  457.    
  458.    
  459.    
  460.    
  461.    
  462.    
  463.    
  464. </div>  
  465. </div>
  466. <div class="footer">
  467.     <div class="footerinner">
  468.         <img src="images/logo-w.svg" class="footerlogo"><br>
  469.         &copy;Copyright Advena Community Management 2016. All rights reserved.
  470.     </div>
  471. </div>
  472. </body>
  473. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
  474. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
  475. <script>
  476. function messageRefresh() {
  477.     document.getElementById('notices').contentWindow.location.reload();
  478. }
  479.  
  480. $(document).ready(function(){
  481.     $('[data-toggle="tooltip"]').tooltip();  
  482. });
  483. </script>
  484.      
  485. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement