Compare commits

..

4 commits

Author SHA1 Message Date
db5d619f9a readme.md 2026-08-26 17:44:55 +02:00
OverSu
1fa8b9e152 AEOS Calvarium v0.5 2026-08-26 17:23:29 +02:00
OverSu
57b531cb62 AEOS Calvarium v0.4 2026-08-26 17:23:29 +02:00
OverSu
821b405f5a AEOS Calvarium v0.3 2026-08-26 17:23:29 +02:00
97 changed files with 3814 additions and 1685 deletions

1
.htaccess Normal file
View file

@ -0,0 +1 @@
ErrorDocument 404 /AEOSTRUNK/index.php?redirect

File diff suppressed because it is too large Load diff

View file

@ -1,97 +1,113 @@
<?php <?php
ob_start();
session_start(); session_start();
// Inclusion des librairie // Inclusion des librairie
require_once ('../lib/aeos.lib.php'); require_once ('../lib/aeos.lib.php');
require_once ('../lib/config.lib.php');
require_once ('../lib/var.lib.php'); require_once ('../lib/var.lib.php');
$password = $ADMIN_MDP;
$login = $ADMIN_LOG;
$email = $ADMIN_EMAIL;
?> ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php echo $SITE_NOM; ?></title> <title><?php echo AEOS_NAME; ?></title>
<meta name="description" content="<?php echo $SITE_DESC; ?>" /> <meta name="description" content="<?php echo AEOS_DESC; ?>" />
<?php <link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" />
// Detection du navigateur. Si iPhone ou non. <link rel="stylesheet" type="text/css" media="screen" href="../themes/system/css/fontello.css" />
if(preg_match("/iphone/i", $_SERVER["HTTP_USER_AGENT"])) {?> <script type="text/javascript" src="pell/pell.min.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/<?php echo $SITE_THEME; ?>/styles_mobile.css" /><?php } else { ?> <link rel="icon" type="image/png" href="../themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" />
<link rel="stylesheet" type="text/css" media="screen" href="../themes/<?php echo $SITE_THEME; ?>/styles.css" /> <?php echo checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 0, $subdir)["Data"]; ?>
<link rel="stylesheet" type="text/css" media="screen" href="tinyeditor/style.css" />
<script type="text/javascript" src="tinyeditor/packed.js"></script>
<link rel="icon" type="image/png" href="../themes/<?php echo $SITE_THEME; ?>/images/favicon_aeos.ico" /><?php } ?>
</head> </head>
<?php if(!isset($_SESSION['_LOGIN'])){ ?>
<?php if(!isset($_SESSION['_login']) || !isset($_SESSION['_pass'])){ ?> <body>
<body> <div id="Administration">
<div id="content"> <h1>
<img src="../themes/system/images/aeos_logo_A_blanc.png" alt=" <?php echo $lang["login_SecurePanel"]; ?>" />
<div id="center"> </h1>
<div id="left">NNSPROD LOGO</div>
<h6><img src="../themes/<?php echo $SITE_THEME; ?>/images/icones/logout.png" alt="Logout" class="icon" />Administration - AEOS</h6>
<?php <?php
if (@$_GET['action']=="mdpperdu") switch(@$_['o'])
{ {
if(isset($_POST['login']) && isset($_POST['email'])) case 'lostPassword':
if (isset($_['email']))
{ {
if(($login == $_POST['login']) && (strtolower($email) == strtolower($_POST['email']))) // User exists ? Email matches ?
if(isset($config['configuration']['users'][$_['login']]) && strtolower($config['configuration']['users'][$_['login']]['email']['#text']) == strtolower($_['email']))
{ {
$mdp = generer_mdp(12); $generatedPassword = generateEasyPassword(12);
sendMail($SITE_NOM, $email, "Récupération de mot de passe", "Ce mail provient de ".$SITE_NOM.".\nVous avez fait une demande de nouveau mot de passe.\n\nVoici votre nouveau mot de passe: ".$mdp); $generatedPassword = password_hash($generatedPassword,PASSWORD_DEFAULT);
ecriture_xml('../data/config.xml', 'mdp_admin', md5($mdp)); sendMail(AEOS_NAME, $config['configuration']['users'][$_['login']]['email']['#text'], $lang['mail_passwordBack'], $lang['mail_newPassword']." ".$generatedPassword);
echo "<span class='valide'>Un email vous a été envoyé.</span>"; ecriture_xml('../data/config.xml', array('configuration/users/'.$_['login'].'/password'=>$generatedPassword));
} ?><div class='notification valide'><p><i class="icon-emo-happy"></i> <?php echo $lang['mailSentToYou']; ?></p></div><?php
else
{
echo "<span class='erreur'>Login ou email incorrect.</span>";
} }
else { ?><div class='notification error'><p><i class="icon-emo-unhappy"></i> <?php echo $lang['wrongLoginEmail']; ?></p></div><?php }
} }
?> ?>
<form action="index.php?action=mdpperdu" method="post"> <div class="form">
<p> <form class="login-form" action="index.php?o=lostPassword" method="POST">
Login<br /><input type="text" name="login" class="input" value="" /><br /><br /> <input type="text" name="login" placeholder="<?php echo $lang["login_Username"]; ?>"/>
Email<br /><input type="text" name="email" class="input" value="" /><br /><br /> <input type="email" name="email" placeholder="<?php echo $lang["mailAddress"]; ?>"/>
<input type="submit" value="Renvoyer un mot de passe" class="input" /> <button><?php echo $lang["login_sendNewPassword"]; ?></button>
<p class="message">
<a href="index.php"><?php echo $lang["cancel"]; ?></a>
</p> </p>
</form> </form>
<p><a href="index.php" class="link">Retour</a></p> </div>
<?php <?php
} break;
else
default:
?>
<div class="form">
<form class="login-form" action="index.php" method="POST">
<input type="text" name="login" placeholder="<?php echo $lang["login_Username"]; ?>"/>
<input type="password" name="password" placeholder="<?php echo $lang["login_Password"]; ?>"/>
<button><i class="icon-login"></i><?php echo $lang["login_Connexion"]; ?></button>
<p class="message">
<a href="index.php?o=lostPassword"><?php echo $lang["login_ForgotPassword"]; ?></a>
</p>
</form>
</div>
<?php
if(isset($_['login']) && isset($_['password']))
{ {
if(isset($_POST['login']) && isset($_POST['mdp'])) // User exists ? Password matches ?
if(isset($config['configuration']['users'][$_['login']]) && password_verify($_['password'], $config['configuration']['users'][$_['login']]['password']['#text']))
{ {
if(($login == $_POST['login']) && ($password == md5($_POST['mdp']))) $_SESSION['_LOGIN'] = $_['login'];
{ //$_SESSION['_PASSWORD'] = $_['password'];
$_SESSION['_login'] = $login;
$_SESSION['_pass'] = $password;
header('Location: index.php'); header('Location: index.php');
} }
else else { ?><div class='notification error'><p><i class="icon-emo-unhappy"></i> <?php echo $lang['wrongLoginPassword']; ?></p></div><?php }
{
echo "<p class='decalageBas'><span class='erreur'>Login ou mot de passe incorrect.</span></p>";
} }
} }
?> ?>
<form action="index.php" method="post">
<div id="Footer">
<img src="../themes/system/images/logo_a4_300.png" width="250" alt="Logo" />
<p> <p>
Login<br /><input type="text" name="login" class="input" value="" /><br /><br /> AEOS v<?php echo AEOS_VERSION; ?> - <?php echo $lang["footer_version_loved"]; ?>
Mot de passe<br /><input type="password" name="mdp" class="input" value="" /><br /><br />
<input type="submit" value="Connexion" class="input" />
</p> </p>
</form> <hr />
<p><a href="index.php?action=mdpperdu" class="link">Mot de passe perdu ?</a></p> <h5><?php echo AEOS_BRANCH; ?>/version_<?php echo AEOS_UPDATE; ?>.zip</h5>
<?php <p class="copyright"><?php echo $lang["login_msg_Layus"]; ?></p>
</div>
</div>
</body>
<?php } else
{
$returned = checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 1, $subdir);
if($returned['OB'])
{
ob_start();
include_once('base.php');
$eyecatcher = ob_get_clean();
echo insertPlugins($eyecatcher, $returned);
} }
?> else require_once('base.php');
</div> } ?>
</div>
</body>
<?php } else {require_once('base.php');} ?>
</html> </html>
<?php ob_end_flush(); ?>

266
admin/pell/pell.min.js vendored Normal file
View file

@ -0,0 +1,266 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.pell = factory());
}(this, function () { 'use strict';
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var addEventListener = function addEventListener(parent, type, listener) {
return parent.addEventListener(type, listener);
};
var appendChild = function appendChild(parent, child) {
return parent.appendChild(child);
};
var createElement = function createElement(tag) {
return document.createElement(tag);
};
var defaultParagraphSeparatorString = 'defaultParagraphSeparator';
var exec = function exec(command) {
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
return document.execCommand(command, false, value);
};
var formatBlock = 'formatBlock';
var queryCommandState = function queryCommandState(command) {
return document.queryCommandState(command);
};
var queryCommandValue = function queryCommandValue(command) {
return document.queryCommandValue(command);
};
var bold = {
icon: '<b>B</b>',
result: function result() {
return exec('bold');
},
state: function state() {
return queryCommandState('bold');
},
title: 'Bold'
};
var code = {
icon: '&lt;/&gt;',
result: function result() {
return exec(formatBlock, '<pre>');
},
title: 'Code'
};
var heading1 = {
icon: '<b>H<sub>1</sub></b>',
result: function result() {
return exec(formatBlock, '<h1>');
},
title: 'Heading 1'
};
var heading2 = {
icon: '<b>H<sub>2</sub></b>',
result: function result() {
return exec(formatBlock, '<h2>');
},
title: 'Heading 2'
};
var image = {
icon: '&#128247;',
result: function result() {
var url = window.prompt('Enter the image URL');
if (url) exec('insertImage', url);
},
title: 'Image'
};
var italic = {
icon: '<i>I</i>',
result: function result() {
return exec('italic');
},
state: function state() {
return queryCommandState('italic');
},
title: 'Italic'
};
var line = {
icon: '&#8213;',
result: function result() {
return exec('insertHorizontalRule');
},
title: 'Horizontal Line'
};
var link = {
icon: '&#128279;',
result: function result() {
var url = window.prompt('Enter the link URL');
if (url) exec('createLink', url);
},
title: 'Link'
};
var olist = {
icon: '&#35;',
result: function result() {
return exec('insertOrderedList');
},
title: 'Ordered List'
};
var paragraph = {
icon: '&#182;',
result: function result() {
return exec(formatBlock, '<p>');
},
title: 'Paragraph'
};
var quote = {
icon: '&#8220; &#8221;',
result: function result() {
return exec(formatBlock, '<blockquote>');
},
title: 'Quote'
};
var strikethrough = {
icon: '<strike>S</strike>',
result: function result() {
return exec('strikeThrough');
},
state: function state() {
return queryCommandState('strikeThrough');
},
title: 'Strike-through'
};
var ulist = {
icon: '&#8226;',
result: function result() {
return exec('insertUnorderedList');
},
title: 'Unordered List'
};
var underline = {
icon: '<u>U</u>',
result: function result() {
return exec('underline');
},
state: function state() {
return queryCommandState('underline');
},
title: 'Underline'
};
var defaultActions = {
bold: bold,
code: code,
heading1: heading1,
heading2: heading2,
image: image,
italic: italic,
line: line,
link: link,
olist: olist,
paragraph: paragraph,
quote: quote,
strikethrough: strikethrough,
ulist: ulist,
underline: underline
};
var defaultClasses = {
actionbar: 'pell-actionbar',
button: 'pell-button',
content: 'pell-content',
selected: 'pell-button-selected'
};
var init = function init(settings) {
var actions = settings.actions ? settings.actions.map(function (action) {
if (typeof action === 'string') return defaultActions[action];else if (defaultActions[action.name]) return _objectSpread({}, defaultActions[action.name], action);
return action;
}) : Object.keys(defaultActions).map(function (action) {
return defaultActions[action];
});
var classes = _objectSpread({}, defaultClasses, settings.classes);
var defaultParagraphSeparator = settings[defaultParagraphSeparatorString] || 'div';
var actionbar = createElement('div');
actionbar.className = classes.actionbar;
appendChild(settings.element, actionbar);
var content = settings.element.content = createElement('div');
content.contentEditable = true;
content.className = classes.content;
content.className = classes.content;
content.id = "pell-id";
content.oninput = function (_ref) {
var firstChild = _ref.target.firstChild;
if (firstChild && firstChild.nodeType === 3) exec(formatBlock, "<".concat(defaultParagraphSeparator, ">"));else if (content.innerHTML === '<br>') content.innerHTML = '';
settings.onChange(content.innerHTML);
};
content.onkeydown = function (event) {
if (event.key === 'Enter' && queryCommandValue(formatBlock) === 'blockquote') {
setTimeout(function () {
return exec(formatBlock, "<".concat(defaultParagraphSeparator, ">"));
}, 0);
}
};
appendChild(settings.element, content);
actions.forEach(function (action) {
var button = createElement('button');
button.className = classes.button;
button.innerHTML = action.icon;
button.title = action.title;
button.setAttribute('type', 'button');
button.onclick = function () {
return action.result() && content.focus();
};
if (action.state) {
var handler = function handler() {
return button.classList[action.state() ? 'add' : 'remove'](classes.selected);
};
addEventListener(content, 'keyup', handler);
addEventListener(content, 'mouseup', handler);
addEventListener(button, 'click', handler);
}
appendChild(actionbar, button);
});
if (settings.styleWithCSS) exec('styleWithCSS');
exec(defaultParagraphSeparatorString, defaultParagraphSeparator);
return settings.element;
};
var pell = {
init: init
};
return pell;
}));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

View file

@ -1,214 +0,0 @@
TINY={};
function T$(i){return document.getElementById(i)}
function T$$$(){return document.all?1:0}
TINY.editor=function(){
var c=[], offset=-30;
c['cut']=[1,'Cut','a','cut',1];
c['copy']=[2,'Copy','a','copy',1];
c['paste']=[3,'Paste','a','paste',1];
c['bold']=[4,'Bold','a','bold'];
c['italic']=[5,'Italic','a','italic'];
c['underline']=[6,'Underline','a','underline'];
c['strikethrough']=[7,'Strikethrough','a','strikethrough'];
c['subscript']=[8,'Subscript','a','subscript'];
c['superscript']=[9,'Superscript','a','superscript'];
c['orderedlist']=[10,'Insert Ordered List','a','insertorderedlist'];
c['unorderedlist']=[11,'Insert Unordered List','a','insertunorderedlist'];
c['outdent']=[12,'Outdent','a','outdent'];
c['indent']=[13,'Indent','a','indent'];
c['leftalign']=[14,'Left Align','a','justifyleft'];
c['centeralign']=[15,'Center Align','a','justifycenter'];
c['rightalign']=[16,'Right Align','a','justifyright'];
c['blockjustify']=[17,'Block Justify','a','justifyfull'];
c['undo']=[18,'Undo','a','undo'];
c['redo']=[19,'Redo','a','redo'];
c['image']=[20,'Insert Image','i','insertimage','Enter Image URL:','http://'];
c['hr']=[21,'Insert Horizontal Rule','a','inserthorizontalrule'];
c['link']=[22,'Insert Hyperlink','i','createlink','Enter URL:','http://'];
c['unlink']=[23,'Remove Hyperlink','a','unlink'];
c['unformat']=[24,'Remove Formatting','a','removeformat'];
c['print']=[25,'Print','a','print'];
function edit(n,obj){
this.n=n; window[n]=this; this.t=T$(obj.id); this.obj=obj; this.xhtml=obj.xhtml;
var p=document.createElement('div'), w=document.createElement('div'), h=document.createElement('div'),
l=obj.controls.length, i=0;
this.i=document.createElement('iframe'); this.i.frameBorder=0;
this.i.width=obj.width||'500'; this.i.height=obj.height||'250'; this.ie=T$$$();
h.className=obj.rowclass||'teheader'; p.className=obj.cssclass||'te'; p.style.width=this.i.width+'px'; p.appendChild(h);
for(i;i<l;i++){
var id=obj.controls[i];
if(id=='n'){
h=document.createElement('div'); h.className=obj.rowclass||'teheader'; p.appendChild(h)
}else if(id=='|'){
var d=document.createElement('div'); d.className=obj.dividerclass||'tedivider'; h.appendChild(d)
}else if(id=='font'){
var sel=document.createElement('select'), fonts=obj.fonts||['Verdana','Arial','Georgia'], fl=fonts.length, x=0;
sel.className='tefont'; sel.onchange=new Function(this.n+'.ddaction(this,"fontname")');
sel.options[0]=new Option('Font','');
for(x;x<fl;x++){
var font=fonts[x];
sel.options[x+1]=new Option(font,font)
}
h.appendChild(sel)
}else if(id=='size'){
var sel=document.createElement('select'), sizes=obj.sizes||[1,2,3,4,5,6,7], sl=sizes.length, x=0;
sel.className='tesize'; sel.onchange=new Function(this.n+'.ddaction(this,"fontsize")');
for(x;x<sl;x++){
var size=sizes[x];
sel.options[x]=new Option(size,size)
}
h.appendChild(sel)
}else if(id=='style'){
var sel=document.createElement('select'),
styles=obj.styles||[['Style',''],['Paragraph','<p>'],['Header 1','<h1>'],['Header 2','<h2>'],['Header 3','<h3>'],['Header 4','<h4>'],['Header 5','<h5>'],['Header 6','<h6>']],
sl=styles.length, x=0;
sel.className='testyle'; sel.onchange=new Function(this.n+'.ddaction(this,"formatblock")');
for(x;x<sl;x++){
var style=styles[x];
sel.options[x]=new Option(style[0],style[1])
}
h.appendChild(sel)
}else if(c[id]){
var div=document.createElement('div'), x=c[id], func=x[2], ex, pos=x[0]*offset;
div.className=obj.controlclass;
div.style.backgroundPosition='0px '+pos+'px';
div.title=x[1];
ex=func=='a'?'.action("'+x[3]+'",0,'+(x[4]||0)+')':'.insert("'+x[4]+'","'+x[5]+'","'+x[3]+'")';
div.onclick=new Function(this.n+(id=='print'?'.print()':ex));
div.onmouseover=new Function(this.n+'.hover(this,'+pos+',1)');
div.onmouseout=new Function(this.n+'.hover(this,'+pos+',0)');
h.appendChild(div);
if(this.ie){div.unselectable='on'}
}
}
this.t.parentNode.insertBefore(p,this.t); this.t.style.width=this.i.width+'px';
w.appendChild(this.t); w.appendChild(this.i); p.appendChild(w); this.t.style.display='none';
if(obj.footer){
var f=document.createElement('div'); f.className=obj.footerclass||'tefooter';
if(obj.toggle){
var to=obj.toggle, ts=document.createElement('div');
ts.className=to.cssclass||'toggle'; ts.innerHTML=obj.toggletext||'source';
ts.onclick=new Function(this.n+'.toggle(0,this);return false');
f.appendChild(ts)
}
if(obj.resize){
var ro=obj.resize, rs=document.createElement('div'); rs.className=ro.cssclass||'resize';
rs.onmousedown=new Function('event',this.n+'.resize(event);return false');
rs.onselectstart=function(){return false};
f.appendChild(rs)
}
p.appendChild(f)
}
this.e=this.i.contentWindow.document; this.e.open();
var m='<html><head>', bodyid=obj.bodyid?" id=\""+obj.bodyid+"\"":"";
if(obj.cssfile){m+='<link rel="stylesheet" href="'+obj.cssfile+'" />'}
if(obj.css){m+='<style type="text/css">'+obj.css+'</style>'}
m+='</head><body'+bodyid+'>'+(obj.content||this.t.value);
m+='</body></html>';
this.e.write(m);
this.e.close(); this.e.designMode='on'; this.d=1;
if(this.xhtml){
try{this.e.execCommand("styleWithCSS",0,0)}
catch(e){try{this.e.execCommand("useCSS",0,1)}catch(e){}}
}
};
edit.prototype.print=function(){
this.i.contentWindow.print()
},
edit.prototype.hover=function(div,pos,dir){
div.style.backgroundPosition=(dir?'34px ':'0px ')+(pos)+'px'
},
edit.prototype.ddaction=function(dd,a){
var i=dd.selectedIndex, v=dd.options[i].value;
this.action(a,v)
},
edit.prototype.action=function(cmd,val,ie){
if(ie&&!this.ie){
alert('Your browser does not support this function.')
}else{
this.e.execCommand(cmd,0,val||null)
}
},
edit.prototype.insert=function(pro,msg,cmd){
var val=prompt(pro,msg);
if(val!=null&&val!=''){this.e.execCommand(cmd,0,val)}
},
edit.prototype.setfont=function(){
execCommand('formatblock',0,hType)
},
edit.prototype.resize=function(e){
if(this.mv){this.freeze()}
this.i.bcs=TINY.cursor.top(e);
this.mv=new Function('event',this.n+'.move(event)');
this.sr=new Function(this.n+'.freeze()');
if(this.ie){
document.attachEvent('onmousemove',this.mv); document.attachEvent('onmouseup',this.sr)
}else{
document.addEventListener('mousemove',this.mv,1); document.addEventListener('mouseup',this.sr,1)
}
},
edit.prototype.move=function(e){
var pos=TINY.cursor.top(e);
this.i.height=parseInt(this.i.height)+pos-this.i.bcs;
this.i.bcs=pos
},
edit.prototype.freeze=function(){
if(this.ie){
document.detachEvent('onmousemove',this.mv); document.detachEvent('onmouseup',this.sr)
}else{
document.removeEventListener('mousemove',this.mv,1); document.removeEventListener('mouseup',this.sr,1)
}
},
edit.prototype.toggle=function(post,div){
if(!this.d){
var v=this.t.value;
if(div){div.innerHTML=this.obj.toggletext||'source'}
if(this.xhtml&&!this.ie){
v=v.replace(/<strong>(.*)<\/strong>/gi,'<span style="font-weight: bold;">$1</span>');
v=v.replace(/<em>(.*)<\/em>/gi,'<span style="font-weight: italic;">$1</span>')
}
this.e.body.innerHTML=v;
this.t.style.display='none'; this.i.style.display='block'; this.d=1
}else{
var v=this.e.body.innerHTML;
if(this.xhtml){
v=v.replace(/<span class="apple-style-span">(.*)<\/span>/gi,'$1');
v=v.replace(/ class="apple-style-span"/gi,'');
v=v.replace(/<span style="">/gi,'');
v=v.replace(/<br>/gi,'<br />');
v=v.replace(/<br ?\/?>$/gi,'');
v=v.replace(/^<br ?\/?>/gi,'');
v=v.replace(/(<img [^>]+[^\/])>/gi,'$1 />');
v=v.replace(/<b\b[^>]*>(.*?)<\/b[^>]*>/gi,'<strong>$1</strong>');
v=v.replace(/<i\b[^>]*>(.*?)<\/i[^>]*>/gi,'<em>$1</em>');
v=v.replace(/<u\b[^>]*>(.*?)<\/u[^>]*>/gi,'<span style="text-decoration:underline">$1</span>');
v=v.replace(/<(b|strong|em|i|u) style="font-weight: normal;?">(.*)<\/(b|strong|em|i|u)>/gi,'$2');
v=v.replace(/<(b|strong|em|i|u) style="(.*)">(.*)<\/(b|strong|em|i|u)>/gi,'<span style="$2"><$4>$3</$4></span>');
v=v.replace(/<span style="font-weight: normal;?">(.*)<\/span>/gi,'$1');
v=v.replace(/<span style="font-weight: bold;?">(.*)<\/span>/gi,'<strong>$1</strong>');
v=v.replace(/<span style="font-style: italic;?">(.*)<\/span>/gi,'<em>$1</em>');
v=v.replace(/<span style="font-weight: bold;?">(.*)<\/span>|<b\b[^>]*>(.*?)<\/b[^>]*>/gi,'<strong>$1</strong>')
}
if(div){div.innerHTML=this.obj.toggletext||'wysiwyg'}
this.t.value=v;
if(!post){
this.t.style.height=this.i.height+'px';
this.i.style.display='none'; this.t.style.display='block'; this.d=0
}
}
},
edit.prototype.post=function(){
if(this.d){this.toggle(1)}
};
return{edit:edit}
}();
TINY.cursor=function(){
return{
top:function(e){
return T$$$()?window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop:e.clientY+window.scrollY
}
}
}();

View file

@ -1,22 +0,0 @@
#input {border:none; margin:0; padding:0; font:10px 'Courier New',Verdana; border:0}
.te select{
padding: 1px;
}
.te {border:1px solid #5EB2DC; padding:0 1px 1px; font:12px Verdana,Arial}
.te iframe {border:none}
.teheader {height:31px; border-bottom:1px solid #5EB2DC; background:url(images/header-bg.gif) repeat-x; padding-top:1px}
.teheader select {float:left; margin-top:5px}
.tefont {margin-left:12px}
.tesize {margin:0 3px}
.testyle {margin-right:12px}
.tecolor {margin:0 3px}
.tedivider {float:left; width:1px; height:30px; background:#ccc}
.tecontrol {float:left; width:34px; height:30px; cursor:pointer; background-image:url(images/icons.png)}
.tecontrol:hover {background-color:#fff; background-position:30px 0}
.tefooter {height:32px; border-top:1px solid #5EB2DC; background:#f5f5f5}
.toggle {float:left; background:url(images/icons.png) -34px 2px no-repeat; padding:9px 13px 0 31px; height:23px; border-right:1px solid #ccc; cursor:pointer; color:#666}
.toggle:hover {background-color:#fff}
.resize {float:right; height:32px; width:32px; background:url(images/resize.gif) 15px 15px no-repeat; }
#editor {cursor:text;}

25
core/base.php Normal file
View file

@ -0,0 +1,25 @@
<?php
$contenu = lecture_xml(DATA_PAGES.$lecture_pages[$id].'.xml');
if(file_exists("modules/".$contenu['page']['type']['#text']."/base.php")==FALSE || $contenu['page']['etat']['#text']==0)
echo "<span class='erreur'>Impossible d'accéder à la page demandée.</span>";
else include_once("modules/".$contenu['page']['type']['#text']."/base.php");
// Obtention des informations dans la librairie information
if (isset($_GET['owInfo']) || strpos($_SERVER["REQUEST_URI"], 'owInfo')!==FALSE)
{ ?>
<div id="DeadZone"></div>
<div id="LifeZone">
<h1>Moteur généré par AEOS - CMS</h1>
<p><img src="themes/system/images/logo_aeos.png" alt="Logo" /></p>
<p>
<?php echo "AEOS v".AEOS_VERSION; ?>
</p>
<p>
Copyright © 2004 - <?php echo date('Y'); ?> NNS Production. Tous droits réservés.
</p>
<p>
<a href="<?php echo AEOS_REAL_URL; ?>">AEOS</a> est un logiciel libre sous licence GNU/GPL.
</p>
</div><?php
}
?>

6
core/footer.php Normal file
View file

@ -0,0 +1,6 @@
<a href='<?php echo AEOS_REAL_URL; ?>' title='AEOS est un logiciel libre sous licence GNU/GPL.'>AEOS</a> v<?php echo AEOS_VERSION; ?> - <?php echo $lang["footer_version_loved"]; ?><br />
<?php echo AEOS_FOOTER; ?><br />
<span style="font-size:10px;"><a href="<?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"../":"admin/"; ?>"><?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"Retour au site":"Administration"; ?></a> - <a href="#">Haut de page</a></span>
<?php echo checkFiles($subdir.AEOS_MODULE.'/'.AEOS_THEME, 2, $subdir)["Data"];
?>

0
core/index.html Normal file
View file

19
core/menu.php Normal file
View file

@ -0,0 +1,19 @@
<?php
// Listings des pages + menu
$list=listing_ordre();
foreach ($list as &$pages)
{
$page = lecture_xml(DATA_PAGES.$pages);
if ($page['page']['etat']['#text']==1)
{
echo "<li><a href='";
echo (AEOS_REWMODE)?AEOS_REWKEY.$page['page']['id']['#text']."-".valideURL($page['page']['nom']['#text']):"?id=".$page['page']['id']['#text'];
echo "' title='".$page['page']['nom']['#text']."'>";
if ($page['page']['id']['#text']==$id){echo "<b>"; }
echo $page['page']['nom']['#text'];
if ($page['page']['id']['#text']==$id){echo "</b>"; }
echo "</a></li>";
}
}
?>

View file

@ -1,6 +1,7 @@
Crédits: Crédits:
NNS Production pour le développement et le graphisme. [NNS Production] Développement & Design
Michael Leigeber pour TinyEditor. [Brian Kirchoff] Original nicEditor
99ko pour l'idée. [holger1] Fonction PHP XML2ARRAY
holger1 pour une aide et certains fonctions PHP. [nullivex] Fonction PHP ARRAY2XML
[patrickblackjr] Changelog design

View file

@ -1 +1,4 @@
deny from all <FilesMatch ".(xml)$">
order allow,deny
deny from all
</FilesMatch>

0
data/index.html Normal file
View file

13
data/pages/1#accueil.xml Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>1</id>
<nom>Accueil</nom>
<contenu><![CDATA[
<p><b>Lorem ipsum</b> dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.</p>
<p>Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.</p>
<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet.</p>
]]></contenu>
<type>owSimple</type>
<ordre>1</ordre>
<etat>1</etat>
</page>

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<page>
<id>1</id>
<nom>Page d'accueil</nom>
<contenu>Voici votre première page.&lt;br /&gt;&lt;br /&gt;Il vous suffit de rajouter "/admin" dans la barre d'adresse afin de pouvoir commencer à administrer votre site !&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;em&gt;Exemple: http://www.mondomaine.fr/admin&lt;/em&gt;&lt;/font&gt;</contenu>
<type>owSimple</type>
<ordre>1</ordre>
<etat>1</etat>
</page>

View file

@ -1,30 +1,48 @@
<?php <?php
// Vérification de l'installation. // Inclusion des librairies
ob_start();
if (!file_exists("data/config.xml")){header('Location: install/index.php?etape=0');}
// Inclusion des librairie
require_once ('lib/aeos.lib.php'); require_once ('lib/aeos.lib.php');
//Check Install
checkInstall();
require_once ('lib/config.lib.php');
require_once ('lib/var.lib.php'); require_once ('lib/var.lib.php');
// URL Rewriting
if(isset($_GET['redirect']))
{
if (preg_match("#".AEOS_REWKEY."([0-9-]+)-([^0-9](?:.+))#isU", $_SERVER['REDIRECT_URL'], $redirect))
{
header("Status: 200 OK", false, 200);
$redirect=abs($redirect[1]);
}
else header('Location: '.AEOS_REWKEY.HOME_PAGE.'-E404.html');
}
?> ?>
<!DOCTYPE html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title><?php echo AEOS_NAME." | ".AEOS_TITLE; ?></title>
<title><?php echo $SITE_NOM." | ".$PAGE_TITRE; ?></title> <meta name="description" content="<?php echo AEOS_DESC; ?>" />
<meta name="description" content="<?php echo $SITE_DESC; ?>" /> <link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo AEOS_THEME; ?>/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/system/css/fontello.css" />
<?php <link rel="icon" type="image/png" href="themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" />
// Detection du navigateur. Si iPhone ou non. <?php echo checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 0)["Data"]; ?>
if(preg_match("/iphone/i", $_SERVER["HTTP_USER_AGENT"])) {?>
<link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo $SITE_THEME; ?>/styles_mobile.css" /><?php } else { ?>
<link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo $SITE_THEME; ?>/styles.css" />
<link rel="icon" type="image/png" href="themes/<?php echo $SITE_THEME; ?>/images/favicon_aeos.ico" /><?php } ?>
</head> </head>
<?php <?php
// Maintenance ou non // Maintenance ou non
if ($SITE_MAINTENANCE=="on"){require_once('themes/'.$SITE_THEME.'/maintenance.php');} if (AEOS_MAINTENANCE==1){require_once('themes/'.AEOS_THEME.'/maintenance.php');}
else {require_once('themes/'.$SITE_THEME.'/base.php');} else
ob_end_flush(); {
$returned = checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 1);
if($returned['OB'])
{
ob_start();
include_once('themes/'.AEOS_THEME.'/base.php');
$eyecatcher = ob_get_clean();
echo insertPlugins($eyecatcher, $returned);
}
else require_once('themes/'.AEOS_THEME.'/base.php');
}
?> ?>

View file

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<nom_site>nom</nom_site>
<description_site>description</description_site>
<login_admin>admin</login_admin>
<email_admin>admin@admin.fr</email_admin>
<mdp_admin>0be75405074e9ede12f8556a52be22e9</mdp_admin>
<accueil>1</accueil>
<theme>defaut</theme>
<contentd>0</contentd>
<version>0.2</version>
<maintenance>off</maintenance>
<message>Votre site est actuellement en maintenance. &lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Merci de revenir plus tard !</message>
<footer>Copyright © 2011 NNS Production. Tous droits réservés. &lt;br /&gt;&lt;a href="http://nekonosekai.com"&gt;AEOS&lt;/a&gt; est un logiciel libre sous licence GNU/GPL.</footer>
</configuration>

41
install/config.xml Normal file
View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<nom_site>test</nom_site>
<description_site>test</description_site>
<lang>fr_FR</lang>
<lang_available>
<langs>
<code>fr_FR</code>
<name>Français</name>
</langs>
<langs>
<code>en_US</code>
<name>English</name>
</langs>
</lang_available>
<users>
<admin>
<id>1</id>
<firstname>???</firstname>
<lastname>???</lastname>
<email>test@test.test</email>
<language></language>
<password>$2y$10$w9qL6OSzztNBUBKLm1jUhezMNb6y3J1M/d.ksKs0T4XL1HzCMfFN2</password>
<avatar></avatar>
<role>Admin</role>
</admin>
</users>
<accueil>1</accueil>
<theme>defaut</theme>
<contentd>0</contentd>
<version>0.5</version>
<codename>CALVARIUM</codename>
<branch>stable</branch>
<update>06072013</update>
<maintenanceMode>FALSE</maintenanceMode>
<maintenanceMessage>Le site est actuellement en maintenance ! :)</maintenanceMessage>
<debugMode>FALSE</debugMode>
<footer>© 2004 - 2020 NNS Production</footer>
<urlrewriting>FALSE</urlrewriting>
<urlrewriting_key>page-</urlrewriting_key>
</configuration>

View file

@ -2,165 +2,182 @@
ob_start(); ob_start();
if (file_exists("../data/config.xml")){header('Location: ../index.php');} if (file_exists("../data/config.xml")){header('Location: ../index.php');}
require_once ('../lib/aeos.lib.php'); require_once ('../lib/aeos.lib.php');
$config = lecture_xml("config.xml");
if (!isset($_POST['lang'])) $langs="fr_FR"; else $langs=$_POST['lang'];
require_once('lang/'.$langs.'/index.php');
?> ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>AEOS | Installation</title> <title>AEOS | Installation</title>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/defaut/styles.css" /> <link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="install.css" />
<link rel="icon" type="image/png" href="../themes/defaut/images/favicon_aeos.ico" /> <link rel="icon" type="image/png" href="../themes/defaut/images/favicon_aeos.ico" />
</head> </head>
<body> <body>
<div id="content"> <div id="Layout"></div>
<div id="center"> <div id="Administration">
<div id="left">NNSPROD LOGO</div> <h1><img src="../themes/system/images/aeos_logo_A_blanc.png" alt="Logo AEOS" /></h1>
<h6><img src="../themes/defaut/images/icones/config.png" alt="Install" class="icon" />Installation - AEOS</h6>
<table class="tableCenter"> <!--
<tr> <div id="Menu">
<ul>
<?php
$menuArray=array($lang['L_Inst_Etape'], $lang['L_Inst_Etape1'], $lang['L_Inst_Etape2'], $lang['L_Inst_Etape3'], $lang['L_Inst_Etape4']);
$l=0;
foreach ($menuArray as $menu)
{
if (@$_GET['etape']==$l){ ?><li class="Actif"><?php }
else { ?><li><?php }
echo $menu."</li>";
$l++;
}
?>
</ul>
</div>
-->
<div class="form">
<h6><?php echo $lang['L_Install']; ?> - AEOS</h6>
<?php <?php
!isset($_GET['etape'])?$etape=0:$etape=$_GET['etape']; !isset($_GET['etape'])?$etape=0:$etape=$_GET['etape'];
$PHPVersion = phpversion(); $PHPVersion = phpversion();
$PHPv = explode (".", $PHPVersion); $PHPv = explode (".", $PHPVersion);
switch ($etape) switch ($etape)
{ {
// Pré-installation // Prérequis -------------------------------------------------------------------------------------------------------------------------
case 0: ?> case 0:
<td class="menu">
<ul class="listing">
<li id="actif">Preface</li>
<li class="onglet">Etape 1</li>
<li class="onglet">Etape 2</li>
<li class="onglet">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=1">
<h2>Préface d'installation</h2>
<h3>AEOS 0.2 [CALVARIUM]</h3>
<p>
Bienvenue sur l'assistant d'installation d'AEOS [CALVARIUM] !<br />
Veuillez suivre les étapes et valider avec la touche "suivant" afin de progresser.<br /><br />
<b>Prérequis:</b><br /><br />
PHP version >= 5.x.x
<?php
if ($PHPv[0]>=5) {echo "<span class='validation'>OK</span><br />";}
else {$erreur="Vous ne disposez pas de la version 5 de PHP."; echo "<span class='erreur'>ERREUR</span><br />";}
?> ?>
Possibilité d'écrire dans le dossier DATA <form class="language" method="POST" action="index.php?etape=0">
<p>
<div class="select_basic">
<select name="lang" class="input_select" onchange="this.form.submit();">
<?php
$list = listing_dossier("lang/");
foreach ($list as $pages)
{
$lg = lecture_xml('lang/'.$pages.'/lang.xml'); ?>
<option value="<?php echo $pages; ?>" <?php if($pages==$langs){echo "selected";}?>>
<?php echo $lg['lang']['title']['#text'];?>
</option><?php
} ?>
</select>
</div>
</p>
</form>
<form method="POST" action="index.php?etape=1">
<h4><?php echo $lang['L_Inst_bienvenue']."<br />".$lang['L_Inst_instruction']; ?></h4>
<p><?php echo $lang['L_Inst_prerequis']; ?></p>
<table class="Full">
<tr>
<td><?php echo $lang['L_Inst_versionphp']; ?><?php echo $PHPVersion; ?></td>
<td>
<?php
if ($PHPv[0]>=5) {echo "<span class='valide'>OK</span><br />";}
else
{
$erreur=$lang['L_Inst_Msg_versionphp'];
echo "<span class='erreur'>".$lang['L_Inst_Msg_erreur']."</span><br />";
}
?>
</td>
</tr>
<tr>
<td><?php echo $lang['L_Inst_repdata']; ?> </td>
<td>
<?php <?php
$chmod_data = substr(sprintf('%o', fileperms('../data')), -4); $chmod_data = substr(sprintf('%o', fileperms('../data')), -4);
if ($chmod_data<"0700"){$erreur="Le dossier DATA n'a pas les droits appropriés. Il est en ".$chmod_data; echo "<span class='erreur'>ERREUR</span>";} if ($chmod_data<"0700")
else {echo "<span class='validation'>OK</span>";} {
?> $erreur=$lang['L_Inst_Msg_repdata'].$chmod_data;
echo "<span class='erreur'>".$lang['L_Inst_Msg_erreur']."</span>";
}
else echo "<span class='valide'>OK</span>";
?></td>
</tr>
</table>
<p>
<?php <?php
if (isset($erreur)) if (isset($erreur))
{ {
echo "<br /><span class='erreur2'>".$erreur."</span>"; echo "<span class='erreur'>".$erreur."</span>"; ?>
?><br /><input type="submit" value="Suivant" class="input" id="input1" disabled="disabled" /><?php <input type="submit" value="<?php echo $lang['L_Mot_suivant']; ?>" class="input_button" disabled="disabled" /><?php
} }
else else
{ ?> { ?>
<br /><br /><input type="submit" value="Suivant" class="input" id="input1" /><?php <button><?php echo $lang['L_Mot_suivant']; ?></button><?php
} ?> } ?>
<input type="hidden" name="lang" value="<?php echo $langs; ?>" />
</p> </p>
</form> </form>
</td>
<?php <?php
break; break;
// Etape 1
// Etape 1 -------------------------------------------------------------------------------------------------------------------------
case 1: case 1:
?> ?>
<td class="menu"> <form method="POST" action="index.php?etape=2">
<ul class="listing"> <h3><?php echo $lang['L_Inst_confgen']; ?></h3>
<li class="onglet">Preface</li> <p><?php echo $lang['L_Inst_sitenom']; ?></p>
<li id="actif">Etape 1</li> <p><input class="input_text" type="text" name="titre" /></p>
<li class="onglet">Etape 2</li> <p><?php echo $lang['L_Inst_descnom']; ?></p>
<li class="onglet">Etape 3</li> <p><input class="input_text" name="description" /></p>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=2">
<h2>Etape 1</h2>
<h3>Configuration générale</h3>
<p> <p>
Titre du site<br /> <button><?php echo $lang['L_Mot_suivant']; ?></button>
<input class="textWidth" type="text" name="titre" /><br /><br /> <input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
Description du site<br />
<textarea class="textWidth" name="description" rows="1" cols="1" class="input"></textarea>
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" />
<input type="submit" value="Suivant" class="input" id="input1" />
</p> </p>
</form> </form>
</td>
<?php <?php
break; break;
// Etape 2
// Etape 2 -------------------------------------------------------------------------------------------------------------------------
case 2: case 2:
?> ?>
<td class="menu"> <form method="POST" action="index.php?etape=3">
<ul class="listing"> <h3><?php echo $lang['L_Inst_confadmin']; ?></h3>
<li class="onglet">Preface</li> <!--
<li class="onglet">Etape 1</li> <p><?php echo $lang['L_Mot_identifiant']; ?></p>
<li id="actif">Etape 2</li> <p><input type="text" class="input_text" name="login_admin" /></p>
<li class="onglet">Etape 3</li> -->
<li class="onglet">Etape 4</li> <p><?php echo $lang['L_Mot_motdepasse']; ?></p>
</ul> <p><input type="password" class="input_text" name="mdp_admin" /></p>
</td> <p><?php echo $lang['L_Mot_confmotdepasse']; ?></p>
<p><input type="password" class="input_text" name="mdp_confirme_admin" /></p>
<td rowspan="2" class="blocD"> <p><?php echo $lang['L_Mot_mail']; ?></p>
<form method="post" action="index.php?etape=3"> <p><input type="text" class="input_text" name="email_admin" /></p>
<h2>Etape 2</h2>
<h3>Configuration du compte Administrateur</h3>
<p>
Identifiant: <input type="text" style="float:right; border:1px solid #219AD2;" name="login_admin" /><br /><br />
Mot de passe: <input type="password" style="float:right; border:1px solid #219AD2;" name="mdp_admin" /><br /><br />
Confirmer mot de passe: <input type="password" style="float:right; border:1px solid #219AD2;" name="mdp_confirme_admin" /><br /><br />
eMail: <input type="text" style="float:right; border:1px solid #219AD2;" name="email_admin" /><br /><br />
<?php <?php
if(!isset($_GET['erreur'])) if(!isset($_GET['erreur']))
{ {
ecriture_xml('base.xml', 'nom_site', $_POST['titre']);
ecriture_xml('base.xml', 'description_site', $_POST['description']);
ecriture_xml('config.xml', array('configuration/nom_site'=>$_POST['titre'],
'configuration/description_site'=>$_POST['description'],
'configuration/lang'=>$langs));
} }
if (@$_GET['erreur']==1) echo "<span class='erreur2'>Les deux mots de passe ne sont pas identiques !</span><br />"; if (@$_GET['erreur']==1) echo "<span class='erreur'>".$lang['L_Inst_Msg_motdepasse']."</span><br />";
elseif (@$_GET['erreur']==2) echo "<span class='erreur2'>Votre adresse email n'est pas conforme.</span><br />"; elseif (@$_GET['erreur']==2) echo "<span class='erreur'>".$lang['L_Inst_Msg_mauvaisemail']."</span><br />";
?> ?>
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" /> <p><button><?php echo $lang['L_Mot_suivant']; ?></button></p>
<input type="submit" value="Suivant" class="input" id="input1" /> <input type="hidden" name="lang" value="<?php echo $langs; ?>" />
</p>
</form> </form>
</td>
<?php <?php
break; break;
// Etape 3
// Etape 3 -------------------------------------------------------------------------------------------------------------------------
case 3: case 3:
?> ?>
<td class="menu"> <form method="POST" action="index.php?etape=4">
<ul class="listing"> <h3><?php echo $lang['L_Inst_licence']; ?></h3>
<li class="onglet">Preface</li> <?php
<li class="onglet">Etape 1</li> if (@$_GET['erreur']==1) echo "<span class='erreur'>".$lang['L_Inst_Msg_condition']."</span>";
<li class="onglet">Etape 2</li>
<li id="actif">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=4">
<h2>Etape 3</h2>
<h3>Licence publique générale GNU</h3>
<?php if (@$_GET['erreur']==1) echo "<span class='erreur2'>Veuillez accepter les conditions !</span><br />";
elseif (isset($_POST['mdp_admin']) && md5($_POST['mdp_admin']) != md5($_POST['mdp_confirme_admin'])) elseif (isset($_POST['mdp_admin']) && md5($_POST['mdp_admin']) != md5($_POST['mdp_confirme_admin']))
{ {
@header('Location:index.php?etape=2&erreur=1'); @header('Location:index.php?etape=2&erreur=1');
@ -173,64 +190,59 @@
{ {
if(!isset($_GET['erreur'])) if(!isset($_GET['erreur']))
{ {
ecriture_xml('base.xml', 'login_admin', $_POST['login_admin']); ecriture_xml('config.xml', array(
ecriture_xml('base.xml', 'mdp_admin', md5($_POST['mdp_admin'])); 'configuration/users/admin/password'=>password_hash($_POST['mdp_admin'],PASSWORD_DEFAULT),
ecriture_xml('base.xml', 'email_admin', $_POST['email_admin']); 'configuration/users/admin/email'=>$_POST['email_admin']
));
} }
}?> }
$licence = @file_get_contents('http://www.gnu.org/licenses/gpl.txt'); ?>
<p><textarea class="input_text"><?php echo $licence; ?></textarea></p>
<p> <p>
<textarea class="textWidth" style="height:90px;" cols="0" rows="0"><?php include('../licence.txt'); ?></textarea><br /> <input type="checkbox" name="conditions" />
<input type="checkbox" name="conditions" /> Oui j'ai lu et j'accepte les termes et conditions d'utilisation <?php echo $lang['L_Inst_accepte']; ?>
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" />
<input type="submit" value="Suivant" class="input" id="input1" />
</p> </p>
<p><button><?php echo $lang['L_Mot_suivant']; ?></button></p>
<input type="hidden" name="lang" value="<?php echo $langs; ?>" />
</form> </form>
</td>
<?php <?php
break; break;
// Etape 4
// Etape 4 -------------------------------------------------------------------------------------------------------------------------
case 4: case 4:
if (!isset($_POST['conditions']) || (@$_POST['conditions']!="on")) if (!isset($_POST['conditions']) || (@$_POST['conditions']!="on"))
{ {
@header('Location: index.php?etape=3&erreur=1'); @header('Location: index.php?etape=3&erreur=1');
} ?> } ?>
<td class="menu"> <form method="POST" action="../index.php">
<ul class="listing"> <h3><?php echo $lang['L_Mot_finalisation']; ?></h3>
<li class="onglet">Preface</li> <p>AEOS v<?php echo $config['configuration']['version']['#text'];?></p>
<li class="onglet">Etape 1</li> <h4><?php echo $lang['L_Inst_succes']; ?></h4>
<li class="onglet">Etape 2</li> <p><?php echo $lang['L_Inst_effacerinstall']; ?></p>
<li class="onglet">Etape 3</li> <h5><?php echo $lang['L_Inst_admineffacer']; ?></h5>
<li id="actif">Etape 4</li> <p><?php echo $lang['L_Mot_remerciements']; ?>:</p>
</ul> <p>NNS Production, PHP.NET</p>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="../index.php">
<h2>Etape 4</h2>
<h3>Finalisation</h3>
<?php
copy("base.xml", "../data/config.xml");
unlink("base.xml");
?>
<p> <p>
<b>AEOS 0.1 Alpha [CALVARIUM]</b> installé avec succés !<br /><br /> <input type="submit" value="<?php echo $lang['L_Inst_accessite']; ?>" class="input_button" />
<span class="erreur2">N'oubliez pas d'effacer le dossier INSTALL de votre serveur !</span><br /> <input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
(Vous avez la possibilité de l'effacer via l'administration du site)<br /><br />
<b>Remerciements:</b><br />
N.n.S Production, PHP.NET
<input type="submit" value="Accés au site" class="input" id="input1" />
</p> </p>
</form> </form>
</td> <?php copy("config.xml", "../data/config.xml"); ?>
<?php <?php
break; break;
} ?> } ?>
</tr> </div>
<tr> <div id="Footer">
<td style="background:none;"> <img src="../themes/system/images/logo_a4_300.png" width="250" alt="Logo" />
</td> <p>
</tr> AEOS v<?php echo $config['configuration']['version']['#text']; ?>
</table> </p>
<hr />
<h5><?php echo $config['configuration']['branch']['#text']; ?>/version_<?php echo $config['configuration']['update']['#text']; ?>.zip</h5>
<p class="copyright"><?php echo $lang["login_msg_Layus"]; ?></p>
</div>
</div> </div>
</div> </div>
</body> </body>

View file

@ -1,25 +0,0 @@
/*
Utilisation de la CSS de base du thème defaut.
*/
table {margin-top:10px;}
td {background-color:#A0D2FC;}
h2 {font-weight:bold; font-size:16px;}
h3 {font-weight:bold; font-size:14px;}
p {text-align:left; margin:0 5px 0 5px; padding:4px; color:#0E6696;}
li {list-style-type:none; background-color:#79C0FB; border:1px solid #0E6696;}
.validation {font-weight:bold; color:green; float:right;}
.erreur {font-weight:bold; color:red; float:right;}
.erreur2 {font-weight:bold; color:red;}
.menu {height:55px; width:90px; background:none;}
.listing {margin:1px 0 0 0;}
.blocD {width:400px; border:1px solid #0E6696;}
.textWidth {width:375px; border:1px solid #219AD2;}
#actif {height:20px; padding:8px 7px 0 7px; margin:-2px 0 4px 0; border:1px solid white; font-weight:bold;}
.onglet {height:20px; padding:8px 7px 0 7px; margin:-2px 0 4px 0;}
#input1 {float:right; margin:5px -5px 5px 5px;}
#input2 {float:left; margin:5px 5px 5px -5px;}
#center {height: 300px;}
.tableCenter {margin:0 auto 0; width:510px;}

View file

@ -0,0 +1,47 @@
<?php
// Language file, in english
$lang = array(
'L_lang' => 'English',
// Instalation
'L_Inst_intro' => 'Interface in',
'L_Inst_bienvenue' => 'Welcome to the AEOS Installation Wizard !',
'L_Inst_instruction' => 'Please follow the steps and confirm by pressing "next" to progress.',
'L_Inst_prerequis' => 'Prerequisites: ', //space
'L_Inst_versionphp' => 'PHP version: ', //space
'L_Inst_repdata' => '"Data" directory writable: ', //space
'L_Inst_confgen' => 'General configuration',
'L_Inst_sitenom' => 'Website title',
'L_Inst_descnom' => 'Website description',
'L_Inst_confadmin' => 'Administrator account configuration',
'L_Inst_licence' => 'GNU public general license',
'L_Inst_accepte' => 'Yes I have read and accept the terms and conditions of use',
'L_Inst_succes' => 'succesfully installed !',
'L_Inst_effacerinstall' => 'Don\'t forget to delete the INSTALL folder from your server !',
'L_Inst_admineffacer' => '(You can delete it later from the administration)',
'L_Inst_accessite' => 'Website access',
// Instalation -> Error mesages
'L_Inst_Msg_versionphp' => 'You don\'t have version 5 of PHP.',
'L_Inst_Msg_erreur' => 'ERROR',
'L_Inst_Msg_repdata' => 'DATA folder doesn\'t have the appropriate rights.', //space
'L_Inst_Msg_motdepasse' => 'Passwords do not match!',
'L_Inst_Msg_mauvaisemail' => 'Your email address is invalid.',
'L_Inst_Msg_condition' => 'Please accept the conditions!',
// Word
'L_Mot_etape' => 'Step',
'L_Mot_preface' => 'Preface',
'L_Mot_finalisation' => 'Finalisation',
'L_Mot_remerciements' => 'Thanks',
'L_Mot_identifiant' => 'Login',
'L_Mot_motdepasse' => 'Password',
'L_Mot_confmotdepasse' => 'Confirm password',
'L_Mot_mail' => 'Email',
'L_Mot_suivant' => 'Next',
'L_Mot_precedent' => 'Back',
);
?>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<lang>
<title>English</title>
<abbr>en</abbr>
</lang>

View file

@ -0,0 +1,59 @@
<?php
// Fichier langue, en français.
$lang = array(
'L_lang' => "Français",
// Installation
'L_Install' => "Installation du CMS",
'L_Inst_Etape' => "Prérequis",
'L_Inst_Etape1' => "Configuration",
'L_Inst_Etape2' => "Administration",
'L_Inst_Etape3' => "Licence",
'L_Inst_Etape4' => "Terminée !",
'L_Inst_intro' => "Préface d'installation",
'L_Inst_bienvenue' => "Bienvenue sur l'assistant d'installation",
'L_Inst_instruction' => "Merci de suivre les étapes suivantes",
'L_Inst_prerequis' => "Prérequis: ", //espace
'L_Inst_versionphp' => "Version de PHP: ", //espace
'L_Inst_repdata' => "Répertoire 'data' accessible en écriture: ", //espace
'L_Inst_OK' => "OK",
'L_Inst_confgen' => "Configuration générale",
'L_Inst_sitenom' => "Titre du site",
'L_Inst_descnom' => "Description du site",
'L_Inst_confadmin' => "Configuration du compte Administrateur",
'L_Inst_roleAdmin' => "Administrateur",
'L_Inst_licence' => "Licence publique générale GNU",
'L_Inst_accepte' => "Oui j'ai lu et j'accepte les termes et conditions d'utilisation",
'L_Inst_succes' => "installé avec succés !",
'L_Inst_effacerinstall' => "N'oubliez pas d'effacer le dossier INSTALL de votre serveur !",
'L_Inst_admineffacer' => "(Possibilité de l'effacer via l'administration du site)",
'L_Inst_accessite' => "Accés au site",
// Installation -> Message d'erreur
'L_Inst_Msg_versionphp' => "Vous ne disposez pas de la version 5 de PHP.",
'L_Inst_Msg_erreur' => "ERREUR",
'L_Inst_Msg_repdata' => "Le dossier DATA n'a pas les droits appropriés. Il est en ", //espace
'L_Inst_Msg_motdepasse' => "Les deux mots de passe ne sont pas identiques !",
'L_Inst_Msg_mauvaisemail' => "Votre adresse email n'est pas conforme.",
'L_Inst_Msg_condition' => "Veuillez accepter les conditions !",
// Mot
'L_Mot_etape' => "Etape",
'L_Mot_preface' => "Préface",
'L_Mot_finalisation' => "Finalisation",
'L_Mot_remerciements' => "Remerciements",
'L_Mot_identifiant' => "Identifiant",
'L_Mot_motdepasse' => "Mot de passe",
'L_Mot_confmotdepasse' => "Confirmer mot de passe",
'L_Mot_mail' => "Email",
'L_Mot_suivant' => "Suivant",
'L_Mot_precedent' => "Précédent",
'login_msg_Layus' => "Vous entrez dans une zone d'accès sécurisée qui ne doit être utilisée uniquement par les personnes autorisées.",
);
?>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<lang>
<title>Français</title>
<abbr>fr</abbr>
</lang>

162
lang/en_US.php Normal file
View file

@ -0,0 +1,162 @@
<?php
$lang = array(
"language" =>"English",
//=== Basic
"footer_version_loved" =>"<i class='icon-code'></i> with <i class='icon-heart'></i> by NNS Production",
//=== Login
"login_Administration" =>"Administration",
"login_SecurePanel" =>"Safety panel",
"login_Username" =>"Username",
"login_Password" =>"Password",
"login_Connexion" =>"Login",
"login_ForgotPassword" =>"Forgot your password?",
"login_Version" =>"version",
"login_msg_Layus" =>"You are entering a secure access area that should only be used by authorized persons.",
"login_sendNewPassword" =>"Send a new password",
//=== Administration
"admin_Dashboard" =>"Dashboard",
"admin_msg_installFolderDeleted" =>"The installation folder and its contents were successfully deleted!",
"admin_msg_installFolderStill" =>"The AEOS installation folder is still online. This folder is now useless and may cause a security risk for your site.",
"admin_input_DeleteFolder" =>"Delete the folder",
"admin_title_welcome" =>"Welcome to your administration area!",
"admin_text_welcome_1" =>"It is from the menus on your left that you will be able to manage your site. From here, you will be able to manage your pages, your modules, your components, your themes, but also to modify the settings. Don't forget to put your site on maintenance before modifying essential things.",
"admin_text_welcome_2" =>"Good luck to you! :)",
"admin_Pages" =>"Pages",
"admin_addPage" =>"Add a page",
"admin_Addons" =>"Modules",
"admin_addAddon" =>"Add a module",
"admin_Plugins" =>"Components",
"admin_addPlugin" =>"Add a component",
"admin_Themes" =>"Themes",
"admin_addTheme" =>"Add a theme",
"admin_Settings" =>"Settings",
"admin_General" =>"General",
"admin_Connexion" =>"Login",
"admin_Maintenance" =>"Maintenance",
"admin_System" =>"System",
"admin_Trashbin" =>"Trash",
"admin_EmptyTrashbin" =>"Empty the bin",
"admin_Logout" =>"Logout",
"admin_input_activated" =>"Activated",
"admin_input_desactivated" =>"Disabled",
"admin_input_standby" =>"Inaccessible",
"admin_updateAvailable" =>"New version available!",
//=== Pages
"admin_page_home" =>"Home page",
"admin_page_pageManagement" =>"Page management",
"admin_page_display" =>"Updated display",
"admin_page_order" =>"Updated order",
"admin_page_cantDeleteHome" =>"You cannot delete the home page.",
"admin_page_confirmDelete" =>"Do you really want to put this page in the recycle bin?",
"admin_page_confimedDelete" =>"The page ".@$tempTrash[1]." has been moved to the trash folder",
//=== Addons
"admin_addons_addonsManagement" =>"Module management",
"admin_addons_fileMustBeZip" =>"The module must be a .zip file",
"admin_addons_alreadyInstalled" =>"Module already installed.",
"admin_addons_installed" =>"Module successfully installed.",
"admin_addons_deleted" =>"Module successfully removed.",
"admin_addons_confirmDelete" =>"Do you really want to remove this module?",
//=== Plugins
"admin_plugins_addonsManagement" =>"Component management",
"admin_plugins_fileMustBeZip" =>"The component must be a .zip file",
"admin_plugins_alreadyInstalled" =>"Component already installed.",
"admin_plugins_installed" =>"Component successfully installed.",
"admin_plugins_deleted" =>"Component successfully removed.",
"admin_plugins_confirmDelete" =>"Do you really want to remove this component?",
"admin_plugins_empty" =>"No component currently installed",
"admin_plugins_display" =>"Successfully modified component",
//=== Themes
"admin_themes_themesManagement" =>"Theme management",
"admin_themes_fileMustBeZip" =>"The theme must be a .zip file",
"admin_themes_deleted" =>"Theme successfully deleted.",
"admin_themes_confirmDelete" =>"Do you really want to delete this theme?",
"admin_themes_changed" =>"Theme successfully modified.",
"admin_themes_alreadyInstalled" =>"Theme already installed.",
"admin_themes_installed" =>"Theme successfully installed.",
//=== Settings
"admin_settings_commonSettings" =>"General Settings",
"admin_settings_siteTitle" =>"Title of the site",
"admin_settings_siteDescription" =>"Description of the site",
"admin_settings_siteFooter" =>"Bottom of the page",
"admin_settings_maintenance" =>"Maintenance",
"admin_settings_maintenanceExplain" =>"Do you want to put the site on maintenance?",
"admin_settings_welcome_title" =>"The settings page...",
"admin_settings_welcomte_text" =>"This is the heart of your site. From the GENERAL, CONNECTION, MAINTENANCE and SYSTEM pages, you can administer the key and technical elements.",
//=== Connexion
"admin_settings_connexionProfil" =>"Profile",
"admin_settings_connexionProfilPicture" =>"Profile picture",
"admin_settings_connexionChangePicture" =>"Change photo",
"admin_settings_connexionOptions" =>"Connection option",
//=== System
"admin_settings_systemSystem" =>"System requirements",
"admin_settings_systemLanguage" =>"Language of the site :",
"admin_settings_systemURLRewriting" =>"Enable URL rewriting",
"admin_settings_systemURLRewritingKey" =>"URL rewrite prefix",
"admin_settings_systemURLRewritingInfo" =>"This option makes URLs easier to read.&#xA;Example:&#xA;domain.com/Page-1-Page Name",
"admin_settings_systemDebugMode" =>"Activating Developer Mode",
"admin_settings_systemDebugModeInfo" =>"This option displays PHP errors and adds new .&#xA;functions for the developer.",
//=== Trash
"admin_settings_trashEmpty" =>"Empty the recycle bin",
"admin_settings_trashHad" =>"Recycle bin management",
"admin_settings_trashRestore" =>"Restore the page",
"admin_settings_trashDelete" =>"Permanently delete the page",
"admin_settings_trashDeleteConfirm" =>"Do you really want to permanently delete this page?",
"admin_settings_trashDeleteOK" =>"File successfully deleted",
"admin_settings_trashInfo" =>"Erased on",
"admin_settings_trashNoFile" =>"The basket is currently empty",
"admin_settings_trashEmptyConfirm" =>"The trash has been emptied properly",
"admin_settings_trashEmptyDeleteConfirm" =>"Do you really want to permanently empty the trash?",
//=== Samples
"text_add" =>"Add",
"text_yes" =>"Yes",
"text_no" =>"No",
"text_version" =>"Version",
"text_author" =>"Author(s)",
"text_choose_file" =>"Choose a file",
"text_install" =>"Install",
"text_errorOccurred" =>"A mistake has been made.",
"admin_fileNotZip" =>"This file is not a zip file.",
"update" =>"Update",
"updateSuccessfull" =>"Successful update.",
"mailAddress" =>"Email address",
"cancel" =>"Cancel",
"mailSentToYou" =>"An email containing a new password has been sent to you.",
"wrongLoginEmail" =>"Incorrect login or email.",
"wrongLoginPassword" =>"Incorrect login or password.",
"firstName" =>"First name",
"lastName" =>"Name",
"language" =>"Language",
//=== Mails
"mail_passwordBack" =>"Password recovery",
"mail_newPassword" =>"This e-mail is from ".@AEOS_NAME." You've requested a new password. \Here's your new password:",
//=== Debug
"debug_Title" =>"Lorem ipsum dolores.",
"debug_Text" =>"Ex his quidam aeternitati se commendari posse per statuas aestimantes eas ardenter adfectant quasi plus praemii de figmentis aereis sensu carentibus adepturi, quam ex conscientia honeste recteque factorum, easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo, cum consiliis armisque regem superasset Antiochum. quam autem sit pulchrum exigua haec spernentem et minima ad ascensus verae gloriae tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato monstravit. qui interrogatus quam ob rem inter multos... statuam non haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam quod est gravius cur inpetraverim mussitare.",
);
?>

162
lang/fr_FR.php Normal file
View file

@ -0,0 +1,162 @@
<?php
$lang = array(
"language" =>"Français",
//=== Basic
"footer_version_loved" =>"<i class='icon-code'></i> with <i class='icon-heart'></i> by NNS Production",
//=== Login
"login_Administration" =>"Administration",
"login_SecurePanel" =>"Panneau de sécurité",
"login_Username" =>"Nom d'utilisateur",
"login_Password" =>"Mot de passe",
"login_Connexion" =>"Connexion",
"login_ForgotPassword" =>"Mot de passe oublié ?",
"login_Version" =>"version",
"login_msg_Layus" =>"Vous entrez dans une zone d'accès sécurisée qui ne doit être utilisée uniquement par les personnes autorisées.",
"login_sendNewPassword" =>"Envoyer un nouveau mot de passe",
//=== Administration
"admin_Dashboard" =>"Dashboard",
"admin_msg_installFolderDeleted" =>"Le dossier d'installation ainsi que son contenu ont été effacés avec succés!",
"admin_msg_installFolderStill" =>"Le dossier d'installation d'AEOS est encore en ligne. Ce dossier est dorénavant inutile et peut causer un risque pour la sécurité de votre site.",
"admin_input_DeleteFolder" =>"Effacer le dossier",
"admin_title_welcome" =>"Bienvenue dans votre espace d'administration !",
"admin_text_welcome_1" =>"C'est à partir des menus sur votre gauche que vous pourrez gérer votre site. À partir d'ici, vous serez dans la possibilité de gérer vos pages, vos modules, vos composants, vos thèmes, mais aussi modifier les réglages. N'oubliez pas de mettre votre site en maintenance avant de modifier des choses essentielles.",
"admin_text_welcome_2" =>"Bonne chance à vous ! :)",
"admin_Pages" =>"Pages",
"admin_addPage" =>"Ajouter une page",
"admin_Addons" =>"Modules",
"admin_addAddon" =>"Ajouter un module",
"admin_Plugins" =>"Composants",
"admin_addPlugin" =>"Ajouter un composant",
"admin_Themes" =>"Thèmes",
"admin_addTheme" =>"Ajouter un thème",
"admin_Settings" =>"Réglages",
"admin_General" =>"Général",
"admin_Connexion" =>"Connexion",
"admin_Maintenance" =>"Maintenance",
"admin_System" =>"Système",
"admin_Trashbin" =>"Corbeille",
"admin_EmptyTrashbin" =>"Vider la corbeille",
"admin_Logout" =>"Déconnexion",
"admin_input_activated" =>"Activé(e)",
"admin_input_desactivated" =>"Désactivé(e)",
"admin_input_standby" =>"Inaccessible",
"admin_updateAvailable" =>"Nouvelle version disponible !",
//=== Pages
"admin_page_home" =>"Page d'accueil",
"admin_page_pageManagement" =>"Gestion des pages",
"admin_page_display" =>"Affichage mis à jour",
"admin_page_order" =>"Ordre mis à jour",
"admin_page_cantDeleteHome" =>"Vous ne pouvez pas supprimer la page d'accueil.",
"admin_page_confirmDelete" =>"Voulez-vous vraiment mettre cette page dans la corbeille ?",
"admin_page_confimedDelete" =>"La page ".@$tempCorbeille[1]." a été déplacé dans le dossier corbeille",
//=== Addons
"admin_addons_addonsManagement" =>"Gestion des modules",
"admin_addons_fileMustBeZip" =>"Le module doit être un fichier .zip",
"admin_addons_alreadyInstalled" =>"Module déjà installé.",
"admin_addons_installed" =>"Module installé avec succès.",
"admin_addons_deleted" =>"Module supprimé avec succés.",
"admin_addons_confirmDelete" =>"Voulez-vous vraiment supprimer ce module ?",
//=== Plugins
"admin_plugins_addonsManagement" =>"Gestion des composants",
"admin_plugins_fileMustBeZip" =>"Le composant doit être un fichier .zip",
"admin_plugins_alreadyInstalled" =>"Composant déjà installé.",
"admin_plugins_installed" =>"Composant installé avec succès.",
"admin_plugins_deleted" =>"Composant supprimé avec succés.",
"admin_plugins_confirmDelete" =>"Voulez-vous vraiment supprimer ce composant ?",
"admin_plugins_empty" =>"Aucun composant installé actuellement",
"admin_plugins_display" =>"Composant modifié avec succès",
//=== Themes
"admin_themes_themesManagement" =>"Gestions des thèmes",
"admin_themes_fileMustBeZip" =>"Le thème doit être un fichier .zip",
"admin_themes_deleted" =>"Thème supprimé avec succés.",
"admin_themes_confirmDelete" =>"Voulez-vous vraiment supprimer ce thème ?",
"admin_themes_changed" =>"Thème modifié avec succés.",
"admin_themes_alreadyInstalled" =>"Thème déjà installé.",
"admin_themes_installed" =>"Thème installé avec succès.",
//=== Settings
"admin_settings_commonSettings" =>"Réglages Généraux",
"admin_settings_siteTitle" =>"Titre du site",
"admin_settings_siteDescription" =>"Description du site",
"admin_settings_siteFooter" =>"Bas de page",
"admin_settings_maintenance" =>"Maintenance",
"admin_settings_maintenanceExplain" =>"Voulez-vous mettre le site en maintenance ?",
"admin_settings_welcome_title" =>"La page de réglages...",
"admin_settings_welcomte_text" =>"C'est ici le coeur même de votre site. A partir des pages GÉNÉRAL, CONNEXION, MAINTENANCE et SYSTEME, vous pouvez administrer les éléments clés et techniques.",
//=== Connexion
"admin_settings_connexionProfil" =>"Profil",
"admin_settings_connexionProfilPicture" =>"Photo de profil",
"admin_settings_connexionChangePicture" =>"Changer la photo",
"admin_settings_connexionOptions" =>"Option de connexion",
//=== System
"admin_settings_systemSystem" =>"Configuration système",
"admin_settings_systemLanguage" =>"Langue du site :",
"admin_settings_systemURLRewriting" =>"Activer la réécriture d'URL",
"admin_settings_systemURLRewritingKey" =>"Préfixe de la réécriture d'URL",
"admin_settings_systemURLRewritingInfo" =>"Cette option permet de rendre les URL plus facile à lire.&#xA;Exemple :&#xA;domaine.com/Page-1-Nom-de-la-Page",
"admin_settings_systemDebugMode" =>"Activation du mode Développeur",
"admin_settings_systemDebugModeInfo" =>"Cette option permet de d'afficher les erreurs PHP et ajoute de nouvelles fonctions.&#xA;Destiné au développeur.",
//=== Trash
"admin_settings_trashEmpty" =>"Vider la corbeille",
"admin_settings_trashHad" =>"Gestion de la corbeille",
"admin_settings_trashRestore" =>"Restaurer la page",
"admin_settings_trashDelete" =>"Supprimer définitivement la page",
"admin_settings_trashDeleteConfirm" =>"Voulez-vous vraiment supprimer définitivement cette page ?",
"admin_settings_trashDeleteOK" =>"Fichier effacé avec succès",
"admin_settings_trashInfo" =>"Effacé(e) le",
"admin_settings_trashNoFile" =>"La corbeille est vide actuellement",
"admin_settings_trashEmptyConfirm" =>"La corbeille a été vidée correctement",
"admin_settings_trashEmptyDeleteConfirm" =>"Voulez-vous vraiment vider définitivement la corbeille ?",
//=== Samples
"text_add" =>"Ajouter",
"text_yes" =>"Oui",
"text_no" =>"Non",
"text_version" =>"Version",
"text_author" =>"Auteur(s)",
"text_choose_file" =>"Choisir un fichier",
"text_install" =>"Installer",
"text_errorOccurred" =>"Une erreur est survenue.",
"admin_fileNotZip" =>"Ce fichier n'est pas un fichier zip.",
"update" =>"Mettre à jour",
"updateSuccessfull" =>"Mise à jour réussie.",
"mailAddress" =>"Adresse email",
"cancel" =>"Annuler",
"mailSentToYou" =>"Un email contenant un nouveau mot de passe vous a été envoyé.",
"wrongLoginEmail" =>"Login ou email incorrect.",
"wrongLoginPassword" =>"Login ou mot de passe incorrect.",
"firstName" =>"Prénom",
"lastName" =>"Nom",
"language" =>"Langue",
//=== Mails
"mail_passwordBack" =>"Récupération de mot de passe",
"mail_newPassword" =>"Ce mail provient de ".@AEOS_NAME." .\n Vous avez fait une demande de nouveau mot de passe. \n\nVoici votre nouveau mot de passe:",
//=== Debug
"debug_Title" =>"Lorem ipsum dolores",
"debug_Text" =>"Ex his quidam aeternitati se commendari posse per statuas aestimantes eas ardenter adfectant quasi plus praemii de figmentis aereis sensu carentibus adepturi, quam ex conscientia honeste recteque factorum, easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo, cum consiliis armisque regem superasset Antiochum. quam autem sit pulchrum exigua haec spernentem et minima ad ascensus verae gloriae tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato monstravit. qui interrogatus quam ob rem inter multos... statuam non haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam quod est gravius cur inpetraverim mussitare.",
);
?>

View file

@ -1 +0,0 @@
deny from all

View file

@ -2,9 +2,134 @@
// Listings des fonctions (librairie) utilisées sur AEOS // Listings des fonctions (librairie) utilisées sur AEOS
// ***************************************************** // *****************************************************
//=== Parse Array and translate into XML file [LIB]
class Array2XML {
private static $xml = null;
private static $encoding = 'UTF-8';
public static function init($version = '1.0', $encoding = 'UTF-8', $format_output = true)
{
self::$xml = new DomDocument($version, $encoding);
self::$xml->formatOutput = $format_output;
self::$encoding = $encoding;
}
public static function &createXML($arr=array(), $node_name='NodeNameDefault')
{
$xml = self::getXMLRoot();
if (count($arr) > 1)
{
$xml->appendChild(self::convert($node_name, $arr));
}
else
{
@$root_element = array_pop(array_keys($arr));
$xml->insertBefore(self::convert($root_element, $arr[$root_element]));
}
self::$xml = null;
return $xml;
}
private static function &convert($node_name, $arr=array())
{
$xml = self::getXMLRoot();
$node = $xml->createElement($node_name);
if(is_array($arr))
{
if(isset($arr['@src']))
{
foreach($arr['@src'] as $key => $value)
{
if(!self::isValidTagName($key))
{
throw new Exception('[Array2XML] Illegal character in attribute name. attribute: '.$key.' in node: '.$node_name);
}
$node->setAttribute($key, self::bool2str($value));
}
unset($arr['@src']);
}
if(isset($arr['#text']))
{
foreach($arr as $key => $value)
{
if(@$key[0]=="@") $node->setAttribute(substr($key, 1), $value);
}
if(isset($arr['@cdata']))
{
$node->setAttribute('cdata', $arr['@cdata']);
$node->appendChild($xml->createCDATASection(self::bool2str($arr['#text'])));
}
else
{
$node->appendChild($xml->createTextNode(self::bool2str($arr['#text'])));
}
unset($arr['#text']);
return $node;
}
}
if(is_array($arr))
{
foreach($arr as $key=>$value)
{
if(!self::isValidTagName($key))
{
throw new Exception('[Array2XML] Illegal character in tag name. tag: '.$key.' in node: '.$node_name);
}
if(is_array($value) && is_numeric(key($value)))
{
foreach($value as $k=>$v)
{
$node->appendChild(self::convert($key, $v));
}
}
else
{
$node->appendChild(self::convert($key, $value));
}
unset($arr[$key]);
}
}
if(!is_array($arr))
{
$node->appendChild($xml->createTextNode(self::bool2str($arr)));
}
return $node;
}
private static function getXMLRoot()
{
if(empty(self::$xml))
{
self::init();
}
return self::$xml;
}
private static function bool2str($v)
{
$v = $v === true ? 'true' : $v;
$v = $v === false ? 'false' : $v;
return $v;
}
private static function isValidTagName($tag)
{
$pattern = '/^[a-z_]+[a-z0-9\:\-\.\_]*[^:]*$/i';
return preg_match($pattern, $tag, $matches) && $matches[0] == $tag;
}
}
/* Class qui permet la lecture des fichiers XML */ /* Class qui permet la lecture des fichiers XML */
class Xml2Array class Xml2Array
{ {
private $xml_dom; private $xml_dom;
private $xml_array; private $xml_array;
private $xml; private $xml;
@ -68,7 +193,8 @@ class Xml2Array
if (!is_array(@$result)) if (!is_array(@$result))
{ {
$result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue, ENT_COMPAT, 'UTF-8'), ENT_COMPAT,'ISO-8859-1'); if (function_exists('html_entity_decode')) $result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue));
else $result['#text'] = htmlentities($dom_element->nodeValue);
} }
if ($dom_element->hasAttributes()) if ($dom_element->hasAttributes())
@ -76,7 +202,8 @@ class Xml2Array
foreach ($dom_element->attributes as $attrib) foreach ($dom_element->attributes as $attrib)
{ {
$prefix = ($attrib->prefix) ? $attrib->prefix.':' : ''; $prefix = ($attrib->prefix) ? $attrib->prefix.':' : '';
$result["@".$prefix.$attrib->nodeName] = $attrib->nodeValue; if (function_exists('html_entity_encode')) $result["@".$prefix.$attrib->nodeName] = html_entity_encode(htmlentities($attrib->nodeValue));
else $result["@".$prefix.$attrib->nodeName] = htmlentities($attrib->nodeValue);
} }
} }
@ -87,7 +214,7 @@ class Xml2Array
{ {
if(empty($this->xml)) if(empty($this->xml))
{ {
echo '<span class="erreur">Aucun fichier XML trouv&eacute;.</span>'; echo '<span class="erreur">Aucun fichier XML trouvé.</span>';
return false; return false;
} }
@ -98,16 +225,17 @@ class Xml2Array
return $this->xml_dom; return $this->xml_dom;
} }
echo '<span class="erreur">Donn&eacute;es XML invalide</span>'; exit; echo '<span class="erreur">Données XML invalide</span>';
} }
} }
// Renvoi le XML en ARRAY // Renvoi le XML en ARRAY
function lecture_xml($config) function lecture_xml($config, $isAdmin = FALSE)
{ {
$converter = new Xml2Array(); $converter = new Xml2Array();
$converter->setXml($config); $converter->setXml($config);
$xml_array = $converter->get_array(); $xml_array = $converter->get_array();
if($isAdmin) unset($xml_array['configuration']['users']); //if not admin
return $xml_array; return $xml_array;
} }
@ -116,28 +244,86 @@ function listing_dossier($folder)
{ {
$dossier = opendir($folder); $dossier = opendir($folder);
$i=0; $i=0;
while ($Fichier = readdir($dossier)) { while ($Fichier = readdir($dossier))
if ($Fichier != "." && $Fichier != "..") { {
if ($Fichier != "." && $Fichier != ".." && $Fichier != ".htaccess" && substr($Fichier, 0, 1) != '.')
{
$array[$i]=$Fichier; $array[$i]=$Fichier;
$i++; $i++;
} }
} }
closedir($dossier);
if(isset($array))
{
@natsort($array); @natsort($array);
return $array; return $array;
closedir($dossier); }
else return FALSE;
}
// Renvoi le listing du dossier PAGE en triant par ordre
function listing_ordre($o = NULL)
{
$a = array();
$l = listing_dossier(DATA_PAGES);
foreach ($l as &$p)
{
$m = lecture_xml(DATA_PAGES.$p);
$a[$m['page']['ordre']['#text']] = $p;
}
switch($o)
{
case 1: krsort($a); break;
case 0:
default: ksort($a); break;
}
return $a;
} }
// Enregistre une donnée dans un XML - Chemin, OldElement, NewElement // Enregistre une donnée dans un XML - Chemin, OldElement, NewElement
function ecriture_xml($a, $b, $c) function ecriture_xml($a, $e)
{ {
$dom = new DomDocument; $arrayXML = lecture_xml($a);
$dom->load($a); $arrayKEY = $e;
$xml = $dom->getElementsByTagName($b); $d = false;
//echo $xml->item(0)->nodeValue;
$titre = $xml->item(0); foreach($arrayKEY as $arrayOptions => $arrayValues) {
$titre->nodeValue = utf8_encode($c); $tmp = &$arrayXML;
//echo $dom->saveXML();
$dom->save($a); foreach(explode('/', $arrayOptions) as $key)
{
if(strpos($key, "#CDATA"))
{
$d = true;
$key = explode("#CDATA", $key);
$key = $key[0];
}
$tmp =& $tmp[$key];
}
if($d)
{
$tmp["@cdata"] = $arrayValues;
//$tmp["#text"] = "<![CDATA[".$arrayValues."]]>";
}
else $tmp["#text"] = $arrayValues;
//$tmp["#text"] = $arrayValues;
}
$savedXML = Array2XML::createXML($arrayXML);
$savedXML->save($a);
} }
// Renvoi une donnée en STRING // Renvoi une donnée en STRING
@ -149,6 +335,73 @@ function donnee_xml($a, $b)
return $xml->item(0)->nodeValue; return $xml->item(0)->nodeValue;
} }
// Renvoi STRING
// Nettoie le nom d'un fichier
// Thanks to Magento script
function cleanName($a)
{
$array = array(
'&amp;' => 'and', '@' => 'at', '©' => 'c', '®' => 'r', 'À' => 'a',
'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'Å' => 'a', 'Æ' => 'ae','Ç' => 'c',
'È' => 'e', 'É' => 'e', 'Ë' => 'e', 'Ì' => 'i', 'Í' => 'i', 'Î' => 'i',
'Ï' => 'i', 'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Õ' => 'o', 'Ö' => 'o',
'Ø' => 'o', 'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'Ý' => 'y',
'ß' => 'ss','à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', 'å' => 'a',
'æ' => 'ae','ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e',
'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ò' => 'o', 'ó' => 'o',
'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u',
'û' => 'u', 'ü' => 'u', 'ý' => 'y', 'þ' => 'p', 'ÿ' => 'y', 'Ā' => 'a',
'ā' => 'a', 'Ă' => 'a', 'ă' => 'a', 'Ą' => 'a', 'ą' => 'a', 'Ć' => 'c',
'ć' => 'c', 'Ĉ' => 'c', 'ĉ' => 'c', 'Ċ' => 'c', 'ċ' => 'c', 'Č' => 'c',
'č' => 'c', 'Ď' => 'd', 'ď' => 'd', 'Đ' => 'd', 'đ' => 'd', 'Ē' => 'e',
'ē' => 'e', 'Ĕ' => 'e', 'ĕ' => 'e', 'Ė' => 'e', 'ė' => 'e', 'Ę' => 'e',
'ę' => 'e', 'Ě' => 'e', 'ě' => 'e', 'Ĝ' => 'g', 'ĝ' => 'g', 'Ğ' => 'g',
'ğ' => 'g', 'Ġ' => 'g', 'ġ' => 'g', 'Ģ' => 'g', 'ģ' => 'g', 'Ĥ' => 'h',
'ĥ' => 'h', 'Ħ' => 'h', 'ħ' => 'h', 'Ĩ' => 'i', 'ĩ' => 'i', 'Ī' => 'i',
'ī' => 'i', 'Ĭ' => 'i', 'ĭ' => 'i', 'Į' => 'i', 'į' => 'i', 'İ' => 'i',
'ı' => 'i', 'IJ' => 'ij','ij' => 'ij','Ĵ' => 'j', 'ĵ' => 'j', 'Ķ' => 'k',
'ķ' => 'k', 'ĸ' => 'k', 'Ĺ' => 'l', 'ĺ' => 'l', 'Ļ' => 'l', 'ļ' => 'l',
'Ľ' => 'l', 'ľ' => 'l', 'Ŀ' => 'l', 'ŀ' => 'l', 'Ł' => 'l', 'ł' => 'l',
'Ń' => 'n', 'ń' => 'n', 'Ņ' => 'n', 'ņ' => 'n', 'Ň' => 'n', 'ň' => 'n',
'ʼn' => 'n', 'Ŋ' => 'n', 'ŋ' => 'n', 'Ō' => 'o', 'ō' => 'o', 'Ŏ' => 'o',
'ŏ' => 'o', 'Ő' => 'o', 'ő' => 'o', 'Œ' => 'oe','œ' => 'oe','Ŕ' => 'r',
'ŕ' => 'r', 'Ŗ' => 'r', 'ŗ' => 'r', 'Ř' => 'r', 'ř' => 'r', 'Ś' => 's',
'ś' => 's', 'Ŝ' => 's', 'ŝ' => 's', 'Ş' => 's', 'ş' => 's', 'Š' => 's',
'š' => 's', 'Ţ' => 't', 'ţ' => 't', 'Ť' => 't', 'ť' => 't', 'Ŧ' => 't',
'ŧ' => 't', 'Ũ' => 'u', 'ũ' => 'u', 'Ū' => 'u', 'ū' => 'u', 'Ŭ' => 'u',
'ŭ' => 'u', 'Ů' => 'u', 'ů' => 'u', 'Ű' => 'u', 'ű' => 'u', 'Ų' => 'u',
'ų' => 'u', 'Ŵ' => 'w', 'ŵ' => 'w', 'Ŷ' => 'y', 'ŷ' => 'y', 'Ÿ' => 'y',
'Ź' => 'z', 'ź' => 'z', 'Ż' => 'z', 'ż' => 'z', 'Ž' => 'z', 'ž' => 'z',
'ſ' => 'z', 'Ə' => 'e', 'ƒ' => 'f', 'Ơ' => 'o', 'ơ' => 'o', 'Ư' => 'u',
'ư' => 'u', 'Ǎ' => 'a', 'ǎ' => 'a', 'Ǐ' => 'i', 'ǐ' => 'i', 'Ǒ' => 'o',
'ǒ' => 'o', 'Ǔ' => 'u', 'ǔ' => 'u', 'Ǖ' => 'u', 'ǖ' => 'u', 'Ǘ' => 'u',
'ǘ' => 'u', 'Ǚ' => 'u', 'ǚ' => 'u', 'Ǜ' => 'u', 'ǜ' => 'u', 'Ǻ' => 'a',
'ǻ' => 'a', 'Ǽ' => 'ae','ǽ' => 'ae','Ǿ' => 'o', 'ǿ' => 'o', 'ə' => 'e',
'Ё' => 'jo','Є' => 'e', 'І' => 'i', 'Ї' => 'i', 'А' => 'a', 'Б' => 'b',
'В' => 'v', 'Г' => 'g', 'Д' => 'd', 'Е' => 'e', 'Ж' => 'zh','З' => 'z',
'И' => 'i', 'Й' => 'j', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n',
'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u',
'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch','Ш' => 'sh','Щ' => 'sch',
'Ъ' => '-', 'Ы' => 'y', 'Ь' => '-', 'Э' => 'je','Ю' => 'ju','Я' => 'ja',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e',
'ж' => 'zh','з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l',
'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',
'ш' => 'sh','щ' => 'sch','ъ' => '-','ы' => 'y', 'ь' => '-', 'э' => 'je',
'ю' => 'ju','я' => 'ja','ё' => 'jo','є' => 'e', 'і' => 'i', 'ї' => 'i',
'Ґ' => 'g', 'ґ' => 'g', 'א' => 'a', 'ב' => 'b', 'ג' => 'g', 'ד' => 'd',
'ה' => 'h', 'ו' => 'v', 'ז' => 'z', 'ח' => 'h', 'ט' => 't', 'י' => 'i',
'ך' => 'k', 'כ' => 'k', 'ל' => 'l', 'ם' => 'm', 'מ' => 'm', 'ן' => 'n',
'נ' => 'n', 'ס' => 's', 'ע' => 'e', 'ף' => 'p', 'פ' => 'p', 'ץ' => 'C',
'צ' => 'c', 'ק' => 'q', 'ר' => 'r', 'ש' => 'w', 'ת' => 't', '™' => 'tm',
);
$a = strtr($a, $array);
$a = preg_replace('/[^a-z0-9\._-]+/i', '-', strtolower($a));
$b = array('\'', '"', '/', ',', '\\', '*', '?', '<', '>', '|', ':');
$c = str_replace($b, "", $a);
return utf8_decode($c);
}
// Upload $fichier, le dézippe dans $dossier et affiche le message $page // Upload $fichier, le dézippe dans $dossier et affiche le message $page
function upload_unzip($fichier, $dossier, $page) function upload_unzip($fichier, $dossier, $page)
{ {
@ -156,15 +409,16 @@ function upload_unzip($fichier, $dossier, $page)
$source = $fichier["tmp_name"]; $source = $fichier["tmp_name"];
$type = $fichier["type"]; $type = $fichier["type"];
if ($type=="application/zip" || $type=="application/x-zip-compressed" || $type=="multipart/x-zip" || $type=="application/x-compressed") if ($type=="application/zip" || $type=="application/x-zip-compressed" || $type=="multipart/x-zip" || $type=="application/x-compressed" || $type=="application/octet-stream")
{ {
$target_path = $dossier.$filename; $target_path = $dossier.$filename;
//echo $target_path;
if(move_uploaded_file($source, $target_path)) if(move_uploaded_file($source, $target_path))
{ {
$nom = basename($filename, ".zip"); $nom = basename($filename, ".zip");
if (is_dir($dossier.$nom)==TRUE) if (is_dir($dossier.$nom)==TRUE)
{ {
echo "<span class='erreur'>Ce ".$page." est d&eacute;j&agrave; install&eacute;.</span>"; $e = 2; //echo "<span class='erreur'>Ce ".$page." est déjà installé.</span>";
unlink($target_path); unlink($target_path);
} }
else else
@ -181,12 +435,17 @@ function upload_unzip($fichier, $dossier, $page)
$contenu = lecture_xml($dossier.$nom."/config.xml"); $contenu = lecture_xml($dossier.$nom."/config.xml");
rename ($dossier.$nom, $dossier.$contenu['configuration']['dossier']['#text']); rename ($dossier.$nom, $dossier.$contenu['configuration']['dossier']['#text']);
// //
echo "<span class='valide'>Votre ".$page." a bien &eacute;t&eacute; install&eacute;.</span>"; $e = 0; //echo "<span class='valide'>Votre ".$page." a bien &eacute;t&eacute; install&eacute;.</span>";
} }
} }
else {echo "<span class='erreur'>Une erreur est survenue. Veuillez recommencer.</span>";} else {$e=1;
//echo "<span class='erreur'>Une erreur est survenue. Veuillez recommencer.</span>";
} }
else {echo "<span class='erreur'>Votre fichier n'est pas un zip.</span>";} }
else {$e=3;
//echo "<span class='erreur'>Votre fichier n'est pas un zip.</span>";
}
return $e;
} }
// Inverse de nl2br by OverSu // Inverse de nl2br by OverSu
@ -227,24 +486,24 @@ function clearFolder($folder)
closedir($dossier); closedir($dossier);
} }
// Génère un mot de passe de $nbr caractères //=== Generate a simple password
function generer_mdp($nbr) //=== IN: Number of character [INT FORMAT]
//=== OUT: Generated password [STRING FORMAT]
//=== VAR: $N number of characters wanted
function generateEasyPassword($N)
{ {
$str = ""; $S = "";
$chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
srand((double)microtime()*1000); srand((double)microtime()*1000);
for($i=0; $i<$N; $i++) {$S .= $C[rand()%strlen($C)];}
for($i=0; $i<$nbr; $i++) { return $S;
$str .= $chaine[rand()%strlen($chaine)];
}
return $str;
} }
// Envoi un mail // Envoi un mail
function sendMail($expediteur, $destinataire, $titre, $messageHTML){ // Ajout du nom de l'expéditeur dans le champs 'FROM' (Optionnel)
function sendMail($expediteur, $destinataire, $titre, $messageHTML, $name = null){
date("D, j M Y H:i:s"); date("D, j M Y H:i:s");
$entete = "From: ".$expediteur."\n"; $entete = ($name == null)? "From: ".$expediteur."\n" : "From: ".$name." <".$expediteur.">\n";
$entete .= "Cc: \n"; $entete .= "Cc: \n";
$entete .= "Reply-To: ".$expediteur." \n"; $entete .= "Reply-To: ".$expediteur." \n";
$entete .= "X-Mailer: PHP/" . phpversion() . "\n" ; $entete .= "X-Mailer: PHP/" . phpversion() . "\n" ;
@ -260,4 +519,291 @@ function checkMail($adresse)
if(preg_match($Syntaxe,$adresse)) return true; if(preg_match($Syntaxe,$adresse)) return true;
else return false; else return false;
} }
// Retourne STRING
// Permet d'afficher le chemin complet du site SANS le fichier à la fin NI le slash. (Ex: http://www.domaine.com/dossier/)
function getBaseScript()
{
$fullPath = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$file = basename ($fullPath);
$dir = dirname($fullPath);
return $dir;
}
// Retourne STRING
// Transforme une chaine en URL valide
function valideURL($s)
{
$p = array("?","!","@","#","%","&amp;","*","(",")","[","]","=","+"," ",";",":","'",".","_", "&");
$s = str_replace($p, "-", $s);
$s = strip_tags($s);
$m = array('@', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
$n = array('a', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y');
while($k = strpos($s, '--')!==FALSE) $s = str_replace("--", "-", $s);
$s = str_replace($m, $n, $s);
return $s;
}
// Retrouve STRING
// Retourne la valeur précédente d'un array
function getValueArray($a, $b, $c)
{
$k = array_flip(array_keys($a));
$v = array_values($a);
return $v[$k[$b]+$c];
}
// Retourne BOOLEAN
// Retourne si il y a une nouvelle version - ou pas.
// Fonction non...fonctionnelle !
function checkVersion()
{
$v = file_get_contents(AEOS_REAL_URL.'/demo/data/config.xml');
if($v['configuration']['update']['#text']==AEOS_VERSION) return FALSE;
else return TRUE;
}
// Retourne STRING
// Retourne STRING sécurisé
function CA20($a)
{
//XSS
$a = strip_tags($a);
$a = htmlspecialchars($a, ENT_QUOTES);
//SQL Injection
$a = htmlentities($a, ENT_QUOTES);
$a = stripslashes($a);
//Remove tabs
//$a = trim(preg_replace('/\t+/', '', $a));
return $a;
}
function checkInstall()
{
global $subdir;
$config = $subdir."data/config.xml";
$install = $subdir."install/index.php";
if (!file_exists($config))
{
if (!file_exists($install)) die("Fichier config.xml et script d'installation introuvable");
else header('Location: '.$install);
}
return TRUE;
}
// Retourne STRING
// Renvoi la valeur LANGUAGE du navigateur web sous forme "fr"
function detectLang()
{
if(isset($_['lang'])) $l = $_['lang'];
else
{
$l = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$l = strtolower(substr(chop($l[0]),0,2));
switch ($l)
{
case 'fr': $l = "fr_FR"; break;
case 'en': $l = "en_US"; break;
default: $l = "fr_FR"; break;
}
}
return $l;
}
// Retourne BOOLEAN
// Vérifie si un champs est vide
function checkEmptyField($a)
{
if (empty($a) || $a=="") return TRUE;
else return FALSE;
}
// Retourne BOOLEAN
// Vérifie si un fichier lang.php est disponible pour le module $a
function checkMultilangModuleAvailable($a)
{
if(isset($a)) if($a==1) return TRUE;
else return FALSE;
}
//Retourne STRING
// Change un paramètre dans l'URL via STRING_QUERY
function changeParameterRequestURL($a, $b)
{
parse_str($a, $d);
foreach($b as $k => $v)
{
$d[$k] = $v;
}
$d = http_build_query($d);
return $d;
}
// Retourne HTML
// Affiche une notification
function showNotification($a, $b, $c = false)
{
$r = "<div class='notification ".$b."'><p>";
if($c) $r.="<i class='".$c."'></i> ";
$r.= $a."</p></div>";
return $r;
}
//=== Ajoute les fichiers necessaires (modules/plugins) dans les endroits appropriés (JS en bas de page et le reste dans le head)
function checkFiles($b, $f, $s = FALSE, $g = FALSE)
{
$b = explode('/', $b);
$d = listing_dossier($s.'plugins');
if(!$d) $d=Array();
$toInclude = array(
"Modules" =>
Array(
"modules",
Array(
$b[0]
),
),
"Themes" =>
Array(
"themes",
Array(
$b[1]
),
),
"Plugins" =>
Array(
"plugins",
$d,
),
);
// if admin, do not load MODULES/THEMES
if($s) unset($toInclude['Modules']);
if($s) unset($toInclude['Themes']);
$return = '';
$returnedPosition = Array();
$returnedOB = Array();
foreach($toInclude as $k => $v)
{
foreach($v[1] as $v1k => $v1v)
{
$a = lecture_xml($s.$v[0].'/'.$v1v.'/config.xml');
// if only one file
if(!isset($a['configuration']['fichiers']['fichier'][0]) && isset($a['configuration']['fichiers']['fichier']))
{
$tmp = $a['configuration']['fichiers']['fichier'];
unset($a['configuration']['fichiers']['fichier']);
$a['configuration']['fichiers']['fichier'][0] = $tmp;
}
$nbr = @count($a['configuration']['fichiers']['fichier']);
$activation = @$a['configuration']['activation']['#text'];
// if admin and plugin not activate
if(($s && @$a['configuration']['edition']['admin']['#text']=="TRUE") || !$s)
{
if((!isset($activation) || $activation==1) && $nbr>0)
{
$c = '<!-- '.$k.'/'.$v1v.' -->'."\r\n\t";
if(isset($a['configuration']['fichiers']))
{
for($i=0; $i<$nbr; $i++)
{
$src = $a['configuration']['fichiers']['fichier'][$i]['#text'];
$type = $a['configuration']['fichiers']['fichier'][$i]['@type'];
$script = $a['configuration']['fichiers']['fichier'][$i]['@script'];
if($f==0)
{
switch($type)
{
case 'css':
if($script=="interne") $c .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$s.$v[0].'/'.$v1v.'/css/'.$src.'" />'."\r\n\t";
else if($script=="externe") $c .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$src.'" />'."\r\n\t";
else if($script=="code") $c .= '<style type="text/css">'.$src.'</style>'."\r\n\t";
break;
}
}
elseif($f==1)
{
switch($type)
{
case 'php':
if($script=="interne")
{
ob_start();
include($s.$v[0].'/'.$v1v.'/inc/'.$src);
$returnedPosition[] = $a['configuration']['edition']['position']['#text'];
$returnedOB[] = ob_get_clean();
}
break;
}
}
elseif($f==2)
{
switch($type)
{
case 'js':
if($script=="interne") $c .= '<script src="'.$s.$v[0].'/'.$v1v.'/js/'.$src.'"></script>'."\r\n\t";
else if($script=="externe") $c .= '<script src="'.$src.'"></script>'."\r\n\t";
else if($script=="code") $c .= '<script type="text/javascript">'.$src.'</script>'."\r\n\t";
break;
}
}
}
}
$return .= $c;
}
}
}
}
return Array("Data" => $return, "OB" => @$returnedOB, "Position" => @$returnedPosition);
}
// Generate all HTML and modify in order to add PHP file via plugins
function insertPlugins($e, $r)
{
// DOM
$dom = new DOMDocument();
$domRedefined = new DOMDocument;
@$dom->loadHtml(utf8_decode($e));
// Remove the DOCTYPE and HTML tag previously generated
$body = $dom->getElementsByTagName('html')->item(0);
foreach ($body->childNodes as $child){
$domRedefined->appendChild($domRedefined->importNode($child, true));
}
for($i=0; $i<count($r['OB']);$i++)
{
$a = 'var'.$i;
// Find Position to insert
$$a = $dom->getElementById($r["Position"][$i]);
// Prepare the HTML to insert
$f = $domRedefined->createDocumentFragment();
$f->appendXML($r["OB"][$i]);
$$a = $domRedefined->getElementById($r["Position"][$i]);
$$a->parentNode->insertBefore($f, $$a);
}
return $domRedefined->saveHTML();
}
?> ?>

View file

@ -1,29 +1,65 @@
<?php <?php
/* *************************************************** /* ***************************************************
Listings des variables les plus utilisées sous AEOS. Listings des variables les plus utilis<EFBFBD>es sous AEOS.
*************************************************** */ ****************************************************/
if(empty($_GET['id'])){$id=1;} else {$id = $_GET['id'];} header("Content-Type: text/html; charset=UTF-8");
$dossier = preg_match("/admin/", $_SERVER['SCRIPT_FILENAME']) ? "../" : ""; date_default_timezone_set("Europe/Paris");
//Check Admin
if (preg_match("/admin/", $_SERVER['SCRIPT_FILENAME']) || preg_match("/install/", $_SERVER['SCRIPT_FILENAME']))
{
$isAdmin = true;
$subdir = "../";
foreach ($_GET as $a => $b){$_[$a] = $b;}
foreach ($_POST as $a => $b){$_[$a] = $b;}
}
else
{
$isAdmin = false;
$subdir = "";
foreach ($_GET as $a => $b){$_[$a] = CA20($b);}
foreach ($_POST as $a => $b){$_[$a] = CA20($b);}
}
// Lecture de toutes les pages
$listing_pages = listing_dossier($subdir.'data/pages/');
$nbPages = count($listing_pages);
// Attribution des IDs
$lecture_pages = array();
for($i=0; $i<$nbPages; ++$i)
{
$allid = explode('#', $listing_pages[$i]);
$lecture_pages[$allid[0]] = substr($allid[0].'#'.$allid[1], 0, -4);
}
// Attribution des ordres
$ordre_pages = array();
for($i=0; $i<$nbPages; ++$i)
{
$lecture_tmp = lecture_xml($subdir.'data/pages/'.$listing_pages[$i]);
$ordre_pages[$lecture_tmp['page']['ordre']['#text']] = $listing_pages[$i];
}
// Lecture des utilisateurs si Admin
if($isAdmin) $config = lecture_xml($subdir.'data/config.xml');
else $config = lecture_xml($subdir.'data/config.xml', TRUE);
// Lecture des fichiers de bases // Lecture des fichiers de bases
$config = lecture_xml($dossier.'data/config.xml'); if (isset($redirect)) $id=$redirect; else if(empty($_GET['id'])) $id=$config['configuration']['accueil']['#text']; else $id = $_GET['id'];
$data_pages = $dossier.'data/pages/'; $page = lecture_xml($subdir.'data/pages/'.$lecture_pages[$id].'.xml');
$page = lecture_xml($dossier.'data/pages/'.$id.'.xml');
// Variables utilisées fréquemments // Lecture des fichiers optionnels des modules
$SITE_NOM = $config['configuration']['nom_site']['#text']; $configModule = lecture_xml($subdir.'modules/'.$page['page']['type']['#text'].'/config.xml');
$SITE_DESC = $config['configuration']['description_site']['#text'];
$SITE_THEME = $config['configuration']['theme']['#text'];
$SITE_MAINTENANCE = $config['configuration']['maintenance']['#text'];
$SITE_MESSAGE = $config['configuration']['message']['#text'];
$SITE_VERSION = $config['configuration']['version']['#text'];
$SITE_FOOTER = $config['configuration']['footer']['#text'];
// Permet le référencement
$PAGE_TITRE = $page['page']['nom']['#text']; unset($page);
// Information administration // Langue
$ADMIN_MDP = $config['configuration']['mdp_admin']['#text']; require_once($subdir.'lang/'.detectLang().".php");
$ADMIN_LOG = $config['configuration']['login_admin']['#text']; //require_once($subdir.'lang/'.AEOS_LANG.".php");
$ADMIN_EMAIL = $config['configuration']['email_admin']['#text'];
// Admin
$admin_url = '';
if (isset($_['tab'])) $tab=$_['tab']; else $tab = "dashboard";
$admin_url .= 'tab='.$tab;
if (isset($_['opt'])) {$opt=$_['opt']; $admin_url .= '&opt='.$opt;} else $opt = NULL;
?> ?>

27
lib/debug.lib.php Normal file
View file

@ -0,0 +1,27 @@
<?php
// Listings des fonctions DEBUG d'AEOS.
// *****************************************************
ini_set('display_errors', 1);
ini_set('log_errors', 1);
//=== Show an array with pre tag
//=== IN: A for what to show [ARRAY FORMAT]
//=== OUT: None [ECHO]
function view($a)
{
print_r("<pre>");
print_r($a);
print_r("</pre>");
}
function debug() {
$trace = debug_backtrace();
$rootPath = dirname(dirname(__FILE__));
$file = str_replace($rootPath, '', $trace[0]['file']);
$line = $trace[0]['line'];
$var = $trace[0]['args'][0];
$lineInfo = sprintf('<div><strong>%s</strong> (line <strong>%s</strong>)</div>', $file, $line);
$debugInfo = sprintf('<pre>%s</pre>', print_r($var, true));
print_r($lineInfo.$debugInfo);
}
?>

0
lib/index.html Normal file
View file

View file

@ -1,14 +1,63 @@
<?php <?php
/* /*
Fichier libraire contenant toutes les constantes et/ou variables Fichier libraire contenant toutes les constantes et/ou variables
permettant de gérer AEOS. permettant de g<EFBFBD>rer AEOS.
*/ */
define('SECURITY', FALSE);
// Variables utilis<69>es fr<66>quemments
define('AEOS_NAME', $config['configuration']['nom_site']['#text']);
define('AEOS_DESC', $config['configuration']['description_site']['#text']);
define('AEOS_THEME', $config['configuration']['theme']['#text']);
define('AEOS_MODULE', $configModule['configuration']['dossier']['#text']);
define('AEOS_MAINTENANCE', $config['configuration']['maintenanceMode']['#text']==='TRUE'?TRUE:FALSE);
define('AEOS_MAINTMSG', $config['configuration']['maintenanceMessage']['#text']);
define('AEOS_FOOTER', $config['configuration']['footer']['#text']);
// Repère si oui nous sommes dans l'Administration // Permet le référencement
include('config.lib.php'); define('AEOS_TITLE', $page['page']['nom']['#text']);
$DATA_PAGES = $data_pages; // Information administration
$execTime = microtime(true); if($isAdmin && isset($_SESSION['_LOGIN']))
{
//define('AEOS_PASSWORD', $_SESSION['password']);
define('AEOS_LOGIN', $_SESSION['_LOGIN']);
define('AEOS_MAIL', $config['configuration']['users'][$_SESSION['_LOGIN']]['email']['#text']);
if(!isset($config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']) || $config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']=="")
define('AEOS_AVATAR', "themes/system/images/avatar.png");
else
define('AEOS_AVATAR', $config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']);
if(@empty($_GET['pid'])){$pid=1;} else {$pid = $_GET['pid'];} define('AEOS_FIRSTNAME', $config['configuration']['users'][$_SESSION['_LOGIN']]['firstname']['#text']);
define('AEOS_LASTNAME', $config['configuration']['users'][$_SESSION['_LOGIN']]['lastname']['#text']);
define('AEOS_ROLE', $config['configuration']['users'][$_SESSION['_LOGIN']]['role']['#text']);
define('AEOS_USER_LANG', $config['configuration']['users'][$_SESSION['_LOGIN']]['language']['#text']);
define('AEOS_LANG', $config['configuration']['lang']['#text']);
}
// Variable d'URL Rewriting
define('AEOS_URL', $_SERVER['SERVER_NAME']);
//define('AEOS_LANG', $config['configuration']['lang']['#text']);
define('AEOS_VERSION', $config['configuration']['version']['#text']);
define('AEOS_BRANCH', $config['configuration']['branch']['#text']);
define('AEOS_CODENAME', $config['configuration']['codename']['#text']);
define('AEOS_UPDATE', $config['configuration']['update']['#text']);
define('AEOS_PATH', dirname($_SERVER["REQUEST_URI"]));
define('AEOS_REWMODE', $config['configuration']['urlrewriting']['#text']==='TRUE'?TRUE:FALSE);
define('AEOS_REWKEY', $config['configuration']['urlrewriting_key']['#text']);
define('HOME_PAGE', $config['configuration']['accueil']['#text']);
define('DATA_PAGES', $subdir.'data/pages/');
define('DATA_TRASH', $subdir.'data/corbeille/');
define('LAST_KEY', max(array_keys($lecture_pages))+1);
define('LAST_ORDER', max(array_keys($ordre_pages))+1);
define('DEBUG_MODE', $config['configuration']['debugMode']['#text']==='TRUE'?TRUE:FALSE);
('DEBUG_MODE')?include($subdir.'lib/debug.lib.php'):FALSE;
define('AEOS_REAL_URL', 'https://nnsprod.com/aeos');
define('URL_CHECK_UPDATE', AEOS_REAL_URL.'/update/notifications.xml');
//Admin
//define('ADMIN_REQUEST_URL', 'index.php?'.$_SERVER["QUERY_STRING"]);
define('ADMIN_REQUEST_URL', 'index.php?'.$admin_url);
unset($page);
?> ?>

View file

@ -1,26 +1,24 @@
<?php <?php
// Script TinyEditor // Script owEditor/pell
if (isset($_['input']))
{
$currentContent=stripslashes($_['input']);
}
else
{
$currentContent=@$page['page']['contenu']['#text'];
}
?> ?>
<script type="text/javascript"> <script type="text/javascript">
new TINY.editor.edit('editor',{ var editor = window.pell.init({
id:'input', element: document.getElementById('editor'),
width:700, defaultParagraphSeparator: 'p',
height:175,
cssclass:'te', onChange: function (html) {
controlclass:'tecontrol', document.getElementById('html-output').textContent = html
rowclass:'teheader', },
dividerclass:'tedivider', })
controls:['bold','italic','underline','strikethrough','|','subscript','superscript','|', document.getElementById("pell-id").innerHTML = `<?php echo $currentContent; ?>`;
'orderedlist','unorderedlist','|','outdent','indent','|','leftalign',
'centeralign','rightalign','blockjustify','|','unformat','|','undo','redo','n',
'font','size','style','|','image','hr','link','unlink','|','cut','copy','paste','print'],
footer:true,
fonts:['Verdana','Arial','Georgia','Trebuchet MS'],
xhtml:true,
cssfile:'style.css',
bodyid:'editor',
footerclass:'tefooter',
toggle:{text:'source',activetext:'wysiwyg',cssclass:'toggle'},
resize:{cssclass:'resize'}
});
</script> </script>

View file

@ -1,227 +0,0 @@
Version 3, du 29 juin 2007.
Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org
Chacun est autorisé à copier et distribuer des copies conformes de ce document de licence, mais toute modification en est proscrite.
Préambule
La Licence Publique Générale GNU (“GNU General Public License”) est une licence libre, en “copyleft”, destinée aux œuvres logicielles et dautres types dœuvres.
Les licences de la plupart des œuvres logicielles et autres œuvres de la pratique sont conçues pour vous ôter votre liberté de partager et modifier ces œuvres. À linverse, la Licence Publique Générale GNU a pour but de garantir votre liberté de partager et changer toutes les versions dun programme — afin dassurer quil restera libre pour tous les utilisateurs. Nous, la Free Software Foundation, utilisons la Licence Publique Générale GNU pour la plupart de nos logiciels ; cela sapplique aussi à toute autre œuvre éditée de cette façon par ses auteurs. Vous pouvez, vous aussi, lappliquer à vos propres programmes.
Quand nous parlons de logiciel libre (“free”), nous nous référons à la liberté (“freedom”), pas au prix. Nos Licences Publiques Générales sont conçues pour assurer que vous ayez la liberté de distribuer des copies de logiciel libre (et le facturer si vous le souhaitez), que vous receviez le code source ou pouviez lobtenir si vous le voulez, que vous pouviez modifier le logiciel ou en utiliser toute partie dans de nouveaux logiciels libres, et que vous sachiez que vous avez le droit de faire tout ceci.
Pour protéger vos droits, nous avons besoin dempêcher que dautres vous restreignent ces droits ou vous demande de leur abandonner ces droits. En conséquence, vous avez certaines responsabilités si vous distribuez des copies dun tel programme ou si vous le modifiez : les responsabilités de respecter la liberté des autres.
Par exemple, si vous distribuez des copies dun tel programme, que ce soit gratuit ou contre un paiement, vous devez accorder aux Destinataires les mêmes libertés que vous avez reçues. Vous devez aussi vous assurer queux aussi reçoivent ou peuvent recevoir son code source. Et vous devez leur montrer les termes de cette licence afin quils connaissent leurs droits.
Les développeurs qui utilisent la GPL GNU protègent vos droits en deux étapes : (1) ils affirment leur droits dauteur (“copyright”) sur le logiciel, et (2) vous accordent cette Licence qui vous donne la permission légale de le copier, le distribuer et/ou le modifier.
Pour la protection des développeurs et auteurs, la GPL stipule clairement quil ny a pas de garantie pour ce logiciel libre. Aux fins à la fois des utilisateurs et auteurs, la GPL requière que les versions modifiées soient marquées comme changées, afin que leurs problèmes ne soient pas attribués de façon erronée aux auteurs des versions précédentes.
Certains dispositifs sont conçus pour empêcher laccès des utilisateurs à linstallation ou lexécution de versions modifiées du logiciel à lintérieur de ces dispositifs, alors que les fabricants le peuvent. Ceci est fondamentalement incompatible avec le but de protéger la liberté des utilisateurs de modifier le logiciel. Laspect systématique de tels abus se produit dans le secteur des produits destinés aux utilisateurs individuels, ce qui est précisément ce qui est le plus inacceptable. Aussi, nous avons conçu cette version de la GPL pour prohiber cette pratique pour ces produits. Si de tels problèmes surviennent dans dautres domaines, nous nous tenons prêt à étendre cette restriction à ces domaines dans de futures versions de la GPL, autant quil sera nécessaire pour protéger la liberté des utilisateurs.
Finalement, chaque programme est constamment menacé par les brevets logiciels. Les États ne devraient pas autoriser de tels brevets à restreindre le développement et lutilisation de logiciels libres sur des ordinateurs dusage général ; mais dans ceux qui le font, nous voulons spécialement éviter le danger que les brevets appliqués à un programme libre puisse le rendre effectivement propriétaire. Pour empêcher ceci, la GPL assure que les brevets ne peuvent être utilisés pour rendre le programme non-libre.
Les termes précis et conditions concernant la copie, la distribution et la modification suivent.
TERMES ET CONDITIONS
Article 0. Définitions.
« Cette Licence » se réfère à la version 3 de la “GNU General Public License” (le texte original en anglais).
« Droit dAuteur » signifie aussi les droits du “copyright” ou voisins qui sappliquent à dautres types dœuvres, tels que celles sur les masques de semi-conducteurs.
« Le Programme » se réfère à toute œuvre qui peut être sujette au Droit dAuteur (“copyright”) et dont les droits dutilisation sont concédés en vertu de cette Licence. Chacun des Licenciés, à qui cette Licence est concédée, est désigné par « vous. » Les « Licenciés » et les « Destinataires » peuvent être des personnes physiques ou morales (individus ou organisations).
« Modifier » une œuvre signifie en obtenir une copie et adapter tout ou partie de lœuvre dune façon qui nécessite une autorisation dun titulaire de Droit dAuteur, autre que celle permettant den produire une copie conforme. Lœuvre résultante est appelée une « version modifiée » de la précédente œuvre, ou une œuvre « basée sur » la précédente œuvre.
Une « Œuvre Couverte » signifie soit le Programme non modifié soit une œuvre basée sur le Programme.
« Propager » une œuvre signifie faire quoi que ce soit avec elle qui, sans permission, vous rendrait directement ou indirectement responsable dun délit de contrefaçon suivant les lois relatives au Droit dAuteur, à lexception de son exécution sur un ordinateur ou de la modification dune copie privée. La propagation inclue la copie, la distribution (avec ou sans modification), la mise à disposition envers le public, et aussi d'autres activités dans certains pays.
« Acheminer » une œuvre signifie tout moyen de propagation de celle-ci qui permet à dautres parties den réaliser ou recevoir des copies. La simple interaction dun utilisateur à travers un réseau informatique, sans transfert effectif dune copie, ne constitue pas un acheminement.
Une interface utilisateur interactive affiche des « Notices Légales Appropriées » quand elle comprend un dispositif convenable, bien visible et évident qui (1) affiche une notice appropriée sur les droits dauteur et (2) informe lutilisateur quil ny a pas de garantie pour lœuvre (sauf si des garanties ont été fournies hors du cadre de cette Licence), que les licenciés peuvent acheminer lœuvre sous cette Licence, et comment consulter une copie de cette Licence. Si linterface présente une liste de commandes utilisateur ou doptions, tel quun menu, un élément évident dans la liste présentée remplit ce critère.
Article 1. Code source.
Le « code source » dune œuvre signifie la forme préférée de lœuvre qui permet ou facilite les modifications de celle-ci. Le « code objet » dune œuvre signifie toute forme de lœuvre qui nen est pas le code source.
Une « Interface Standard » signifie une interface qui est soit celle dune norme officielle définie par un organisme de normalisation reconnu ou, dans le cas des interfaces spécifiées pour un langage de programmation particulier, une interface largement utilisée parmi les développeurs qui travaillent dans ce langage.
Les « Bibliothèques Système » dune œuvre exécutable incluent tout ce qui, en dehors de lœuvre dans son ensemble, (a) est inclus dans la forme usuelle de paquetage dun Composant Majeur mais ne fait pas partie de ce Composant Majeur et (b) sert seulement à permettre lutilisation de lœuvre avec ce Composant Majeur ou à mettre en œuvre une Interface Standard pour laquelle une mise en œuvre est disponible au public sous forme de code source ; un « Composant Majeur » signifie, dans ce contexte, un composant majeur essentiel (noyau, système de fenêtrage, etc.) du système dexploitation (le cas échéant) dun système sur lequel lœuvre exécutable fonctionne, ou bien un compilateur utilisé pour produire le code objet de lœuvre, ou un interprète de code objet utilisé pour exécuter celui-ci.
Le « Source Correspondant » dune œuvre sous forme de code objet signifie lensemble des codes sources nécessaires pour générer, installer et (dans le cas dune œuvre exécutable) exécuter le code objet et modifier lœuvre, y compris les scripts pour contrôler ces activités. Cependant, cela ninclue pas les Bibliothèques Système de lœuvre, ni les outils dusage général ou les programmes libres généralement disponibles qui peuvent être utilisés sans modification pour achever ces activités mais ne sont pas partie de cette œuvre. Par exemple le Source Correspondant inclut les fichiers de définition dinterfaces associés aux fichiers sources de lœuvre, et le code source des bibliothèques partagées et des sous-routines liées dynamiquement, pour lesquelles lœuvre est spécifiquement conçue pour les requérir via, par exemple, des communications de données ou contrôles de flux internes entre ces sous-programmes et dautres parties de lœuvre.
Le Source Correspondant na pas besoin dinclure tout ce que les utilisateurs peuvent regénérer automatiquement à partir dautres parties du Source Correspondant.
Le Source Correspondant pour une œuvre sous forme de code source est cette même œuvre.
Article 2. Permissions de base.
Tous les droits accordés suivant cette Licence le sont jusquau terme des Droits dAuteur (“copyright”) sur le Programme, et sont irrévocables pourvu que les conditions établies soient remplies. Cette Licence affirme explicitement votre permission illimitée dexécuter le Programme non modifié. La sortie produite par lexécution dune Œuvre Couverte nest couverte par cette Licence que si cette sortie, étant donné leur contenu, constitue une Œuvre Couverte. Cette Licence reconnait vos propres droits dusage raisonnable (“fair use” en législation des États-Unis dAmérique) ou autres équivalents, tels quils sont pourvus par la loi applicable sur le Droit dAuteur (“copyright”).
Vous pouvez créer, exécuter et propager sans condition des Œuvres Couvertes que vous nacheminez pas, aussi longtemps que votre licence demeure en vigueur. Vous pouvez acheminer des Œuvres Couvertes à dautres personnes dans le seul but de leur faire réaliser des modifications à votre usage exclusif, ou pour quils vous fournissent des facilités vous permettant dexécuter ces œuvres, pourvu que vous vous conformiez aux termes de cette Licence lors de lacheminement de tout matériel dont vous ne contrôlez pas le Droit dAuteur (“copyright”). Ceux qui, dès lors, réalisent ou exécutent pour vous les Œuvres Couvertes ne doivent alors le faire quexclusivement pour votre propre compte, sous votre direction et votre contrôle, suivant des termes qui leur interdisent de réaliser, en dehors de leurs relations avec vous, toute copie de votre matériel soumis au Droit dAuteur.
Lacheminement dans toutes les autres circonstances nest permis que selon les conditions établies ci-dessous. La concession de sous-licences nest pas autorisé ; larticle 10 rend cet usage non nécessaire.
Article 3. Protection des droits légaux des utilisateurs envers les lois anti-contournement.
Aucune Œuvre Couverte ne doit être vue comme faisant partie dune mesure technologique effective selon toute loi applicable remplissant les obligations prévues à larticle 11 du traité international sur le droit dauteur adopté à lOMPI le 20 décembre 1996, ou toutes lois similaires qui prohibent ou restreignent le contournement de telles mesures.
Si vous acheminez une Œuvre Couverte, vous renoncez à tout pouvoir légal dinterdire le contournement des mesures technologiques dans tous les cas où un tel contournement serait effectué en exerçant les droits prévus dans cette Licence pour cette Œuvre Couverte, et vous déclarez rejeter toute intention de limiter lopération ou la modification de lŒuvre, en tant que moyens pour renforcer, à lencontre des utilisateurs de cette Œuvre, vos droits légaux ou ceux de tierces parties dinterdire le contournement desdites mesures technologiques.
Article 4. Acheminement des copies conformes.
Vous pouvez acheminer des copies conformes du code source du Programme tel que vous lavez reçu, sur nimporte quel support, pourvu que vous publiiez scrupuleusement et de façon appropriée sur chaque copie une notice de Droit dAuteur appropriée ; gardez intactes toutes les notices établissant que cette Licence et tous les termes additionnels non permissifs ajoutés en accord avec larticle 7 sappliquent à ce code ; et donnez à chacun des Destinataires une copie de cette Licence en même temps que le Programme.
Vous pouvez facturer un prix quelconque, y compris gratuit, pour chacune des copies que vous acheminez, et vous pouvez offrir une protection additionnelle de support ou de garantie en échange dun paiement.
Article 5. Acheminement des versions sources modifiées.
Vous pouvez acheminer une œuvre basée sur le Programme, ou bien les modifications pour le produire à partir du Programme, sous la forme de code source suivant les termes de larticle 4, pourvu que vous satisfassiez aussi à chacune des conditions requises suivantes :
a) Lœuvre doit comporter des notices évidentes établissant que vous lavez modifiée et donnant la date correspondante.
b) Lœuvre doit comporter des notices évidentes établissant quelle est éditée selon cette Licence et les conditions ajoutées daprès larticle 7. Cette obligation vient modifier lobligation de larticle 4 de « garder intactes toutes les notices. »
c) Vous devez licencier lœuvre entière, comme un tout, suivant cette Licence à quiconque entre en possession dune copie. Cette Licence sappliquera en conséquence, avec les termes additionnels applicables prévus par larticle 7, à la totalité de lœuvre et chacune de ses parties, indépendamment de la façon dont elles sont empaquetées. Cette licence ne donne aucune permission de licencier lœuvre dune autre façon, mais elle ninvalide pas une telle permission que vous auriez reçue séparément.
d) Si lœuvre a des interfaces utilisateurs interactives, chacune doit afficher les Notices Légales Appropriées ; cependant si le Programme a des interfaces qui naffichent pas les Notices Légales Appropriées, votre œuvre na pas à les modifier pour quelles les affichent.
Une compilation dune Œuvre Couverte avec dautres œuvres séparées et indépendantes, qui ne sont pas par leur nature des extensions de lŒuvre Couverte, et qui ne sont pas combinés avec elle de façon à former un programme plus large, dans ou sur un volume de stockage ou un support de distribution, est appelé un « agrégat » si la compilation et son Droit dAuteur résultant ne sont pas utilisés pour limiter laccès ou les droits légaux des utilisateurs de la compilation en deçà de ce que permettent les œuvres individuelles. Linclusion dune Œuvre Couverte dans un agrégat ne cause pas lapplication de cette Licence aux autres parties de lagrégat.
Article 6. Acheminement des formes non sources.
Vous pouvez acheminer sous forme de code objet une Œuvre Couverte suivant les termes des articles 4 et 5, pourvu que vous acheminiez également suivant les termes de cette Licence le Source Correspondant lisible par une machine, dune des façons suivantes :
a) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné par le Source Correspondant fixé sur un support physique durable habituellement utilisé pour les échanges de logiciels.
b) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné dune offre écrite, valide pour au moins trois années et valide pour aussi longtemps que vous fournissez des pièces de rechange ou un support client pour ce modèle de produit, afin de donner à quiconque possède le code objet soit (1) une copie du Source Correspondant à tout logiciel dans ce produit qui est couvert par cette Licence, sur un support physique durable habituellement utilisé pour les échanges de logiciels, pour un prix non supérieur au coût raisonnable de la réalisation physique de lacheminement de la source, ou soit (2) un accès permettant de copier le Source Correspondant depuis un serveur réseau sans frais.
c) Acheminer des copies individuelles du code objet avec une copie de loffre écrite de fournir le Source Correspondant. Cette alternative est permise seulement occasionnellement et non-commercialement, et seulement si vous avez reçu le code objet avec une telle offre, en accord avec larticle 6 alinéa b.
d) Acheminer le code objet en offrant un accès depuis un emplacement désigné (gratuit ou contre facturation) et offrir un accès équivalent au Source Correspondant de la même façon via le même emplacement et sans facturation supplémentaire. Vous navez pas besoin dobliger les Destinataires à copier le Source Correspondant en même temps que le code objet. Si lemplacement pour copier le code objet est un serveur réseau, le Source Correspondant peut être sur un serveur différent (opéré par vous ou par un tiers) qui supporte des facilités équivalentes de copie, pourvu que vous mainteniez des directions claires à proximité du code objet indiquant où trouver le Source Correspondant. Indépendamment de quel serveur héberge le Source Correspondant, vous restez obligé de vous assurer quil reste disponible aussi longtemps que nécessaire pour satisfaire à ces obligations.
e) Acheminer le code objet en utilisant une transmission dégal-à-égal, pourvu que vous informiez les autres participants sur lendroit où le code objet et le Source Correspondant de lœuvre sont offerts sans frais au public général suivant larticle 6 alinéa d.
Une portion séparable du code objet, dont le code source est exclu du Source Correspondant en tant que Bibliothèque Système, na pas besoin dêtre inclu dans lacheminement de lœuvre sous forme de code objet.
Un « Produit Utilisateur » est soit (1) un « Produit de Consommation, » ce qui signifie toute propriété personnelle tangible normalement utilisée à des fins personnelles, familiales ou relatives au foyer, soit (2) toute chose conçue ou vendue pour lincorporation dans un lieu dhabitation. Pour déterminer si un produit constitue un Produit de Consommation, les cas ambigus sont résolus en fonction de la couverture. Pour un produit particulier reçu par un utilisateur particulier, lexpression « normalement utilisée » ci-avant se réfère à une utilisation typique ou lusage commun de produits de même catégorie, indépendamment du statut de cet utilisateur particulier ou de la façon spécifique dont cet utilisateur particulier utilise effectivement ou sattend lui-même ou est attendu à utiliser ce produit. Un produit est un Produit de Consommation indépendamment du fait que ce produit a ou na pas dutilisations substantielles commerciales, industrielles ou hors Consommation, à moins que de telles utilisations représentent le seul mode significatif dutilisation du produit.
Les « Informations dInstallation » dun Produit Utilisateur signifient toutes les méthodes, procédures, clés dautorisation ou autres informations requises pour installer et exécuter des versions modifiées dune Œuvre Couverte dans ce Produit Utilisateur à partir dune version modifiée de son Source Correspondant. Les informations qui suffisent à assurer la continuité de fonctionnement du code objet modifié ne doivent en aucun cas être empêchées ou interférées du seul fait quune modification a été effectuée.
Si vous acheminez le code objet dune Œuvre Couverte dans, ou avec, ou spécifiquement pour lutilisation dans, un Produit Utilisateur et si lacheminement se produit en tant quélément dune transaction dans laquelle le droit de possession et dutilisation du Produit Utilisateur est transféré au Destinataire définitivement ou pour un terme fixé (indépendamment de la façon dont la transaction est caractérisée), le Source Correspondant acheminé selon cet article-ci doit être accompagné des Informations dInstallation. Mais cette obligation ne sapplique pas si ni vous ni aucune tierce partie ne détient la possibilité dinstaller un code objet modifié sur le Produit Utilisateur (par exemple, lœuvre a été installée en mémoire morte).
Lobligation de fournir les Informations dInstallation ninclue pas celle de continuer à fournir un service de support, une garantie ou des mises à jour pour une œuvre qui a été modifiée ou installée par le Destinataire, ou pour le Produit Utilisateur dans lequel elle a été modifiée ou installée. Laccès à un réseau peut être rejeté quand la modification elle-même affecte matériellement et défavorablement les opérations du réseau ou viole les règles et protocoles de communication au travers du réseau.
Le Source Correspondant acheminé et les Informations dInstallation fournies, en accord avec cet article, doivent être dans un format publiquement documenté (et dont une implémentation est disponible auprès du public sous forme de code source) et ne doit nécessiter aucune clé ou mot de passe spécial pour le dépaquetage, la lecture ou la copie.
Article 7. Termes additionnels.
Les « permissions additionnelles » désignent les termes qui supplémentent ceux de cette Licence en émettant des exceptions à lune ou plusieurs de ses conditions. Les permissions additionnelles qui sont applicables au Programme entier doivent être traitées comme si elles étaient incluent dans cette Licence, dans les limites de leur validité suivant la loi applicable. Si des permissions additionnelles sappliquent seulement à une partie du Programme, cette partie peut être utilisée séparément suivant ces permissions, mais le Programme tout entier reste gouverné par cette Licence sans regard aux permissions additionnelles.
Quand vous acheminez une copie dune Œuvre Couverte, vous pouvez à votre convenance ôter toute permission additionnelle de cette copie, ou de nimporte quelle partie de celui-ci. (Des permissions additionnelles peuvent être rédigées de façon à requérir leur propre suppression dans certains cas où vous modifiez lœuvre.) Vous pouvez placer les permissions additionnelles sur le matériel acheminé, ajoutées par vous à une Œuvre Couverte pour laquelle vous avez ou pouvez donner les permissions de Droit dAuteur (“copyright”) appropriées.
Nonobstant toute autre clause de cette Licence, pour tout constituant que vous ajoutez à une Œuvre Couverte, vous pouvez (si autorisé par les titulaires de Droit dAuteur pour ce constituant) supplémenter les termes de cette Licence avec des termes :
a) qui rejettent la garantie ou limitent la responsabilité de façon différente des termes des articles 15 et 16 de cette Licence ; ou
b) qui requièrent la préservation de notices légales raisonnables spécifiées ou les attributions dauteur dans ce constituant ou dans les Notices Légales Appropriées affichées par les œuvres qui le contiennent ; ou
c) qui prohibent la représentation incorrecte de lorigine de ce constituant, ou qui requièrent que les versions modifiées dun tel constituant soient marquées par des moyens raisonnables comme différentes de la version originale ; ou
d) qui limitent lusage à but publicitaire des noms des concédants de licence et des auteurs du constituant ; ou
e) qui refusent à accorder des droits selon la législation relative aux marques commerciales, pour lutilisation dans des noms commerciaux, marques commerciales ou marques de services ; ou
f) qui requièrent lindemnisation des concédants de licences et auteurs du constituant par quiconque achemine ce constituant (ou des versions modifiées de celui-ci) en assumant contractuellement la responsabilité envers le Destinataire, pour toute responsabilité que ces engagements contractuels imposent directement à ces octroyants de licences et auteurs.
Tous les autres termes additionnels non permissifs sont considérés comme des « restrictions avancées » dans le sens de larticle 10. Si le Programme tel que vous lavez reçu, ou toute partie de celui-ci, contient une notice établissant quil est gouverné par cette Licence en même temps quun terme qui est une restriction avancée, vous pouvez ôter ce terme. Si un document de licence contient une restriction avancée mais permet la reconcession de licence ou lacheminement suivant cette Licence, vous pouvez ajouter une Œuvre Couverte constituante gouvernée par les termes de ce document de licence, pourvu que la restriction avancée ne survit pas à une telle cession de licence ou un tel acheminement.
Si vous ajoutez des termes à une Œuvre Couverte en accord avec cet article, vous devez placer, dans les fichiers sources appropriés, une déclaration des termes additionnels qui sappliquent à ces fichiers, ou une notice indiquant où trouver les termes applicables.
Les termes additionnels, quils soient permissifs ou non permissifs, peuvent être établis sous la forme dune licence écrite séparément, ou établis comme des exceptions ; les obligations ci-dessus sappliquent dans chacun de ces cas.
Article 8. Terminaison.
Vous ne pouvez ni propager ni modifier une Œuvre Couverte autrement que suivant les termes de cette Licence. Toute autre tentative de le propager ou le modifier est nulle et terminera automatiquement vos droits selon cette Licence (y compris toute licence de brevet accordée selon le troisième paragraphe de larticle 11).
Cependant, si vous cessez toute violation de cette Licence, alors votre licence depuis un titulaire de Droit dAuteur (“copyright”) est réinstaurée (a) à titre provisoire à moins que et jusquà ce que le titulaire de Droit dAuteur termine finalement et explicitement votre licence, et (b) de façon permanente si le titulaire de Droit dAuteur ne parvient pas à vous notifier de la violation par quelque moyen raisonnable dans les soixante (60) jours après la cessation.
De plus, votre licence depuis un titulaire particulier de Droit dAuteur est réinstaurée de façon permanente si ce titulaire vous a notifié de la violation par quelque moyen raisonnable, et si cest la première fois que vous avez reçu une notification de violation de cette Licence (pour une œuvre quelconque) depuis ce titulaire de Droit dAuteur, et si vous résolvez la violation dans les trente (30) jours qui suivent votre réception de la notification.
La terminaison de vos droits suivant cette section ne terminera pas les licences des parties qui ont reçu des copies ou droits de votre part suivant cette Licence. Si vos droits ont été terminés et non réinstaurés de façon permanente, vous nêtes plus qualifié à recevoir de nouvelles licences pour les mêmes constituants selon larticle 10.
Article 9. Acceptation non requise pour obtenir des copies.
Vous nêtes pas obligé daccepter cette licence afin de recevoir ou exécuter une copie du Programme. La propagation asservie dune Œuvre Couverte qui se produit simplement en conséquence dune transmission dégal-à-égal pour recevoir une copie ne nécessite pas lacceptation. Cependant, rien dautre que cette Licence ne vous accorde la permission de propager ou modifier une quelconque Œuvre Couverte. Ces actions enfreignent le Droit dAuteur si vous nacceptez pas cette Licence. Par conséquent, en modifiant ou propageant une Œuvre Couverte, vous indiquez votre acceptation de cette Licence pour agir ainsi.
Article 10. Cession automatique de Licence aux Destinataires et intermédiaires.
Chaque fois que vous acheminez une Œuvre Couverte, le Destinataire reçoit automatiquement une licence de la part des concédants originaux, pour exécuter, modifier et propager cette œuvre, suivant les termes de cette Licence. Vous nêtes pas responsable du renforcement de la conformation des tierces parties aux termes de cette Licence.
Une « transaction dentité » désigne une transaction qui transfère le contrôle dune organisation, ou de substantiellement tous ses actifs, ou la subdivision dune organisation, ou la fusion de plusieurs organisations. Si la propagation dune Œuvre Couverte résulte dune transaction dentité, chaque partie à cette transaction qui reçoit une copie de lœuvre reçoit aussi les licences pour lœuvre que le prédécesseur intéressé à cette partie avait ou pourrait donner selon le paragraphe précédent, plus un droit de possession du Source Correspondant de cette œuvre depuis le prédécesseur intéressé si ce prédécesseur en dispose ou peut lobtenir par des efforts raisonnables.
Vous ne pouvez imposer aucune restriction avancée dans lexercice des droits accordés ou affirmés selon cette Licence. Par exemple, vous ne pouvez imposer aucun paiement pour la licence, aucune royaltie, ni aucune autre charge pour lexercice des droits accordés selon cette Licence ; et vous ne pouvez amorcer aucun litige judiciaire (y compris une réclamation croisée ou contre-réclamation dans un procès) sur lallégation quune revendication de brevet est enfreinte par la réalisation, lutilisation, la vente, loffre de vente, ou limportation du Programme ou dune quelconque portion de celui-ci.
Article 11. Brevets.
Un « contributeur » est un titulaire de Droit dAuteur (“copyright”) qui autorise lutilisation selon cette Licence du Programme ou de lœuvre sur laquelle le Programme est basé. Lœuvre ainsi soumise à licence est appelée la « version contributive » de ce contributeur.
Les « revendications de brevet essentielles » sont toutes les revendications de brevets détenues ou contrôlées par le contributeur, quelles soient déjà acquises par lui ou acquises subséquemment, qui pourraient être enfreintes de quelque manière, permises par cette Licence, sur la réalisation, lutilisation ou la vente de la version contributive de celui-ci. Aux fins de cette définition, le « contrôle » inclue le droit de concéder des sous-licences de brevets dune manière consistante, nécessaire et suffisante, avec les obligations de cette Licence.
Chaque contributeur vous accorde une licence de brevet non exclusive, mondiale et libre de toute royaltie, selon les revendications de brevet essentielles, pour réaliser, utiliser, vendre, offrir à la vente, importer et autrement exécuter, modifier et propager les contenus de sa version contributive.
Dans les trois paragraphes suivants, une « licence de brevet » désigne tous les accords ou engagements exprimés, quel que soit le nom que vous lui donnez, de ne pas mettre en vigueur un brevet (telle quune permission explicite pour mettre en pratique un brevet, ou un accord pour ne pas poursuivre un Destinataire pour cause de violation de brevet). « Accorder » une telle licence de brevet à une partie signifie conclure un tel accord ou engagement à ne pas faire appliquer le brevet à cette partie.
Si vous acheminez une Œuvre Couverte, dépendant en connaissance dune licence de brevet, et si le Source Correspondant de lœuvre nest pas disponible à quiconque copie, sans frais et suivant les termes de cette Licence, à travers un serveur réseau publiquement accessible ou tout autre moyen immédiatement accessible, alors vous devez soit (1) rendre la Source Correspondante ainsi disponible, soit (2) vous engager à vous priver pour vous-même du bénéfice de la licence de brevet pour cette œuvre particulière, soit (3) vous engager, dune façon consistante avec les obligations de cette Licence, à étendre la licence de brevet aux Destinataires de cette œuvre. « Dépendant en connaissance » signifie que vous avez effectivement connaissance que, selon la licence de brevet, votre acheminement de lŒuvre Couverte dans un pays, ou lutilisation de lŒuvre Couverte par votre Destinataire dans un pays, enfreindrait un ou plusieurs brevets identifiables dans ce pays où vous avez des raisons de penser quils sont valides.
Si, conformément à ou en liaison avec une même transaction ou un même arrangement, vous acheminez, ou propagez en procurant un acheminement de, une Œuvre Couverte et si accordez une licence de brevet à lune des parties recevant lŒuvre Couverte pour lui permettre dutiliser, propager, modifier ou acheminer une copie spécifique de lŒuvre Couverte, alors votre accord est automatiquement étendu à tous les Destinataires de lŒuvre Couverte et des œuvres basées sur celle-ci.
Une licence de brevet est « discriminatoire » si, dans le champ de sa couverture, elle ninclut pas un ou plusieurs des droits qui sont spécifiquement accordés selon cette Licence, ou en prohibe lexercice, ou est conditionnée par le non-exercice dun ou plusieurs de ces droits. Vous ne pouvez pas acheminer une Œuvre Couverte si vous êtes partie à un arrangement, selon lequel une partie tierce exerçant son activité dans la distribution de logiciels et à laquelle vous effectuez un paiement fondé sur létendue de votre activité dacheminement de lœuvre, et selon lequel la partie tierce accorde, à une quelconque partie qui recevrait depuis vous lŒuvre Couverte, une licence de brevet discriminatoire (a) en relation avec les copies de lŒuvre Couverte acheminées par vous (ou les copies réalisées à partir de ces copies), ou (b) avant tout destinée à et en relation avec des produits spécifiques ou compilations contenant lŒuvre Couverte, à moins que vous ayez conclu cet arrangement ou que la licence de brevet ait été accordée avant le 28 mars 2007.
Rien dans cette Licence ne devrait être interprété comme devant exclure ou limiter toute licence implicite ou dautres moyens de défense à une infraction qui vous seraient autrement disponible selon la loi applicable relative aux brevets.
Article 12. Non abandon de la liberté des autres.
Si des conditions vous sont imposées (que ce soit par décision judiciaire, par un accord ou autrement) qui contredisent les conditions de cette Licence, elles ne vous excusent pas des conditions de cette Licence. Si vous ne pouvez pas acheminer une Œuvre Couverte de façon à satisfaire simultanément vos obligations suivant cette Licence et toutes autres obligations pertinentes, alors en conséquence vous ne pouvez pas du tout lacheminer. Par exemple, si vous avez un accord sur des termes qui vous obligent à collecter pour le réacheminement des royalties depuis ceux à qui vous acheminez le Programme, la seule façon qui puisse vous permettre de satisfaire à la fois à ces termes et ceux de cette Licence sera de vous abstenir entièrement dacheminer le Programme.
Article 13. Utilisation avec la Licence Générale Publique Affero GNU.
Nonobstant toute autre clause de cette Licence, vous avez la permission de lier ou combiner toute Œuvre Couverte avec une œuvre placée sous la version 3 de la Licence Générale Publique GNU Affero (“GNU Affero General Public License”) en une seule œuvre combinée, et dacheminer lœuvre résultante. Les termes de cette Licence continueront à sappliquer à la partie formant une Œuvre Couverte, mais les obligations spéciales de la Licence Générale Publique GNU Affero, article 13, concernant linteraction à travers un réseau, sappliqueront à la combinaison en tant que telle.
Article 14. Versions révisées de cette License.
La Free Software Foundation peut publier des versions révisées et/ou nouvelles de la Licence Publique Générale GNU (“GNU General Public License”) de temps en temps. De telles version nouvelles resteront similaires dans lesprit avec la présente version, mais peuvent différer dans le détail afin de traiter de nouveaux problèmes ou préoccupations.
Chaque version reçoit un numéro de version distinctif. Si le Programme indique quune version spécifique de la Licence Publique Générale GNU « ou toute version ultérieure » (“or any later version”) sapplique à celui-ci, vous avez le choix de suivre soit les termes et conditions de cette version numérotée, soit ceux de nimporte quelle version publiée ultérieurement par la Free Software Foundation. Si le Programme nindique pas une version spécifique de la Licence Publique Générale GNU, vous pouvez choisir lune quelconque des versions qui ont été publiées par la Free Software Foundation.
Si le Programme spécifie quun intermédiaire peut décider quelles versions futures de la Licence Générale Publique GNU peut être utilisée, la déclaration publique dacceptation dune version par cet intermédiaire vous autorise à choisir cette version pour le Programme.
Des versions ultérieures de la licence peuvent vous donner des permissions additionnelles ou différentes. Cependant aucune obligation additionnelle nest imposée à lun des auteurs ou titulaires de Droit dAuteur du fait de votre choix de suivre une version ultérieure.
Article 15. Déclaration dabsence de garantie.
IL NY A AUCUNE GARANTIE POUR LE PROGRAMME, DANS LES LIMITES PERMISES PAR LA LOI APPLICABLE. À MOINS QUE CELA NE SOIT ÉTABLI DIFFÉREMMENT PAR ÉCRIT, LES PROPRIÉTAIRES DE DROITS ET/OU LES AUTRES PARTIES FOURNISSENT LE PROGRAMME « EN LÉTAT » SANS GARANTIE DAUCUNE SORTE, QUELLE SOIT EXPRIMÉE OU IMPLICITE, CECI COMPRENANT, SANS SE LIMITER À CELLES-CI, LES GARANTIES IMPLICITES DE COMMERCIALISABILITÉ ET DADÉQUATION À UN OBJECTIF PARTICULIER. VOUS ASSUMEZ LE RISQUE ENTIER CONCERNANT LA QUALITÉ ET LES PERFORMANCES DU PROGRAMME. DANS LÉVENTUALITÉ OÙ LE PROGRAMME SAVÉRERAIT DÉFECTUEUX, VOUS ASSUMEZ LES COÛTS DE TOUS LES SERVICES, RÉPARATIONS OU CORRECTIONS NÉCESSAIRES.
Article 16. Limitation de responsabilité.
EN AUCUNE AUTRE CIRCONSTANCE QUE CELLES REQUISES PAR LA LOI APPLICABLE OU ACCORDÉES PAR ÉCRIT, UN TITULAIRE DE DROITS SUR LE PROGRAMME, OU TOUT AUTRE PARTIE QUI MODIFIE OU ACHEMINE LE PROGRAMME COMME PERMIS CI-DESSUS, NE PEUT ÊTRE TENU POUR RESPONSABLE ENVERS VOUS POUR LES DOMMAGES, INCLUANT TOUT DOMMAGE GÉNÉRAL, SPÉCIAL, ACCIDENTEL OU INDUIT SURVENANT PAR SUITE DE LUTILISATION OU DE LINCAPACITÉ DUTILISER LE PROGRAMME (Y COMPRIS, SANS SE LIMITER À CELLES-CI, LA PERTE DE DONNÉES OU LINEXACTITUDE DES DONNÉES RETOURNÉES OU LES PERTES SUBIES PAR VOUS OU DES PARTIES TIERCES OU LINCAPACITÉ DU PROGRAMME À FONCTIONNER AVEC TOUT AUTRE PROGRAMME), MÊME SI UN TEL TITULAIRE OU TOUTE AUTRE PARTIE A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES.
Article 17. Interprétation des sections 15 et 16.
Si la déclaration dabsence de garantie et la limitation de responsabilité fournies ci-dessus ne peuvent prendre effet localement selon leurs termes, les cours de justice qui les examinent doivent appliquer la législation locale qui approche au plus près possible une levée absolue de toute responsabilité civile liée au Programme, à moins quune garantie ou assumation de responsabilité accompagne une copie du Programme en échange dun paiement.
FIN DES TERMES ET CONDITIONS.
Comment appliquer ces termes à vos nouveaux programmes
Si vous développez un nouveau programme et voulez quil soit le plus possible utilisable par le public, la meilleure façon dy parvenir et den faire un logiciel libre que chacun peut redistribuer et changer suivant ces termes-ci.
Pour appliquer ces termes, attachez les notices suivantes au programme. Il est plus sûr de les attacher au début de chacun des fichiers sources afin de transporter de façon la plus effective possible lexclusion de garantie ; et chaque fichier devrait comporter au moins la ligne de réservation de droit (“copyright”) et une indication permettant de savoir où la notice complète peut être trouvée :
Une ligne donnant le nom du programme et une brève idée de ce quil fait.
Copyright (C) "année" "nom de lauteur" — Tous droits réservés.
Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le
modifier suivant les termes de la “GNU General Public License” telle que
publiée par la Free Software Foundation : soit la version 3 de cette
licence, soit (à votre gré) toute version ultérieure.
Ce programme est distribué dans lespoir quil vous sera utile, mais SANS
AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
ni dADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale
Publique GNU pour plus de détails.
Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec
ce programme ; si ce nest pas le cas, consultez :
http://www.gnu.org/licenses.
Ajoutez également les informations permettant de vous contacter par courrier électronique ou postal.
Si le programme produit une interaction sur un terminal, faites lui afficher une courte notice comme celle-ci lors de son démarrage en mode interactif :
"programme" Copyright (C) "année" "nom de lauteur"
Ce programme vient SANS ABSOLUMENT AUCUNE GARANTIE ; taper “affiche g” pour
les détails. Ceci est un logiciel libre et vous êtes invité à le redistribuer
suivant certaines conditions ; taper “affiche c” pour les détails.
Les commandes hypothétiques “affiche g” and “affiche c” devrait afficher les parties appropriées de la Licence Générale Publique. Bien sûr, les commandes de votre programme peuvent être différentes ; pour une interface graphique, vous pourriez utiliser une « boîte À propos. »
Vous devriez également obtenir de votre employeur (si vous travaillez en tant que programmeur) ou de votre école un « renoncement aux droits de propriété » pour ce programme, si nécessaire. Pour plus dinformations à ce sujet, et comment appliquer la GPL GNU, consultez "http://www.gnu.org/licenses".
La Licence Générale Publique GNU ne permet pas dincorporer votre programme dans des programmes propriétaires. Si votre programme est une bibliothèque de sous-routines, vous pourriez considérer quil serait plus utile de permettre de lier des applications propriétaires avec la bibliothèque. Si cest ce que vous voulez faire, utilisez la Licence Générale Publique Limitée GNU au lieu de cette Licence ; mais dabord, veuillez lire http://www.gnu.org/philosophy/why-not-lgpl.html.

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id />
<nom />
<contenu />
<type>owSimple</type>
<ordre />
<etat />
</page>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<nom>owSimple</nom>
<dossier>owSimple</dossier>
<description>Module d'écriture de page simple.</description>
<version>1.3</version>
<multilang>1</multilang>
<auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

View file

@ -0,0 +1,78 @@
<?php
/* *************************************
Titre: Module Simple
Auteur: NNS Production
Version: 1.60
----------- Changelog ------------------
14/08/2011 - Modification d'une variable défectueuse.
05/06/2013 - Changement de la structure pour plus de lisibilité
03/10/2018 - Réécriture complète du module
13/07/1010 - Réécriture complète du module et changement du WYSIWYG
************************************* */
if(checkMultilangModuleAvailable(donnee_xml($subdir."modules/".basename(__DIR__)."/config.xml", 'multilang'))) require_once($subdir.'modules/'.basename(__DIR__).'/lang/'.detectLang().".php");
if (@$_['Send']==1)
{
if(checkEmptyField($_['titre']))
{
echo showNotification($lang_owSimple['_incorrectTitle'], 'error', 'icon-emo-unhappy');
}
else
{
switch($_['act'])
{
case 'new':
$xml_file = LAST_KEY.'#'.cleanName($_['titre'].'.xml');
copy('../modules/'.$_['type'].'/base.xml', '../data/pages/'.$xml_file);
$input = str_replace("&nbsp;", "", preg_replace("<<br>>", "<br />", $_['input']));
(@$_['affichage']=="on")?$display=1:$display=0;
ecriture_xml('../data/pages/'.$xml_file, array('page/ordre'=>LAST_ORDER, 'page/id'=>LAST_KEY, 'page/nom'=>$_['titre'], 'page/affichage'=>$display, 'page/contenu#CDATA'=>$input));
//$header = changeParameterRequestURL($_SERVER['QUERY_STRING'], array('act'=>'edit', 'id'=>LAST_KEY));
//header('Location: index.php?'.$header);
break;
case 'edit':
$xml_file = $_['id'].'#'.cleanName($_['titre'].'.xml');
rename('../data/pages/'.$lecture_pages[$_['id']].'.xml', '../data/pages/'.$xml_file);
//$input = str_replace("&nbsp;", "", preg_replace("<<br>>", "<br />", $_['input']));
$input = $_['input'];
ecriture_xml('../data/pages/'.$xml_file, array('page/nom'=>$_['titre'], 'page/contenu#CDATA'=>$input));
break;
}
echo showNotification($lang_owSimple['_pageSaved'], 'valide', 'icon-emo-happy');
}
}
if(!isset($_['Send']) || $_['act']=='edit')
{
if($_['act']=='edit'){ ?><h3><?php echo $lang_owSimple['_editPage']; ?></h3><?php }
else { ?><h3><?php echo $lang_owSimple['_addPage']; ?></h3><?php } ?>
<div id="Module">
<form action="<?php echo ADMIN_REQUEST_URL."&amp;act=".$_['act']; if($_['act']=="edit"){echo "&amp;id=".$lecture_pages[$_['id']];}?>" method="POST">
<input type="text" placeholder="<?php echo $lang_owSimple['_fillTitle']; ?>" name="titre" class="field_basic" value="<?php if(isset($_['titre'])){ echo stripslashes($_['titre']); } else { echo @$page['page']['nom']['#text']; } ?>" />
<div class="owEditor">
<div id="editor" class="pell" ></div>
<textarea name="input" id="html-output"></textarea>
</div><br />
<input type="submit" value="<?php echo $lang_owSimple['_save']; ?>" class="input_basic" />
<a href="index.php?tab=pages">
<input type="button" value="<?php echo $lang_owSimple['_cancel']; ?>" class="input_basic" />
</a>
<input type="hidden" name="type" value="<?php echo @$_['type']; ?>" />
<input type="hidden" name="Send" value="1" />
<input type="hidden" name="sid" value="1" />
<?php include('../lib/wysiwyg.lib.php'); ?>
</form>
</div>
<div id="Options" class="Bloc">
<p>
<?php echo $lang_owSimple['_noMoreOption']; ?>
</p>
</div><?php
} ?>

View file

@ -0,0 +1,14 @@
<?php
$lang_owSimple = array(
"language" => "Français",
"_incorrectTitle" => "Merci d'indiquer un nom de page.",
"_pageSaved" => "Page sauvegardée",
"_editPage" => "Modification de la page",
"_addPage" => "Ajouter une nouvelle page",
"_fillTitle" => "Saisissez un titre pour cette page",
"_cancel" => "Annuler",
"_save" => "Sauvegarder",
"_noMoreOption" => "Aucune option supplémentaire disponible sur ce module.",
);
?>

View file

@ -0,0 +1,14 @@
<?php
$lang_owSimple = array(
"language" => "Français",
"_incorrectTitle" => "Merci d'indiquer un nom de page.",
"_pageSaved" => "Page sauvegardée",
"_editPage" => "Modification de la page",
"_addPage" => "Ajouter une nouvelle page",
"_fillTitle" => "Saisissez un titre pour cette page",
"_cancel" => "Annuler",
"_save" => "Sauvegarder",
"_noMoreOption" => "Aucune option supplémentaire disponible sur ce module.",
);
?>

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<page>
<id>0</id>
<nom>nom</nom>
<contenu>contenu</contenu>
<type>owSimple</type>
<ordre>0</ordre>
<etat>0</etat>
</page>

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<nom>owSimple</nom>
<dossier>owsimple</dossier>
<description>Ajouter une page de texte simple.</description>
<version>1.1</version>
<auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

View file

@ -1,87 +0,0 @@
<?php
/* *************************************
Titre: Module Simple
Auteur: NNS Production
Version: 1.1
----------- Changelog ------------------
14/08/2011 - Modification d'une variable
défectueuse.
************************************* */
if ($_GET['action']=="ajouter")
{
if(isset($_POST['s1']) || isset($_POST['s2']))
{
if (empty($_POST['nom_page']) || $_POST['nom_page']=="")
{
echo "<span class='erreur'>Merci d'indiquer un nom de page.</span>";
}
else
{
$list=listing_dossier($DATA_PAGES);
$nb = sizeof($list); $nb=$nb+1;
copy('../modules/'.$_POST['type'].'/base.xml', '../data/pages/'.$nb.'.xml');
ecriture_xml('../data/pages/'.$nb.'.xml', 'nom', $_POST['nom_page']);
ecriture_xml('../data/pages/'.$nb.'.xml', 'contenu', $_POST['input']);
ecriture_xml('../data/pages/'.$nb.'.xml', 'id', $nb);
ecriture_xml('../data/pages/'.$nb.'.xml', 'ordre', $nb);
if (@$_POST['affichage']=="on"){$maintenance="1";} else {$maintenance="0";}
ecriture_xml('../data/pages/'.$nb.'.xml', 'etat', $maintenance);
if(isset($_POST['s1'])) {$m=1; echo "<span class='valide'>Page ajoutée.</span>";}
if(isset($_POST['s2'])) {$m=1;echo "<span class='valide'>Page sauvegardée.</span>";}
}
}
}
elseif ($_GET['action']=="modifier")
{
if(isset($_POST['s1']) || isset($_POST['s2']))
{
if (empty($_POST['nom_page']) || $_POST['nom_page']=="")
{
echo "<span class='erreur'>Merci d'indiquer un nom de page.</span>";
}
else
{
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'nom', $_POST['nom_page']);
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'contenu', $_POST['input']);
if (@$_POST['affichage']=="on"){$maintenance="1";} else {$maintenance="0";}
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'etat', $maintenance);
if(isset($_POST['s1'])) {$m=0; echo "<span class='valide'>Changement appliqué.</span>";}
if(isset($_POST['s2'])) {$m=1; echo "<span class='valide'>Changement sauvegardé.</span>";}
}
}
$page = lecture_xml("../data/pages/".$_GET['id'].".xml");
}
if (@$m!=1) { ?>
<form action="index.php?pid=2&amp;action=<?php echo $_GET['action']; if($_GET['action']=="modifier"){echo "&amp;id=".$_GET['id'];}?>" method="post" onsubmit="editor.post();" enctype="multipart/form-data">
<p>
<b>Nom de la page</b><br /><br />
<input type="text" name="nom_page" class="input_text" value="<?php echo @$page['page']['nom']['#text']; ?>" id="text_input" /><br /><br />
<b>Contenu de la page</b>
</p>
<div class="gauche"><textarea id="input" name="input" cols="0" rows="0"><?php echo @$page['page']['contenu']['#text']; ?></textarea></div>
<div class="div_unique1">
<b>Options</b><br /><br />
<table id="option_table">
<tr>
<td><input type="checkbox" id="affi" name="affichage" <?php if(@$page['page']['etat']['#text']==1){echo "checked='checked'";} ?>/><label for="affi"><span style="cursor:pointer;"> Affichage</span></label></td>
<td><input type="submit" name="s1" value="Appliquer" id="apply_but"/></td>
</tr>
<tr>
<td><img src="../themes/defaut/images/icones/delete.png" alt="Delete" /><a href="index.php?pid=2"> Annuler</a></td>
<td><input type="submit" name="s2" value="Enregistrer" id="save_but"/></td>
</tr>
</table>
</div>
<?php include('../lib/wysiwyg.lib.php'); ?>
<p>
<input type="hidden" name="type" value="<?php echo $_POST['type']; ?>" /><br /><br />
</p>
</form><?php
}
?>

186
readme.md Normal file
View file

@ -0,0 +1,186 @@
<div align="center">
# AEOS
### Un CMS léger, portable et sans base de données
![Version](https://img.shields.io/badge/version-0.6-2f81f7?style=for-the-badge)
![Statut](https://img.shields.io/badge/statut-développement_actif-2ea44f?style=for-the-badge)
![PHP](https://img.shields.io/badge/PHP-777BB4?style=for-the-badge&logo=php&logoColor=white)
![XML](https://img.shields.io/badge/XML-ff6600?style=for-the-badge&logo=xml&logoColor=white)
![Git](https://img.shields.io/badge/versioning-Git-F05032?style=for-the-badge&logo=git&logoColor=white)
![Base de données](https://img.shields.io/badge/base_de_données-aucune-8b5cf6?style=for-the-badge)
![Licence](https://img.shields.io/badge/licence-GNU_GPL-f0b429?style=for-the-badge)
**AEOS est un CMS libre, léger, multilingue et portable, conçu pour fonctionner simplement sur un hébergement PHP sans base de données.**
</div>
---
## 📖 À propos
**AEOS** est un système de gestion de contenu écrit en PHP dont les données et la configuration sont enregistrées dans des fichiers XML.
Le projet privilégie une installation simple, une architecture lisible et une grande portabilité : un site AEOS peut être copié d'un hébergement à un autre sans migration de base de données ni procédure de déploiement complexe.
AEOS reste volontairement compact. Son objectif n'est pas de rivaliser avec les vastes écosystèmes des CMS généralistes, mais de proposer un moteur **autonome, compréhensible et extensible**, permettant de créer et administrer un site sans dépendances superflues.
---
## ✨ Fonctionnalités
- gestion des pages et des contenus depuis une interface d'administration ;
- stockage des contenus et de la configuration au format XML ;
- fonctionnement sans serveur de base de données ;
- prise en charge de plusieurs langues avec langue par défaut et mécanisme de repli ;
- détection automatique de la langue du navigateur ;
- système de thèmes, modules et plugins ;
- réécriture et routage des URL configurables ;
- mode maintenance et mode débogage ;
- corbeille pour les contenus supprimés ;
- filtrage centralisé des données entrantes ;
- en-têtes de sécurité et encodage UTF-8 ;
- moteur de recherche intégré aux contenus de type FAQ.
> Certaines fonctionnalités peuvent différer ou être absentes dans les anciennes versions conservées dans le dépôt.
---
## 🧭 Philosophie
AEOS repose sur quelques principes simples :
- **Portable** — les fichiers d'un site peuvent être déplacés sans exporter ni importer une base de données.
- **Léger** — le moteur limite les dépendances et conserve une architecture compacte.
- **Lisible** — le code, les fichiers de configuration et les contenus restent accessibles et compréhensibles.
- **Modulaire** — les fonctionnalités et la présentation sont séparées entre modules, plugins et thèmes.
- **Autonome** — AEOS est pensé pour rester exploitable sur des hébergements PHP classiques, y compris les offres les plus modestes.
---
## 🧰 Prérequis
AEOS nécessite :
- un serveur web compatible avec PHP ;
- PHP avec la prise en charge de XML ;
- les droits d'écriture nécessaires dans les répertoires de données utilisés par AEOS ;
- la réécriture d'URL du serveur web si cette fonctionnalité est activée.
Les versions exactes de PHP prises en charge peuvent varier selon la version d'AEOS utilisée.
---
## 🚀 Installation
1. Téléchargez la version souhaitée d'AEOS.
2. Copiez son contenu dans le répertoire public de votre hébergement.
3. Ouvrez le site dans un navigateur.
4. Suivez l'assistant présent dans le répertoire `install`.
5. Vérifiez les droits d'écriture demandés pendant l'installation.
Comme AEOS n'utilise pas de base de données, aucune création de base, importation SQL ou configuration d'un serveur MySQL/MariaDB n'est nécessaire.
---
## 🗂️ Structure du projet
```text
admin/ Interface d'administration
core/ Cœur et fonctionnement interne d'AEOS
data/ Configuration et contenus XML
install/ Assistant d'installation
lang/ Traductions générales
lib/ Bibliothèques du moteur
modules/ Types de contenus et fonctionnalités
plugins/ Extensions complémentaires
themes/ Présentation du site
```
Les modules et les thèmes disposent de leur propre configuration et peuvent inclure leurs fichiers d'édition, leurs ressources internes et leurs traductions.
---
## 🌍 Multilingue
AEOS peut sélectionner une langue à partir :
1. de la langue explicitement demandée ;
2. de la langue détectée dans le navigateur ;
3. de la langue par défaut configurée pour le site ;
4. d'une langue disponible utilisée comme solution de repli.
La configuration, les pages, les modules et les thèmes peuvent ainsi proposer leurs contenus dans plusieurs langues sans dupliquer l'ensemble du site.
---
## 🛡️ Sécurité
AEOS centralise le traitement des entrées publiques afin que les paramètres reçus ne soient pas employés directement par la logique applicative.
Le moteur applique également des en-têtes de sécurité et peut restreindre l'accès direct à certains fichiers selon la configuration du serveur web.
La protection des fichiers XML dépend néanmoins du serveur utilisé. Une configuration adaptée doit être mise en place sur Apache, Nginx ou tout autre serveur afin d'empêcher leur consultation directe depuis le Web.
---
## 🕰️ Historique des versions
AEOS est un projet ancien dont plusieurs étapes du développement ont été conservées et restaurées dans ce dépôt.
| Version | État |
| :--- | :--- |
| `v0.1a` | Première version alpha archivée |
| `v0.1.1a` | Version historique |
| `v0.2` | Version historique |
| `v0.3` | Version historique |
| `v0.4` | Version historique |
| `v0.5` | Version historique |
| `v0.6` | Version actuelle |
Les différentes versions sont conservées sous forme de **tags Git**, permettant de consulter précisément l'état du projet à chaque étape de son développement.
La branche **`main`** représente la base de développement actuelle.
Les anciennes versions sont publiées à des fins de **conservation, de documentation et de suivi de l'évolution du projet**. Elles ne sont pas nécessairement adaptées à une utilisation en production.
---
## 🧪 État du développement
Le développement actuel se poursuit sur la branche **`main`**, avec la version **0.6** comme base de travail.
Les travaux portent notamment sur :
- l'amélioration du système multilingue ;
- la recherche et la gestion des contenus ;
- la portabilité ;
- la sécurité des fichiers de données ;
- la modernisation et l'optimisation progressive du moteur.
L'objectif reste de faire évoluer AEOS sans sacrifier ce qui constitue son identité : **un moteur simple, léger, lisible et indépendant d'une base de données**.
---
## 🤝 Contribution
Les rapports de bugs, propositions d'amélioration et contributions sont les bienvenus via les tickets et demandes de fusion du dépôt.
Lors d'une contribution, merci de respecter l'architecture existante, l'ordre de chargement du cœur et les mécanismes internes de sécurisation des entrées.
---
## ⚖️ Licence
AEOS est un logiciel libre distribué sous licence **GNU General Public License**.
Consultez le fichier `LICENSE` du dépôt pour connaître les conditions complètes de redistribution et de modification.
---
<div align="center">
**AEOS** — *Simple. Portable. Sans base de données.*
</div>

View file

@ -1,45 +1,22 @@
<?php (SECURITY)?die():FALSE; ?>
<body> <body>
<div id="general"> <div id="General">
<div id="header"> <div id="Header">
<h1><?php echo $SITE_NOM; ?></h1> <h1><?php echo AEOS_NAME; ?></h1>
<p><?php echo $SITE_DESC; ?></p> <h2><?php echo AEOS_DESC; ?></h2>
<ul class="menu">
<?php <ul class="Menu">
// Listings des pages + menu <?php require_once('core/menu.php'); ?>
$list=listing_dossier($DATA_PAGES);
if(empty($_GET['id'])){$id=1;} else {$id = $_GET['id'];}
foreach ($list as &$pages) {
$page = lecture_xml($DATA_PAGES.$pages);
if ($page['page']['etat']['#text']==1){
echo "<li><a href='index.php?id=".$page['page']['ordre']['#text']."'>";
if ($page['page']['ordre']['#text']==$id){echo "<b>"; }
echo $page['page']['nom']['#text'];
if ($page['page']['ordre']['#text']==$id){echo "</b>"; }
echo "</a></li>";
}
}
?>
</ul> </ul>
</div> </div>
<div id="corps"> <div id="Corps">
<div id="contentG"> <?php require_once('core/base.php'); ?>
<p>
<?php
// Affichage de la page
if(empty($_GET['id'])){$id=1;} else {$id = $_GET['id'];}
$contenu = lecture_xml($DATA_PAGES.$id.'.xml');
if((@include_once("modules/".$contenu['page']['type']['#text']."/base.php"))==FALSE)
{
echo "<span class='erreur'>Impossible d'accéder au module demandé.</span>";
}
?>
</p>
</div> </div>
</div>
<div id="footer"> <div id="Footer">
<p> <p>
AEOS v<?php echo $SITE_VERSION; ?> - <?php echo round(microtime(true)-$execTime, 3)."s<br />".$SITE_FOOTER; ?> <?php require_once('core/footer.php'); ?>
</p> </p>
</div> </div>
</div> </div>

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<id>1</id> <id>1</id>
<nom>AEOS - Défaut</nom> <nom>AEOS - Défaut</nom>
<dossier>defaut</dossier> <dossier>defaut</dossier>
<description>Thème de base d'AEOS</description> <description>Thème de base d'AEOS</description>
<version>1.0.0</version> <version>1.0.0</version>
<auteurs>NNS Production</auteurs> <auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email> <email>contact@nekonosekai.com</email>

View file

@ -1,3 +1,4 @@
<?php <?php
(SECURITY)?die():FALSE;
echo "<span class='erreur'>Aucune modification possible sur ce thème.</span>"; echo "<span class='erreur'>Aucune modification possible sur ce thème.</span>";
?> ?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,002 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,000 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,012 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,001 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,023 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -1,10 +1,24 @@
<?php (SECURITY)?die():FALSE; ?>
<!-- Maintenance --> <!-- Maintenance -->
<body> <body>
<div id="content"> <div id="General">
<div id="center"> <div id="Header">
<p><?php echo $SITE_MESSAGE; ?></p> <h1><?php echo AEOS_NAME; ?></h1>
<h2><?php echo AEOS_DESC; ?></h2>
</div>
<div id="Corps">
<!-- Affichage du message en cas de maintenance -->
<p><?php echo AEOS_MAINTMSG; ?></p>
</div>
<div id="Footer">
<p>
<?php require_once('core/footer.php'); ?>
</p>
</div> </div>
<div id="left"></div>
</div> </div>
</body> </body>
</html> </html>

View file

@ -1,106 +1,37 @@
body,html{ @import url(https://fonts.googleapis.com/css?family=Roboto:300);
font-family: Arial, sans-serif; * {margin:0; padding:0;}
font-size: 12px; a {color:#4f97ea; text-decoration:none;}
margin:0;
color: #666; body,html
{
font-family: "Roboto", sans-serif;
font-size: 12px;
color: #666;
background:#ecf0f1;
} }
/* Design */ #General {width:100%;}
#header{
background: url(images/bg_header.png) repeat-x #D8D8D8;
overflow: hidden;
margin-bottom: 15px;
border-bottom: 5px solid #D8D8D8;
}
#header p {width: 960px; color: #fff; margin: 5px auto 15px auto;} #Header {width:100%; margin:0 auto 0; border-bottom: 5px solid #D8D8D8; background: #4f97ea;}
#Header h1, #Header h2 {width:60%; margin:0 auto 0; color: #fff; font-weight: normal;}
#Header h1 {padding:20px 0 0 0;}
#Header h2 {font-size:inherit; padding:0 0 20px 0;}
#corps{ ul.Menu {width:60%; margin: 0 auto 0; list-style-type: none; background: rgba(255, 255, 255, 0.3); overflow: hidden;}
width: 960px; ul.Menu li a {color: #fff; padding: 10px; display: block;}
margin: 0 auto 0; ul.Menu li{float: left;margin-right: 5px;}
margin-bottom: 30px; ul.Menu li a:hover{color: #4b537a;}
overflow: hidden;
}
#contentG{
float: left;
width: 950px;
/*width: 600px*/
margin-right: 60px;
}
#contentD{
float: left;
width: 298px;
}
#footer{clear: both; text-align: center;} #Corps {width:60%; margin: 0 auto 30px; background: #FFFFFF; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);}
#footer a {color:#33AFDE; text-decoration:none;} #Corps p:first-child {padding-top:15px;}
#Corps p {padding:0 15px 0 15px; margin-bottom:15px;}
#Corps p:last-child {padding-bottom:15px;}
/* Menus */ #Footer{clear: both; text-align: center;}
ul.menu{
width: 960px;
margin: 0 auto;
list-style-type: none;
background: url(images/bg_nav.png);
overflow: hidden;
}
ul.menu li a{
color: #fff;
text-decoration: none;
padding: 10px;
display: block;
}
ul.menu li{float: left;margin-right: 5px;}
ul.menu li a:hover{color: #4b537a;}
#DeadZone {position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: black; z-index:1001; -moz-opacity: 0.5; opacity:.50; filter: alpha(opacity=50); overflow:hidden;}
/* Styles */ #LifeZone {position: absolute; top: 25%; left: 50%; width: 350px; height: 295px; padding: 16px; border: 3px solid #1367BB; background-color: white; z-index:1002; margin:0 0 0 -175px;}
#text_input {width:250px;} #LifeZone h1 {font-size:23px; color:#1367BB; margin:0 0 30px 0;}
.input_text {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; font-family:Arial; font-size:12px;} #LifeZone p {text-align:center; line-height:14px;}
.input_text_mini {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; width:76px; font-family:Arial; font-size:12px;} #LifeZone img {margin:0 0 20px 0;}
.area_text {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; width:250px; height:100px; font-family:Arial; font-size:12px;} #LifeZone a {color:#1367BB; text-decoration:none;}
/* Tableaux */
#tableau {border:1px solid #5EB2DC; padding:15px;}
#tableau tr:hover {background:#CEE7F4;}
#tableau tr {border:1px solid black;}
#en_tete {font-weight:bold; background:#A5D2EB;}
tr:hover#en_tete {background:#A5D2EB;}
/* Formulaire */
#option_table a {text-decoration:none; color:#666666;}
#option_table td {border:1px solid #5EB2DC; padding:3px; background:url(tinyeditor/images/header-bg.gif) repeat-x; height:34px;}
#option_table td:hover {padding:3px; background-image:none; background-color:#FFFFFF; height:34px;}
.div_unique1 {float:left; border:1px solid #5EB2DC;width:184px; margin:0 0 30px 20px; height:237px; padding:20px;}
/* Admin BOX */
#content {position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: white;}
#center {position: absolute;
height: 200px; top:0; bottom:0; left:0; right: 0; margin: auto; background-color: #1389CA;
text-align:left; text-align:center; color:#FFF; border-top:5px solid #E9EBF5 ; border-bottom:5px solid #E9EBF5 ; background-image:url(images/bg_header.png);background-repeat:repeat-x;}
#left {width: 76px; height: 77px; background:url(images/logo.png) no-repeat; text-indent:-5000; font-size:0; margin:-90px auto 20px;}
/* Boutons */
.erreur {color:red; font-weight:bold; text-shadow:#FFFFFF 0px 0px 2px;}
.valide {color:green; font-weight:bold; text-shadow:#FFFFFF 0px 0px 2px;}
.input {border:1px solid #219AD2;}
.option {border:1px solid #219AD2; padding:2px;}
#add_but {background:url(images/icones/ajout.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#A60000; cursor:pointer;}
#apply_but {background:url(images/icones/apply.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#666666;}
#save_but {background:url(images/icones/save.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#666666;}
/* Icones */
.icon {margin:0 4px -2px 0;}
.petit_decalage {margin:0 5px 0 5px;}
.decalageBas {margin:0 0 -10px 0;}
/* Bases */
ul{margin-left: 0; padding-left: 0; list-style-position: inside;}
a{color: #b70034;}
h1{width: 960px; color: #fff; font-weight: normal; margin: 30px auto 5px auto;}
h6{font-size:14px; margin:10px 0 5px 0;}
.text_left {text-align:justify; padding:10px;}
.link {text-decoration:none;}
.gauche {float:left;}
.gauche50 {float:left; margin:0 50px 0 0;}

View file

@ -1,3 +0,0 @@
/*
Ici, création d'un thème format iPhone/iPod
*/

27
themes/system/base.php Normal file
View file

@ -0,0 +1,27 @@
<?php (SECURITY)?die():FALSE; ?>
<body>
<div id="general">
<div id="header">
<h1><?php echo AEOS_NAME; ?></h1>
<p><?php echo AEOS_DESC; ?></p>
<ul class="menu">
<?php require_once('core/menu.php'); ?>
</ul>
</div>
<div id="corps">
<div id="contentG">
<p>
<?php require_once('core/base.php'); ?>
</p>
</div>
</div>
<div id="footer">
<p>
<?php require_once('core/footer.php'); ?>
</p>
</div>
</div>
</body>
</html>

10
themes/system/config.xml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<id>1</id>
<nom>AEOS - Système</nom>
<dossier>system</dossier>
<description>Thème système d'AEOS</description>
<version>1.6.0</version>
<auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

108
themes/system/css/fontello.css vendored Normal file
View file

@ -0,0 +1,108 @@
@font-face {
font-family: 'fontello';
src: url('../fonts/fontello.eot?95931430');
src: url('../fonts/fontello.eot?95931430#iefix') format('embedded-opentype'),
url('../fonts/fontello.woff2?95931430') format('woff2'),
url('../fonts/fontello.woff?95931430') format('woff'),
url('../fonts/fontello.ttf?95931430') format('truetype'),
url('../fonts/fontello.svg?95931430#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
/*
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
src: url('../font/fontello.svg?95931430#fontello') format('svg');
}
}
*/
[class^="icon-"]:before, [class*=" icon-"]:before {
font-family: "fontello";
font-style: normal;
font-weight: normal;
speak: none;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
/* opacity: .8; */
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
/* Animation center compensation - margins should be symmetric */
/* remove if not needed */
margin-left: .2em;
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
/* Font smoothing. That was taken from TWBS */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
.icon-logout:before { content: '\e800'; } /* '' */
.icon-th-list:before { content: '\e801'; } /* '' */
.icon-cog:before { content: '\e802'; } /* '' */
.icon-emo-unhappy:before { content: '\e803'; } /* '' */
.icon-pencil:before { content: '\e804'; } /* '' */
.icon-cancel:before { content: '\e805'; } /* '' */
.icon-down-big:before { content: '\e806'; } /* '' */
.icon-up-big:before { content: '\e807'; } /* '' */
.icon-heart:before { content: '\e808'; } /* '' */
.icon-home:before { content: '\e809'; } /* '' */
.icon-plus:before { content: '\e80a'; } /* '' */
.icon-login:before { content: '\e80b'; } /* '' */
.icon-emo-happy:before { content: '\e80c'; } /* '' */
.icon-link:before { content: '\e80d'; } /* '' */
.icon-bold:before { content: '\e80e'; } /* '' */
.icon-italic:before { content: '\e80f'; } /* '' */
.icon-indent-left:before { content: '\e810'; } /* '' */
.icon-indent-right:before { content: '\e811'; } /* '' */
.icon-font:before { content: '\e812'; } /* '' */
.icon-text-height:before { content: '\e813'; } /* '' */
.icon-picture:before { content: '\e814'; } /* '' */
.icon-align-left:before { content: '\e815'; } /* '' */
.icon-ccw:before { content: '\e816'; } /* '' */
.icon-cw:before { content: '\e817'; } /* '' */
.icon-scissors:before { content: '\e818'; } /* '' */
.icon-minus:before { content: '\e819'; } /* '' */
.icon-tint:before { content: '\e81a'; } /* '' */
.icon-videocam:before { content: '\e81b'; } /* '' */
.icon-align-center:before { content: '\e81c'; } /* '' */
.icon-align-right:before { content: '\e81d'; } /* '' */
.icon-align-justify:before { content: '\e81e'; } /* '' */
.icon-adjust:before { content: '\e81f'; } /* '' */
.icon-list-bullet:before { content: '\f0ca'; } /* '' */
.icon-list-numbered:before { content: '\f0cb'; } /* '' */
.icon-strike:before { content: '\f0cc'; } /* '' */
.icon-underline:before { content: '\f0cd'; } /* '' */
.icon-table:before { content: '\f0ce'; } /* '' */
.icon-magic:before { content: '\f0d0'; } /* '' */
.icon-upload-cloud:before { content: '\f0ee'; } /* '' */
.icon-circle:before { content: '\f111'; } /* '' */
.icon-code:before { content: '\f121'; } /* '' */
.icon-unlink:before { content: '\f127'; } /* '' */
.icon-info:before { content: '\f129'; } /* '' */
.icon-superscript:before { content: '\f12b'; } /* '' */
.icon-subscript:before { content: '\f12c'; } /* '' */
.icon-puzzle:before { content: '\f12e'; } /* '' */
.icon-doc-inv:before { content: '\f15b'; } /* '' */
.icon-right:before { content: '\f178'; } /* '' */
.icon-cubes:before { content: '\f1b3'; } /* '' */
.icon-recycle:before { content: '\f1b8'; } /* '' */
.icon-paragraph:before { content: '\f1dd'; } /* '' */

View file

@ -0,0 +1,4 @@
<?php
(SECURITY)?die():FALSE;
echo "<span class='erreur'>Aucune modification possible sur ce thème.</span>";
?>

Binary file not shown.

View file

@ -0,0 +1,112 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Copyright (C) 2018 by original authors @ fontello.com</metadata>
<defs>
<font id="fontello" horiz-adv-x="1000" >
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
<missing-glyph horiz-adv-x="1000" />
<glyph glyph-name="logout" unicode="&#xe800;" d="M357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-26t-27-64v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
<glyph glyph-name="th-list" unicode="&#xe801;" d="M286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
<glyph glyph-name="cog" unicode="&#xe802;" d="M571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 16 20 16h124q7 0 13-5t7-12l15-103q28-9 51-20l79 59q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-12 0-7-4-13-9-12-29-37t-30-40q15-28 23-54l102-16q7-1 12-7t4-13z" horiz-adv-x="857.1" />
<glyph glyph-name="emo-unhappy" unicode="&#xe803;" d="M261 800c-60 0-109-65-109-144 0-80 49-145 109-145s110 65 110 145c0 79-49 144-110 144z m477 0c-61 0-110-65-110-144 0-80 49-145 110-145 60 0 110 65 110 145 0 79-50 144-110 144z m-244-599c-165 0-331-62-461-184l-3-3c-6-5-11-10-14-14-21-21-21-55-1-76 21-21 54-21 75-1l12 12 3 3c111 105 254 157 396 155 143-1 285-56 396-165 4-4 8-8 12-12 20-21 54-21 74-1 21 21 21 55 1 77-5 5-9 10-14 14-131 129-299 194-468 195-3 0-6 0-8 0z" horiz-adv-x="999" />
<glyph glyph-name="pencil" unicode="&#xe804;" d="M203-7l50 51-131 131-51-51v-60h72v-71h60z m291 518q0 12-12 12-5 0-9-4l-303-302q-4-4-4-10 0-12 13-12 5 0 9 4l303 302q3 4 3 10z m-30 107l232-232-464-465h-232v233z m381-54q0-29-20-50l-93-93-232 233 93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
<glyph glyph-name="cancel" unicode="&#xe805;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
<glyph glyph-name="down-big" unicode="&#xe806;" d="M899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l165 164q20 21 50 21 29 0 51-21l41-41q21-22 21-51z" horiz-adv-x="928.6" />
<glyph glyph-name="up-big" unicode="&#xe807;" d="M899 308q0-28-21-50l-41-42q-22-21-51-21-30 0-50 21l-165 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
<glyph glyph-name="heart" unicode="&#xe808;" d="M500-79q-14 0-25 10l-348 336q-5 5-15 15t-31 37-38 54-30 67-13 77q0 123 71 192t196 70q34 0 70-12t67-33 54-38 42-38q20 20 42 38t54 38 67 33 70 12q125 0 196-70t71-192q0-123-128-251l-347-335q-10-10-25-10z" horiz-adv-x="1000" />
<glyph glyph-name="home" unicode="&#xe809;" d="M786 296v-267q0-15-11-25t-25-11h-214v214h-143v-214h-214q-15 0-25 11t-11 25v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-3-7 1-12 6l-35 41q-4 6-3 13t6 12l401 334q18 15 42 15t43-15l136-113v108q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q6-4 6-12t-4-13z" horiz-adv-x="928.6" />
<glyph glyph-name="plus" unicode="&#xe80a;" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" />
<glyph glyph-name="login" unicode="&#xe80b;" d="M661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 64 27t26 63v392q0 37-26 64t-64 26h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
<glyph glyph-name="emo-happy" unicode="&#xe80c;" d="M261 800c-60 0-109-65-109-144 0-80 49-145 109-145s110 65 110 145c0 79-49 144-110 144z m477 0c-61 0-110-65-110-144 0-80 49-145 110-145 60 0 110 65 110 145 0 79-50 144-110 144z m208-599c-13 0-27-5-37-16-4-4-8-8-12-12-111-109-253-164-396-165-142-2-285 50-396 155l-3 3-12 12c-21 21-54 20-75-1-20-21-20-55 1-76 3-4 8-8 14-14l3-3c132-124 301-186 469-184 169 1 337 67 468 195 5 5 9 10 14 14 20 22 20 56-1 77-10 10-23 15-37 15z" horiz-adv-x="999" />
<glyph glyph-name="link" unicode="&#xe80d;" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
<glyph glyph-name="bold" unicode="&#xe80e;" d="M310 1q41-18 78-18 210 0 210 187 0 64-23 101-15 24-34 41t-38 26-45 14-47 6-53 1q-40 0-56-6 0-29 0-88t-1-88q0-5 0-38t0-54 2-47 7-37z m-8 417q23-4 61-4 46 0 80 7t61 25 42 50 14 79q0 39-16 68t-45 46-60 24-69 8q-28 0-73-7 0-28 3-84t2-85q0-15 0-45t-1-44q0-26 1-38z m-302-497l1 53q9 2 48 9t59 15q4 7 7 15t4 19 4 18 1 21 0 19v36q0 548-12 572-2 5-12 8t-25 6-28 4-27 3-17 2l-2 46q55 1 190 6t208 6q13 0 38-1t38 0q39 0 76-7t72-24 60-39 41-59 16-76q0-29-9-54t-22-40-36-32-41-25-47-22q86-20 144-75t57-138q0-56-20-101t-52-72-77-48-91-27-98-8q-25 0-74 2t-74 1q-59 0-171-6t-129-7z" horiz-adv-x="785.7" />
<glyph glyph-name="italic" unicode="&#xe80f;" d="M0-78l10 48q12 4 34 9t40 11 33 13q16 19 23 56 1 4 35 162t63 303 29 165v14q-13 8-30 11t-39 4-32 3l10 58q19-1 67-4t84-4 67-1q27 0 55 1t68 4 54 4q-2-22-10-50-17-6-57-16t-60-19q-5-10-8-23t-5-23-4-25-4-24q-15-82-49-234t-43-198q-1-5-7-32t-11-51-9-46-4-32l1-10q9-3 103-18-2-24-9-55-6 0-18-1t-18-1q-16 0-49 6t-48 6q-77 1-115 1-28 0-79-5t-68-7z" horiz-adv-x="571.4" />
<glyph glyph-name="indent-left" unicode="&#xe810;" d="M214 546v-321q0-7-5-13t-13-5q-7 0-12 5l-161 161q-5 5-5 13t5 13l161 160q5 5 12 5 8 0 13-5t5-13z m786-428v-107q0-7-5-13t-13-5h-964q-7 0-13 5t-5 13v107q0 7 5 12t13 6h964q7 0 13-6t5-12z m0 214v-107q0-7-5-13t-13-5h-607q-7 0-13 5t-5 13v107q0 7 5 13t13 5h607q7 0 13-5t5-13z m0 214v-107q0-7-5-12t-13-6h-607q-7 0-13 6t-5 12v107q0 8 5 13t13 5h607q7 0 13-5t5-13z m0 215v-107q0-8-5-13t-13-5h-964q-7 0-13 5t-5 13v107q0 7 5 12t13 6h964q7 0 13-6t5-12z" horiz-adv-x="1000" />
<glyph glyph-name="indent-right" unicode="&#xe811;" d="M196 386q0-8-5-13l-160-161q-5-5-13-5-7 0-13 5t-5 13v321q0 8 5 13t13 5q8 0 13-5l160-160q5-5 5-13z m804-268v-107q0-7-5-13t-13-5h-964q-7 0-13 5t-5 13v107q0 7 5 12t13 6h964q7 0 13-6t5-12z m0 214v-107q0-7-5-13t-13-5h-607q-7 0-13 5t-5 13v107q0 7 5 13t13 5h607q7 0 13-5t5-13z m0 214v-107q0-7-5-12t-13-6h-607q-7 0-13 6t-5 12v107q0 8 5 13t13 5h607q7 0 13-5t5-13z m0 215v-107q0-8-5-13t-13-5h-964q-7 0-13 5t-5 13v107q0 7 5 12t13 6h964q7 0 13-6t5-12z" horiz-adv-x="1000" />
<glyph glyph-name="font" unicode="&#xe812;" d="M405 538l-95-251q18 0 76-1t89-1q11 0 32 1-48 141-102 252z m-405-617l1 44q13 4 31 7t32 6 28 8 25 17 17 28l132 344 156 404h72q4-8 6-12l114-268q19-43 60-144t63-153q9-19 33-80t40-94q11-26 19-32 11-9 49-17t47-11q4-22 4-32 0-3-1-8t0-7q-35 0-106 5t-107 4q-42 0-120-4t-99-4q0 24 2 43l73 16q1 0 7 1t9 2 8 3 9 4 6 4 5 6 1 8q0 9-17 54t-40 99-24 56l-251 1q-14-32-43-109t-28-91q0-12 8-21t24-14 27-7 32-5 23-2q1-11 1-32 0-5-1-16-33 0-98 6t-97 6q-5 0-15-3t-12-2q-45-8-105-8z" horiz-adv-x="928.6" />
<glyph glyph-name="text-height" unicode="&#xe813;" d="M973 64q19 0 24-10t-6-25l-71-90q-11-15-27-15t-27 15l-71 90q-11 15-6 25t24 10h44v572h-44q-19 0-24 10t6 25l71 90q11 15 27 15t27-15l71-90q11-15 6-25t-24-10h-44v-572h44z m-928 714l30-15q7-3 118-3 25 0 74 1t73 1q21 0 60 0t60 0h164q3 0 12 0t11 0 9 1 10 5 8 10l24 1q2 0 7-1t8 0q1-62 1-187 0-45-2-61-22-8-38-10-14 24-31 71-1 5-6 27t-8 41-4 20q-3 4-7 7t-8 3-8 1-10 1-9-1q-9 0-37 1t-41 0-36-1-40-3q-5-46-4-76 0-53 1-217t1-254q0-9-1-40t0-51 7-38q22-12 69-24t67-21q2-22 2-28 0-8-1-16l-19-1q-43-1-122 5t-115 5q-28 0-85-5t-84-5q-2 29-2 29v5q9 15 34 24t55 17 44 15q10 23 10 213 0 57-1 170t-2 169v65q0 1 0 9t1 14-1 14-2 13-2 8q-7 7-91 7-18 0-52-7t-44-15q-11-7-19-40t-18-62-24-30q-23 15-31 25v214z" horiz-adv-x="1000" />
<glyph glyph-name="picture" unicode="&#xe814;" d="M357 529q0-45-31-76t-76-32-76 32-31 76 31 76 76 31 76-31 31-76z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-7 6-13t12-5h893q7 0 13 5t5 13v678q0 8-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
<glyph glyph-name="align-left" unicode="&#xe815;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-714q-15 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-857q-15 0-25 11t-11 25v72q0 14 11 25t25 10h857q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-643q-15 0-25 10t-11 25v72q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="1000" />
<glyph glyph-name="ccw" unicode="&#xe816;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
<glyph glyph-name="cw" unicode="&#xe817;" d="M857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-61-91-23-111 23-111 61-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q17 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
<glyph glyph-name="scissors" unicode="&#xe818;" d="M536 350q14 0 25-11t10-25-10-25-25-10-25 10-11 25 11 25 25 11z m167-36l283-222q16-11 14-31-3-20-19-28l-72-36q-7-4-16-4-10 0-17 4l-385 216-62-36q-4-3-7-3 8-28 6-54-4-43-31-83t-74-69q-74-47-154-47-76 0-124 44-51 47-44 116 4 42 31 82t73 69q74 47 155 47 46 0 84-18 5 8 13 13l68 40-68 41q-8 5-13 12-38-17-84-17-81 0-155 47-46 30-73 69t-31 82q-3 33 8 63t36 52q47 44 124 44 80 0 154-47 46-29 74-68t31-83q2-27-6-54 3-1 7-3l62-37 385 216q7 5 17 5 9 0 16-4l72-36q16-9 19-28 2-20-14-32z m-380 145q26 24 12 61t-59 65q-52 33-107 33-42 0-63-20-26-24-12-60t59-66q51-33 107-33 41 0 63 20z m-47-415q45 28 59 65t-12 60q-22 20-63 20-56 0-107-33-45-28-59-65t12-60q21-20 63-20 55 0 107 33z m99 342l54-33v7q0 20 18 31l8 4-44 26-15-14q-1-2-5-6t-7-7q-1-1-2-2t-2-1z m125-125l54-18 410 321-71 36-429-240v-64l-89-53 5-5q1-1 4-3 2-2 6-7t6-6l15-15z m393-232l71 35-290 228-99-77q-1-2-7-4z" horiz-adv-x="1000" />
<glyph glyph-name="minus" unicode="&#xe819;" d="M786 439v-107q0-22-16-38t-38-15h-678q-23 0-38 15t-16 38v107q0 23 16 38t38 16h678q23 0 38-16t16-38z" horiz-adv-x="785.7" />
<glyph glyph-name="tint" unicode="&#xe81a;" d="M286 207q0 20-11 39-1 0-9 12t-14 21-14 25-12 28q-2 9-12 9t-11-9q-4-13-12-28t-14-25-14-21-9-12q-11-19-11-39 0-29 21-50t50-21 51 21 21 50z m285 72q0-119-83-202t-202-84-202 84-84 202q0 81 45 153 4 5 35 51t56 84 56 99 46 113q5 16 19 26t29 9 29-9 18-26q16-52 47-113t55-99 56-84 35-51q45-71 45-153z" horiz-adv-x="571.4" />
<glyph glyph-name="videocam" unicode="&#xe81b;" d="M1000 654v-608q0-23-22-32-7-3-14-3-15 0-25 10l-225 225v-92q0-67-47-114t-113-47h-393q-67 0-114 47t-47 114v392q0 67 47 114t114 47h393q66 0 113-47t47-114v-92l225 225q10 10 25 10 7 0 14-2 22-10 22-33z" horiz-adv-x="1000" />
<glyph glyph-name="align-center" unicode="&#xe81c;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-500q-14 0-25 11t-11 25v71q0 15 11 25t25 11h500q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v72q0 14 11 25t25 10h786q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-358q-14 0-25 10t-10 25v72q0 14 10 25t25 11h358q14 0 25-11t10-25z" horiz-adv-x="1000" />
<glyph glyph-name="align-right" unicode="&#xe81d;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-714q-14 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-857q-14 0-25 11t-11 25v72q0 14 11 25t25 10h857q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-643q-14 0-25 10t-10 25v72q0 14 10 25t25 11h643q15 0 25-11t11-25z" horiz-adv-x="1000" />
<glyph glyph-name="align-justify" unicode="&#xe81e;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-928q-15 0-25 11t-11 25v72q0 14 11 25t25 10h928q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v72q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
<glyph glyph-name="adjust" unicode="&#xe81f;" d="M429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
<glyph glyph-name="list-bullet" unicode="&#xf0ca;" d="M214 64q0-44-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m0 286q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 7 5 12t13 6h678q7 0 13-6t5-12z m-786 518q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
<glyph glyph-name="list-numbered" unicode="&#xf0cb;" d="M213-54q0-45-31-70t-75-26q-60 0-96 37l31 49q28-25 60-25 16 0 28 8t12 24q0 35-59 31l-14 31q4 6 18 24t24 31 20 21v1q-9 0-27-1t-27 0v-30h-59v85h186v-49l-53-65q28-6 45-27t17-49z m1 350v-89h-202q-4 20-4 30 0 29 14 52t31 38 37 27 31 24 14 25q0 14-9 22t-22 7q-25 0-45-32l-47 33q13 28 40 44t59 16q40 0 68-23t28-63q0-28-19-51t-42-36-42-28-20-30h71v34h59z m786-178v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 8 5 13t13 5h678q7 0 13-6t5-12z m-786 502v-56h-187v56h60q0 22 0 67t1 68v7h-1q-5-10-28-30l-40 42 76 71h59v-225h60z m786-216v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
<glyph glyph-name="strike" unicode="&#xf0cc;" d="M982 350q8 0 13-5t5-13v-36q0-7-5-12t-13-5h-964q-8 0-13 5t-5 12v36q0 8 5 13t13 5h964z m-712 36q-16 19-29 44-27 55-27 105 0 101 75 173 74 71 219 71 28 0 94-11 36-7 98-27 6-21 12-66 8-68 8-102 0-10-3-25l-7-2-46 4-8 1q-28 83-58 114-49 51-117 51-64 0-101-33-38-32-38-81 0-41 37-78t156-72q38-12 96-37 33-16 53-29h-414z m283-143h229q4-22 4-51 0-62-23-119-13-31-40-58-20-19-61-45-44-27-85-37-45-12-113-12-64 0-109 13l-78 23q-32 8-40 15-5 5-5 12v8q0 60-1 87 0 17 0 38l1 20v25l57 1q8-19 17-40t12-31 7-15q20-32 45-52 24-20 59-32 33-12 73-12 36 0 78 15 43 14 68 48 26 34 26 72 0 47-45 87-19 16-76 40z" horiz-adv-x="1000" />
<glyph glyph-name="underline" unicode="&#xf0cd;" d="M27 726q-21 1-25 2l-2 49q7 1 22 1 34 0 63-3 74-4 93-4 47 0 93 2 65 2 82 3 31 0 48 1l-1-8 1-36v-5q-33-5-69-5-33 0-44-14-7-7-7-73 0-7 0-18t0-15l1-127 8-157q3-69 28-112 20-33 54-52 49-26 98-26 59 0 107 16 31 10 55 28 27 20 37 36 20 31 29 63 12 41 12 128 0 44-2 72t-6 68-8 89l-2 33q-3 37-13 49-19 20-43 19l-56-1-8 2 1 48h47l114-6q43-2 110 6l10-1q3-22 3-29 0-4-2-17-25-7-47-8-41-6-44-9-8-8-8-23 0-4 0-15t1-17q5-11 13-221 3-109-9-170-8-42-23-68-21-36-62-69-42-31-102-49-61-19-142-19-93 0-159 26-66 26-99 68-34 42-47 109-9 45-9 132v186q0 105-9 119-14 20-82 22z m830-787v36q0 8-5 13t-13 5h-821q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h821q8 0 13 5t5 13z" horiz-adv-x="857.1" />
<glyph glyph-name="table" unicode="&#xf0ce;" d="M286 82v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-12-5t-6-12v-108q0-7 6-12t12-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
<glyph glyph-name="magic" unicode="&#xf0d0;" d="M664 526l164 163-60 60-164-163z m250 163q0-15-10-25l-718-718q-10-10-25-10t-25 10l-111 111q-10 10-10 25t10 25l718 718q10 10 25 10t25-10l111-111q10-10 10-25z m-754 106l54-16-54-17-17-55-17 55-55 17 55 16 17 55z m195-90l109-34-109-33-34-109-33 109-109 33 109 34 33 109z m519-267l55-17-55-16-17-55-17 55-54 16 54 17 17 55z m-357 357l54-16-54-17-17-55-17 55-54 17 54 16 17 55z" horiz-adv-x="928.6" />
<glyph glyph-name="upload-cloud" unicode="&#xf0ee;" d="M714 368q0 8-5 13l-196 196q-5 5-13 5t-13-5l-196-196q-5-6-5-13 0-8 5-13t13-5h125v-196q0-8 5-13t12-5h108q7 0 12 5t5 13v196h125q8 0 13 5t5 13z m357-161q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
<glyph glyph-name="circle" unicode="&#xf111;" d="M857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
<glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
<glyph glyph-name="unlink" unicode="&#xf127;" d="M245 141l-143-143q-6-5-13-5t-12 5q-6 6-6 13t6 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 12-24 31l134 10 152-153q15-15 38-15t38 15l82 81q16 16 16 37 0 23-16 38l-153 154 10 133q20-11 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l143 143q5 5 12 5t13-5q5-6 5-13t-5-13z" horiz-adv-x="928.6" />
<glyph glyph-name="info" unicode="&#xf129;" d="M357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
<glyph glyph-name="superscript" unicode="&#xf12b;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m355 379v-115h-287l-1 15q-3 16-3 26 0 36 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-29 0-54-21-8-6-20-22l-59 52q15 20 35 37 47 36 105 36 61 0 99-33t38-89q0-31-13-57t-35-43-45-33-46-28-37-28-17-36h130v45h70z" horiz-adv-x="857.1" />
<glyph glyph-name="subscript" unicode="&#xf12c;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m356-121v-115h-287l-2 15q-2 25-2 26 0 35 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-28 0-54-21-8-6-20-22l-59 52q15 20 35 37 45 36 105 36 62 0 100-33t37-89q0-37-19-66t-47-48-55-35-49-35-23-41h130v45h70z" horiz-adv-x="857.1" />
<glyph glyph-name="puzzle" unicode="&#xf12e;" d="M929 237q0-45-25-75t-69-30q-23 0-43 10t-33 21-32 21-39 10q-62 0-62-69 0-22 9-65t8-64v-3q-12 0-18 0-19-2-54-7t-65-7-54-3q-35 0-58 15t-23 47q0 20 9 39t22 32 21 33 10 43q0 44-31 69t-75 25q-47 0-80-26t-33-71q0-24 9-46t18-36 19-30 8-28q0-25-25-50-21-19-65-19-54 0-137 13-5 1-16 2t-15 3l-7 1q-1 0-2 0-1 0-1 1v571q1 0 10-2t19-2 12-2q83-14 137-14 44 0 65 20 25 24 25 49 0 13-8 29t-19 29-18 36-9 47q0 45 33 71t81 25q44 0 74-25t31-69q0-23-10-43t-21-33-22-31-9-40q0-32 23-47t58-14q35 0 100 8t91 9v-1q-1-1-2-9t-3-19-2-12q-13-84-13-137 0-45 19-65 25-26 50-26 12 0 28 8t30 19 36 19 46 8q46 0 71-33t26-80z" horiz-adv-x="928.6" />
<glyph glyph-name="doc-inv" unicode="&#xf15b;" d="M571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-37t38-16h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
<glyph glyph-name="right" unicode="&#xf178;" d="M964 352q0-8-5-14l-215-197q-8-8-19-4-11 5-11 17v125h-696q-8 0-13 5t-5 12v108q0 7 5 12t13 5h696v125q0 12 11 17t19-3l215-195q5-6 5-13z" horiz-adv-x="1000" />
<glyph glyph-name="cubes" unicode="&#xf1b3;" d="M357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-2 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 40t31 26l250 107q13 6 28 6t28-6l250-107q20-9 32-26t12-40v-223l242-104q20-8 32-26t11-39z" horiz-adv-x="1285.7" />
<glyph glyph-name="recycle" unicode="&#xf1b8;" d="M467 198l-9-206-1-12-234 16q-20 2-38 18t-26 36q-6 15-8 31t2 36 7 31 12 36 11 29q43-6 284-15z m-216 327l100-212-82 52q-35-41-62-81t-41-70-22-53-10-35l-2-11-106 199q-10 14-10 31t3 26l4 10q20 35 64 105l-78 48z m687-289l-105-200q-7-16-21-26t-24-12l-10-2q-40-4-122-7l4-91-128 205 118 202 4-97q94-9 157-2t95 18z m-439 516q-26-35-147-243l-177 104-11 7 126 199q11 17 33 25t45 5q13-1 27-6t23-12 23-18 21-20 20-22 17-19z m366-171l118-203q10-21 7-42t-15-42q-7-11-18-20t-22-16-27-12-26-9-29-8-25-7q-19 40-148 244l174 108z m-80 126l79 46-122-208-234 11 84 48q-19 50-42 93t-42 69-36 44-26 26l-10 7 226 0q18 1 33-6t22-16l6-8q21-34 62-106z" horiz-adv-x="1000" />
<glyph glyph-name="paragraph" unicode="&#xf1dd;" d="M713 745v-41q0-16-10-34t-24-18q-28 0-30-1-14-3-18-17-1-6-1-36v-643q0-14-11-24t-24-10h-60q-14 0-24 10t-10 24v680h-80v-680q0-14-9-24t-25-10h-60q-14 0-24 10t-10 24v277q-82 7-137 33-70 33-107 100-36 65-36 145 0 92 50 159 49 66 116 89 62 21 233 21h267q14 0 24-10t10-24z" horiz-adv-x="714.3" />
</font>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -0,0 +1,12 @@
<?php (SECURITY)?die():FALSE; ?>
<!-- Maintenance -->
<body>
<div id="content">
<div id="center">
<!-- Affichage du message en cas de maintenance -->
<p><?php echo AEOS_MAINTMSG; ?></p>
</div>
<div id="left"></div>
</div>
</body>
</html>

View file

@ -0,0 +1,3 @@
<!--
Ici, modification possible au format XML pour votre thème.
-->

347
themes/system/styles.css Normal file
View file

@ -0,0 +1,347 @@
@import url(https://fonts.googleapis.com/css?family=Roboto:300);
* {margin:0; padding:0; font-size:inherit; font-family:inherit;}
a {color:#4f97ea; text-decoration:none;}
select {-webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; outline: 0; box-shadow: none; border: 0 !important;}
body,html
{
font-family: "Roboto", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
font-size: 14px;
margin:0;
color: #666;
width:100%;
background:#ecf0f1;
height: 100%;
}
#General {height:100%;}
#Left {float:left; width:280px; height:100%; background:#3E424D; position:fixed;}
#Left #Logo {height:60px; text-align:center; background:#33363F;}
#Left #Logo img {left: 0; margin: 4px 0 0 105px;position: absolute; width:50px;}
#Left #Identification {background:#3E424D; height:45px; border-bottom:1px solid #33363F; padding:25px;}
#Left #Identification .Option1 {font-weight:bold; padding-top:5px; color:#FFFFFF;}
#Left #Identification .Option2 {color:#FFFFFF;}
#Left #Identification img {border-radius:50%; height:50px; width:50px; float:left; margin:-5px 10px 0px 0;}
#Left ul.Menu li {list-style-type:none; padding:16px 0 20px 10px; border-left:5px solid #3E424D; color:#C0C0C0;}
#Left ul.Menu li i.fas {margin-right:15px; min-width:15px;}
#Left ul.Menu li:hover {background:#33363F; border-left:5px solid #B33434; color:#FFFFFF;}
#Left ul.Menu li.selected {background:#33363F; border-left:5px solid #3478B3; color:#FFFFFF;}
#Left ul.Menu a li.middleMenu {background:#54565d; border-left:5px solid #54565d; height: 25px; padding: 10px 0 0 14px;}
#Left ul.Menu a li.middleMenuSelected {color: white; border-left: 5px solid #909090;}
#Right {margin-left:280px;}
#Right h3 {margin: 25px 0 25px 0; font-size: 20px;}
#Right #SideMenu {height:31px; background:#FFFFFF; box-shadow:0px 0px 10px #c0c0c0; padding:19px 40px 10px 40px; }
#Right #SideMenu li {color:#33363F; font-weight:bold; list-style-type:none; font-size:20px; font-weight:normal;}
#Right #SideMenu ul li.headerMenu a {color:#33363F;}
#Right #Content {padding:0 40px 40px 40px; margin-top:40px;}
#Right #Content .notification {color:#FFFFFF; padding:20px 40px 20px 40px; margin-bottom:40px; position:relative; box-shadow:0px 0px 10px #c0c0c0; -webkit-animation: fadeOut 3s forwards; animation: fadeOut 3s forwards;}
#Right #Content .notification p {width:80%; }
@keyframes fadeOut {
0% {}
90% {}
100% {color:#666B85; background:#FFFFFF;}
}
@-webkit-keyframes fadeOut {
0% {}
90% {}
100% {color:#666B85;background:#FFFFFF;}
}
#Right #Content .ZoneTexte h4 {font-size:20px; font-weight:normal; margin-bottom:25px;}
#Right #Content .ZoneTexte p {margin:10px 0 0 0;}
#Right #Footer {text-align: center; font-size: 12px; margin:0 0 25px 0;}
#Right #Content img.avatar {max-width:200px; margin-bottom:10px;}
#Right #Content td.fixedRow h4 {margin:0 0 10px 0;}
#Right #Content td.fixedRow {width:230px; height:270px; margin:0 auto 0; text-align:center}
#Module {width:69%;float:left; min-height:400px; margin-bottom:10px;}
#html-output {
white-space: pre-wrap;
display:none;
}
.pell {
border: 1px solid rgba(10, 10, 10, 0.1);
box-sizing: border-box;
}
.pell-content {
box-sizing: border-box;
height: 300px;
outline: 0;
overflow-y: auto;
padding: 10px;
background: #FFFFFF;
}
.pell-actionbar {
background-color: #FFF;
border-bottom: 1px solid rgba(10, 10, 10, 0.1);
}
.pell-button {
background-color: transparent;
border: none;
cursor: pointer;
height: 30px;
outline: 0;
width: 30px;
vertical-align: bottom;
}
.pell-button-selected {
background-color: #F0F0F0;
}
/*
.owEditor {margin-bottom:10px; box-sizing: border-box; width:100%; height:300px; text-align:left; }
.owEdit-panelContain {background: #FFFFFF; border: 1px solid #ccc;} {width:100%;}
.owEdit-button-undefined {background-color: #FFFFFF;}
*/
#Options {background:#ffffff; width:29%; float:right; min-height:400px;}
/* === Global === */
.button_erreur, .button_valide,
.button_basic, .input_basic, .select_basic, .field_basic {border:none; padding:10px; border-radius:5px; color:#FFFFFF;}
.button_erreur {background:#B57577; position: absolute; right: 8px; bottom: 10px;}
.button_erreur:hover {background:#482627;}
.button_valide {background:#B57577; position: absolute; right: 8px; bottom: 10px;}
.button_valide:hover {background:#482627;}
.button_basic {background:#3478B3; position: absolute; right: 8px; top: 10px;}
.button_basic:hover {background:#205A8C;}
.input_basic {background:#3478B3;}
.input_basic:hover {background:#205A8C;}
.input_normal {background: #c6c6c6; color: #000000; cursor:pointer;}
.input_normal:hover {background:#989898;}
.field_basic {background: #ffffff; color: #666B85; border: 1px solid #ccc; border-radius:0; width: calc((100%) - (22px)); margin: 0 0 10px 0;}
div.error {background:#9A5456;}
div.valide {background:#3C874A;}
.valide {color:#3C874A;}
.error {color:#B57577;}
.standby {}
/* === Administration === */
#Administration {width: 360px; padding: 8% 0 0; margin: auto;}
#Administration h1 {font-size: 14px; text-align: center; background: #437ec6; height: 100px; font-family: "Roboto", sans-serif; text-transform: uppercase; color: #FFFFFF;}
#Administration h1 img {position:absolute; width:76px; left:50%; margin:10px 0 0 -38px;}
#Administration hr {height: 2px; border: 0; border-top: 1px solid #cbcbcb;}
#Administration .form {position: relative; z-index: 1; background: #FFFFFF; max-width: 360px; margin: 0 auto 100px; padding: 45px; text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);}
#Administration .form input, #Administration .form button {font-family: inherit; font-size:inherit; border: 0; padding: 15px; outline:0; width:100%;}
#Administration .form input { background: #f2f2f2; margin: 0 0 15px; box-sizing: border-box;}
#Administration .form button { text-transform: uppercase; background: #437ec6; color: #FFFFFF; -webkit-transition: all 0.3 ease; transition: all 0.3 ease;}
#Administration .form button:hover,#Administration .form button:active,#Administration .form button:focus {background: #3568a1;}
#Administration .form .message {margin: 15px 0 0; color: #b3b3b3; font-size: 12px;}
#Administration .form .message a {color: #437ec6; text-decoration: none;}
#Administration .notification {position:absolute; top:15px; width:340px; color:#ffffff; padding:10px;}
#Administration #Footer {text-align:center; margin:0 auto 0;}
#Administration #Footer .copyright {text-align:center; margin: 10px 0 10px 0;}
#Update img {text-align:center; width:220px;}
#Update hr {border-top:1px solid #FFFFFF; margin:2px;}
#Update {width:220px; text-align:center; margin:0 auto 0; color:#c0c0c0; position:absolute; bottom:15px; left:20px;}
/* === Basics === */
.ZoneTexte, .Bloc {background:#FFFFFF; padding:40px; box-shadow:0px 0px 10px #c0c0c0; margin-bottom:40px;}
.Bloc {padding:0; border-top:4px solid #9ea7af; border-bottom:4px solid #9ea7af; }
.Bloc p {padding:20px;}
.clear {clear: both;}
.small {font-size:12px;}
.flex {display:flex;}
.hidden {display:none;}
.italic {font-style: italic;}
button, input[type=submit] {cursor:pointer;}
table {
background: #FFF;
border-collapse: collapse;
margin: 0 auto 20px;
padding:5px;
width: 100%;
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
}
th {
color:#C0C0C0;
background:#3e424d;
border-bottom:4px solid #9ea7af;
border-right: 1px solid #343a45;
font-size:17px;
font-weight: 100;
padding:10px 10px 10px 15px;
text-align:left;
vertical-align:middle;
}
tr {
border-top: 1px solid #C1C3D1;
border-bottom: 1px solid #C1C3D1;
color:#666B85;
font-size:16px;
font-weight:normal;
}
tr:hover td {
background:#F5F5F5;
color:#666666;
}
tr a {color:#666B85;}
td {
background:#FFFFFF;
padding:10px 10px 10px 15px;
text-align:left;
vertical-align:middle;
font-weight:300;
font-size:15px;
/*border-right: 1px solid #C1C3D1;*/
border-right:none;
}
tr:first-child {border-top:4px solid #9ea7af;}
tr:last-child {border-bottom:4px solid #9ea7af;}
td:last-child {border-right: 0px;}
th:last-child {border-right:none;}
/*
tr:nth-child(odd) td {background:#EBEBEB;}
tr:nth-child(odd):hover td {background:#D4D6D8;}
*/
th.text-left, td.text-left {text-align: left;}
th.text-center, td.text-center {text-align: center;}
th.text-right, td.text-right {text-align: right;}
/* Custom Select */
.select_basic, .owEdit-select_basic {
position: relative;
display: block;
width: 20em;
height: 3em;
line-height: 3;
background: #ffffff;
overflow: hidden;
border-radius: .25em;
color:#666B85;
padding:0;
margin:0 25px 0 0;
}
.owEdit-select_basic {margin:2px 0 0 0; border:1px solid #ccc; border-radius: 0; width:99%;}
select {
width: 100%;
height: 100%;
margin: 0;
padding: 0 0 0 .5em;
background: #ffffff;
cursor: pointer;
}
select::-ms-expand {
display: none;
}
/* Arrow */
.select_basic::after, .owEdit-select_basic::after {
content: '\25BC';
position: absolute;
top: 0;
right: 0;
bottom: 0;
padding: 0 1em;
pointer-events: none;
}
/* Transition */
.select_basic:hover::after, .owEdit-select_basic:hover::after {
color: #3478B3;
}
.select_basic::after, .owEdit-select_basic::after {
-webkit-transition: .25s all ease;
-o-transition: .25s all ease;
transition: .25s all ease;
}
/* Cusotm checkbox */
input[type=checkbox]{
height: 0;
width: 0;
visibility: hidden;
display:none;
}
label.checkbox {
cursor: pointer;
text-indent: -9999px;
width: 25px;
height: 15px;
background: grey;
display: block;
border-radius: 100px;
position: relative;
}
label.checkbox:after {
content: '';
position: absolute;
top: 1px;
left: 1px;
width: 13px;
height: 13px;
background: #fff;
border-radius: 90px;
transition: 0.3s;
}
input:checked + label.checkbox {
background: #bada55;
}
input:checked + label.checkbox:after {
left: calc(100% - 1px);
transform: translateX(-100%);
}
label.checkbox:active:after {
width: 8px;
}
/* Install.css */
.language, h3, h4 {margin-bottom:20px;}
h6 {font-size:20px;}