Merge branch '12304' into 12400
This commit is contained in:
commit
c4fd214e04
16
CHANGES.md
16
CHANGES.md
@ -1,5 +1,21 @@
|
||||
# Changelog
|
||||
|
||||
## Version 12.3.04
|
||||
### Corrections
|
||||
- Corrige un défaut d'actualisation de la liste des pages et du site map lorsque la page change d'id.
|
||||
- Serveur SMTP :
|
||||
- Corrige le décryptage du mot de passe SMTP.
|
||||
- Corrige un défaut d'encodage UTF-8 du sujet du mail et du titre du site.
|
||||
- Traduction du message de compte bloqué.
|
||||
### Améliorations
|
||||
- Module Blog :
|
||||
- Aspect de la liste des articles présenté en tableau avec un bouton "Lire la suite" agrémenté d'un effet de flou.
|
||||
- Des tailles de masquage du texte des articles plus importantes sont proposées.
|
||||
- Comptes de réseaux sociaux :
|
||||
- Sont ajoutés Steam, Twitch, Vimeo et Reddit.
|
||||
- Des icônes accompagnent le noms des réseaux dans la configuration.
|
||||
|
||||
|
||||
## Version 12.3.03
|
||||
- Corrige le problème d'affichage lors de l'édition d'une page contenant une feuille style commentée.
|
||||
- Corrige des problèmes d'interprétation des scripts intégrés dans une page.
|
||||
|
@ -1,4 +1,4 @@
|
||||
# ZwiiCMS 12.3.03
|
||||
# ZwiiCMS 12.3.04
|
||||
|
||||
Zwii est un CMS sans base de données (flat-file) qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# ZwiiCMS 12.3.03
|
||||
# ZwiiCMS 12.3.04
|
||||
|
||||
Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge.
|
||||
|
||||
|
@ -688,25 +688,23 @@ class helper
|
||||
/**
|
||||
* Cryptage
|
||||
* @param string $key la clé d'encryptage
|
||||
* @param string $payload la chaine à coder
|
||||
* @param string $string la chaine à coder
|
||||
* @return string
|
||||
*/
|
||||
public static function encrypt($key, $payload)
|
||||
{
|
||||
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
|
||||
$encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
|
||||
return base64_encode($encrypted . '::' . $iv);
|
||||
}
|
||||
public static function encrypt($string, $key) {
|
||||
$encrypted = openssl_encrypt($string, "AES-256-CBC", $key, 0, substr(md5($key), 0, 16));
|
||||
return base64_encode($encrypted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Décryptage
|
||||
* @param string $key la clé d'encryptage
|
||||
* @param string $garble la chaine à décoder
|
||||
* @param string $string la chaine à décoder
|
||||
* @return string
|
||||
*/
|
||||
public static function decrypt($key, $garble)
|
||||
{
|
||||
list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
|
||||
return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
|
||||
}
|
||||
}
|
||||
public static function decrypt($string, $key) {
|
||||
$decrypted = openssl_decrypt(base64_decode($string), "AES-256-CBC", $key, 0, substr(md5($key), 0, 16));
|
||||
return $decrypted;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -410,6 +410,22 @@ class layout extends common
|
||||
$socialUrl = 'https://www.github.com/';
|
||||
$title = 'Github';
|
||||
break;
|
||||
case 'redditId':
|
||||
$socialUrl = 'https://www.reddit.com/user/';
|
||||
$title = 'Reddit';
|
||||
break;
|
||||
case 'twitchId':
|
||||
$socialUrl = 'https://www.twitch.tv/';
|
||||
$title = 'Twitch';
|
||||
break;
|
||||
case 'vimeoId':
|
||||
$socialUrl = 'https://vimeo.com/';
|
||||
$title = 'Vimeo';
|
||||
break;
|
||||
case 'steamId':
|
||||
$socialUrl = 'https://steamcommunity.com/id/';
|
||||
$title = 'Steam';
|
||||
break;
|
||||
default:
|
||||
$socialUrl = '';
|
||||
}
|
||||
@ -965,7 +981,7 @@ class layout extends common
|
||||
'help' => 'Fichiers',
|
||||
'href' => helper::baseUrl(false) . 'core/vendor/filemanager/dialog.php?type=0&akey=' . md5_file(self::DATA_DIR . 'core.json') . '&lang=' . $this->getData(['user', $this->getUser('id'), 'language']),
|
||||
'attr' => 'data-lity'
|
||||
]) . '</li>';
|
||||
]) . '</li>';
|
||||
}
|
||||
if ($this->getUser('group') >= self::GROUP_ADMIN) {
|
||||
$rightItems .= '<li>' . template::ico('brush', [
|
||||
@ -1016,10 +1032,10 @@ class layout extends common
|
||||
}
|
||||
}
|
||||
if ($this->getUser('group') >= self::GROUP_MODERATOR) {
|
||||
$rightItems .= '<li><a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id') . '/' . $_SESSION['csrf'] .
|
||||
'" data-tippy-content="'. helper::translate('Configurer mon compte') . '">' .
|
||||
template::ico('user', ['margin' => 'right']) . '<span id="displayUsername">' . $this->getUser('firstname') . ' ' . $this->getUser('lastname') .
|
||||
'</span></a></li>';
|
||||
$rightItems .= '<li><a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id') . '/' . $_SESSION['csrf'] .
|
||||
'" data-tippy-content="' . helper::translate('Configurer mon compte') . '">' .
|
||||
template::ico('user', ['margin' => 'right']) . '<span id="displayUsername">' . $this->getUser('firstname') . ' ' . $this->getUser('lastname') .
|
||||
'</span></a></li>';
|
||||
}
|
||||
$rightItems .= '<li>' . template::ico('logout', [
|
||||
'help' => 'Déconnecter',
|
||||
@ -1043,8 +1059,8 @@ class layout extends common
|
||||
if ($this->core->output['inlineScript']) {
|
||||
$inlineScript = implode($this->core->output['inlineScript']);
|
||||
}
|
||||
echo '<script defer>' . helper::minifyJs($coreScript . $this->core->output['script'] ) . '</script>';
|
||||
echo '<script defer>' . htmlspecialchars_decode(helper::minifyJs($inlineScript)) . '</script>';
|
||||
echo '<script defer>' . helper::minifyJs($coreScript . $this->core->output['script']) . '</script>';
|
||||
echo '<script defer>' . helper::minifyJs(htmlspecialchars_decode($inlineScript)) . '</script>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
291
core/core.php
291
core/core.php
@ -371,55 +371,10 @@ class common
|
||||
|
||||
// Construit la liste des pages parents/enfants
|
||||
if ($this->hierarchy['all'] === []) {
|
||||
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
|
||||
// Parents
|
||||
foreach ($pages as $pageId => $pagePosition) {
|
||||
if (
|
||||
// Page parent
|
||||
$this->getData(['page', $pageId, 'parentPageId']) === ""
|
||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
||||
)
|
||||
)
|
||||
) {
|
||||
if ($pagePosition !== 0) {
|
||||
$this->hierarchy['visible'][$pageId] = [];
|
||||
}
|
||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||
$this->hierarchy['bar'][$pageId] = [];
|
||||
}
|
||||
$this->hierarchy['all'][$pageId] = [];
|
||||
}
|
||||
}
|
||||
// Enfants
|
||||
foreach ($pages as $pageId => $pagePosition) {
|
||||
if (
|
||||
// Page parent
|
||||
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
|
||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||
and (
|
||||
($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||
and $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
||||
)
|
||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and $this->getUser('group') >= $this->getData(['page', $parentId, 'group'])
|
||||
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
||||
)
|
||||
)
|
||||
) {
|
||||
if ($pagePosition !== 0) {
|
||||
$this->hierarchy['visible'][$parentId][] = $pageId;
|
||||
}
|
||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||
$this->hierarchy['bar'][$pageId] = [];
|
||||
}
|
||||
$this->hierarchy['all'][$parentId][] = $pageId;
|
||||
}
|
||||
}
|
||||
$this->buildHierarchy();
|
||||
}
|
||||
|
||||
|
||||
// Construit l'url
|
||||
if ($this->url === '') {
|
||||
if ($url = $_SERVER['QUERY_STRING']) {
|
||||
@ -707,6 +662,7 @@ class common
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Accède à la liste des pages parents et de leurs enfants
|
||||
* @param int $parentId Id de la page parent
|
||||
@ -732,6 +688,133 @@ class common
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour construire le tableau des pages
|
||||
* Appelée par le core uniquement
|
||||
*/
|
||||
|
||||
private function buildHierarchy()
|
||||
{
|
||||
|
||||
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
|
||||
// Parents
|
||||
foreach ($pages as $pageId => $pagePosition) {
|
||||
if (
|
||||
// Page parent
|
||||
$this->getData(['page', $pageId, 'parentPageId']) === ""
|
||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
||||
)
|
||||
)
|
||||
) {
|
||||
if ($pagePosition !== 0) {
|
||||
$this->hierarchy['visible'][$pageId] = [];
|
||||
}
|
||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||
$this->hierarchy['bar'][$pageId] = [];
|
||||
}
|
||||
$this->hierarchy['all'][$pageId] = [];
|
||||
}
|
||||
}
|
||||
// Enfants
|
||||
foreach ($pages as $pageId => $pagePosition) {
|
||||
if (
|
||||
// Page parent
|
||||
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
|
||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||
and (
|
||||
($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||
and $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
||||
)
|
||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and $this->getUser('group') >= $this->getData(['page', $parentId, 'group'])
|
||||
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
||||
)
|
||||
)
|
||||
) {
|
||||
if ($pagePosition !== 0) {
|
||||
$this->hierarchy['visible'][$parentId][] = $pageId;
|
||||
}
|
||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||
$this->hierarchy['bar'][$pageId] = [];
|
||||
}
|
||||
$this->hierarchy['all'][$parentId][] = $pageId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Génère un fichier json avec la liste des pages
|
||||
*
|
||||
*/
|
||||
private function tinyMcePages()
|
||||
{
|
||||
// Sauve la liste des pages pour TinyMCE
|
||||
$parents = [];
|
||||
$rewrite = (helper::checkRewrite()) ? '' : '?';
|
||||
// Boucle de recherche des pages actives
|
||||
foreach ($this->getHierarchy(null, false, false) as $parentId => $childIds) {
|
||||
$children = [];
|
||||
// Exclure les barres
|
||||
if ($this->getData(['page', $parentId, 'block']) !== 'bar') {
|
||||
// Boucler sur les enfants et récupérer le tableau children avec la liste des enfants
|
||||
foreach ($childIds as $childId) {
|
||||
$children[] = [
|
||||
'title' => ' » ' . html_entity_decode($this->getData(['page', $childId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $childId
|
||||
];
|
||||
}
|
||||
// Traitement
|
||||
if (empty($childIds)) {
|
||||
// Pas d'enfant, uniquement l'entrée du parent
|
||||
$parents[] = [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId
|
||||
];
|
||||
} else {
|
||||
// Des enfants, on ajoute la page parent en premier
|
||||
array_unshift($children, [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId
|
||||
]);
|
||||
// puis on ajoute les enfants au parent
|
||||
$parents[] = [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId,
|
||||
'menu' => $children
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sitemap et Search
|
||||
$children = [];
|
||||
$children[] = [
|
||||
'title' => 'Rechercher dans le site',
|
||||
'value' => $rewrite . 'search'
|
||||
];
|
||||
$children[] = [
|
||||
'title' => 'Plan du site',
|
||||
'value' => $rewrite . 'sitemap'
|
||||
];
|
||||
$parents[] = [
|
||||
'title' => 'Pages spéciales',
|
||||
'value' => '#',
|
||||
'menu' => $children
|
||||
];
|
||||
|
||||
// Enregistrement : 3 tentatives
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
if (file_put_contents('core/vendor/tinymce/link_list.json', json_encode($parents, JSON_UNESCAPED_UNICODE), LOCK_EX) !== false) {
|
||||
break;
|
||||
}
|
||||
// Pause de 10 millisecondes
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Accède à une valeur des variables http (ordre de recherche en l'absence de type : _COOKIE, _POST)
|
||||
* @param string $key Clé de la valeur
|
||||
@ -837,74 +920,6 @@ class common
|
||||
return ($this->checkCSRF() and $this->input['_POST'] !== []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Génère un fichier json avec la liste des pages
|
||||
*
|
||||
*/
|
||||
public function listPages()
|
||||
{
|
||||
// Sauve la liste des pages pour TinyMCE
|
||||
$parents = [];
|
||||
$rewrite = (helper::checkRewrite()) ? '' : '?';
|
||||
// Boucle de recherche des pages actives
|
||||
foreach ($this->getHierarchy(null, false, false) as $parentId => $childIds) {
|
||||
$children = [];
|
||||
// Exclure les barres
|
||||
if ($this->getData(['page', $parentId, 'block']) !== 'bar') {
|
||||
// Boucler sur les enfants et récupérer le tableau children avec la liste des enfants
|
||||
foreach ($childIds as $childId) {
|
||||
$children[] = [
|
||||
'title' => ' » ' . html_entity_decode($this->getData(['page', $childId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $childId
|
||||
];
|
||||
}
|
||||
// Traitement
|
||||
if (empty($childIds)) {
|
||||
// Pas d'enfant, uniquement l'entrée du parent
|
||||
$parents[] = [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId
|
||||
];
|
||||
} else {
|
||||
// Des enfants, on ajoute la page parent en premier
|
||||
array_unshift($children, [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId
|
||||
]);
|
||||
// puis on ajoute les enfants au parent
|
||||
$parents[] = [
|
||||
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
|
||||
'value' => $rewrite . $parentId,
|
||||
'menu' => $children
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sitemap et Search
|
||||
$children = [];
|
||||
$children[] = [
|
||||
'title' => 'Rechercher dans le site',
|
||||
'value' => $rewrite . 'search'
|
||||
];
|
||||
$children[] = [
|
||||
'title' => 'Plan du site',
|
||||
'value' => $rewrite . 'sitemap'
|
||||
];
|
||||
$parents[] = [
|
||||
'title' => 'Pages spéciales',
|
||||
'value' => '#',
|
||||
'menu' => $children
|
||||
];
|
||||
|
||||
// Enregistrement : 3 tentatives
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
if (file_put_contents('core/vendor/tinymce/link_list.json', json_encode($parents), LOCK_EX) !== false) {
|
||||
break;
|
||||
}
|
||||
// Pause de 10 millisecondes
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne une chemin localisé pour l'enregistrement des données
|
||||
@ -931,14 +946,20 @@ class common
|
||||
/**
|
||||
* Génère un fichier un fichier sitemap.xml
|
||||
* https://github.com/icamys/php-sitemap-generator
|
||||
* $command valeurs possible
|
||||
* all : génère un site map complet
|
||||
* Sinon contient id de la page à créer
|
||||
* @param string Valeurs possibles
|
||||
*/
|
||||
|
||||
public function createSitemap($command = "all")
|
||||
public function updateSitemap()
|
||||
{
|
||||
|
||||
// Rafraîchit la liste des pages après une modification de pageId notamment
|
||||
$this->buildHierarchy();
|
||||
|
||||
// Actualise la liste des pages pour TinyMCE
|
||||
$this->tinyMcePages();
|
||||
|
||||
//require_once "core/vendor/sitemap/SitemapGenerator.php";
|
||||
|
||||
$timezone = $this->getData(['config', 'timezone']);
|
||||
@ -1035,6 +1056,8 @@ class common
|
||||
}
|
||||
|
||||
return (file_exists('sitemap.xml') && file_exists('robots.txt'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1109,37 +1132,46 @@ class common
|
||||
include 'core/layout/mail.php';
|
||||
$layout = ob_get_clean();
|
||||
$mail = new PHPMailer\PHPMailer\PHPMailer;
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->setLanguage(substr(self::$i18nUI, 0, 2), 'core/class/phpmailer/i18n/');
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->Encoding = 'base64';
|
||||
// Mail
|
||||
try {
|
||||
// Paramètres SMTP perso
|
||||
if ($this->getdata(['config', 'smtp', 'enable'])) {
|
||||
$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER;
|
||||
//$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_CLIENT;
|
||||
$mail->isSMTP();
|
||||
$mail->SMTPAutoTLS = false;
|
||||
$mail->SMTPSecure = false;
|
||||
$mail->SMTPAuth = false;
|
||||
$mail->SMTPAuth = false;
|
||||
$mail->Host = $this->getdata(['config', 'smtp', 'host']);
|
||||
$mail->Port = (int) $this->getdata(['config', 'smtp', 'port']);
|
||||
if ($this->getData(['config', 'smtp', 'auth'])) {
|
||||
$mail->SMTPAutoTLS = true;
|
||||
$mail->SMTPSecure = true;
|
||||
$mail->SMTPAuth = $this->getData(['config', 'smtp', 'auth']);
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = $this->getData(['config', 'smtp', 'username']);
|
||||
$mail->Password = helper::decrypt($this->getData(['config', 'smtp', 'username']), $this->getData(['config', 'smtp', 'password']));
|
||||
$mail->SMTPSecure = $this->getData(['config', 'smtp', 'secure']);
|
||||
$mail->Password = helper::decrypt($this->getData(['config', 'smtp', 'password']), $this->getData(['config', 'smtp', 'host']));
|
||||
switch ($this->getData(['config', 'smtp', 'secure'])) {
|
||||
case 'ssl':
|
||||
$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS;
|
||||
break;
|
||||
case 'tls':
|
||||
$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Expéditeur
|
||||
$host = str_replace('www.', '', $_SERVER['HTTP_HOST']);
|
||||
$from = $from ? $from : 'no-reply@' . $host;
|
||||
$mail->setFrom($from, $this->getData(['locale', 'title']));
|
||||
$mail->setFrom($from, html_entity_decode($this->getData(['locale', 'title'])));
|
||||
|
||||
// répondre à
|
||||
if (is_null($replyTo)) {
|
||||
$mail->addReplyTo($from, $this->getData(['locale', 'title']));
|
||||
$mail->addReplyTo($from, html_entity_decode($this->getData(['locale', 'title'])));
|
||||
} else {
|
||||
$mail->addReplyTo($replyTo);
|
||||
}
|
||||
@ -1153,7 +1185,7 @@ class common
|
||||
$mail->addAddress($to);
|
||||
}
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = $subject;
|
||||
$mail->Subject = html_entity_decode($subject);
|
||||
$mail->Body = $layout;
|
||||
$mail->AltBody = strip_tags($content);
|
||||
if ($mail->send()) {
|
||||
@ -1162,7 +1194,7 @@ class common
|
||||
return $mail->ErrorInfo;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
return $mail->ErrorInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1258,7 +1290,7 @@ class common
|
||||
new RecursiveCallbackFilterIterator(
|
||||
new RecursiveDirectoryIterator(
|
||||
$folder,
|
||||
RecursiveDirectoryIterator::SKIP_DOTS
|
||||
RecursiveDirectoryIterator::SKIP_DOTS
|
||||
),
|
||||
function ($fileInfo, $key, $iterator) use ($filter) {
|
||||
return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter);
|
||||
@ -1275,3 +1307,4 @@ class common
|
||||
$zip->close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -951,6 +951,38 @@ footer #footerSocials .zwiico-github:hover {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-reddit {
|
||||
background: #FF4500;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-reddit:hover {
|
||||
background: #D23311;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-steam {
|
||||
background: #171A21;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-steam:hover {
|
||||
background: #0F1318;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-vimeo {
|
||||
background: #162221;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-vimeo:hover {
|
||||
background: #121B1E;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-twitch {
|
||||
background: #9146FF;
|
||||
}
|
||||
|
||||
footer #footerSocials .zwiico-twitch:hover {
|
||||
background: #703CEC;
|
||||
}
|
||||
|
||||
|
||||
/* Bulle de dialogue */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo substr(self::$i18nContent, 0, 2);?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
@ -213,7 +213,7 @@ class config extends common
|
||||
{
|
||||
|
||||
// Mettre à jour le site map
|
||||
$successSitemap = $this->createSitemap();
|
||||
$successSitemap = $this->updateSitemap();
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
@ -451,16 +451,20 @@ class config extends common
|
||||
'twitterId' => $this->getInput('socialTwitterId'),
|
||||
'youtubeId' => $this->getInput('socialYoutubeId'),
|
||||
'youtubeUserId' => $this->getInput('socialYoutubeUserId'),
|
||||
'githubId' => $this->getInput('socialGithubId')
|
||||
'githubId' => $this->getInput('socialGithubId'),
|
||||
'redditId' => $this->getInput('socialRedditId'),
|
||||
'twitchId' => $this->getInput('socialTwitchId'),
|
||||
'vimeoId' => $this->getInput('socialVimeoId'),
|
||||
'steamId' =>$this->getInput('socialSteamId'),
|
||||
],
|
||||
'smtp' => [
|
||||
'enable' => $this->getInput('smtpEnable', helper::FILTER_BOOLEAN),
|
||||
'host' => $this->getInput('smtpHost', helper::FILTER_STRING_SHORT, $this->getInput('smtpEnable', helper::FILTER_BOOLEAN)),
|
||||
'port' => $this->getInput('smtpPort', helper::FILTER_INT, $this->getInput('smtpEnable', helper::FILTER_BOOLEAN)),
|
||||
'host' => $this->getInput('smtpHost', helper::FILTER_STRING_SHORT),
|
||||
'port' => $this->getInput('smtpPort', helper::FILTER_INT),
|
||||
'auth' => $this->getInput('smtpAuth', helper::FILTER_BOOLEAN),
|
||||
'secure' => $this->getInput('smtpSecure', helper::FILTER_STRING_SHORT),
|
||||
'username' => $this->getInput('smtpUsername', helper::FILTER_STRING_SHORT, $this->getInput('smtpAuth', helper::FILTER_BOOLEAN)),
|
||||
'password' => helper::encrypt($this->getData(['config', 'smtp', 'username']), $this->getInput('smtpPassword', null, $this->getInput('smtpAuth', helper::FILTER_BOOLEAN))),
|
||||
'username' => $this->getInput('smtpUsername', helper::FILTER_STRING_SHORT),
|
||||
'password' => helper::encrypt($this->getInput('smtpPassword', helper::FILTER_STRING_SHORT),$this->getInput('smtpHost', helper::FILTER_STRING_SHORT)),
|
||||
'from' => $this->getInput('smtpFrom', helper::FILTER_MAIL, true),
|
||||
],
|
||||
'seo' => [
|
||||
|
@ -2,7 +2,8 @@
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4><?php echo helper::translate('Capture d\'écran Open Graph'); ?>
|
||||
<h4>
|
||||
<?php echo helper::translate('Capture d\'écran Open Graph'); ?>
|
||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
||||
<a href="https://doc.zwiicms.fr/referencement" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
||||
@ -30,10 +31,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col5">
|
||||
<?php if (file_exists(self::FILE_DIR . 'source/screenshot.jpg')) : ?>
|
||||
<?php if (file_exists(self::FILE_DIR . 'source/screenshot.jpg')): ?>
|
||||
<div class="row">
|
||||
<div class="col8 offset2 textAlignCenter">
|
||||
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR . 'source/screenshot.jpg'; ?>" data-tippy-content="Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier 'screenshot.jpg' est effacé du gestionnaire de fichiers." />
|
||||
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR . 'source/screenshot.jpg'; ?>"
|
||||
data-tippy-content="Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier 'screenshot.jpg' est effacé du gestionnaire de fichiers." />
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
@ -45,7 +47,8 @@
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4><?php echo helper::translate('Référencement'); ?>
|
||||
<h4>
|
||||
<?php echo helper::translate('Référencement'); ?>
|
||||
</h4>
|
||||
<div class="row">
|
||||
<div class="col4 offset1">
|
||||
@ -66,7 +69,8 @@
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4><?php echo helper::translate('Réseaux sociaux'); ?>
|
||||
<h4>
|
||||
<?php echo helper::translate('Réseaux sociaux'); ?>
|
||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
||||
<a href="https://doc.zwiicms.fr/reseaux-sociaux" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
||||
@ -77,61 +81,92 @@
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialFacebookId', [
|
||||
'help' => 'Saisissez votre ID : https://www.facebook.com/[ID].',
|
||||
'label' => 'Facebook',
|
||||
'label' => template::ico('facebook', ['margin' => 'right']) . 'Facebook',
|
||||
'value' => $this->getData(['config', 'social', 'facebookId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialInstagramId', [
|
||||
'help' => 'Saisissez votre ID : https://www.instagram.com/[ID].',
|
||||
'label' => 'Instagram',
|
||||
'label' => template::ico('instagram', ['margin' => 'right']) . 'Instagram',
|
||||
'value' => $this->getData(['config', 'social', 'instagramId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialTwitterId', [
|
||||
'help' => 'Saisissez votre ID : https://twitter.com/[ID].',
|
||||
'label' => template::ico('twitter', ['margin' => 'right']) . 'Twitter',
|
||||
'value' => $this->getData(['config', 'social', 'twitterId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialRedditId', [
|
||||
'help' => 'Saisissez votre ID Reddit : https://www.reddit.com/user/[ID].',
|
||||
'label' => template::ico('reddit', ['margin' => 'right']) . 'Reddit',
|
||||
'value' => $this->getData(['config', 'social', 'redditId'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialYoutubeId', [
|
||||
'help' => 'ID de la chaîne : https://www.youtube.com/channel/[ID].',
|
||||
'label' => 'Chaîne Youtube',
|
||||
'label' => template::ico('youtube', ['margin' => 'right']) . 'Chaîne Youtube',
|
||||
'value' => $this->getData(['config', 'social', 'youtubeId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialYoutubeUserId', [
|
||||
'help' => 'Saisissez votre ID Utilisateur : https://www.youtube.com/user/[ID].',
|
||||
'label' => 'Youtube',
|
||||
'label' => template::ico('youtube', ['margin' => 'right']) . 'Youtube',
|
||||
'value' => $this->getData(['config', 'social', 'youtubeUserId'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialTwitterId', [
|
||||
'help' => 'Saisissez votre ID : https://twitter.com/[ID].',
|
||||
'label' => 'Twitter',
|
||||
'value' => $this->getData(['config', 'social', 'twitterId'])
|
||||
<?php echo template::text('socialVimeoId', [
|
||||
'help' => 'Saisissez votre ID Viemo : https://vimeo.com/[ID].',
|
||||
'label' => template::ico('vimeo', ['margin' => 'right']) . 'Vimeo',
|
||||
'value' => $this->getData(['config', 'social', 'vimeoId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialPinterestId', [
|
||||
'help' => 'Saisissez votre ID : https://pinterest.com/[ID].',
|
||||
'label' => 'Pinterest',
|
||||
'label' => template::ico('pinterest', ['margin' => 'right']) . 'Pinterest',
|
||||
'value' => $this->getData(['config', 'social', 'pinterestId'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialLinkedinId', [
|
||||
'help' => 'Saisissez votre ID Linkedin : https://fr.linkedin.com/in/[ID].',
|
||||
'label' => 'Linkedin',
|
||||
'label' => template::ico('linkedin', ['margin' => 'right']) . 'Linkedin',
|
||||
'value' => $this->getData(['config', 'social', 'linkedinId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialGithubId', [
|
||||
'help' => 'Saisissez votre ID Github : https://github.com/[ID].',
|
||||
'label' => 'Github',
|
||||
'label' => template::ico('github', ['margin' => 'right']) . 'Github',
|
||||
'value' => $this->getData(['config', 'social', 'githubId'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialTwitchId', [
|
||||
'help' => 'Saisissez votre ID Twitch : https://www.twitch.tv/[ID].',
|
||||
'label' => template::ico('twitch', ['margin' => 'right']) . 'Twitch',
|
||||
'value' => $this->getData(['config', 'social', 'twitchId'])
|
||||
]); ?>
|
||||
</div>
|
||||
|
||||
<div class="col3">
|
||||
<?php echo template::text('socialSteamId', [
|
||||
'help' => 'Saisissez votre ID Viemo : https://steamcommunity.com/id/[ID].',
|
||||
'label' => template::ico('steam', ['margin' => 'right']) . 'Steam',
|
||||
'value' => $this->getData(['config', 'social', 'steamId'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -168,10 +168,10 @@ class page extends common
|
||||
}
|
||||
//file_put_contents(self::DATA_DIR . self::$i18nContent . '/content/' . $pageId . '.html', '<p>Contenu de votre nouvelle page.</p>');
|
||||
$this->setPage($pageId, '<p>Contenu de votre nouvelle page.</p>', self::$i18nContent);
|
||||
// Met à jour le site map
|
||||
$this->createSitemap('all');
|
||||
// Mise à jour de la liste des pages pour TinyMCE
|
||||
$this->listPages();
|
||||
|
||||
// Met à jour le sitemap
|
||||
$this->updateSitemap();
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $pageId,
|
||||
@ -295,10 +295,10 @@ class page extends common
|
||||
unlink(self::DATA_DIR . self::$i18nContent . '/content/' . $url[0] . '.html');
|
||||
}
|
||||
$this->deleteData(['module', $url[0]]);
|
||||
// Met à jour le site map
|
||||
$this->createSitemap('all');
|
||||
// Mise à jour de la liste des pages pour TinyMCE
|
||||
$this->listPages();
|
||||
|
||||
// Met à jour le sitemap
|
||||
$this->updateSitemap();
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl(false),
|
||||
@ -504,10 +504,8 @@ class page extends common
|
||||
$content = empty($this->getInput('pageEditContent', null)) ? '<p></p>' : str_replace('<p></p>', '<p> </p>', $this->getInput('pageEditContent', null));
|
||||
$this->setPage($pageId, $content, self::$i18nContent);
|
||||
|
||||
// Met à jour le site map
|
||||
$this->createSitemap('all');
|
||||
// Mise à jour de la liste des pages pour TinyMCE
|
||||
$this->listPages();
|
||||
// Met à jour le sitemap
|
||||
$this->updateSitemap();
|
||||
|
||||
// Redirection vers la configuration
|
||||
if (
|
||||
@ -554,12 +552,6 @@ class page extends common
|
||||
}
|
||||
}
|
||||
|
||||
// Met à jour le site map
|
||||
$this->createSitemap('all');
|
||||
|
||||
// Mise à jour de la liste des pages pour TinyMCE
|
||||
$this->listPages();
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'title' => $this->getData(['page', $this->getUrl(2), 'title']),
|
||||
|
@ -617,8 +617,8 @@ class user extends common
|
||||
$this->setData(['user', $userId, 'connectTimeout', time()]);
|
||||
}
|
||||
// Cas 3 le délai de bloquage court
|
||||
if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) {
|
||||
$notification = sprintf(helper::translate('Accès bloqué %d minutes', ($this->getData(['config', 'connect', 'timeout']) / 60)));
|
||||
if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) {
|
||||
$notification = sprintf(helper::translate('Accès bloqué %d minutes'), ($this->getData(['config', 'connect', 'timeout']) / 60));
|
||||
}
|
||||
|
||||
// Valeurs en sortie
|
||||
|
4
core/vendor/zwiico/css/zwiico-codes.css
vendored
4
core/vendor/zwiico/css/zwiico-codes.css
vendored
@ -57,9 +57,13 @@
|
||||
.zwiico-youtube:before { content: '\f167'; } /* '' */
|
||||
.zwiico-instagram:before { content: '\f16d'; } /* '' */
|
||||
.zwiico-box:before { content: '\f187'; } /* '' */
|
||||
.zwiico-vimeo:before { content: '\f194'; } /* '' */
|
||||
.zwiico-cubes:before { content: '\f1b3'; } /* '' */
|
||||
.zwiico-steam:before { content: '\f1b6'; } /* '' */
|
||||
.zwiico-file-archive:before { content: '\f1c6'; } /* '' */
|
||||
.zwiico-sliders:before { content: '\f1de'; } /* '' */
|
||||
.zwiico-twitch:before { content: '\f1e8'; } /* '' */
|
||||
.zwiico-brush:before { content: '\f1fc'; } /* '' */
|
||||
.zwiico-pinterest:before { content: '\f231'; } /* '' */
|
||||
.zwiico-reddit:before { content: '\f281'; } /* '' */
|
||||
.zwiico-shopping-basket:before { content: '\f291'; } /* '' */
|
||||
|
16
core/vendor/zwiico/css/zwiico-embedded.css
vendored
16
core/vendor/zwiico/css/zwiico-embedded.css
vendored
File diff suppressed because one or more lines are too long
4
core/vendor/zwiico/css/zwiico-ie7-codes.css
vendored
4
core/vendor/zwiico/css/zwiico-ie7-codes.css
vendored
@ -57,9 +57,13 @@
|
||||
.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-box { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-vimeo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-cubes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-steam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-sliders { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-twitch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-reddit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-shopping-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
|
4
core/vendor/zwiico/css/zwiico-ie7.css
vendored
4
core/vendor/zwiico/css/zwiico-ie7.css
vendored
@ -68,9 +68,13 @@
|
||||
.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-box { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-vimeo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-cubes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-steam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-sliders { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-twitch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-reddit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.zwiico-shopping-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
|
18
core/vendor/zwiico/css/zwiico.css
vendored
18
core/vendor/zwiico/css/zwiico.css
vendored
@ -1,11 +1,11 @@
|
||||
@font-face {
|
||||
font-family: 'zwiico';
|
||||
src: url('../font/zwiico.eot?24592042');
|
||||
src: url('../font/zwiico.eot?24592042#iefix') format('embedded-opentype'),
|
||||
url('../font/zwiico.woff2?24592042') format('woff2'),
|
||||
url('../font/zwiico.woff?24592042') format('woff'),
|
||||
url('../font/zwiico.ttf?24592042') format('truetype'),
|
||||
url('../font/zwiico.svg?24592042#zwiico') format('svg');
|
||||
src: url('../font/zwiico.eot?67918262');
|
||||
src: url('../font/zwiico.eot?67918262#iefix') format('embedded-opentype'),
|
||||
url('../font/zwiico.woff2?67918262') format('woff2'),
|
||||
url('../font/zwiico.woff?67918262') format('woff'),
|
||||
url('../font/zwiico.ttf?67918262') format('truetype'),
|
||||
url('../font/zwiico.svg?67918262#zwiico') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@ -15,7 +15,7 @@
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'zwiico';
|
||||
src: url('../font/zwiico.svg?24592042#zwiico') format('svg');
|
||||
src: url('../font/zwiico.svg?67918262#zwiico') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
@ -112,9 +112,13 @@
|
||||
.zwiico-youtube:before { content: '\f167'; } /* '' */
|
||||
.zwiico-instagram:before { content: '\f16d'; } /* '' */
|
||||
.zwiico-box:before { content: '\f187'; } /* '' */
|
||||
.zwiico-vimeo:before { content: '\f194'; } /* '' */
|
||||
.zwiico-cubes:before { content: '\f1b3'; } /* '' */
|
||||
.zwiico-steam:before { content: '\f1b6'; } /* '' */
|
||||
.zwiico-file-archive:before { content: '\f1c6'; } /* '' */
|
||||
.zwiico-sliders:before { content: '\f1de'; } /* '' */
|
||||
.zwiico-twitch:before { content: '\f1e8'; } /* '' */
|
||||
.zwiico-brush:before { content: '\f1fc'; } /* '' */
|
||||
.zwiico-pinterest:before { content: '\f231'; } /* '' */
|
||||
.zwiico-reddit:before { content: '\f281'; } /* '' */
|
||||
.zwiico-shopping-basket:before { content: '\f291'; } /* '' */
|
||||
|
BIN
core/vendor/zwiico/font/zwiico.eot
vendored
BIN
core/vendor/zwiico/font/zwiico.eot
vendored
Binary file not shown.
10
core/vendor/zwiico/font/zwiico.svg
vendored
10
core/vendor/zwiico/font/zwiico.svg
vendored
@ -1,7 +1,7 @@
|
||||
<?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) 2022 by original authors @ fontello.com</metadata>
|
||||
<metadata>Copyright (C) 2023 by original authors @ fontello.com</metadata>
|
||||
<defs>
|
||||
<font id="zwiico" horiz-adv-x="1000" >
|
||||
<font-face font-family="zwiico" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||
@ -122,16 +122,24 @@
|
||||
|
||||
<glyph glyph-name="box" unicode="" d="M607 386q0 14-10 25t-26 10h-142q-15 0-25-10t-11-25 11-25 25-11h142q15 0 26 11t10 25z m322 107v-536q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v536q0 14 11 25t25 11h786q14 0 25-11t11-25z m35 250v-143q0-14-10-25t-25-11h-858q-14 0-25 11t-10 25v143q0 14 10 25t25 11h858q14 0 25-11t10-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="vimeo" unicode="" d="M721 494q6 121-90 124-129 4-174-146 25 11 46 11 47 0 41-54-2-32-41-93t-59-61q-24 0-46 94-7 30-25 142-16 106-89 99-33-4-91-56l-46-40-45-40 29-37q43 29 49 29 32 0 59-100 9-31 26-92t25-92q38-100 91-100 88 0 214 164 123 158 126 248z m136 124v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="cubes" unicode="" 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="steam" unicode="" d="M883 525q0-56-40-96t-96-40-97 40-39 96 39 97 97 39 96-39 40-97z m-430-414q0 58-41 99t-98 41q-15 0-30-4l58-23q43-17 61-59t1-85q-18-43-60-61t-85 0q-12 4-35 13t-34 14q18-34 51-54t73-20q58 0 98 40t41 99z m463 414q0 70-50 120t-120 50q-71 0-121-50t-50-120q0-71 50-121t121-49q70 0 120 49t50 121z m84 0q0-106-74-180t-180-74l-244-178q-6-72-61-122t-127-50q-68 0-120 43t-66 107l-128 51v240l217-88q44 27 97 27 7 0 19-1l159 227q1 104 75 178t179 74q105 0 180-75t74-179z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="file-archive" unicode="" d="M357 636v71h-71v-71h71z m72-72v72h-72v-72h72z m-72-71v71h-71v-71h71z m72-72v72h-72v-72h72z m390 217q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-71v-72h-72v72h-286v-858h715z m-350 403l60-195q4-15 4-29 0-46-40-77t-103-30-102 30-41 77q0 14 5 29 12 35 67 221v71h71v-71h44q13 0 22-7t13-19z m-79-260q30 0 51 11t21 25-21 25-51 11-50-11-21-25 21-25 50-11z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="sliders" unicode="" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="twitch" unicode="" d="M500 608v-242h-81v242h81z m222 0v-242h-81v242h81z m0-424l141 141v444h-666v-585h182v-121l121 121h222z m222 666v-565l-242-242h-182l-121-122h-121v122h-222v646l61 161h827z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="brush" unicode="" d="M901 850q39 0 69-26t29-65q0-35-25-84-185-351-260-420-54-51-121-51-71 0-121 52t-51 123q0 71 52 118l356 323q33 30 72 30z m-507-577q22-42 59-73t84-42l1-40q2-118-72-193t-195-75q-68 0-121 26t-85 71-49 102-16 123q4-3 23-17t35-25 32-20 26-9q23 0 31 20 14 37 32 63t39 42 49 27 57 14 70 6z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="pinterest" unicode="" d="M0 517q0 60 21 113t58 93 85 69 103 44 113 14q88 0 164-37t123-108 47-160q0-54-10-105t-34-99-56-83-80-58-106-21q-38 0-75 18t-54 49q-5-22-15-63t-14-53-11-40-15-39-17-35-26-44-35-48l-7-3-5 6q-9 88-9 105 0 51 12 115t37 161 29 113q-18 36-18 94 0 47 29 87t74 41q34 0 53-23t19-57q0-37-24-106t-25-105q0-35 25-58t61-23q31 0 57 14t44 38 31 53 21 61 11 62 4 56q0 96-61 150t-160 54q-111 0-186-72t-75-183q0-25 7-48t15-36 15-26 7-17q0-15-8-40t-21-25q-1 0-9 1-29 9-51 31t-34 53-18 60-6 60z" horiz-adv-x="714.3" />
|
||||
|
||||
<glyph glyph-name="reddit" unicode="" d="M1000 378q0-32-16-59t-45-40q7-26 7-54 0-86-60-160t-162-117-223-42-223 42-162 117-59 160q0 26 6 53-28 13-46 41t-17 59q0 46 32 78t79 33q48 0 81-35 122 85 287 90l65 291q2 7 9 12t14 2l206-45q10 21 30 33t44 13q35 0 59-24t25-59-25-59-59-25-59 24-24 59l-186 42-58-264q167-5 289-89 33 34 80 34 46 0 79-33t32-78z m-767-111q0-35 25-59t58-25 60 25 24 59-24 59-60 24q-34 0-58-25t-25-58z m452-198q6 6 6 14t-6 15q-5 5-14 5t-14-5q-23-24-68-35t-89-11-89 11-68 35q-6 5-14 5t-14-5q-6-6-6-14t6-15q24-24 66-38t68-17 51-2 51 2 68 17 66 38z m-1 114q34 0 59 25t24 59q0 34-25 58t-58 25q-35 0-60-24t-24-59 24-59 60-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="shopping-basket" unicode="" d="M1071 421q30 0 51-20t21-51-21-50-51-21h-8l-64-370q-5-26-25-42t-45-17h-715q-25 0-45 17t-25 42l-64 370h-9q-29 0-50 21t-21 50 21 51 50 20h1000z m-800-446q14 1 24 13t9 26l-18 232q-1 14-13 24t-26 9-24-13-9-26l18-232q1-14 12-24t24-9h3z m229 36v232q0 14-11 25t-25 11-25-11-10-25v-232q0-15 10-25t25-11 25 11 11 25z m214 0v232q0 14-10 25t-25 11-25-11-11-25v-232q0-15 11-25t25-11 25 11 10 25z m197-3l18 232q1 15-9 26t-24 13-26-9-13-24l-18-232q-1-15 9-26t24-13h3q14 0 24 9t12 24z m-645 679l-52-230h-74l56 246q11 49 50 80t89 31h94q0 15 10 25t25 11h215q14 0 25-11t10-25h94q50 0 89-31t49-80l57-246h-74l-52 230q-6 25-25 40t-44 16h-94q0-15-10-25t-25-11h-215q-14 0-25 11t-10 25h-94q-25 0-44-16t-25-40z" horiz-adv-x="1142.9" />
|
||||
</font>
|
||||
</defs>
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 30 KiB |
BIN
core/vendor/zwiico/font/zwiico.ttf
vendored
BIN
core/vendor/zwiico/font/zwiico.ttf
vendored
Binary file not shown.
BIN
core/vendor/zwiico/font/zwiico.woff
vendored
BIN
core/vendor/zwiico/font/zwiico.woff
vendored
Binary file not shown.
BIN
core/vendor/zwiico/font/zwiico.woff2
vendored
BIN
core/vendor/zwiico/font/zwiico.woff2
vendored
Binary file not shown.
@ -16,7 +16,7 @@
|
||||
class blog extends common
|
||||
{
|
||||
|
||||
const VERSION = '6.5';
|
||||
const VERSION = '6.6';
|
||||
const REALNAME = 'Blog';
|
||||
const DELETE = true;
|
||||
const UPDATE = '0.0';
|
||||
@ -89,7 +89,7 @@ class blog extends common
|
||||
];
|
||||
|
||||
//Paramètre longueur maximale des commentaires en nb de caractères
|
||||
public static $commentLength = [
|
||||
public static $commentsLength = [
|
||||
100 => '100 signes',
|
||||
250 => '250 signes',
|
||||
500 => '500 signes',
|
||||
@ -97,11 +97,19 @@ class blog extends common
|
||||
];
|
||||
|
||||
public static $articlesLenght = [
|
||||
0 => 'Article complet en pleine page',
|
||||
200 => 'Tableau : couverture + 200 signes',
|
||||
400 => 'Tableau : couverture + 400 signes',
|
||||
600 => 'Tableau : couverture + 600 signes',
|
||||
800 => 'Tableau : couverture + 800 signes'
|
||||
0 => 'Articles complets',
|
||||
600 => '600 signes',
|
||||
800 => '800 signes',
|
||||
1000 => '1000 signes',
|
||||
1200 => '1200 signes',
|
||||
1400 => '1400 signes',
|
||||
1600 => '1600 signes',
|
||||
1800 => '1800 signes',
|
||||
];
|
||||
|
||||
public static $articlesLayout = [
|
||||
false => 'Classique',
|
||||
true => 'Moderne',
|
||||
];
|
||||
|
||||
// Permissions d'un article
|
||||
@ -556,11 +564,12 @@ class blog extends common
|
||||
[
|
||||
'feeds' => $this->getInput('blogOptionShowFeeds', helper::FILTER_BOOLEAN),
|
||||
'feedsLabel' => $this->getInput('blogOptionFeedslabel', helper::FILTER_STRING_SHORT),
|
||||
'layout' => $this->getInput('blogOptionArticlesLayout', helper::FILTER_BOOLEAN),
|
||||
'articlesLenght' => $this->getInput('blogOptionArticlesLayout', helper::FILTER_BOOLEAN) === false ? $this->getInput('blogOptionArticlesLenght', helper::FILTER_INT): 0,
|
||||
'itemsperPage' => $this->getInput('blogOptionItemsperPage', helper::FILTER_INT, true),
|
||||
'articlesLenght' => $this->getInput('blogOptionArticlesLenght', helper::FILTER_INT),
|
||||
'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData']),
|
||||
'dateFormat' => $this->getInput('blogOptionDateFormat'),
|
||||
'timeFormat' => $this->getInput('blogOptionTimeFormat'),
|
||||
'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData']),
|
||||
]
|
||||
]);
|
||||
// Valeurs en sortie
|
||||
|
@ -1,4 +1,7 @@
|
||||
|
||||
# version 6.6
|
||||
- Position de l'icône RSS
|
||||
- Présentation en tableau amélioration du visuel
|
||||
# version 6.5
|
||||
- Intl dates formats
|
||||
- Modifications liées à la suppression de flatpickr
|
||||
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 Artikel","10 articles":"10 Artikel","100 signes":"100 Zeichen","12 articles":"12 Artikel","2 articles":"2 Artikel","250 signes":"250 Zeichen","4 articles":"4 Artikel","500 signes":"500 Zeichen","6 articles":"6 Artikel","750 signes":"750 Zeichen","8 articles":"8 Artikel","Administrateur":"Administrator","Approbation par un modérateur":"Genehmigung durch einen Moderator","Approuver le commentaire ?":"Den Kommentar genehmigen?","Approuvé":"Genehmigt","Article complet en pleine page":"Voller Artikel auf der vollständigen Seite","Article supprimé":"Artikel gelöscht","Articles par page":"Artikel pro Seite","Aucun article":"Kein Artikel","Aucun commentaire":"Kein Kommentar","Auteur":"Auteur","Brouillon":"Unorganisiert","Caractères par commentaire":"Charaktere nach Kommentar","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Auswahl der maximalen Anzahl von Zeichen für jeden Artikel Kommentar, enthalten HTML -Formatierung.","Commentaire approuvé":"Genehmigter Kommentar","Commentaire rejeté":"Abgelehnter Kommentar","Commentaire supprimé":"Kommentar gelöscht","Commentaires":"Kommentare","Commentaires supprimés":"Gelöschte Kommentare","Edition - Suppression":"Ausgabe - Unterdrückung","Effacer l'article":"Löschen Sie den Artikel","Fermer les commentaires":"Schalten Sie die Kommentare aus","Gestion des commentaires":"Kommentarmanagement","Grande":"Grande","Groupe du propriétaire":"Besitzergruppe","Image de couverture":"Berichterstattung","Informations générales":"Allgemeine Informationen","L'article n'est visible qu'après la date de publication prévue.":"Der Artikel ist erst nach dem Datum der bereitgestellten Veröffentlichung sichtbar.","Largeur":"Bild breite","Le texte de l'article est adapté autour de l'image":"Der Text des Artikels ist um das Bild angepasst","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Benutzer höherer Gruppen zugreifen ohne Einschränkung auf den Artikel","Lien du flux RSS":"Lien du flux RSS","Masquer l'image dans l'article":"Verstecken Sie das Bild im Artikel","Masquer l'image de couverture dans l'article":"Verstecken Sie das Titelbild im Artikel","Membre":"Mitglied","Notification par email":"Benachrichtigung PAR -E -Mail","Nouvel article créé":"Neuer Artikel erstellt","Options de configuration":"Optionen de Konfiguration","Options de publication":"Publikationsoptionen","Permalink":"Permalink","Petite":"Zierlich","Pleine largeur":"Gesamtbreite","Propriétaire":"Eigentümer","Publication":"Veröffentlichung","Publier":"Veröffentlichen","Rejeter le commentaire ?":"Den Kommentar ablehnen?","Rejeté":"Abgelehnt","Rédiger un article":"Artikel","Supprimer cet article ?":"Diesen Artikel löschen?","Supprimer le commentaire ?":"Den Kommentar löschen?","Supprimer tous les commentaires ?":"Alle Kommentare löschen?","Tableau:couverture + 200 signes":"Tabelle:Cover + 200 Zeichen","Tableau:couverture + 400 signes":"Tabelle:Abdeckung + 400 Zeichen","Tableau:couverture + 600 signes":"Tabelle:Abdeckung + 600 Zeichen","Tableau:couverture + 800 signes":"Tabelle:Abdeckung + 800 Zeichen","Taille optimale de l'image de couverture:920 x 350 pixels.":"Optimale Größe des Titelbildes:920 x 350 Pixel.","Texte de l'étiquette":"Beschriftungstext","Tous les groupes":"Alle Gruppen","Tout effacer":"Alles löschen","Très Grande":"Sehr groß","Très petite":"Sehr klein","À droite":"Nach rechts","À gauche":"Nach links","Éditer l'article":"Bearbeiten Sie den Artikel","Éditer/ Approuver les commentaires":"Kommentare bearbeiten / genehmigen","Éditeur":"Editor","État":"État"}
|
||||
{
|
||||
"1 article": "1 Artikel",
|
||||
"10 articles": "10 Artikel",
|
||||
"100 signes": "100 Zeichen",
|
||||
"12 articles": "12 Artikel",
|
||||
"2 articles": "2 Artikel",
|
||||
"250 signes": "250 Zeichen",
|
||||
"4 articles": "4 Artikel",
|
||||
"500 signes": "500 Zeichen",
|
||||
"6 articles": "6 Artikel",
|
||||
"750 signes": "750 Zeichen",
|
||||
"8 articles": "8 Artikel",
|
||||
"Administrateur": "Administrator",
|
||||
"Approbation par un modérateur": "Genehmigung durch einen Moderator",
|
||||
"Approuver le commentaire ?": "Den Kommentar genehmigen?",
|
||||
"Approuvé": "Genehmigt",
|
||||
"Article complet en pleine page": "Voller Artikel auf der vollständigen Seite",
|
||||
"Article supprimé": "Artikel gelöscht",
|
||||
"Articles par page": "Artikel pro Seite",
|
||||
"Aucun article": "Kein Artikel",
|
||||
"Aucun commentaire": "Kein Kommentar",
|
||||
"Auteur": "Auteur",
|
||||
"Brouillon": "Unorganisiert",
|
||||
"Caractères par commentaire": "Charaktere nach Kommentar",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Auswahl der maximalen Anzahl von Zeichen für jeden Artikel Kommentar, enthalten HTML -Formatierung.",
|
||||
"Commentaire approuvé": "Genehmigter Kommentar",
|
||||
"Commentaire rejeté": "Abgelehnter Kommentar",
|
||||
"Commentaire supprimé": "Kommentar gelöscht",
|
||||
"Commentaires": "Kommentare",
|
||||
"Commentaires supprimés": "Gelöschte Kommentare",
|
||||
"Edition - Suppression": "Ausgabe - Unterdrückung",
|
||||
"Effacer l'article": "Löschen Sie den Artikel",
|
||||
"Fermer les commentaires": "Schalten Sie die Kommentare aus",
|
||||
"Gestion des commentaires": "Kommentarmanagement",
|
||||
"Grande": "Grande",
|
||||
"Groupe du propriétaire": "Besitzergruppe",
|
||||
"Image de couverture": "Berichterstattung",
|
||||
"Informations générales": "Allgemeine Informationen",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "Der Artikel ist erst nach dem Datum der bereitgestellten Veröffentlichung sichtbar.",
|
||||
"Largeur": "Bild breite",
|
||||
"Le texte de l'article est adapté autour de l'image": "Der Text des Artikels ist um das Bild angepasst",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Benutzer höherer Gruppen zugreifen ohne Einschränkung auf den Artikel",
|
||||
"Lien du flux RSS": "Lien du flux RSS",
|
||||
"Masquer l'image dans l'article": "Verstecken Sie das Bild im Artikel",
|
||||
"Masquer l'image de couverture dans l'article": "Verstecken Sie das Titelbild im Artikel",
|
||||
"Membre": "Mitglied",
|
||||
"Notification par email": "Benachrichtigung PAR -E -Mail",
|
||||
"Nouvel article créé": "Neuer Artikel erstellt",
|
||||
"Options de configuration": "Optionen de Konfiguration",
|
||||
"Options de publication": "Publikationsoptionen",
|
||||
"Permalink": "Permalink",
|
||||
"Petite": "Zierlich",
|
||||
"Pleine largeur": "Gesamtbreite",
|
||||
"Propriétaire": "Eigentümer",
|
||||
"Publication": "Veröffentlichung",
|
||||
"Publier": "Veröffentlichen",
|
||||
"Rejeter le commentaire ?": "Den Kommentar ablehnen?",
|
||||
"Rejeté": "Abgelehnt",
|
||||
"Rédiger un article": "Artikel",
|
||||
"Supprimer cet article ?": "Diesen Artikel löschen?",
|
||||
"Supprimer le commentaire ?": "Den Kommentar löschen?",
|
||||
"Supprimer tous les commentaires ?": "Alle Kommentare löschen?",
|
||||
"200 signes": "200 Zeichen",
|
||||
"400 signes": "400 Zeichen",
|
||||
"600 signes": "600 Zeichen",
|
||||
"1000 signes": "1000 Zeichen",
|
||||
"1200 signes": "1200 Zeichen",
|
||||
"1400 signes": "1400 Zeichen",
|
||||
"1600 signes": "1600 Zeichen",
|
||||
"1800 signes": "1800 Zeichen",
|
||||
"Classique": "Klassisch",
|
||||
"Moderne": "Modern",
|
||||
"Disposition": "Anordnung",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "Optimale Größe des Titelbildes:920 x 350 Pixel.",
|
||||
"Texte de l'étiquette": "Beschriftungstext",
|
||||
"Tous les groupes": "Alle Gruppen",
|
||||
"Tout effacer": "Alles löschen",
|
||||
"Très Grande": "Sehr groß",
|
||||
"Très petite": "Sehr klein",
|
||||
"À droite": "Nach rechts",
|
||||
"À gauche": "Nach links",
|
||||
"Éditer l'article": "Bearbeiten Sie den Artikel",
|
||||
"Éditer/ Approuver les commentaires": "Kommentare bearbeiten / genehmigen",
|
||||
"Éditeur": "Editor",
|
||||
"État": "État",
|
||||
"Lire la suite": "Mehr lesen"
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 article","10 articles":"10 articles","100 signes":"100 signs","12 articles":"12 articles","2 articles":"2 articles","250 signes":"250 signs","4 articles":"4 articles","500 signes":"500 signs","6 articles":"6 articles","750 signes":"750 signs","8 articles":"8 articles","Administrateur":"Administrator","Approbation par un modérateur":"Approval by a moderator","Approuver le commentaire ?":"Approve the comment?","Approuvé":"Approved","Article complet en pleine page":"Full article in full page","Article supprimé":"Deleted article","Articles par page":"Articles per page","Aucun article":"No article","Aucun commentaire":"No comment","Auteur":"Auteur","Brouillon":"Draft copy","Caractères par commentaire":"Characters by comment","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Choosing the maximum number of characters for each article comment, HTML formatting included.","Commentaire approuvé":"Approved comment","Commentaire rejeté":"Rejected commentary","Commentaire supprimé":"Deleted comment","Commentaires":"Comments","Commentaires supprimés":"Deleted comments","Edition - Suppression":"Edition - Suppression","Effacer l'article":"Erase the article","Fermer les commentaires":"Turn off the comments","Gestion des commentaires":"Comment management","Grande":"Large","Groupe du propriétaire":"Owner's group","Image de couverture":"Coverage","Informations générales":"General informations","L'article n'est visible qu'après la date de publication prévue.":"The article is only visible after the date of publication provided.","Largeur":"Image width","Le texte de l'article est adapté autour de l'image":"The text of the article is adapted around the image","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Users of higher groups access the article without restriction","Lien du flux RSS":"Lien du Flux RSS","Masquer l'image dans l'article":"Hide the image in the article","Masquer l'image de couverture dans l'article":"Hide the cover image in the article","Membre":"Member","Notification par email":"Notification par email","Nouvel article créé":"New article created","Options de configuration":"Configuration options","Options de publication":"Publication options","Permalink":"Permalink","Petite":"Petite","Pleine largeur":"Full width","Propriétaire":"Owner","Publication":"Publication","Publier":"Publish","Rejeter le commentaire ?":"Reject the comment?","Rejeté":"Rejected","Rédiger un article":"Write an article","Supprimer cet article ?":"Delete this article?","Supprimer le commentaire ?":"Delete the comment?","Supprimer tous les commentaires ?":"Delete all comments?","Tableau:couverture + 200 signes":"Table:cover + 200 signs","Tableau:couverture + 400 signes":"Table:cover + 400 signs","Tableau:couverture + 600 signes":"Table:cover + 600 signs","Tableau:couverture + 800 signes":"Table:cover + 800 signs","Taille optimale de l'image de couverture:920 x 350 pixels.":"Optimal size of the cover image:920 x 350 pixels.","Texte de l'étiquette":"Label text","Tous les groupes":"All groups","Tout effacer":"Erase everything","Très Grande":"Very tall","Très petite":"Very small","À droite":"To the right","À gauche":"To the left","Éditer l'article":"Edit the article","Éditer/ Approuver les commentaires":"Edit / approve comments","Éditeur":"Editor","État":"Status"}
|
||||
{
|
||||
"1 article": "1 article",
|
||||
"10 articles": "10 articles",
|
||||
"100 signes": "100 signs",
|
||||
"12 articles": "12 articles",
|
||||
"2 articles": "2 articles",
|
||||
"250 signes": "250 signs",
|
||||
"4 articles": "4 articles",
|
||||
"500 signes": "500 signs",
|
||||
"6 articles": "6 articles",
|
||||
"750 signes": "750 signs",
|
||||
"8 articles": "8 articles",
|
||||
"Administrateur": "Administrator",
|
||||
"Approbation par un modérateur": "Approval by a moderator",
|
||||
"Approuver le commentaire ?": "Approve the comment?",
|
||||
"Approuvé": "Approved",
|
||||
"Article complet en pleine page": "Full article in full page",
|
||||
"Article supprimé": "Deleted article",
|
||||
"Articles par page": "Articles per page",
|
||||
"Aucun article": "No article",
|
||||
"Aucun commentaire": "No comment",
|
||||
"Auteur": "Auteur",
|
||||
"Brouillon": "Draft copy",
|
||||
"Caractères par commentaire": "Characters by comment",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Choosing the maximum number of characters for each article comment, HTML formatting included.",
|
||||
"Commentaire approuvé": "Approved comment",
|
||||
"Commentaire rejeté": "Rejected commentary",
|
||||
"Commentaire supprimé": "Deleted comment",
|
||||
"Commentaires": "Comments",
|
||||
"Commentaires supprimés": "Deleted comments",
|
||||
"Edition - Suppression": "Edition - Suppression",
|
||||
"Effacer l'article": "Erase the article",
|
||||
"Fermer les commentaires": "Turn off the comments",
|
||||
"Gestion des commentaires": "Comment management",
|
||||
"Grande": "Large",
|
||||
"Groupe du propriétaire": "Owner's group",
|
||||
"Image de couverture": "Coverage",
|
||||
"Informations générales": "General informations",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "The article is only visible after the date of publication provided.",
|
||||
"Largeur": "Image width",
|
||||
"Le texte de l'article est adapté autour de l'image": "The text of the article is adapted around the image",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Users of higher groups access the article without restriction",
|
||||
"Lien du flux RSS": "Lien du Flux RSS",
|
||||
"Masquer l'image dans l'article": "Hide the image in the article",
|
||||
"Masquer l'image de couverture dans l'article": "Hide the cover image in the article",
|
||||
"Membre": "Member",
|
||||
"Notification par email": "Notification par email",
|
||||
"Nouvel article créé": "New article created",
|
||||
"Options de configuration": "Configuration options",
|
||||
"Options de publication": "Publication options",
|
||||
"Permalink": "Permalink",
|
||||
"Petite": "Petite",
|
||||
"Pleine largeur": "Full width",
|
||||
"Propriétaire": "Owner",
|
||||
"Publication": "Publication",
|
||||
"Publier": "Publish",
|
||||
"Rejeter le commentaire ?": "Reject the comment?",
|
||||
"Rejeté": "Rejected",
|
||||
"Rédiger un article": "Write an article",
|
||||
"Supprimer cet article ?": "Delete this article?",
|
||||
"Supprimer le commentaire ?": "Delete the comment?",
|
||||
"Supprimer tous les commentaires ?": "Delete all comments?",
|
||||
"200 signes": "200 characters",
|
||||
"400 signes": "400 characters",
|
||||
"600 signes": "600 characters",
|
||||
"1000 signes": "1000 characters",
|
||||
"1200 signes": "1200 characters",
|
||||
"1400 signes": "1400 characters",
|
||||
"1600 signes": "1600 characters",
|
||||
"1800 signes": "1800 characters",
|
||||
"Classique": "Classic",
|
||||
"Moderne": "Modern",
|
||||
"Disposition": "Layout",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "Optimal size of the cover image:920 x 350 pixels.",
|
||||
"Texte de l'étiquette": "Label text",
|
||||
"Tous les groupes": "All groups",
|
||||
"Tout effacer": "Erase everything",
|
||||
"Très Grande": "Very tall",
|
||||
"Très petite": "Very small",
|
||||
"À droite": "To the right",
|
||||
"À gauche": "To the left",
|
||||
"Éditer l'article": "Edit the article",
|
||||
"Éditer/ Approuver les commentaires": "Edit / approve comments",
|
||||
"Éditeur": "Editor",
|
||||
"État": "Status",
|
||||
"Lire la suite": "Read more"
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 Artículo","10 articles":"10 Artículos","100 signes":"100 caracteres","12 articles":"12 Artículos","2 articles":"2 Artículos","250 signes":"250 caracteres","4 articles":"4 Artículos","500 signes":"500 caracteres","6 articles":"6 Artículos","750 signes":"750 caracteres","8 articles":"8 Artículos","Administrateur":"Administrador","Approbation par un modérateur":"Aprobación del moderador","Approuver le commentaire ?":"¿Aprobar el comentario?","Approuvé":"Aprobado","Article complet en pleine page":"Artículo completo a plena página","Article supprimé":"Artículo suprimido","Articles par page":"Artículos por página","Aucun article":"Ningún artículo","Aucun commentaire":"Sin comentarios","Auteur":"Autor","Brouillon":"Borrador","Caractères par commentaire":"Caracteres por comentario","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Elección del número máximo de caracteres para cada comentario del artículo, incluido el formato html","Commentaire approuvé":"Comentario aprobado","Commentaire rejeté":"Comentario rechazado","Commentaire supprimé":"Comentario eliminado","Commentaires":"Comentarios","Commentaires supprimés":"Comentarios eliminados","Edition - Suppression":"Editar Borrar","Effacer l'article":"Eliminar artículo","Fermer les commentaires":"Cerrar los comentarios","Gestion des commentaires":"Gestión de comentarios","Grande":"Grande","Groupe du propriétaire":"Grupo de propietarios","Image de couverture":"Imagen de portada","Informations générales":"Información general","L'article n'est visible qu'après la date de publication prévue.":"El artículo solo es visible después de la fecha de publicación programada.","Largeur":"Ancho de la imagen","Le texte de l'article est adapté autour de l'image":"El texto del artículo se envuelve alrededor de la imagen","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Los usuarios de grupos superiores pueden acceder al artículo sin restricción.","Lien du flux RSS":"Enlace de fuente RSS","Masquer l'image dans l'article":"Ocultar imagen en la publicación","Masquer l'image de couverture dans l'article":"Ocultar imagen de portada en el artículo","Membre":"Miembro","Notification par email":"Notificación por correo electrónico","Nouvel article créé":"Nuevo artículo creado","Options de configuration":"Opciones de configuración","Options de publication":"Opciones de publicación","Permalink":"Enlace permanente","Petite":"Pequeña","Pleine largeur":"Anchura completa","Propriétaire":"Propietario","Publication":"Publicación","Publier":"Publicar","Rejeter le commentaire ?":"¿Rechazar el comentario?","Rejeté":"Rechazado","Rédiger un article":"Escribir un artículo","Supprimer cet article ?":"¿Borrar este artículo?","Supprimer le commentaire ?":"¿Borrar el comentario?","Supprimer tous les commentaires ?":"¿Borrar todos los comentarios?","Tableau:couverture + 200 signes":"Tabla:portada + 200 caracteres","Tableau:couverture + 400 signes":"Tabla:portada + 400 caracteres","Tableau:couverture + 600 signes":"Tabla:portada + 600 caracteres","Tableau:couverture + 800 signes":"Tabla:portada + 800 caracteres","Taille optimale de l'image de couverture:920 x 350 pixels.":"Tamaño de imagen de portada óptimo:920 x 350 píxeles.","Texte de l'étiquette":"Texto de la etiqueta","Tous les groupes":"Todos los grupos","Tout effacer":"Borrar todo","Très Grande":"Muy grande","Très petite":"Muy pequeña","À droite":"A la derecha","À gauche":"A la izquierda","Éditer l'article":"Editar artículo","Éditer/ Approuver les commentaires":"Editar / Aprobar comentarios","Éditeur":"Editor","État":"Estado"}
|
||||
{
|
||||
"1 article": "1 Artículo",
|
||||
"10 articles": "10 Artículos",
|
||||
"100 signes": "100 caracteres",
|
||||
"12 articles": "12 Artículos",
|
||||
"2 articles": "2 Artículos",
|
||||
"250 signes": "250 caracteres",
|
||||
"4 articles": "4 Artículos",
|
||||
"500 signes": "500 caracteres",
|
||||
"6 articles": "6 Artículos",
|
||||
"750 signes": "750 caracteres",
|
||||
"8 articles": "8 Artículos",
|
||||
"Administrateur": "Administrador",
|
||||
"Approbation par un modérateur": "Aprobación del moderador",
|
||||
"Approuver le commentaire ?": "¿Aprobar el comentario?",
|
||||
"Approuvé": "Aprobado",
|
||||
"Article complet en pleine page": "Artículo completo a plena página",
|
||||
"Article supprimé": "Artículo suprimido",
|
||||
"Articles par page": "Artículos por página",
|
||||
"Aucun article": "Ningún artículo",
|
||||
"Aucun commentaire": "Sin comentarios",
|
||||
"Auteur": "Autor",
|
||||
"Brouillon": "Borrador",
|
||||
"Caractères par commentaire": "Caracteres por comentario",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Elección del número máximo de caracteres para cada comentario del artículo, incluido el formato html",
|
||||
"Commentaire approuvé": "Comentario aprobado",
|
||||
"Commentaire rejeté": "Comentario rechazado",
|
||||
"Commentaire supprimé": "Comentario eliminado",
|
||||
"Commentaires": "Comentarios",
|
||||
"Commentaires supprimés": "Comentarios eliminados",
|
||||
"Edition - Suppression": "Editar Borrar",
|
||||
"Effacer l'article": "Eliminar artículo",
|
||||
"Fermer les commentaires": "Cerrar los comentarios",
|
||||
"Gestion des commentaires": "Gestión de comentarios",
|
||||
"Grande": "Grande",
|
||||
"Groupe du propriétaire": "Grupo de propietarios",
|
||||
"Image de couverture": "Imagen de portada",
|
||||
"Informations générales": "Información general",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "El artículo solo es visible después de la fecha de publicación programada.",
|
||||
"Largeur": "Ancho de la imagen",
|
||||
"Le texte de l'article est adapté autour de l'image": "El texto del artículo se envuelve alrededor de la imagen",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Los usuarios de grupos superiores pueden acceder al artículo sin restricción.",
|
||||
"Lien du flux RSS": "Enlace de fuente RSS",
|
||||
"Masquer l'image dans l'article": "Ocultar imagen en la publicación",
|
||||
"Masquer l'image de couverture dans l'article": "Ocultar imagen de portada en el artículo",
|
||||
"Membre": "Miembro",
|
||||
"Notification par email": "Notificación por correo electrónico",
|
||||
"Nouvel article créé": "Nuevo artículo creado",
|
||||
"Options de configuration": "Opciones de configuración",
|
||||
"Options de publication": "Opciones de publicación",
|
||||
"Permalink": "Enlace permanente",
|
||||
"Petite": "Pequeña",
|
||||
"Pleine largeur": "Anchura completa",
|
||||
"Propriétaire": "Propietario",
|
||||
"Publication": "Publicación",
|
||||
"Publier": "Publicar",
|
||||
"Rejeter le commentaire ?": "¿Rechazar el comentario?",
|
||||
"Rejeté": "Rechazado",
|
||||
"Rédiger un article": "Escribir un artículo",
|
||||
"Supprimer cet article ?": "¿Borrar este artículo?",
|
||||
"Supprimer le commentaire ?": "¿Borrar el comentario?",
|
||||
"Supprimer tous les commentaires ?": "¿Borrar todos los comentarios?",
|
||||
"200 signes": "200 caracteres",
|
||||
"400 signes": "400 caracteres",
|
||||
"600 signes": "600 caracteres",
|
||||
"1000 signes": "1000 caracteres",
|
||||
"1200 signes": "1200 caracteres",
|
||||
"1400 signes": "1400 caracteres",
|
||||
"1600 signes": "1600 caracteres",
|
||||
"1800 signes": "1800 caracteres",
|
||||
"Classique": "Clásico",
|
||||
"Moderne": "Moderno",
|
||||
"Disposition": "Distribución",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "Tamaño de imagen de portada óptimo:920 x 350 píxeles.",
|
||||
"Texte de l'étiquette": "Texto de la etiqueta",
|
||||
"Tous les groupes": "Todos los grupos",
|
||||
"Tout effacer": "Borrar todo",
|
||||
"Très Grande": "Muy grande",
|
||||
"Très petite": "Muy pequeña",
|
||||
"À droite": "A la derecha",
|
||||
"À gauche": "A la izquierda",
|
||||
"Éditer l'article": "Editar artículo",
|
||||
"Éditer/ Approuver les commentaires": "Editar / Aprobar comentarios",
|
||||
"Éditeur": "Editor",
|
||||
"État": "Estado",
|
||||
"Lire la suite": "Leer más"
|
||||
}
|
@ -1 +1,88 @@
|
||||
{}
|
||||
{
|
||||
"1 article": "",
|
||||
"10 articles": "",
|
||||
"100 signes": "",
|
||||
"12 articles": "",
|
||||
"2 articles": "",
|
||||
"250 signes": "",
|
||||
"4 articles": "",
|
||||
"500 signes": "",
|
||||
"6 articles": "",
|
||||
"750 signes": "",
|
||||
"8 articles": "",
|
||||
"Administrateur": "",
|
||||
"Approbation par un modérateur": "",
|
||||
"Approuver le commentaire ?": "",
|
||||
"Approuvé": "",
|
||||
"Article complet en pleine page": "",
|
||||
"Article supprimé": "",
|
||||
"Articles par page": "",
|
||||
"Aucun article": "",
|
||||
"Aucun commentaire": "",
|
||||
"Auteur": "",
|
||||
"Brouillon": "",
|
||||
"Caractères par commentaire": "",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "",
|
||||
"Commentaire approuvé": "",
|
||||
"Commentaire rejeté": "",
|
||||
"Commentaire supprimé": "",
|
||||
"Commentaires": "",
|
||||
"Commentaires supprimés": "",
|
||||
"Edition - Suppression": "",
|
||||
"Effacer l'article": "",
|
||||
"Fermer les commentaires": "",
|
||||
"Gestion des commentaires": "",
|
||||
"Grande": "",
|
||||
"Groupe du propriétaire": "",
|
||||
"Image de couverture": "",
|
||||
"Informations générales": "",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "",
|
||||
"Largeur": "",
|
||||
"Le texte de l'article est adapté autour de l'image": "",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "",
|
||||
"Lien du flux RSS": "",
|
||||
"Masquer l'image dans l'article": "",
|
||||
"Masquer l'image de couverture dans l'article": "",
|
||||
"Membre": "",
|
||||
"Notification par email": "",
|
||||
"Nouvel article créé": "",
|
||||
"Options de configuration": "",
|
||||
"Options de publication": "",
|
||||
"Permalink": "",
|
||||
"Petite": "",
|
||||
"Pleine largeur": "",
|
||||
"Propriétaire": "",
|
||||
"Publication": "",
|
||||
"Publier": "",
|
||||
"Rejeter le commentaire ?": "",
|
||||
"Rejeté": "",
|
||||
"Rédiger un article": "",
|
||||
"Supprimer cet article ?": "",
|
||||
"Supprimer le commentaire ?": "",
|
||||
"Supprimer tous les commentaires ?": "",
|
||||
"200 signes": "",
|
||||
"400 signes": "",
|
||||
"600 signes": "",
|
||||
"1000 signes": "",
|
||||
"1200 signes": "",
|
||||
"1400 signes": "",
|
||||
"1600 signes": "",
|
||||
"1800 signes": "",
|
||||
"Classique": "",
|
||||
"Moderne": "",
|
||||
"Disposition": "",
|
||||
"Aperçus": "",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "",
|
||||
"Texte de l'étiquette": "",
|
||||
"Tous les groupes": "",
|
||||
"Tout effacer": "",
|
||||
"Très Grande": "",
|
||||
"Très petite": "",
|
||||
"À droite": "",
|
||||
"À gauche": "",
|
||||
"Éditer l'article": "",
|
||||
"Éditer/ Approuver les commentaires": "",
|
||||
"Éditeur": "",
|
||||
"État": "",
|
||||
"Lire la suite": ""
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 Άρθρο","10 articles":"10 Άρθρα","100 signes":"100 χαρακτήρες","12 articles":"12 Άρθρα","2 articles":"2 Άρθρα","250 signes":"250 χαρακτήρες","4 articles":"4 Άρθρα","500 signes":"500 χαρακτήρες","6 articles":"6 Άρθρα","750 signes":"750 χαρακτήρες","8 articles":"8 Άρθρα","Administrateur":"Διαχειριστής","Approbation par un modérateur":"Έγκριση επόπτη","Approuver le commentaire ?":"Εγκρίνετε το σχόλιο;","Approuvé":"Εγκεκριμένο","Article complet en pleine page":"Άρθρο πλήρους σελίδας","Article supprimé":"Άρθρο που διαγράφηκε","Articles par page":"Άρθρα ανά σελίδα","Aucun article":"κανένα άρθρο","Aucun commentaire":"Κανένα σχόλιο","Auteur":"Συγγραφέας","Brouillon":"Σχέδιο","Caractères par commentaire":"Χαρακτήρες ανά σχόλιο","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Επιλογή του μέγιστου αριθμού χαρακτήρων για κάθε σχόλιο του άρθρου, συμπεριλαμβανομένης της μορφοποίησης html.","Commentaire approuvé":"Σχόλιο εγκεκριμένο","Commentaire rejeté":"Σχόλιο απορρίφθηκε","Commentaire supprimé":"Σχόλιο διαγράφηκε","Commentaires":"Σχόλια","Commentaires supprimés":"Σχόλια διαγράφονται","Edition - Suppression":"Επεξεργασία - Διαγραφή","Effacer l'article":"Διαγραφή αντικειμένου","Fermer les commentaires":"Κλείσιμο σχολίων","Gestion des commentaires":"Διαχείριση σχολίων","Grande":"Μεγάλη","Groupe du propriétaire":"Ομάδα ιδιοκτήτη","Image de couverture":"εικόνα εξωφύλλου","Informations générales":"Γενικές πληροφορίες","L'article n'est visible qu'après la date de publication prévue.":"Το άρθρο είναι ορατό μόνο μετά την προγραμματισμένη ημερομηνία δημοσίευσης","Largeur":"Πλάτος εικόνας","Le texte de l'article est adapté autour de l'image":"Το κείμενο του άρθρου τοποθετείται γύρω από την εικόνα","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Οι χρήστες σε ανώτερες ομάδες έχουν απεριόριστη πρόσβαση στο άρθρο","Lien du flux RSS":"Σύνδεσμος τροφοδοσίας RSS","Masquer l'image dans l'article":"Απόκρυψη εικόνας στο άρθρο","Masquer l'image de couverture dans l'article":"Απόκρυψη της εικόνας εξωφύλλου στο άρθρο","Membre":"Μέλος","Notification par email":"Ειδοποίηση ηλεκτρονικού ταχυδρομείου","Nouvel article créé":"Δημιουργήθηκε νέο άρθρο","Options de configuration":"Opções de configuração","Options de publication":"Επιλογές δημοσίευσης","Permalink":"Μόνιμος σύνδεσμος","Petite":"μικρη","Pleine largeur":"Πλήρες πλάτος","Propriétaire":"Ιδιοκτήτης","Publication":"ημερομηνία δημοσίευσης","Publier":"δημοσιεύστε το άρθρο","Rejeter le commentaire ?":"Απορρίπτετε το σχόλιο;","Rejeté":"Απορρίφθηκε","Rédiger un article":"Γράψτε ένα άρθρο","Supprimer cet article ?":"Να διαγράψετε αυτό το άρθρο;","Supprimer le commentaire ?":"Διαγράψτε το σχόλιο;","Supprimer tous les commentaires ?":"Να διαγράψετε όλα τα σχόλια;","Tableau:couverture + 200 signes":"Πίνακας:εξώφυλλο + 200 χαρακτήρες","Tableau:couverture + 400 signes":"Πίνακας:εξώφυλλο + 400 χαρακτήρες","Tableau:couverture + 600 signes":"Πίνακας:εξώφυλλο + 600 χαρακτήρες","Tableau:couverture + 800 signes":"Πίνακας:εξώφυλλο + 800 χαρακτήρες","Taille optimale de l'image de couverture:920 x 350 pixels.":"Βέλτιστο μέγεθος εικόνας εξωφύλλου:920 x 350 pixels","Texte de l'étiquette":"Κείμενο ετικέτας","Tous les groupes":"Όλες οι ομάδες","Tout effacer":"Διαγραφή όλων","Très Grande":"Πολύ μεγάλη","Très petite":"Πολύ μικρη","À droite":"Δεξιά","À gauche":"Αριστερά","Éditer l'article":"Επεξεργασία άρθρου","Éditer/ Approuver les commentaires":"Επεξεργασία / Έγκριση σχολίων","Éditeur":"Συντάκτης","État":"κατάσταση"}
|
||||
{
|
||||
"1 article": "1 Άρθρο",
|
||||
"10 articles": "10 Άρθρα",
|
||||
"100 signes": "100 χαρακτήρες",
|
||||
"12 articles": "12 Άρθρα",
|
||||
"2 articles": "2 Άρθρα",
|
||||
"250 signes": "250 χαρακτήρες",
|
||||
"4 articles": "4 Άρθρα",
|
||||
"500 signes": "500 χαρακτήρες",
|
||||
"6 articles": "6 Άρθρα",
|
||||
"750 signes": "750 χαρακτήρες",
|
||||
"8 articles": "8 Άρθρα",
|
||||
"Administrateur": "Διαχειριστής",
|
||||
"Approbation par un modérateur": "Έγκριση επόπτη",
|
||||
"Approuver le commentaire ?": "Εγκρίνετε το σχόλιο;",
|
||||
"Approuvé": "Εγκεκριμένο",
|
||||
"Article complet en pleine page": "Άρθρο πλήρους σελίδας",
|
||||
"Article supprimé": "Άρθρο που διαγράφηκε",
|
||||
"Articles par page": "Άρθρα ανά σελίδα",
|
||||
"Aucun article": "κανένα άρθρο",
|
||||
"Aucun commentaire": "Κανένα σχόλιο",
|
||||
"Auteur": "Συγγραφέας",
|
||||
"Brouillon": "Σχέδιο",
|
||||
"Caractères par commentaire": "Χαρακτήρες ανά σχόλιο",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Επιλογή του μέγιστου αριθμού χαρακτήρων για κάθε σχόλιο του άρθρου, συμπεριλαμβανομένης της μορφοποίησης html.",
|
||||
"Commentaire approuvé": "Σχόλιο εγκεκριμένο",
|
||||
"Commentaire rejeté": "Σχόλιο απορρίφθηκε",
|
||||
"Commentaire supprimé": "Σχόλιο διαγράφηκε",
|
||||
"Commentaires": "Σχόλια",
|
||||
"Commentaires supprimés": "Σχόλια διαγράφονται",
|
||||
"Edition - Suppression": "Επεξεργασία - Διαγραφή",
|
||||
"Effacer l'article": "Διαγραφή αντικειμένου",
|
||||
"Fermer les commentaires": "Κλείσιμο σχολίων",
|
||||
"Gestion des commentaires": "Διαχείριση σχολίων",
|
||||
"Grande": "Μεγάλη",
|
||||
"Groupe du propriétaire": "Ομάδα ιδιοκτήτη",
|
||||
"Image de couverture": "εικόνα εξωφύλλου",
|
||||
"Informations générales": "Γενικές πληροφορίες",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "Το άρθρο είναι ορατό μόνο μετά την προγραμματισμένη ημερομηνία δημοσίευσης",
|
||||
"Largeur": "Πλάτος εικόνας",
|
||||
"Le texte de l'article est adapté autour de l'image": "Το κείμενο του άρθρου τοποθετείται γύρω από την εικόνα",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Οι χρήστες σε ανώτερες ομάδες έχουν απεριόριστη πρόσβαση στο άρθρο",
|
||||
"Lien du flux RSS": "Σύνδεσμος τροφοδοσίας RSS",
|
||||
"Masquer l'image dans l'article": "Απόκρυψη εικόνας στο άρθρο",
|
||||
"Masquer l'image de couverture dans l'article": "Απόκρυψη της εικόνας εξωφύλλου στο άρθρο",
|
||||
"Membre": "Μέλος",
|
||||
"Notification par email": "Ειδοποίηση ηλεκτρονικού ταχυδρομείου",
|
||||
"Nouvel article créé": "Δημιουργήθηκε νέο άρθρο",
|
||||
"Options de configuration": "Opções de configuração",
|
||||
"Options de publication": "Επιλογές δημοσίευσης",
|
||||
"Permalink": "Μόνιμος σύνδεσμος",
|
||||
"Petite": "μικρη",
|
||||
"Pleine largeur": "Πλήρες πλάτος",
|
||||
"Propriétaire": "Ιδιοκτήτης",
|
||||
"Publication": "ημερομηνία δημοσίευσης",
|
||||
"Publier": "δημοσιεύστε το άρθρο",
|
||||
"Rejeter le commentaire ?": "Απορρίπτετε το σχόλιο;",
|
||||
"Rejeté": "Απορρίφθηκε",
|
||||
"Rédiger un article": "Γράψτε ένα άρθρο",
|
||||
"Supprimer cet article ?": "Να διαγράψετε αυτό το άρθρο;",
|
||||
"Supprimer le commentaire ?": "Διαγράψτε το σχόλιο;",
|
||||
"Supprimer tous les commentaires ?": "Να διαγράψετε όλα τα σχόλια;",
|
||||
"200 signes": "200 χαρακτήρες",
|
||||
"400 signes": "400 χαρακτήρες",
|
||||
"600 signes": "600 χαρακτήρες",
|
||||
"1000 signes": "1000 χαρακτήρες",
|
||||
"1200 signes": "1200 χαρακτήρες",
|
||||
"1400 signes": "1400 χαρακτήρες",
|
||||
"1600 signes": "1600 χαρακτήρες",
|
||||
"1800 signes": "1800 χαρακτήρες",
|
||||
"Classique": "Κλασικό",
|
||||
"Moderne": "Μοντέρνο",
|
||||
"Disposition": "Διάταξη",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "Βέλτιστο μέγεθος εικόνας εξωφύλλου:920 x 350 pixels",
|
||||
"Texte de l'étiquette": "Κείμενο ετικέτας",
|
||||
"Tous les groupes": "Όλες οι ομάδες",
|
||||
"Tout effacer": "Διαγραφή όλων",
|
||||
"Très Grande": "Πολύ μεγάλη",
|
||||
"Très petite": "Πολύ μικρη",
|
||||
"À droite": "Δεξιά",
|
||||
"À gauche": "Αριστερά",
|
||||
"Éditer l'article": "Επεξεργασία άρθρου",
|
||||
"Éditer/ Approuver les commentaires": "Επεξεργασία / Έγκριση σχολίων",
|
||||
"Éditeur": "Συντάκτης",
|
||||
"État": "κατάσταση",
|
||||
"Lire la suite": "Διαβάστε περισσότερα"
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 articolo","10 articles":"10 articoli","100 signes":"100 segni","12 articles":"12 articoli","2 articles":"2 articoli","250 signes":"250 segni","4 articles":"4 articoli","500 signes":"500 segni","6 articles":"6 articoli","750 signes":"750 segni","8 articles":"8 articoli","Administrateur":"Amministratore","Approbation par un modérateur":"Approvazione da parte di un moderatore","Approuver le commentaire ?":"Approvare il commento?","Approuvé":"Approvato","Article complet en pleine page":"Articolo completo in tutta la pagina","Article supprimé":"Articolo cancellato","Articles par page":"Articoli per pagina","Aucun article":"Nessun articolo","Aucun commentaire":"Nessun commento","Auteur":"Auteur","Brouillon":"Progetto di copia","Caractères par commentaire":"Personaggi per commento","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Scegliere il numero massimo di caratteri per ciascun commento dell'articolo, la formattazione HTML inclusa.","Commentaire approuvé":"Commento approvato","Commentaire rejeté":"Commento respinto","Commentaire supprimé":"Commento cancellato","Commentaires":"Commenti","Commentaires supprimés":"Commenti cancellati","Edition - Suppression":"Edizione - soppressione","Effacer l'article":"Cancella l'articolo","Fermer les commentaires":"Disattiva i commenti","Gestion des commentaires":"Gestione dei commenti","Grande":"Grande","Groupe du propriétaire":"Gruppo del proprietario","Image de couverture":"Copertura","Informations générales":"Informazioni generali","L'article n'est visible qu'après la date de publication prévue.":"L'articolo è visibile solo dopo la data di pubblicazione fornita.","Largeur":"Larghezza dell'immagine","Le texte de l'article est adapté autour de l'image":"Il testo dell'articolo è adattato all'immagine","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Gli utenti di gruppi più alti accedono all'articolo senza restrizioni","Lien du flux RSS":"Lien Du Flux RSS","Masquer l'image dans l'article":"Nascondi l'immagine nell'articolo","Masquer l'image de couverture dans l'article":"Nascondi l'immagine di copertina nell'articolo","Membre":"Membro","Notification par email":"Email di notifica par","Nouvel article créé":"Nuovo articolo creato","Options de configuration":"Opzioni di configurazione","Options de publication":"Opzioni di pubblicazione","Permalink":"Permalink","Petite":"Petite","Pleine largeur":"Intera larghezza","Propriétaire":"Proprietario","Publication":"Pbblicazione","Publier":"Pubblicare","Rejeter le commentaire ?":"Rifiutare il commento?","Rejeté":"Respinto","Rédiger un article":"Scrivi un articolo","Supprimer cet article ?":"Elimina questo articolo?","Supprimer le commentaire ?":"Elimina il commento?","Supprimer tous les commentaires ?":"Elimina tutti i commenti?","Tableau:couverture + 200 signes":"","Tableau:couverture + 400 signes":"","Tableau:couverture + 600 signes":"","Tableau:couverture + 800 signes":"","Taille optimale de l'image de couverture:920 x 350 pixels.":"","Texte de l'étiquette":"Testo dell'etichetta","Tous les groupes":"Tutti i gruppi","Tout effacer":"Cancellare tutto","Très Grande":"Molto alto","Très petite":"Molto piccolo","À droite":"","À gauche":"A sinistra","Éditer l'article":"Modifica l'articolo","Éditer/ Approuver les commentaires":"","Éditeur":"Editore","État":"Stato"}
|
||||
{
|
||||
"1 article": "1 articolo",
|
||||
"10 articles": "10 articoli",
|
||||
"100 signes": "100 segni",
|
||||
"12 articles": "12 articoli",
|
||||
"2 articles": "2 articoli",
|
||||
"250 signes": "250 segni",
|
||||
"4 articles": "4 articoli",
|
||||
"500 signes": "500 segni",
|
||||
"6 articles": "6 articoli",
|
||||
"750 signes": "750 segni",
|
||||
"8 articles": "8 articoli",
|
||||
"Administrateur": "Amministratore",
|
||||
"Approbation par un modérateur": "Approvazione da parte di un moderatore",
|
||||
"Approuver le commentaire ?": "Approvare il commento?",
|
||||
"Approuvé": "Approvato",
|
||||
"Article complet en pleine page": "Articolo completo in tutta la pagina",
|
||||
"Article supprimé": "Articolo cancellato",
|
||||
"Articles par page": "Articoli per pagina",
|
||||
"Aucun article": "Nessun articolo",
|
||||
"Aucun commentaire": "Nessun commento",
|
||||
"Auteur": "Auteur",
|
||||
"Brouillon": "Progetto di copia",
|
||||
"Caractères par commentaire": "Personaggi per commento",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Scegliere il numero massimo di caratteri per ciascun commento dell'articolo, la formattazione HTML inclusa.",
|
||||
"Commentaire approuvé": "Commento approvato",
|
||||
"Commentaire rejeté": "Commento respinto",
|
||||
"Commentaire supprimé": "Commento cancellato",
|
||||
"Commentaires": "Commenti",
|
||||
"Commentaires supprimés": "Commenti cancellati",
|
||||
"Edition - Suppression": "Edizione - soppressione",
|
||||
"Effacer l'article": "Cancella l'articolo",
|
||||
"Fermer les commentaires": "Disattiva i commenti",
|
||||
"Gestion des commentaires": "Gestione dei commenti",
|
||||
"Grande": "Grande",
|
||||
"Groupe du propriétaire": "Gruppo del proprietario",
|
||||
"Image de couverture": "Copertura",
|
||||
"Informations générales": "Informazioni generali",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "L'articolo è visibile solo dopo la data di pubblicazione fornita.",
|
||||
"Largeur": "Larghezza dell'immagine",
|
||||
"Le texte de l'article est adapté autour de l'image": "Il testo dell'articolo è adattato all'immagine",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Gli utenti di gruppi più alti accedono all'articolo senza restrizioni",
|
||||
"Lien du flux RSS": "Lien Du Flux RSS",
|
||||
"Masquer l'image dans l'article": "Nascondi l'immagine nell'articolo",
|
||||
"Masquer l'image de couverture dans l'article": "Nascondi l'immagine di copertina nell'articolo",
|
||||
"Membre": "Membro",
|
||||
"Notification par email": "Email di notifica par",
|
||||
"Nouvel article créé": "Nuovo articolo creato",
|
||||
"Options de configuration": "Opzioni di configurazione",
|
||||
"Options de publication": "Opzioni di pubblicazione",
|
||||
"Permalink": "Permalink",
|
||||
"Petite": "Petite",
|
||||
"Pleine largeur": "Intera larghezza",
|
||||
"Propriétaire": "Proprietario",
|
||||
"Publication": "Pbblicazione",
|
||||
"Publier": "Pubblicare",
|
||||
"Rejeter le commentaire ?": "Rifiutare il commento?",
|
||||
"Rejeté": "Respinto",
|
||||
"Rédiger un article": "Scrivi un articolo",
|
||||
"Supprimer cet article ?": "Elimina questo articolo?",
|
||||
"Supprimer le commentaire ?": "Elimina il commento?",
|
||||
"Supprimer tous les commentaires ?": "Elimina tutti i commenti?",
|
||||
"200 signes": "200 caratteri",
|
||||
"400 signes": "400 caratteri",
|
||||
"600 signes": "600 caratteri",
|
||||
"1000 signes": "1000 caratteri",
|
||||
"1200 signes": "1200 caratteri",
|
||||
"1400 signes": "1400 caratteri",
|
||||
"1600 signes": "1600 caratteri",
|
||||
"1800 signes": "1800 caratteri",
|
||||
"Classique": "Classico",
|
||||
"Moderne": "Moderno",
|
||||
"Disposition": "Layout",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "",
|
||||
"Texte de l'étiquette": "Testo dell'etichetta",
|
||||
"Tous les groupes": "Tutti i gruppi",
|
||||
"Tout effacer": "Cancellare tutto",
|
||||
"Très Grande": "Molto alto",
|
||||
"Très petite": "Molto piccolo",
|
||||
"À droite": "",
|
||||
"À gauche": "A sinistra",
|
||||
"Éditer l'article": "Modifica l'articolo",
|
||||
"Éditer/ Approuver les commentaires": "",
|
||||
"Éditeur": "Editore",
|
||||
"État": "Stato",
|
||||
"Lire la suite": "Continua a leggere"
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 artigo","10 articles":"10 artigos","100 signes":"100 sinais","12 articles":"12 artigos","2 articles":"2 artigos","250 signes":"250 sinais","4 articles":"4 artigos","500 signes":"500 sinais","6 articles":"6 artigos","750 signes":"750 sinais","8 articles":"8 artigos","Administrateur":"Administrador","Approbation par un modérateur":"Aprovação por um moderador","Approuver le commentaire ?":"Aprovar o comentário?","Approuvé":"Aprovado","Article complet en pleine page":"Artigo completo na página completa","Article supprimé":"Artigo excluído","Articles par page":"Artigos por página","Aucun article":"Nenhum artigo","Aucun commentaire":"Sem comentários","Auteur":"Autora","Brouillon":"Cópia rascunho","Caractères par commentaire":"Personagens por comentários","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"Escolhendo o número máximo de caracteres para cada comentário do artigo, a formatação HTML incluída.","Commentaire approuvé":"Comentário aprovado","Commentaire rejeté":"Comentário rejeitado","Commentaire supprimé":"Comentário excluído","Commentaires":"Comentários","Commentaires supprimés":"Comentários excluídos","Edition - Suppression":"Edição - Supressão","Effacer l'article":"Apague o artigo","Fermer les commentaires":"Desligue os comentários","Gestion des commentaires":"Gerenciamento de comentários","Grande":"Grande","Groupe du propriétaire":"Grupo do proprietário","Image de couverture":"Cobertura","Informations générales":"Informações gerais","L'article n'est visible qu'après la date de publication prévue.":"O artigo é visível apenas após a data da publicação fornecida.","Largeur":"Largura da imagem","Le texte de l'article est adapté autour de l'image":"O texto do artigo é adaptado em torno da imagem","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Usuários de grupos superiores acessam o artigo sem restrição","Lien du flux RSS":"Lien du Flux RSS","Masquer l'image dans l'article":"Esconder a imagem no artigo","Masquer l'image de couverture dans l'article":"Ocultar a imagem da capa no artigo","Membre":"Membro","Notification par email":"Notificação por e -mail","Nouvel article créé":"Novo artigo criado","Options de configuration":"Opções de configuração","Options de publication":"Opções de publicação","Permalink":"Permalink","Petite":"Petite","Pleine largeur":"Largura completa","Propriétaire":"Proprietário","Publication":"Publicação","Publier":"Publicar","Rejeter le commentaire ?":"Rejeitar o comentário?","Rejeté":"Rejeitado","Rédiger un article":"Escrever um artigo","Supprimer cet article ?":"Excluir este artigo?","Supprimer le commentaire ?":"Excluir o comentário?","Supprimer tous les commentaires ?":"Excluir todos os comentários?","Tableau:couverture + 200 signes":"","Tableau:couverture + 400 signes":"","Tableau:couverture + 600 signes":"","Tableau:couverture + 800 signes":"","Taille optimale de l'image de couverture:920 x 350 pixels.":"","Texte de l'étiquette":"Texto da etiqueta","Tous les groupes":"Todos os grupos","Tout effacer":"Apague tudo","Très Grande":"Muito alto","Très petite":"Muito pequeno","À droite":"","À gauche":"Para a esquerda","Éditer l'article":"Edite o artigo","Éditer/ Approuver les commentaires":"","Éditeur":"Editor","État":"Estado"}
|
||||
{
|
||||
"1 article": "1 artigo",
|
||||
"10 articles": "10 artigos",
|
||||
"100 signes": "100 sinais",
|
||||
"12 articles": "12 artigos",
|
||||
"2 articles": "2 artigos",
|
||||
"250 signes": "250 sinais",
|
||||
"4 articles": "4 artigos",
|
||||
"500 signes": "500 sinais",
|
||||
"6 articles": "6 artigos",
|
||||
"750 signes": "750 sinais",
|
||||
"8 articles": "8 artigos",
|
||||
"Administrateur": "Administrador",
|
||||
"Approbation par un modérateur": "Aprovação por um moderador",
|
||||
"Approuver le commentaire ?": "Aprovar o comentário?",
|
||||
"Approuvé": "Aprovado",
|
||||
"Article complet en pleine page": "Artigo completo na página completa",
|
||||
"Article supprimé": "Artigo excluído",
|
||||
"Articles par page": "Artigos por página",
|
||||
"Aucun article": "Nenhum artigo",
|
||||
"Aucun commentaire": "Sem comentários",
|
||||
"Auteur": "Autora",
|
||||
"Brouillon": "Cópia rascunho",
|
||||
"Caractères par commentaire": "Personagens por comentários",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "Escolhendo o número máximo de caracteres para cada comentário do artigo, a formatação HTML incluída.",
|
||||
"Commentaire approuvé": "Comentário aprovado",
|
||||
"Commentaire rejeté": "Comentário rejeitado",
|
||||
"Commentaire supprimé": "Comentário excluído",
|
||||
"Commentaires": "Comentários",
|
||||
"Commentaires supprimés": "Comentários excluídos",
|
||||
"Edition - Suppression": "Edição - Supressão",
|
||||
"Effacer l'article": "Apague o artigo",
|
||||
"Fermer les commentaires": "Desligue os comentários",
|
||||
"Gestion des commentaires": "Gerenciamento de comentários",
|
||||
"Grande": "Grande",
|
||||
"Groupe du propriétaire": "Grupo do proprietário",
|
||||
"Image de couverture": "Cobertura",
|
||||
"Informations générales": "Informações gerais",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "O artigo é visível apenas após a data da publicação fornecida.",
|
||||
"Largeur": "Largura da imagem",
|
||||
"Le texte de l'article est adapté autour de l'image": "O texto do artigo é adaptado em torno da imagem",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Usuários de grupos superiores acessam o artigo sem restrição",
|
||||
"Lien du flux RSS": "Lien du Flux RSS",
|
||||
"Masquer l'image dans l'article": "Esconder a imagem no artigo",
|
||||
"Masquer l'image de couverture dans l'article": "Ocultar a imagem da capa no artigo",
|
||||
"Membre": "Membro",
|
||||
"Notification par email": "Notificação por e -mail",
|
||||
"Nouvel article créé": "Novo artigo criado",
|
||||
"Options de configuration": "Opções de configuração",
|
||||
"Options de publication": "Opções de publicação",
|
||||
"Permalink": "Permalink",
|
||||
"Petite": "Petite",
|
||||
"Pleine largeur": "Largura completa",
|
||||
"Propriétaire": "Proprietário",
|
||||
"Publication": "Publicação",
|
||||
"Publier": "Publicar",
|
||||
"Rejeter le commentaire ?": "Rejeitar o comentário?",
|
||||
"Rejeté": "Rejeitado",
|
||||
"Rédiger un article": "Escrever um artigo",
|
||||
"Supprimer cet article ?": "Excluir este artigo?",
|
||||
"Supprimer le commentaire ?": "Excluir o comentário?",
|
||||
"Supprimer tous les commentaires ?": "Excluir todos os comentários?",
|
||||
"200 signes": "200 caracteres",
|
||||
"400 signes": "400 caracteres",
|
||||
"600 signes": "600 caracteres",
|
||||
"1000 signes": "1000 caracteres",
|
||||
"1200 signes": "1200 caracteres",
|
||||
"1400 signes": "1400 caracteres",
|
||||
"1600 signes": "1600 caracteres",
|
||||
"1800 signes": "1800 caracteres",
|
||||
"Classique": "Clássico",
|
||||
"Moderne": "Moderno",
|
||||
"Disposition": "Disposição",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "",
|
||||
"Texte de l'étiquette": "Texto da etiqueta",
|
||||
"Tous les groupes": "Todos os grupos",
|
||||
"Tout effacer": "Apague tudo",
|
||||
"Très Grande": "Muito alto",
|
||||
"Très petite": "Muito pequeno",
|
||||
"À droite": "",
|
||||
"À gauche": "Para a esquerda",
|
||||
"Éditer l'article": "Edite o artigo",
|
||||
"Éditer/ Approuver les commentaires": "",
|
||||
"Éditeur": "Editor",
|
||||
"État": "Estado",
|
||||
"Lire la suite": "Leia mais"
|
||||
}
|
@ -1 +1,87 @@
|
||||
{"1 article":"1 makale","10 articles":"10 makale","100 signes":"100 karakter","12 articles":"12 makale","2 articles":"2 makale","250 signes":"250 karakter","4 articles":"4 makale","500 signes":"500 karakter","6 articles":"6 makale","750 signes":"750 karakter","8 articles":"8 makale","Administrateur":"Yönetici","Approbation par un modérateur":"Moderatör onayı","Approuver le commentaire ?":"Yorum onaylansın mı?","Approuvé":"Onaylandı","Article complet en pleine page":"Tam sayfa tam makale","Article supprimé":"Silinen makale","Articles par page":"Sayfa başına makale","Aucun article":"Makale yok","Aucun commentaire":"Yorum yok","Auteur":"Yazar","Brouillon":"Karalama","Caractères par commentaire":"Yorum başına karakter","Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.":"HTML biçimlendirmesi dahil olmak üzere, makalenin her yorumu için maksimum karakter sayısı seçimi.","Commentaire approuvé":"Onaylanan yorum","Commentaire rejeté":"Reddedilen yorum","Commentaire supprimé":"Silinen yorum","Commentaires":"Yorumlar","Commentaires supprimés":"Silinen yorumlar","Edition - Suppression":"Düzenle - Sil","Effacer l'article":"Makaleyi sil","Fermer les commentaires":"Yorumları kapat","Gestion des commentaires":"Yorum yönetimi","Grande":"Büyük","Groupe du propriétaire":"Sahip grubu","Image de couverture":"Kapak resmi","Informations générales":"Genel bilgiler","L'article n'est visible qu'après la date de publication prévue.":"Makale yalnızca planlanan yayın tarihinden sonra görülebilir.","Largeur":"Resim genişliği","Le texte de l'article est adapté autour de l'image":"Makalenin metni resmin etrafıni çevreler","Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction":"Üst gruplardaki kullanıcılar makaleye kısıtlama olmadan erişebilir","Lien du flux RSS":"RSS dağıtım bağlantısı","Masquer l'image dans l'article":"Makalede resmi gizle","Masquer l'image de couverture dans l'article":"Makalede kapak resmini gizle","Membre":"Üye","Notification par email":"Eposta bildirimi","Nouvel article créé":"Yeni makale oluşturuldu","Options de configuration":"Yapılandırma seçenekleri","Options de publication":"Yayınlama seçenekleri","Permalink":"Kalıcı bağlantı","Petite":"Küçük","Pleine largeur":"Tam genişlik","Propriétaire":"Mal sahibi","Publication":"Yayın","Publier":"Yayınla","Rejeter le commentaire ?":"Yorum reddedilsin mi?","Rejeté":"Reddedildi","Rédiger un article":"Bir makale yaz","Supprimer cet article ?":"Bu makale silinsin mi?","Supprimer le commentaire ?":"Yorum silinsin mi?","Supprimer tous les commentaires ?":"","Tableau:couverture + 200 signes":"","Tableau:couverture + 400 signes":"","Tableau:couverture + 600 signes":"","Tableau:couverture + 800 signes":"","Taille optimale de l'image de couverture:920 x 350 pixels.":"","Texte de l'étiquette":"Etiket metni","Tous les groupes":"Tüm gruplar","Tout effacer":"Her şeyi sil","Très Grande":"Çok büyük","Très petite":"Çok küçük","À droite":"","À gauche":"Sola","Éditer l'article":"Makaleyi düzenle","Éditer/ Approuver les commentaires":"","Éditeur":"Düzenleyici","État":"Durum"}
|
||||
{
|
||||
"1 article": "1 makale",
|
||||
"10 articles": "10 makale",
|
||||
"100 signes": "100 karakter",
|
||||
"12 articles": "12 makale",
|
||||
"2 articles": "2 makale",
|
||||
"250 signes": "250 karakter",
|
||||
"4 articles": "4 makale",
|
||||
"500 signes": "500 karakter",
|
||||
"6 articles": "6 makale",
|
||||
"750 signes": "750 karakter",
|
||||
"8 articles": "8 makale",
|
||||
"Administrateur": "Yönetici",
|
||||
"Approbation par un modérateur": "Moderatör onayı",
|
||||
"Approuver le commentaire ?": "Yorum onaylansın mı?",
|
||||
"Approuvé": "Onaylandı",
|
||||
"Article complet en pleine page": "Tam sayfa tam makale",
|
||||
"Article supprimé": "Silinen makale",
|
||||
"Articles par page": "Sayfa başına makale",
|
||||
"Aucun article": "Makale yok",
|
||||
"Aucun commentaire": "Yorum yok",
|
||||
"Auteur": "Yazar",
|
||||
"Brouillon": "Karalama",
|
||||
"Caractères par commentaire": "Yorum başına karakter",
|
||||
"Choix du nombre maximum de caractères pour chaque commentaire de l'article, mise en forme html comprise.": "HTML biçimlendirmesi dahil olmak üzere, makalenin her yorumu için maksimum karakter sayısı seçimi.",
|
||||
"Commentaire approuvé": "Onaylanan yorum",
|
||||
"Commentaire rejeté": "Reddedilen yorum",
|
||||
"Commentaire supprimé": "Silinen yorum",
|
||||
"Commentaires": "Yorumlar",
|
||||
"Commentaires supprimés": "Silinen yorumlar",
|
||||
"Edition - Suppression": "Düzenle - Sil",
|
||||
"Effacer l'article": "Makaleyi sil",
|
||||
"Fermer les commentaires": "Yorumları kapat",
|
||||
"Gestion des commentaires": "Yorum yönetimi",
|
||||
"Grande": "Büyük",
|
||||
"Groupe du propriétaire": "Sahip grubu",
|
||||
"Image de couverture": "Kapak resmi",
|
||||
"Informations générales": "Genel bilgiler",
|
||||
"L'article n'est visible qu'après la date de publication prévue.": "Makale yalnızca planlanan yayın tarihinden sonra görülebilir.",
|
||||
"Largeur": "Resim genişliği",
|
||||
"Le texte de l'article est adapté autour de l'image": "Makalenin metni resmin etrafıni çevreler",
|
||||
"Les utilisateurs des groupes supérieurs accèdent à l'article sans restriction": "Üst gruplardaki kullanıcılar makaleye kısıtlama olmadan erişebilir",
|
||||
"Lien du flux RSS": "RSS dağıtım bağlantısı",
|
||||
"Masquer l'image dans l'article": "Makalede resmi gizle",
|
||||
"Masquer l'image de couverture dans l'article": "Makalede kapak resmini gizle",
|
||||
"Membre": "Üye",
|
||||
"Notification par email": "Eposta bildirimi",
|
||||
"Nouvel article créé": "Yeni makale oluşturuldu",
|
||||
"Options de configuration": "Yapılandırma seçenekleri",
|
||||
"Options de publication": "Yayınlama seçenekleri",
|
||||
"Permalink": "Kalıcı bağlantı",
|
||||
"Petite": "Küçük",
|
||||
"Pleine largeur": "Tam genişlik",
|
||||
"Propriétaire": "Mal sahibi",
|
||||
"Publication": "Yayın",
|
||||
"Publier": "Yayınla",
|
||||
"Rejeter le commentaire ?": "Yorum reddedilsin mi?",
|
||||
"Rejeté": "Reddedildi",
|
||||
"Rédiger un article": "Bir makale yaz",
|
||||
"Supprimer cet article ?": "Bu makale silinsin mi?",
|
||||
"Supprimer le commentaire ?": "Yorum silinsin mi?",
|
||||
"Supprimer tous les commentaires ?": "",
|
||||
"200 signes": "200 karakter",
|
||||
"400 signes": "400 karakter",
|
||||
"600 signes": "600 karakter",
|
||||
"1000 signes": "1000 karakter",
|
||||
"1200 signes": "1200 karakter",
|
||||
"1400 signes": "1400 karakter",
|
||||
"1600 signes": "1600 karakter",
|
||||
"1800 signes": "1800 karakter",
|
||||
"Classique": "Klasik",
|
||||
"Moderne": "Modern",
|
||||
"Disposition": "Düzenleme",
|
||||
"Taille optimale de l'image de couverture:920 x 350 pixels.": "",
|
||||
"Texte de l'étiquette": "Etiket metni",
|
||||
"Tous les groupes": "Tüm gruplar",
|
||||
"Tout effacer": "Her şeyi sil",
|
||||
"Très Grande": "Çok büyük",
|
||||
"Très petite": "Çok küçük",
|
||||
"À droite": "",
|
||||
"À gauche": "Sola",
|
||||
"Éditer l'article": "Makaleyi düzenle",
|
||||
"Éditer/ Approuver les commentaires": "",
|
||||
"Éditeur": "Düzenleyici",
|
||||
"État": "Durum",
|
||||
"Lire la suite": "Devamını oku"
|
||||
}
|
@ -117,7 +117,7 @@
|
||||
<?php echo template::checkbox('blogAddCommentApproved', true, 'Approbation par un modérateur'); ?>
|
||||
</div>
|
||||
<div class="col4 commentOptionsWrapper">
|
||||
<?php echo template::select('blogAddCommentMaxlength', $module::$commentLength,[
|
||||
<?php echo template::select('blogAddCommentMaxlength', $module::$commentsLength,[
|
||||
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.',
|
||||
'label' => 'Caractères par commentaire'
|
||||
]); ?>
|
||||
|
@ -127,7 +127,7 @@
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col4 commentOptionsWrapper">
|
||||
<?php echo template::select('blogEditCommentMaxlength', $module::$commentLength,[
|
||||
<?php echo template::select('blogEditCommentMaxlength', $module::$commentsLength,[
|
||||
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.',
|
||||
'label' => 'Caractères par commentaire',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentMaxlength'])
|
||||
|
@ -1,10 +1,12 @@
|
||||
.rowArticle {
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
.blogPicture {
|
||||
float: none;
|
||||
border: 1px;
|
||||
}
|
||||
|
||||
.blogPicture img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
@ -18,76 +20,91 @@
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.blogArticlePicture {
|
||||
height: auto;
|
||||
border:1px solid lightgray;
|
||||
border: 1px solid lightgray;
|
||||
box-shadow: 1px 1px 5px;
|
||||
}
|
||||
|
||||
.blogArticlePictureleft {
|
||||
float: left;
|
||||
margin: 15px 10px 5px 0 ;
|
||||
margin: 15px 10px 5px 0;
|
||||
}
|
||||
|
||||
.blogArticlePictureright {
|
||||
float: right;
|
||||
margin: 15px 0 5px 10px ;
|
||||
margin: 15px 0 5px 10px;
|
||||
}
|
||||
|
||||
.blogPicture:hover {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.row:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.blogComment {
|
||||
padding-right: 10px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.blogTitle {
|
||||
/*background-color: #ECEFF1;*/
|
||||
padding: 0px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.blogContent {
|
||||
position: relative;
|
||||
float: left;
|
||||
margin-top: 5px;
|
||||
}
|
||||
.blogDate, .blogEdit {
|
||||
font-size:0.8em;
|
||||
|
||||
.blogDate,
|
||||
.blogEdit {
|
||||
font-size: 0.8em;
|
||||
font-style: italic;
|
||||
/*
|
||||
color: grey;
|
||||
*/
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.blogContent {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.blogPicture img {
|
||||
width: 50% ;
|
||||
width: 50%;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.pict20{
|
||||
.pict20 {
|
||||
width: 20%;
|
||||
}
|
||||
.pict30{
|
||||
|
||||
.pict30 {
|
||||
width: 30%;
|
||||
}
|
||||
.pict40{
|
||||
|
||||
.pict40 {
|
||||
width: 40%;
|
||||
}
|
||||
.pict50{
|
||||
|
||||
.pict50 {
|
||||
width: 50%;
|
||||
}
|
||||
.pict100{
|
||||
|
||||
.pict100 {
|
||||
width: 100%;
|
||||
margin: 15px 0 20px 0 ;
|
||||
margin: 15px 0 20px 0;
|
||||
}
|
||||
|
||||
|
||||
@ -95,10 +112,42 @@
|
||||
* Flux RSS
|
||||
*/
|
||||
#rssFeed {
|
||||
text-align: right;
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#rssFeed p {
|
||||
display: inline;
|
||||
vertical-align: top;
|
||||
display: inline;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.rowArticle,
|
||||
article {
|
||||
position: relative;
|
||||
/* Autres styles pour les articles coupés */
|
||||
}
|
||||
|
||||
.readMoreContainer {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.readMoreContainer,
|
||||
.readMoreModernContainer {
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
height: 45%;
|
||||
background: linear-gradient(180deg, hsla(0, 0%, 100%, 0) 0, #f6f6f6 100%, #f6f6f6);
|
||||
}
|
||||
|
||||
|
||||
.readMoreButton {
|
||||
position: absolute;
|
||||
width: 20%;
|
||||
bottom: 0px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
z-index: 99;
|
||||
background: linear-gradient(180deg, hsla(0, 0%, 100%, 0) 0, #f6f6f6 100%, #f6f6f6);
|
||||
/* Autres styles pour le bouton */
|
||||
}
|
@ -1,125 +1,129 @@
|
||||
<?php if ($module::$articles) : ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'config', 'feeds'])) : ?>
|
||||
<div id="rssFeed">
|
||||
<a type="application/rss+xml" href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/rss'; ?>" target="_blank">
|
||||
<img src='module/blog/ressource/feed-icon-16.gif' />
|
||||
<?php
|
||||
echo $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel']) ? '<p>' . $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel']) . '</p>' : '';
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'config', 'feeds'])): ?>
|
||||
<div id="rssFeed">
|
||||
<a type="application/rss+xml" href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/rss'; ?>" target="_blank">
|
||||
<img src='module/blog/ressource/feed-icon-16.gif' />
|
||||
<?php
|
||||
echo $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel']) ? '<p>' . $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel']) . '</p>' : '';
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($module::$articles): ?>
|
||||
<article>
|
||||
<?php foreach ($module::$articles as $articleId => $article) : ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght']) === 0) : ?>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<h2 class="blogTitle">
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>">
|
||||
<?php echo $article['title']; ?>
|
||||
</a>
|
||||
</h2>
|
||||
<?php foreach ($module::$articles as $articleId => $article): ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'config', 'layout']) === true): ?>
|
||||
<div class="readMoreModernContainer">
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<h2 class="blogTitle">
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>">
|
||||
<?php echo $article['title']; ?>
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col6 blogEdit">
|
||||
<!-- bloc signature et date -->
|
||||
<?php echo template::ico('user'); ?>
|
||||
<?php echo $module->signature($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId'])); ?>
|
||||
<?php echo template::ico('calendar-empty'); ?>
|
||||
<?php echo helper::dateUTF8($module::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])) . ' - ' . helper::dateUTF8($module::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])); ?>
|
||||
<div class="row">
|
||||
<div class="col6 blogEdit">
|
||||
<!-- bloc signature et date -->
|
||||
<?php echo template::ico('user'); ?>
|
||||
<?php echo $module->signature($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId'])); ?>
|
||||
<?php echo template::ico('calendar-empty'); ?>
|
||||
<?php echo helper::dateUTF8($module::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])) . ' - ' . helper::dateUTF8($module::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<?php if (
|
||||
$this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) &&
|
||||
file_exists(self::FILE_DIR . 'source/' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']))
|
||||
) : ?>
|
||||
<?php $pictureSize = $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'pictureSize']) === null ? '100' : $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'pictureSize']); ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'hidePicture']) == false) {
|
||||
echo '<img class="blogArticlePicture blogArticlePicture' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picturePosition']) .
|
||||
' pict' . $pictureSize . '" src="' . helper::baseUrl(false) . self::FILE_DIR . 'source/' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) .
|
||||
'" alt="' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) . '">';
|
||||
} ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'content']); ?>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<?php if (
|
||||
$this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) &&
|
||||
file_exists(self::FILE_DIR . 'source/' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']))
|
||||
): ?>
|
||||
<?php $pictureSize = $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'pictureSize']) === null ? '100' : $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'pictureSize']); ?>
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'hidePicture']) == false) {
|
||||
echo '<img class="blogArticlePicture blogArticlePicture' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picturePosition']) .
|
||||
' pict' . $pictureSize . '" src="' . helper::baseUrl(false) . self::FILE_DIR . 'source/' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) .
|
||||
'" alt="' . $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']) . '">';
|
||||
} ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'content']); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row verticalAlignMiddle">
|
||||
<div class="col6 blogEdit">
|
||||
<!-- Bloc edition -->
|
||||
<?php if (
|
||||
<div class="row">
|
||||
<div class="col6 blogEdit">
|
||||
<!-- Bloc edition -->
|
||||
<?php if (
|
||||
|
||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and
|
||||
( // Propriétaire
|
||||
($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === $module::EDIT_OWNER
|
||||
and ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId']) === $this->getUser('id')
|
||||
or $this->getUser('group') === self::GROUP_ADMIN)
|
||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
and
|
||||
( // Propriétaire
|
||||
($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === $module::EDIT_OWNER
|
||||
and ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId']) === $this->getUser('id')
|
||||
or $this->getUser('group') === self::GROUP_ADMIN)
|
||||
)
|
||||
or (
|
||||
// Groupe
|
||||
($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === self::GROUP_ADMIN
|
||||
or $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === self::GROUP_MODERATOR)
|
||||
and $this->getUser('group') >= $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent'])
|
||||
)
|
||||
or (
|
||||
// Tout le monde
|
||||
$this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === $module::EDIT_ALL
|
||||
and $this->getUser('group') >= $module::$actions['config']
|
||||
)
|
||||
)
|
||||
or (
|
||||
// Groupe
|
||||
($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === self::GROUP_ADMIN
|
||||
or $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === self::GROUP_MODERATOR)
|
||||
and $this->getUser('group') >= $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent'])
|
||||
)
|
||||
or (
|
||||
// Tout le monde
|
||||
$this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'editConsent']) === $module::EDIT_ALL
|
||||
and $this->getUser('group') >= $module::$actions['config']
|
||||
)
|
||||
)
|
||||
) : ?>
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleId . '/' . $_SESSION['csrf']; ?>">
|
||||
<?php echo template::ico('pencil'); ?> Éditer
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="col6 textAlignRight" id="comment">
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'commentClose'])) : ?>
|
||||
<p>Cet article ne reçoit pas de commentaire.</p>
|
||||
<?php else : ?>
|
||||
<p>
|
||||
<?php echo template::ico('comment', ['margin' => 'right']); ?>
|
||||
<?php
|
||||
if ($module::$comments[$articleId] > 0) {
|
||||
echo '<a href="' . helper::baseUrl() . $this->getUrl(0) . '/' . $articleId . '">';
|
||||
echo $module::$comments[$articleId] . ' commentaire' . ($module::$comments[$articleId] > 1 ? 's' : '');
|
||||
echo '</a>';
|
||||
} else {
|
||||
echo 'Pas encore de commentaire';
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
): ?>
|
||||
<a
|
||||
href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleId . '/' . $_SESSION['csrf']; ?>">
|
||||
<?php echo template::ico('pencil'); ?> Éditer
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="col6 textAlignRight" id="comment">
|
||||
<?php if ($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'commentClose'])): ?>
|
||||
<p>Cet article ne reçoit pas de commentaire.</p>
|
||||
<?php else: ?>
|
||||
<p>
|
||||
<?php echo template::ico('comment', ['margin' => 'right']); ?>
|
||||
<?php
|
||||
if ($module::$comments[$articleId] > 0) {
|
||||
echo '<a href="' . helper::baseUrl() . $this->getUrl(0) . '/' . $articleId . '">';
|
||||
echo $module::$comments[$articleId] . ' commentaire' . ($module::$comments[$articleId] > 1 ? 's' : '');
|
||||
echo '</a>';
|
||||
} else {
|
||||
echo 'Pas encore de commentaire';
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="row rowArticle">
|
||||
<?php else: ?>
|
||||
<div class="row">
|
||||
<?php if (
|
||||
$article['picture'] &&
|
||||
file_exists(self::FILE_DIR . 'source/' . $article['picture'])
|
||||
) : ?>
|
||||
): ?>
|
||||
<div class="col3">
|
||||
<?php // Déterminer le nom de la miniature
|
||||
$parts = pathinfo($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']));
|
||||
$thumb = 'mini_' . $parts['basename'];
|
||||
// Créer la miniature si manquante
|
||||
if (!file_exists(self::FILE_DIR . 'thumb/' . $thumb)) {
|
||||
$this->makeThumb(
|
||||
self::FILE_DIR . 'source/' . $article['picture'],
|
||||
self::FILE_DIR . 'thumb/' . $thumb,
|
||||
self::THUMBS_WIDTH
|
||||
);
|
||||
}
|
||||
?>
|
||||
$parts = pathinfo($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'picture']));
|
||||
$thumb = 'mini_' . $parts['basename'];
|
||||
// Créer la miniature si manquante
|
||||
if (!file_exists(self::FILE_DIR . 'thumb/' . $thumb)) {
|
||||
$this->makeThumb(
|
||||
self::FILE_DIR . 'source/' . $article['picture'],
|
||||
self::FILE_DIR . 'thumb/' . $thumb,
|
||||
self::THUMBS_WIDTH
|
||||
);
|
||||
}
|
||||
?>
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>" class="blogPicture">
|
||||
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR . 'thumb/' . $thumb; ?>" alt="<?php echo $article['picture']; ?>">
|
||||
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR . 'thumb/' . $thumb; ?>"
|
||||
alt="<?php echo $article['picture']; ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col9">
|
||||
<?php else : ?>
|
||||
<?php else: ?>
|
||||
<div class="col12">
|
||||
<?php endif; ?>
|
||||
<h2 class="blogTitle">
|
||||
@ -129,30 +133,40 @@
|
||||
</h2>
|
||||
<div class="blogComment">
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>#comment">
|
||||
<?php if ($article['comment']) : ?>
|
||||
<?php if ($article['comment']): ?>
|
||||
<?php echo count($article['comment']); ?>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<?php echo template::ico('comment', ['margin' => 'left']); ?>
|
||||
</div>
|
||||
<div class="blogDate">
|
||||
<!-- bloc signature et date -->
|
||||
<?php echo template::ico('user'); ?>
|
||||
<?php echo $module->signature($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId']));?>
|
||||
<?php echo template::ico('calendar-empty'); ?>
|
||||
<?php echo helper::dateUTF8($module::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])) . ' - ' . helper::dateUTF8($module::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])); ?>
|
||||
<!-- bloc signature et date -->
|
||||
<?php echo template::ico('user'); ?>
|
||||
<?php echo $module->signature($this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'userId'])); ?>
|
||||
<?php echo template::ico('calendar-empty'); ?>
|
||||
<?php echo helper::dateUTF8($module::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])) . ' - ' . helper::dateUTF8($module::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $articleId, 'publishedOn'])); ?>
|
||||
</div>
|
||||
<p class="blogContent">
|
||||
<?php $lenght = $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght']) !== 0 ? $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght']) : 500 ?>
|
||||
<div class="blogContent">
|
||||
<?php $lenght = $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght']) !== 0 ? $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght']) : 500 ?>
|
||||
<?php echo helper::subword(strip_tags($article['content'], '<br><p>'), 0, $lenght); ?>...
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>">Lire la suite</a>
|
||||
</p>
|
||||
<div class="readMoreContainer">
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>"><button
|
||||
class="readMoreButton">Lire la suite</button></a>
|
||||
<div class="readMoreContainer">
|
||||
<a href="<?php echo helper::baseUrl() . $this->getUrl(0) . '/' . $articleId; ?>">
|
||||
<button class="readMoreButton">
|
||||
<?php echo helper::translate('Lire la suite'); ?>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</article>
|
||||
<?php echo $module::$pages; ?>
|
||||
<?php else : ?>
|
||||
<?php else: ?>
|
||||
<?php echo template::speech('Aucun article'); ?>
|
||||
<?php endif; ?>
|
@ -1,64 +1,71 @@
|
||||
<?php echo template::formOpen('blogOption'); ?>
|
||||
<div class="row">
|
||||
<div class="col1">
|
||||
<?php echo template::button('blogOptionBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||
'value' => template::ico('left')
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset9">
|
||||
<?php echo template::submit('blogOptionSubmit'); ?>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col1">
|
||||
<?php echo template::button('blogOptionBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||
'value' => template::ico('left')
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4><?php echo helper::translate('Paramètres');?></h4>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo template::select('blogOptionArticlesLenght', $module::$articlesLenght, [
|
||||
'label' => 'Disposition',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo template::select('blogOptionItemsperPage', $module::$ArticlesListed, [
|
||||
'label' => 'Articles par page',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'itemsperPage'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::select('blogOptionDateFormat', $module::$dateFormats, [
|
||||
'label' => 'Format des dates',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'dateFormat'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::select('blogOptionTimeFormat', $module::$timeFormats, [
|
||||
'label' => 'Format des heures',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'timeFormat'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset9">
|
||||
<?php echo template::submit('blogOptionSubmit'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4>
|
||||
<?php echo helper::translate('Paramètres'); ?>
|
||||
</h4>
|
||||
<div class="row">
|
||||
<div class="col3">
|
||||
<?php echo template::select('blogOptionArticlesLayout', $module::$articlesLayout, [
|
||||
'label' => 'Disposition',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'layout'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col6">
|
||||
<?php echo template::checkbox('blogOptionShowFeeds', true, 'Lien du flux RSS', [
|
||||
'checked' => $this->getData(['module', $this->getUrl(0), 'config', 'feeds']),
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col6">
|
||||
<?php echo template::text('blogOptionFeedslabel', [
|
||||
'label' => 'Texte de l\'étiquette',
|
||||
'value' => $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo template::select('blogOptionArticlesLenght', $module::$articlesLenght, [
|
||||
'label' => 'Aperçus',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'articlesLenght'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo template::select('blogOptionItemsperPage', $module::$ArticlesListed, [
|
||||
'label' => 'Articles par page',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'itemsperPage'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo template::select('blogOptionDateFormat', $module::$dateFormats, [
|
||||
'label' => 'Format des dates',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'dateFormat'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo template::select('blogOptionTimeFormat', $module::$timeFormats, [
|
||||
'label' => 'Format des heures',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'timeFormat'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col8">
|
||||
<?php echo template::checkbox('blogOptionShowFeeds', true, 'Lien du flux RSS', [
|
||||
'checked' => $this->getData(['module', $this->getUrl(0), 'config', 'feeds']),
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col4">
|
||||
<?php echo template::text('blogOptionFeedslabel', [
|
||||
'label' => 'Texte de l\'étiquette',
|
||||
'value' => $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo template::formClose(); ?>
|
||||
<div class="moduleVersion">Version n°
|
||||
<?php echo $module::VERSION; ?>
|
||||
</div>
|
||||
|
||||
</div>
|
@ -1,17 +1,19 @@
|
||||
# Version 3.8
|
||||
- Encode UTF-8 de l'objet du message, et des noms des champs.
|
||||
# Version 3.7
|
||||
- Modification liées à la suppression de flatpickr
|
||||
- Modification liées à la suppression de flatpickr.
|
||||
# Version 3.6
|
||||
- Appel de fonction incorrect
|
||||
- Appel de fonction incorrect.
|
||||
# Version 3.5
|
||||
- Multilingue
|
||||
# Version 3.4
|
||||
- Bug de présentation, une div en trop.
|
||||
# Version 3.3
|
||||
- Multilinguisme
|
||||
- Multilinguisme.
|
||||
# Version 3.2
|
||||
- Bug variable non initialisée
|
||||
- Bug variable non initialisée.
|
||||
# Version 3.1
|
||||
- Initialisation des paramètres personnalisés
|
||||
- Initialisation des paramètres personnalisés.
|
||||
# Version 3
|
||||
- Déplacement des options de formulaires
|
||||
- Gabarit du formulaire sur la page
|
||||
- Déplacement des options de formulaires.
|
||||
- Gabarit du formulaire sur la page.
|
||||
|
@ -14,23 +14,24 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class form extends common {
|
||||
class form extends common
|
||||
{
|
||||
|
||||
const VERSION = '3.7';
|
||||
const VERSION = '3.8';
|
||||
const REALNAME = 'Formulaire';
|
||||
const DATADIRECTORY = ''; // Contenu localisé inclus par défaut (page.json et module.json)
|
||||
|
||||
public static $actions = [
|
||||
'config' => self::GROUP_MODERATOR,
|
||||
'option' => self::GROUP_MODERATOR,
|
||||
'option' => self::GROUP_MODERATOR,
|
||||
'data' => self::GROUP_MODERATOR,
|
||||
'delete' => self::GROUP_MODERATOR,
|
||||
'deleteall' => self::GROUP_MODERATOR,
|
||||
'index' => self::GROUP_VISITOR,
|
||||
'export2csv' => self::GROUP_MODERATOR,
|
||||
'output2csv' => self::GROUP_MODERATOR,
|
||||
'init' => self::GROUP_MODERATOR,
|
||||
'update' => self::GROUP_MODERATOR,
|
||||
'init' => self::GROUP_MODERATOR,
|
||||
'update' => self::GROUP_MODERATOR,
|
||||
];
|
||||
|
||||
public static $data = [];
|
||||
@ -80,32 +81,33 @@ class form extends common {
|
||||
];
|
||||
|
||||
public static $optionOffset = [
|
||||
0 => 'Aucune',
|
||||
1 => 'Une colonne',
|
||||
2 => 'Deux colonnes'
|
||||
0 => 'Aucune',
|
||||
1 => 'Une colonne',
|
||||
2 => 'Deux colonnes'
|
||||
];
|
||||
|
||||
public static $optionWidth = [
|
||||
6 => 'Six colonnes',
|
||||
7 => 'Sept colonnes',
|
||||
8 => 'Huit colonnes',
|
||||
9 => 'Neuf colonnes',
|
||||
10 => 'Dix colonnes',
|
||||
11 => 'Onze colonnes',
|
||||
12 => 'Douze colonnes',
|
||||
6 => 'Six colonnes',
|
||||
7 => 'Sept colonnes',
|
||||
8 => 'Huit colonnes',
|
||||
9 => 'Neuf colonnes',
|
||||
10 => 'Dix colonnes',
|
||||
11 => 'Onze colonnes',
|
||||
12 => 'Douze colonnes',
|
||||
];
|
||||
|
||||
public static $optionAlign = [
|
||||
'' => 'A gauche',
|
||||
'textAlignCenter' => 'Au centre',
|
||||
'textAlignRight' => 'A droite'
|
||||
'' => 'A gauche',
|
||||
'textAlignCenter' => 'Au centre',
|
||||
'textAlignRight' => 'A droite'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
public function config() {
|
||||
public function config()
|
||||
{
|
||||
|
||||
// Mise à jour des données de module
|
||||
$this->update();
|
||||
@ -113,21 +115,21 @@ class form extends common {
|
||||
// Liste des utilisateurs
|
||||
$userIdsFirstnames = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||
ksort($userIdsFirstnames);
|
||||
self::$listUsers [] = '';
|
||||
foreach($userIdsFirstnames as $userId => $userFirstname) {
|
||||
self::$listUsers [] = $userId;
|
||||
self::$listUsers[] = '';
|
||||
foreach ($userIdsFirstnames as $userId => $userFirstname) {
|
||||
self::$listUsers[] = $userId;
|
||||
}
|
||||
// Soumission du formulaire
|
||||
if($this->isPost()) {
|
||||
if ($this->isPost()) {
|
||||
// Génération des données vides
|
||||
if ($this->getData(['module', $this->getUrl(0), 'data']) === null) {
|
||||
$this->setData(['module', $this->getUrl(0), 'data', []]);
|
||||
}
|
||||
// Génération des champs
|
||||
$inputs = [];
|
||||
foreach($this->getInput('formConfigPosition', null) as $index => $position) {
|
||||
foreach ($this->getInput('formConfigPosition', null) as $index => $position) {
|
||||
$inputs[] = [
|
||||
'name' => htmlspecialchars_decode($this->getInput('formConfigName[' . $index . ']'),ENT_QUOTES),
|
||||
'name' => html_entity_decode($this->getInput('formConfigName[' . $index . ']')),
|
||||
'position' => helper::filter($position, helper::FILTER_INT),
|
||||
'required' => $this->getInput('formConfigRequired[' . $index . ']', helper::FILTER_BOOLEAN),
|
||||
'type' => $this->getInput('formConfigType[' . $index . ']'),
|
||||
@ -142,13 +144,6 @@ class form extends common {
|
||||
'state' => true
|
||||
]);
|
||||
}
|
||||
// Liste des pages
|
||||
foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) {
|
||||
self::$pages[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
|
||||
foreach($childrenPageIds as $childKey) {
|
||||
self::$pages[$childKey] = ' ' . $this->getData(['page', $childKey, 'title']);
|
||||
}
|
||||
}
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'title' => helper::translate('Configuration du module'),
|
||||
@ -161,20 +156,21 @@ class form extends common {
|
||||
}
|
||||
|
||||
|
||||
public function option() {
|
||||
public function option()
|
||||
{
|
||||
// Liste des utilisateurs
|
||||
$userIdsFirstnames = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||
ksort($userIdsFirstnames);
|
||||
self::$listUsers [] = '';
|
||||
self::$listUsers[] = '';
|
||||
foreach ($userIdsFirstnames as $userId => $userFirstname) {
|
||||
self::$listUsers [] = $userId;
|
||||
self::$listUsers[] = $userId;
|
||||
}
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Débordement
|
||||
$width = $this->getInput('formOptionWidth');
|
||||
if ($this->getInput('formOptionWidth',helper::FILTER_INT) + $this->getInput('formOptionOffset',helper::FILTER_INT) > 12 ) {
|
||||
$width = (string) $this->getInput('formOptionWidth',helper::FILTER_INT) - $this->getInput('formOptionOffset',helper::FILTER_INT);
|
||||
if ($this->getInput('formOptionWidth', helper::FILTER_INT) + $this->getInput('formOptionOffset', helper::FILTER_INT) > 12) {
|
||||
$width = (string) $this->getInput('formOptionWidth', helper::FILTER_INT) - $this->getInput('formOptionOffset', helper::FILTER_INT);
|
||||
}
|
||||
|
||||
// Configuration
|
||||
@ -186,17 +182,17 @@ class form extends common {
|
||||
'button' => $this->getInput('formOptionButton'),
|
||||
'captcha' => $this->getInput('formOptionCaptcha', helper::FILTER_BOOLEAN),
|
||||
'group' => $this->getInput('formOptionGroup', helper::FILTER_INT),
|
||||
'user' => self::$listUsers [$this->getInput('formOptionUser', helper::FILTER_INT)],
|
||||
'mail' => $this->getInput('formOptionMail') ,
|
||||
'user' => self::$listUsers[$this->getInput('formOptionUser', helper::FILTER_INT)],
|
||||
'mail' => $this->getInput('formOptionMail'),
|
||||
'pageId' => $this->getInput('formOptionPageIdToggle', helper::FILTER_BOOLEAN) === true ? $this->getInput('formOptionPageId', helper::FILTER_ID) : '',
|
||||
'subject' => $this->getInput('formOptionSubject'),
|
||||
'subject' => html_entity_decode($this->getInput('formOptionSubject')),
|
||||
'replyto' => $this->getInput('formOptionMailReplyTo', helper::FILTER_BOOLEAN),
|
||||
'signature' => $this->getInput('formOptionSignature'),
|
||||
'logoUrl' => $this->getInput('formOptionLogo'),
|
||||
'logoWidth' => $this->getInput('formOptionLogoWidth'),
|
||||
'offset' =>$this->getInput('formOptionOffset'),
|
||||
'width' =>$width,
|
||||
'align' =>$this->getInput('formOptionAlign'),
|
||||
'offset' => $this->getInput('formOptionOffset'),
|
||||
'width' => $width,
|
||||
'align' => $this->getInput('formOptionAlign'),
|
||||
]
|
||||
]);
|
||||
// Génération des données vides
|
||||
@ -209,12 +205,12 @@ class form extends common {
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(),
|
||||
'state' => true
|
||||
]);
|
||||
} else {
|
||||
} else {
|
||||
// Liste des pages
|
||||
foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) {
|
||||
foreach ($this->getHierarchy(null, true, false) as $parentPageId => $childrenPageIds) {
|
||||
self::$pages[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
|
||||
foreach($childrenPageIds as $childKey) {
|
||||
self::$pages[$childKey] = ' ' . $this->getData(['page', $childKey, 'title']);
|
||||
foreach ($childrenPageIds as $childKey) {
|
||||
self::$pages[$childKey] = ' » ' . $this->getData(['page', $childKey, 'title']);
|
||||
}
|
||||
}
|
||||
// Valeurs en sortie
|
||||
@ -232,9 +228,10 @@ class form extends common {
|
||||
/**
|
||||
* Données enregistrées
|
||||
*/
|
||||
public function data() {
|
||||
public function data()
|
||||
{
|
||||
$data = $this->getData(['module', $this->getUrl(0), 'data']);
|
||||
if($data) {
|
||||
if ($data) {
|
||||
// Pagination
|
||||
$pagination = helper::pagination($data, $this->getUrl(), self::$itemsperPage);
|
||||
// Liste des pages
|
||||
@ -243,16 +240,16 @@ class form extends common {
|
||||
$dataIds = array_reverse(array_keys($data));
|
||||
$data = array_reverse($data);
|
||||
// Données en fonction de la pagination
|
||||
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
||||
for ($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
||||
$content = '';
|
||||
foreach($data[$i] as $input => $value) {
|
||||
foreach ($data[$i] as $input => $value) {
|
||||
$content .= $input . ' : ' . $value . '<br>';
|
||||
}
|
||||
self::$data[] = [
|
||||
$content,
|
||||
template::button('formDataDelete' . $dataIds[$i], [
|
||||
'class' => 'formDataDelete buttonRed',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $dataIds[$i] . '/' . $_SESSION['csrf'],
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $dataIds[$i] . '/' . $_SESSION['csrf'],
|
||||
'value' => template::ico('trash')
|
||||
])
|
||||
];
|
||||
@ -268,39 +265,40 @@ class form extends common {
|
||||
/**
|
||||
* Export CSV
|
||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
||||
*/
|
||||
public function export2csv() {
|
||||
public function export2csv()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(2) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'notification' => helper::translate('Action interdite')
|
||||
]);
|
||||
} else {
|
||||
$data = $this->getData(['module', $this->getUrl(0), 'data']);
|
||||
if ($data !== []) {
|
||||
$csvfilename = 'data-'.date('dmY').'-'.date('hm').'-'.rand(10,99).'.csv';
|
||||
if (!file_exists(self::FILE_DIR.'source/data')) {
|
||||
mkdir(self::FILE_DIR.'source/data', 0755);
|
||||
$csvfilename = 'data-' . date('dmY') . '-' . date('hm') . '-' . rand(10, 99) . '.csv';
|
||||
if (!file_exists(self::FILE_DIR . 'source/data')) {
|
||||
mkdir(self::FILE_DIR . 'source/data', 0755);
|
||||
}
|
||||
$fp = fopen(self::FILE_DIR.'source/data/'.$csvfilename, 'w');
|
||||
fputcsv($fp, array_keys($data[1]), ';','"');
|
||||
$fp = fopen(self::FILE_DIR . 'source/data/' . $csvfilename, 'w');
|
||||
fputcsv($fp, array_keys($data[1]), ';', '"');
|
||||
foreach ($data as $fields) {
|
||||
fputcsv($fp, $fields, ';','"');
|
||||
fputcsv($fp, $fields, ';', '"');
|
||||
}
|
||||
fclose($fp);
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'notification' => sprintf(helper::translate('Export CSV effectué dans %1 '), $csvfilename),
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) .'/data',
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'state' => true
|
||||
]);
|
||||
} else {
|
||||
$this->addOutput([
|
||||
'notification' => helper::translate('Aucune donnée à exporter'),
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) .'/data'
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@ -310,19 +308,20 @@ class form extends common {
|
||||
/**
|
||||
* Suppression
|
||||
*/
|
||||
public function deleteall() {
|
||||
public function deleteall()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(2) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'notification' => helper::translate('Action interdite')
|
||||
]);
|
||||
} else {
|
||||
$data = ($this->getData(['module', $this->getUrl(0), 'data']));
|
||||
if (count($data) > 0 ) {
|
||||
if (count($data) > 0) {
|
||||
// Suppression multiple
|
||||
for ($i = 1; $i <= count($data) ; $i++) {
|
||||
for ($i = 1; $i <= count($data); $i++) {
|
||||
echo $this->deleteData(['module', $this->getUrl(0), 'data', $i]);
|
||||
}
|
||||
// Valeurs en sortie
|
||||
@ -345,17 +344,18 @@ class form extends common {
|
||||
/**
|
||||
* Suppression
|
||||
*/
|
||||
public function delete() {
|
||||
public function delete()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(3) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/data',
|
||||
'notification' => helper::translate('Action interdite')
|
||||
]);
|
||||
} else {
|
||||
// La donnée n'existe pas
|
||||
if($this->getData(['module', $this->getUrl(0), 'data', $this->getUrl(2)]) === null) {
|
||||
if ($this->getData(['module', $this->getUrl(0), 'data', $this->getUrl(2)]) === null) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'access' => false
|
||||
@ -380,19 +380,20 @@ class form extends common {
|
||||
/**
|
||||
* Accueil
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
|
||||
// Mise à jour des données de module
|
||||
$this->update();
|
||||
|
||||
// Soumission du formulaire
|
||||
if($this->isPost()) {
|
||||
if ($this->isPost()) {
|
||||
// Check la captcha
|
||||
if(
|
||||
if (
|
||||
$this->getData(['module', $this->getUrl(0), 'config', 'captcha'])
|
||||
// AND $this->getInput('formcaptcha', helper::FILTER_INT) !== $this->getInput('formcaptchaFirstNumber', helper::FILTER_INT) + $this->getInput('formcaptchaSecondNumber', helper::FILTER_INT))
|
||||
AND password_verify($this->getInput('formCaptcha', helper::FILTER_INT), $this->getInput('formCaptchaResult') ) === false )
|
||||
{
|
||||
and password_verify($this->getInput('formCaptcha', helper::FILTER_INT), $this->getInput('formCaptchaResult')) === false
|
||||
) {
|
||||
self::$inputNotices['formCaptcha'] = helper::translate('Captcha incorrect');
|
||||
|
||||
}
|
||||
@ -400,9 +401,9 @@ class form extends common {
|
||||
$data = [];
|
||||
$replyTo = null;
|
||||
$content = '';
|
||||
foreach($this->getData(['module', $this->getUrl(0), 'input']) as $index => $input) {
|
||||
foreach ($this->getData(['module', $this->getUrl(0), 'input']) as $index => $input) {
|
||||
// Filtre la valeur
|
||||
switch($input['type']) {
|
||||
switch ($input['type']) {
|
||||
case self::TYPE_MAIL:
|
||||
$filter = helper::FILTER_MAIL;
|
||||
break;
|
||||
@ -420,10 +421,12 @@ class form extends common {
|
||||
}
|
||||
$value = $this->getInput('formInput[' . $index . ']', $filter, $input['required']) === true ? 'X' : $this->getInput('formInput[' . $index . ']', $filter, $input['required']);
|
||||
// premier champ email ajouté au mail en reply si option active
|
||||
if ($this->getData(['module', $this->getUrl(0), 'config', 'replyto']) === true &&
|
||||
$input['type'] === 'mail') {
|
||||
if (
|
||||
$this->getData(['module', $this->getUrl(0), 'config', 'replyto']) === true &&
|
||||
$input['type'] === 'mail'
|
||||
) {
|
||||
$replyTo = $value;
|
||||
}
|
||||
}
|
||||
// Préparation des données pour la création dans la base
|
||||
$data[$this->getData(['module', $this->getUrl(0), 'input', $index, 'name'])] = $value;
|
||||
// Préparation des données pour le mail
|
||||
@ -434,23 +437,25 @@ class form extends common {
|
||||
// Envoi du mail
|
||||
// Rechercher l'adresse en fonction du mail
|
||||
$sent = true;
|
||||
$singleuser = $this->getData(['user',
|
||||
$this->getData(['module', $this->getUrl(0), 'config', 'user']),
|
||||
'mail']);
|
||||
$singleuser = $this->getData([
|
||||
'user',
|
||||
$this->getData(['module', $this->getUrl(0), 'config', 'user']),
|
||||
'mail'
|
||||
]);
|
||||
$singlemail = $this->getData(['module', $this->getUrl(0), 'config', 'mail']);
|
||||
$group = $this->getData(['module', $this->getUrl(0), 'config', 'group']);
|
||||
// Verification si le mail peut être envoyé
|
||||
if(
|
||||
if (
|
||||
self::$inputNotices === [] && (
|
||||
$group > 0 ||
|
||||
$singleuser !== '' ||
|
||||
$singlemail !== '' )
|
||||
$singlemail !== '')
|
||||
) {
|
||||
// Utilisateurs dans le groupe
|
||||
$to = [];
|
||||
if ($group > 0){
|
||||
foreach($this->getData(['user']) as $userId => $user) {
|
||||
if($user['group'] >= $group) {
|
||||
if ($group > 0) {
|
||||
foreach ($this->getData(['user']) as $userId => $user) {
|
||||
if ($user['group'] >= $group) {
|
||||
$to[] = $user['mail'];
|
||||
}
|
||||
}
|
||||
@ -463,10 +468,10 @@ class form extends common {
|
||||
if (!empty($singlemail)) {
|
||||
$to[] = $singlemail;
|
||||
}
|
||||
if($to) {
|
||||
if ($to) {
|
||||
// Sujet du mail
|
||||
$subject = $this->getData(['module', $this->getUrl(0), 'config', 'subject']);
|
||||
if($subject === '') {
|
||||
if ($subject === '') {
|
||||
$subject = 'Nouveau message en provenance de votre site';
|
||||
}
|
||||
// Envoi le mail
|
||||
@ -486,7 +491,7 @@ class form extends common {
|
||||
$this->addOutput([
|
||||
'notification' => ($sent === true ? helper::translate('Formulaire soumis') : $sent),
|
||||
'redirect' => $redirect ? helper::baseUrl() . $redirect : '',
|
||||
'state' => ($sent === true ? true : null),
|
||||
'state' => ($sent === true ? true : false),
|
||||
'vendor' => [
|
||||
'flatpickr'
|
||||
],
|
||||
@ -507,23 +512,25 @@ class form extends common {
|
||||
* Mise à jour du module
|
||||
* Appelée par les fonctions index et config
|
||||
*/
|
||||
private function update() {
|
||||
private function update()
|
||||
{
|
||||
|
||||
// le module n'est pas initialisé
|
||||
if ( $this->getData(['module',$this->getUrl(0), 'config']) === NULL ) {
|
||||
if ($this->getData(['module', $this->getUrl(0), 'config']) === NULL) {
|
||||
$this->init();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Initialisation du thème d'un nouveau module
|
||||
*/
|
||||
private function init() {
|
||||
private function init()
|
||||
{
|
||||
// Données du module absentes
|
||||
require_once('module/form/ressource/defaultdata.php');
|
||||
if ($this->getData(['module', $this->getUrl(0), 'config' ]) === null) {
|
||||
if ($this->getData(['module', $this->getUrl(0), 'config']) === null) {
|
||||
$this->setData(['module', $this->getUrl(0), 'config', init::$defaultData]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -46,6 +46,7 @@
|
||||
&& strlen($this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'content'])) >= $this->getData(['module', $this->getUrl(0), 'config', 'height'])
|
||||
): ?>
|
||||
<?php echo ' ... <a href="' . helper::baseUrl(true) . $this->getUrl(0) . '/' . $newsId . '"><span class="newsSuite">lire la suite</span></a>'; ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user