Browse Source

Merge branch 'master' of C:\Users\Sergio\Documents\GitHub\XBackBone with conflicts.

Sergio Brighenti 6 years ago
parent
commit
8bb89ecb62

+ 1 - 0
Gruntfile.js

@@ -73,6 +73,7 @@ module.exports = function (grunt) {
                 'resources/lang/**/*',
                 'resources/templates/**/*',
                 'resources/schemas/**/*',
+                'resources/lang/**/*',
                 'static/**/*',
                 'vendor/**/*',
                 '.htaccess',

+ 22 - 40
app/Web/Lang.php

@@ -1,46 +1,34 @@
 <?php
 
-namespace App\Web;
+namespace App;
 
 
 class Lang
 {
 
 	const DEFAULT_LANG = 'en';
-	const LANG_PATH = __DIR__ . '/../../resources/lang/';
-
-	/** @var  array */
-	protected $cache = [];
+	const LANG_PATH = __DIR__ . '../../resources/lang/';
 
 	/** @var  string */
-	protected $path;
+	protected static $langPath = self::LANG_PATH;
 
 	/** @var  string */
-	protected $lang;
+	protected static $lang;
 
 	/** @var  Lang */
 	protected static $instance;
 
-	/**
-	 * Lang constructor.
-	 * @param $lang
-	 * @param $path
-	 */
-	public function __construct($lang, $path)
-	{
-		$this->lang = $lang;
-		$this->path = $path;
+	/** @var  array */
+	protected $cache = [];
 
-	}
 
 	/**
 	 * @return Lang
 	 */
-	public static function getInstance()
+	public static function getInstance(): Lang
 	{
-
 		if (self::$instance === null) {
-			self::$instance = self::build();
+			self::$instance = new self();
 		}
 
 		return self::$instance;
@@ -48,22 +36,24 @@ class Lang
 
 	/**
 	 * @param string $lang
-	 * @param string $path
+	 * @param string $langPath
 	 * @return Lang
 	 */
-	public static function build($lang = self::DEFAULT_LANG, $path = null)
+	public static function build($lang = self::DEFAULT_LANG, $langPath = null): Lang
 	{
 
 		if (strlen($lang) !== 2) {
-			$lang = strtolower(substr($lang, 0, 2));
+			self::$lang = strtolower(substr($lang, 0, 2));
+		} else {
+			self::$lang = $lang;
 		}
 
-		if (file_exists(($path ? $path : self::LANG_PATH) . $lang . '.lang.php')) {
-			self::$instance = new self($lang, $path);
-		} else {
-			self::$instance = new self(self::DEFAULT_LANG, $path);
+		if ($langPath !== null) {
+			self::$langPath = $langPath;
 		}
 
+		self::$instance = new self();
+
 		return self::$instance;
 	}
 
@@ -73,9 +63,9 @@ class Lang
 	 * @param array $args
 	 * @return string
 	 */
-	public function get($key, $args = [])
+	public function get($key, $args = []): string
 	{
-		return $this->getString($key, $this->lang, $args);
+		return $this->getString($key, self::$lang, $args);
 	}
 
 	/**
@@ -84,13 +74,13 @@ class Lang
 	 * @param $args
 	 * @return string
 	 */
-	private function getString($key, $lang, $args)
+	private function getString($key, $lang, $args): string
 	{
 
 		if (array_key_exists($lang, $this->cache)) {
 			$transDict = $this->cache[$lang];
-		} else if (file_exists($this->path . $lang . '.lang.php')) {
-			$transDict = include $this->path . $lang . '.lang.php';
+		} elseif (file_exists(self::$langPath . $lang . '.lang.php')) {
+			$transDict = include self::$langPath . $lang . '.lang.php';
 			$this->cache[$lang] = $transDict;
 		} else {
 			$transDict = [];
@@ -106,12 +96,4 @@ class Lang
 
 		return $key;
 	}
-
-	/**
-	 * @return string
-	 */
-	public function getLang(): string
-	{
-		return $this->lang;
-	}
 }

+ 2 - 1
app/Web/Session.php

@@ -16,7 +16,8 @@ class Session
 		if (session_status() === PHP_SESSION_NONE) {
 			session_start([
 				'name' => $name,
-				'save_path' => $path
+				'save_path' => $path,
+				'cookie_httponly' => true
 			]);
 		}
 	}

+ 0 - 82
resources/lang/en.lang.php

@@ -2,86 +2,4 @@
 
 return [
 
-	'lang' => 'English',
-
-	'yes' => 'Yes',
-	'no' => 'No',
-	'send' => 'Send',
-	'no_media' => 'No media found.',
-
-	'login.username' => 'Username or E-Mail',
-	'password' => 'Password',
-	'login' => 'Login',
-	'username' => 'Username',
-
-	'home' => 'Home',
-	'users' => 'Users',
-	'system' => 'System',
-	'profile' => 'Profile',
-	'logout' => 'Logout',
-
-	'pager.next' => 'Next',
-	'pager.previous' => 'Previous',
-
-	'copy_link' => 'Copy link',
-	'public.telegram' => 'Share on Telegram',
-	'public.delete_text' => 'Are you sure you want to delete this item? It will be gone forever!',
-
-	'preview' => 'Preview',
-	'filename' => 'Filename',
-	'size' => 'Size',
-	'public' => 'Public',
-	'owner' => 'Owner',
-	'date' => 'Date',
-	'raw' => 'Show raw',
-	'download' => 'Download',
-	'delete' => 'Delete',
-	'publish' => 'Publish',
-	'hide' => 'Hide',
-
-	'files' => 'Files',
-	'orphaned_files' => 'Orphaned Files',
-	'theme' => 'Theme',
-	'click_to_load' => 'Click to load...',
-	'apply' => 'Apply',
-	'save' => 'Save',
-	'used' => 'Used',
-	'system_info' => 'System Information',
-
-	'user.create' => 'Create User',
-	'user.edit' => 'Edit User',
-	'is_active' => 'Is active',
-	'is_admin' => 'Is administrator',
-	'your_profile' => 'Your Profile',
-	'token' => 'Token',
-	'copy' => 'Copy',
-	'update' => 'Update',
-	'edit' => 'Edit',
-	'client_config' => 'Client Configuration',
-	'user_code' => 'User Code',
-	'active' => 'Active',
-	'admin' => 'Admin',
-	'reg_date' => 'Registration Date',
-	'none' => 'None',
-	'open' => 'Open',
-	'confirm' => 'Confirmation',
-	'confirm_string' => 'Are you sure?',
-
-	'installed' => 'Installation completed successfully!',
-	'bad_login' => 'Wrong credentials.',
-	'account_disabled' => 'Your account is disabled.',
-	'welcome' => 'Welcome, %s!',
-	'goodbye' => 'Goodbye!',
-	'token_not_found' => 'Token specified not found.',
-	'email_required' => 'The email is required.',
-	'email_taken' => 'The email is already taken.',
-	'username_required' => 'The username is required.',
-	'username_taken' => 'The username is already taken.',
-	'password_required' => 'The password is required.',
-	'user_created' => 'User "%s" created!',
-	'user_updated' => 'User "%s" updated!',
-	'profile_updated' => 'Profile updated successfully!',
-	'user_deleted' => 'User deleted.',
-	'cannot_delete' => 'You cannot delete yourself.',
-	'cannot_demote' => 'You cannot demote yourself',
 ];

+ 1 - 1
resources/schemas/sqlite/sqlite.2.sql

@@ -1,2 +1,2 @@
-CREATE UNIQUE INDEX IF NOT EXISTS `username_email`
+CREATE UNIQUE INDEX IF NOT EXISTS `email_index`
   ON `users` (`email`);

+ 1 - 1
resources/templates/comp/footer.twig

@@ -1,5 +1,5 @@
 <footer class="footer">
     <div class="container-fluid">
-        <div class="text-muted">Proudly powered by <a href="https://github.com/SergiX44/XBackBone">XBackBone{% if session.logged %} v{{ PLATFORM_VERSION }}{% endif %}</a></div>
+        <div class="text-muted">Proudly powered by <a href="https://github.com/SergiX44/XBackBone" target="_blank">XBackBone{% if session.logged %} v{{ PLATFORM_VERSION }}{% endif %}</a></div>
     </div>
 </footer>

+ 19 - 17
resources/templates/dashboard/home.twig

@@ -1,6 +1,6 @@
 {% extends 'base.twig' %}
 
-{% block title %}{{ lang('home') }}{% endblock %}
+{% block title %}Home{% endblock %}
 
 {% block content %}
     {% include 'comp/navbar.twig' %}
@@ -13,40 +13,42 @@
                     <div class="col-md-4" id="media_{{ media.id }}">
                         <div class="card mb-4 box-shadow">
                             {% if media.mimetype starts with 'image' %}
-                                <img class="card-img" src="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension ~ '/raw?width=286&height=219') }}" alt="Card image">
+                                <a href="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}" target="_blank">
+                                    <img class="card-img-top user-img" src="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}/raw?width=348&height=192" alt="{{ media.filename }}">
+                                </a>
                             {% else %}
-                                <div class="text-center" style="font-size: 178px;"><i class="far {{ mime2font(media.mimetype) }} mb-4 mt-4"></i></div>
+                                <a href="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}" target="_blank">
+                                    <div class="card-header text-center"><i class="far fa-file fa-10x"></i></div>
+                                </a>
                             {% endif %}
-                            <div class="card-img-overlay" title="{{ media.filename }}">
-                                <div class="user-img-buttons">
-                                    <span class="badge badge-dark box-shadow-strong">{{ media.size }}</span>
-                                    <div class="btn-group box-shadow-strong float-right">
-                                        <a class="btn btn-sm btn-light" href="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension) }}" data-toggle="tooltip" title="{{ lang('open') }}" target="_blank"><i class="fas fa-external-link-alt"></i></a>
-                                        <button type="button" class="btn btn-sm btn-success btn-clipboard" data-toggle="tooltip" title="{{ lang('copy_link') }}" data-clipboard-text="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension) }}">
+                            <div class="card-body">
+                                <p class="card-text">{{ media.filename }}
+                                    <small class="float-right">{{ media.size }}</small>
+                                </p>
+                                <div class="d-flex justify-content-between align-items-center">
+                                    <div class="btn-group">
+                                        <button type="button" class="btn btn-sm btn-outline-success btn-clipboard" data-toggle="tooltip" title="Copy link" data-clipboard-text="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}">
                                             <i class="fas fa-link"></i>
                                         </button>
                                         {% if media.published %}
-                                            <a href="javascript:void(0)" class="btn btn-sm btn-warning publish-toggle" data-toggle="tooltip" title="{{ lang('hide') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-times-circle"></i></a>
+                                            <a href="javascript:void(0)" class="btn btn-sm btn-outline-warning publish-toggle" data-toggle="tooltip" title="Unpublish" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-times-circle"></i></a>
                                         {% else %}
-                                            <a href="javascript:void(0)" class="btn btn-sm btn-info publish-toggle" data-toggle="tooltip" title="{{ lang('publish') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
+                                            <a href="javascript:void(0)" class="btn btn-sm btn-outline-info publish-toggle" data-toggle="tooltip" title="Publish" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
                                         {% endif %}
-                                        <button type="button" class="btn btn-sm btn-danger media-delete" data-link="{{ route('upload.delete', {'id': media.id}) }}" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('delete') }}">
+                                        <button type="button" class="btn btn-sm btn-outline-danger media-delete" data-link="{{ config.base_url }}/upload/{{ media.id }}/delete" data-id="{{ media.id }}" data-toggle="tooltip" title="Delete">
                                             <i class="fas fa-trash"></i>
                                         </button>
                                     </div>
+                                    <small class="text-muted">{{ media.timestamp|date("d/m/Y H:i:s") }}</small>
                                 </div>
                             </div>
-                            <div class="card-footer d-flex justify-content-between">
-                                <span class="user-title">{{ media.filename }}</span>
-                                <small>{{ media.timestamp|date("d/m/Y H:i") }}</small>
-                            </div>
                         </div>
                     </div>
                 {% endfor %}
             </div>
             {% include 'comp/pager.twig' with {'path': 'home'} %}
         {% else %}
-            <div class="text-center text-muted"><i>{{ lang('no_media') }}</i></div>
+            <div class="text-center text-muted"><i>No medias found.</i></div>
         {% endif %}
     </div>
     {% include 'comp/footer.twig' %}