Integration de assetic

This commit is contained in:
franck
2013-06-17 15:36:05 +02:00
parent 088f5a3402
commit 9d8c07775b
41 changed files with 10040 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Admin\Templating\Smarty;
use Thelia\Template\Assets\AsseticManager;
class AssetsManager extends AsseticManager {
const ASSET_TYPE_AUTO = '';
private $assetic_manager;
private $web_root;
private $path_relative_to_web_root;
/**
*
* @param string $web_root the disk path to the web root
* @param string $path_relative_to_web_root the path (relative to web root) where the assets will be generated
*/
public function __construct($web_root, $path_relative_to_web_root) {
parent::__construct();
$this->web_root = $web_root;
$this->path_relative_to_web_root = $path_relative_to_web_root;
$this->assetic_manager = new AsseticManager();
}
public function processSmartyPluginCall($assetType, $params, $content, \Smarty_Internal_Template $template, &$repeat) {
// Opening tag (first call only)
if ($repeat) {
$file = $params['file'];
$filters = isset($params['filters']) ? $params['filters'] : '';
$debug = isset($params['debug']) ? trim(strtolower($params['debug'])) == 'true' : false;
// Get template base path
$tpl_path = $template->source->filepath;
// Get basedir
$tpl_dir = dirname($tpl_path);
// Create absolute dir path
$asset_dir = realpath($tpl_dir.'/'.dirname($file));
$asset_file = basename($file);
if ($asset_dir === false) throw new \Exception("Failed to get real path of '".$tpl_dir.'/'.dirname($file)."'");
$url = $this->assetic_manager->asseticize(
$asset_dir.'/'.$asset_file,
$this->web_root."/".$this->path_relative_to_web_root,
$this->path_relative_to_web_root,
$assetType,
$filters,
$debug
);
$template->assign('asset_url', $url);
}
else if (isset($content)) {
return $content;
}
}
}

View File

@@ -0,0 +1,149 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Admin\Templating;
use \Smarty;
use Thelia\Admin\Templating\Smarty\AssetsManager;
// smarty configuration
class Template extends Smarty
{
private $asset_manager;
public function __construct()
{
parent::__construct();
$compile_dir = THELIA_LOCAL_DIR . 'cache/smarty/compile';
if (! is_dir($compile_dir)) @mkdir($compile_dir, 0777, true);
$cache_dir = THELIA_LOCAL_DIR . 'cache/smarty/cache';
if (! is_dir($cache_dir)) @mkdir($cache_dir, 0777, true);
$web_root = THELIA_WEB_DIR;
$asset_dir_from_web_root = 'assets/admin/default';
$this->asset_manager = new AssetsManager($web_root, $asset_dir_from_web_root);
$this->setTemplateDir(__DIR__.'/../template/default'); // FIXME - a parametrer
$this->setCompileDir($compile_dir);
$this->setCacheDir($cache_dir);
// Register translation function 'intl'
$this->registerPlugin('function', 'intl', array($this, 'smartyTranslate'));
// Register Thelia modules inclusion function 'thelia_module'
$this->registerPlugin('function', 'thelia_module', array($this, 'smartyTheliaModule'));
// Register asset management blocks
$this->registerPlugin('block', 'stylesheets', array($this, 'smartyBlockStylesheets'));
$this->registerPlugin('block', 'javascripts', array($this, 'smartyBlockJavascripts'));
$this->registerPlugin('block', 'images', array($this, 'smartyBlockImages'));
/*
$this->setConfigDir(GUESTBOOK_DIR . 'configs');
*/
// Set base config
$this->assign('lang', 'fr');
$this->assign('email', '');
}
public function smartyTranslate($params, &$smarty)
{
if (isset($params['l'])) {
$string = str_replace('\'', '\\\'', $params['l']);
}
else {
$string = '';
}
// TODO
return "[$string]";
}
public function smartyTheliaModule($params, &$smarty)
{
// TODO
return "";
}
public function smartyBlockJavascripts($params, $content, \Smarty_Internal_Template $template, &$repeat)
{
return $this->asset_manager->processSmartyPluginCall('js', $params, $content, $template, $repeat);
}
public function smartyBlockImages($params, $content, \Smarty_Internal_Template $template, &$repeat)
{
return $this->asset_manager->processSmartyPluginCall(AssetsManager::ASSET_TYPE_AUTO, $params, $content, $template, $repeat);
}
public function smartyBlockStylesheets($params, $content, \Smarty_Internal_Template $template, &$repeat)
{
return $this->asset_manager->processSmartyPluginCall('css', $params, $content, $template, $repeat);
}
public function render($templateName, $parameters)
{
$realTemplateName = $templateName . '.tpl';
/**
* Assign variables/objects to the templates.
*
* Description
* void assign(mixed var);
* void assign(string varname, mixed var, bool nocache);
*
* You can explicitly pass name/value pairs, or associative arrays
* containing the name/value pairs.
*
* If you pass the optional third nocache parameter of TRUE, the
* variable is assigned as nocache variable. See {@link http://www.smarty.net/docs/en/caching.cacheable.tpl#cacheability.variables} for details.
*
* Too learn more see {@link http://www.smarty.net/docs/en/api.assign.tpl}
*/
$this->smarty->assign($parameters);
/**
* This returns the template output instead of displaying it. Supply a
* valid template resource type and path. As an optional second
* parameter, you can pass a $cache id, see the caching section for more
* information.
*
* As an optional third parameter, you can pass a $compile_id. This is
* in the event that you want to compile different versions of the same
* template, such as having separate templates compiled for different
* languages. You can also set the $compile_id variable once instead of
* passing this to each call to this function.
*
* Too learn more see {@link http://www.smarty.net/docs/en/api.fetch.tpl}
*/
return $this->smarty->fetch($realTemplateName);
}
}
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,135 @@
// -- Tools --------------------------------------------------------------------
.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.box-shadow(@shadow: 0 1px 2px rgba(0,0,0,.05)) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
// -- Base styling ------------------------------------------------------------
html, body {
height: 100%;
margin: 0;
padding: 0;
}
body {
background: url("img/bg.jpg") repeat;
font-size: 13px;
}
h3, h4 {
color: #5a6876;
background: -webkit-gradient(linear, left top, left bottom, from(#42505d), to(#72808e));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
h3 {
padding: 0px;
margin: 0px 0px 20px 0px;
text-align: left;
font-size : 18px;
}
h4 {
padding: 0px 0px 20px 0px;
margin: 0px;
text-align: left;
}
#wrapper {
padding-top: 20px;
}
a {
color: #e9720f;
font-weight: bold;
}
// -- Brandbar ----------------------------------------------------------------
/* --- BRAND BAR ---*/
.brandbar {
background: url("images/header.jpg") repeat-x;
height: 90px;
a.brand {
text-indent: -133337px;
display: block;
float: left;
margin-right: 20px;
background: url("images/logo.png") 0px 12px no-repeat;
width: 124px;
height: 63px;
}
.breadcrumb {
border-radius: 0px;
padding: 25px 0px 25px 30px;
background: url("images/logo-light.png") left center no-repeat;
float: left;
margin: 12px 0px 0px 0px;
a {
color: #949aa1;
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
}
.active {
color: #FFF;
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
border-bottom: 1px dotted white;
}
}
.Blocmoncompte {
float: right;
margin: 0px;
padding: 0px;
margin-top: 35px;
color: white;
font-size: 13px;
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
}
dt {
float: left;
margin-right: 15px;
}
.deconnexion {
float: right;
margin: 0px;
a {
text-indent: -13337px;
display: block;
background: url("images/deconnexion.png") no-repeat;
width: 23px;
height: 24px;
}
}
}
// -- Login form --------------------------------------------------------------
.form-signin {
max-width: 400px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
.border-radius;
.box-shadow;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,13 @@
{* Include required JS files *}
{javascripts file='../assets/js/jquery.min.js'}
<link rel="stylesheet" href="{$asset_url}" target="screen">
{/javascripts}
{javascripts file='../assets/bootstrap/js/bootstrap.min.js'}
<link rel="stylesheet" href="{$asset_url}" target="screen">
{/javascripts}
{* TODO allow modules to include JS here *}
</body>
</html>

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="{$lang}">
<head>
<title>{intl l='Thelia Back Office'}{if ! empty($page_title)} - {$page_title}{/if}</title>
{images file='../assets/img/favicon.ico'}<link rel="shortcut icon" href="{$asset_url}" />{/images}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{stylesheets file='../assets/css/*' filters='less,cssrewrite'}
<link rel="stylesheet" href="{$asset_url}">
{/stylesheets}
{stylesheets file='../assets/bootstrap/css/bootstrap.min.css' filters='cssrewrite'}
<link rel="stylesheet" href="{$asset_url}">
{/stylesheets}
{stylesheets file='../assets/bootstrap/css/bootstrap-responsive.min.css' filters='cssrewrite'}
<link rel="stylesheet" href="{$asset_url}">
{/stylesheets}
{* TODO allow modules to include CSS here *}
</head>
<body>

View File

@@ -0,0 +1,35 @@
{$page_title={intl l='Thelia'}}
{include file='includes/header.inc.tpl'}
<div class="loginpage">
<div class="brandbar container">
<a class="brand" href="index.php">{images file='assets/img/logo-thelia-34px.png'}<img src="{$asset_url}" alt="{intl l='Thelia, solution e-commerce libre'}" />{/images}</a>
</div>
<div id="wrapper" class="container">
{thelia_module action='index_top'}
<div class="hero-unit">
<h1>{intl l='Thelia Back Office'}</h1>
<form action="/admin/login" method="post" class="well form-inline">
<input type="text" class="input" placeholder="{intl l='E-mail address'}" name="username" />
<input type="password" class="input" placeholder="{intl l='Password'}" name="password" />
<label class="checkbox"> <input type="checkbox" name="remember" value="yes"> {intl l='Remember me'}</label>
<button type="submit" class="btn btn-primary">{intl l='Login'} <i class="icon-play"></i></button>
</form>
</div>
<div class="row-fluid">
</div>
</div>
{thelia_module action='index_bottom'}
</div>
{include file='includes/footer.inc.tpl'}

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?>

10
web/.htaccess Normal file
View File

@@ -0,0 +1,10 @@
Options +FollowSymlinks
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /thelia2
RewriteRule ^admin(/.*)?$ index_dev.php/admin/$1 [L,QSA]
</IfModule>