diff --git a/src/config.php b/src/config.php new file mode 100644 index 0000000..6344ccc --- /dev/null +++ b/src/config.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/core/.htaccess b/src/core/.htaccess new file mode 100644 index 0000000..45552cb --- /dev/null +++ b/src/core/.htaccess @@ -0,0 +1 @@ +Options -Indexes \ No newline at end of file diff --git a/src/core/admin/article.php b/src/core/admin/article.php new file mode 100644 index 0000000..85d92fa --- /dev/null +++ b/src/core/admin/article.php @@ -0,0 +1,426 @@ +plxPlugins->callHook('AdminArticlePrepend')); + +# validation de l'id de l'article si passé en parametre +if(isset($_GET['a']) AND !preg_match('/^_?[0-9]{4}$/',$_GET['a'])) { + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); # Article inexistant + header('Location: index.php'); + exit; +} + +# Formulaire validé +if(!empty($_POST)) { # Création, mise à jour, suppression ou aperçu + + if(!isset($_POST['catId'])) $_POST['catId']=array(); + # Titre par défaut si titre vide + if(trim($_POST['title'])=='') $_POST['title'] = L_DEFAULT_NEW_ARTICLE_TITLE; + # Si demande d'enregistrement en brouillon on ajoute la categorie draft à la liste et on retire la demande de validation + if(isset($_POST['draft']) AND !in_array('draft',$_POST['catId'])) array_unshift($_POST['catId'], 'draft'); + # si aucune catégorie sélectionnée on place l'article dans la catégorie "non classé" + if(sizeof($_POST['catId'])==1 AND $_POST['catId'][0]=='draft') $_POST['catId'][]='000'; + else $_POST['catId'] = array_filter($_POST['catId'], create_function('$a', 'return $a!="000";')); + # Si demande de publication ou demande de validation, on supprime la catégorie draft si elle existe + if((isset($_POST['update']) OR isset($_POST['publish']) OR isset($_POST['moderate'])) AND isset($_POST['catId'])) $_POST['catId'] = array_filter($_POST['catId'], create_function('$a', 'return $a!="draft";')); + # Si profil PROFIL_WRITER on vérifie l'id du rédacteur connecté et celui de l'article + if($_SESSION['profil']==PROFIL_WRITER AND isset($_POST['author']) AND $_SESSION['user']!=$_POST['author']) $_POST['author']=$_SESSION['user']; + # Si profil PROFIL_WRITER on vérifie que l'article n'est pas celui d'un autre utilisateur + if($_SESSION['profil']==PROFIL_WRITER AND isset($_POST['artId']) AND $_POST['artId']!='0000') { + # On valide l'article + if(($aFile = $plxAdmin->plxGlob_arts->query('/^'.$_POST['artId'].'.([home[draft|0-9,]*).'.$_SESSION['user'].'.(.+).xml$/')) == false) { # Article inexistant + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); + header('Location: index.php'); + exit; + } + } + # Previsualisation d'un article + if(!empty($_POST['preview'])) { + $art=array(); + $art['title'] = trim($_POST['title']); + $art['allow_com'] = $_POST['allow_com']; + $art['template'] = basename($_POST['template']); + $art['chapo'] = trim($_POST['chapo']); + $art['content'] = trim($_POST['content']); + $art['tags'] = trim($_POST['tags']); + $art['meta_description'] = $_POST['meta_description']; + $art['meta_keywords'] = $_POST['meta_keywords']; + $art['title_htmltag'] = $_POST['title_htmltag']; + $art['filename'] = ''; + $art['numero'] = $_POST['artId']; + $art['author'] = $_POST['author']; + $art['categorie'] = ''; + if(!empty($_POST['catId'])) { + $array=array(); + foreach($_POST['catId'] as $k => $v) { + if($v!='draft') $array[]=$v; + } + $art['categorie']=implode(',',$array); + } + $art['date'] = $_POST['year'].$_POST['month'].$_POST['day'].substr(str_replace(':','',$_POST['time']),0,4); + $art['nb_com'] = 0; + if(trim($_POST['url']) == '') + $art['url'] = plxUtils::title2url($_POST['title']); + else + $art['url'] = plxUtils::title2url($_POST['url']); + if($art['url'] == '') $art['url'] = L_DEFAULT_NEW_ARTICLE_URL; + + # Hook Plugins + eval($plxAdmin->plxPlugins->callHook('AdminArticlePreview')); + + $article[0] = $art; + $_SESSION['preview'] = $article; + header('Location: '.PLX_ROOT.'index.php?preview'); + exit; + } + # Suppression d'un article + if(isset($_POST['delete'])) { + $plxAdmin->delArticle($_POST['artId']); + header('Location: index.php'); + exit; + } + # Mode création ou maj + if(isset($_POST['update']) OR isset($_POST['publish']) OR isset($_POST['moderate']) OR isset($_POST['draft'])) { + + $valid = true; + # Vérification de l'unicité de l'url + $_POST['url'] = plxUtils::title2url(trim($_POST['url'])==''?$_POST['title']:$_POST['url']); + foreach($plxAdmin->plxGlob_arts->aFiles as $numart => $filename) { + if(preg_match("/^_?[0-9]{4}.([0-9,|home|draft]*).[0-9]{3}.[0-9]{12}.".$_POST["url"].".xml$/", $filename)) { + if($numart!=str_replace('_', '',$_POST['artId'])) { + $valid = plxMsg::Error(L_ERR_URL_ALREADY_EXISTS." : ".plxUtils::strCheck($_POST["url"])) AND $valid; + } + } + } + # Vérification de la validité de la date de publication + if(!plxDate::checkDate($_POST['day'],$_POST['month'],$_POST['year'],$_POST['time'])) { + $valid = plxMsg::Error(L_ERR_INVALID_PUBLISHING_DATE) AND $valid; + } + if($valid) { + $plxAdmin->editArticle($_POST,$_POST['artId']); + header('Location: article.php?a='.$_POST['artId']); + exit; + } + + } + # Ajout d'une catégorie + if(isset($_POST['new_category'])) { + # Ajout de la nouvelle catégorie + $plxAdmin->editCategories($_POST); + # On recharge la nouvelle liste + $plxAdmin->getCategories(path('XMLFILE_CATEGORIES')); + $_GET['a']=$_POST['artId']; + } + # Alimentation des variables + $artId = $_POST['artId']; + $title = trim($_POST['title']); + $author = $_POST['author']; + $catId = isset($_POST['catId'])?$_POST['catId']:array(); + $date['day'] = $_POST['day']; + $date['month'] = $_POST['month']; + $date['year'] = $_POST['year']; + $date['time'] = $_POST['time']; + $chapo = trim($_POST['chapo']); + $content = trim($_POST['content']); + $tags = trim($_POST['tags']); + $url = $_POST['url']; + $allow_com = $_POST['allow_com']; + $template = $_POST['template']; + $meta_description = $_POST['meta_description']; + $meta_keywords = $_POST['meta_keywords']; + $title_htmltag = $_POST['title_htmltag']; + # Hook Plugins + eval($plxAdmin->plxPlugins->callHook('AdminArticlePostData')); +} elseif(!empty($_GET['a'])) { # On n'a rien validé, c'est pour l'édition d'un article + # On va rechercher notre article + if(($aFile = $plxAdmin->plxGlob_arts->query('/^'.$_GET['a'].'.(.+).xml$/')) == false) { # Article inexistant + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); + header('Location: index.php'); + exit; + } + # On parse et alimente nos variables + $result = $plxAdmin->parseArticle(PLX_ROOT.$plxAdmin->aConf['racine_articles'].$aFile['0']); + $title = trim($result['title']); + $chapo = trim($result['chapo']); + $content = trim($result['content']); + $tags = trim($result['tags']); + $author = $result['author']; + $url = $result['url']; + $date = plxDate::date2Array($result['date']); + $catId = explode(',', $result['categorie']); + $artId = $result['numero']; + $allow_com = $result['allow_com']; + $template = $result['template']; + $meta_description=$result['meta_description']; + $meta_keywords=$result['meta_keywords']; + $title_htmltag = $result['title_htmltag']; + + if($author!=$_SESSION['user'] AND $_SESSION['profil']==PROFIL_WRITER) { + plxMsg::Error(L_ERR_FORBIDDEN_ARTICLE); + header('Location: index.php'); + exit; + } + # Hook Plugins + eval($plxAdmin->plxPlugins->callHook('AdminArticleParseData')); + +} else { # On a rien validé, c'est pour la création d'un article + $title = plxUtils::strRevCheck(L_DEFAULT_NEW_ARTICLE_TITLE); + $chapo = $url = ''; + $content = ''; + $tags = ''; + $author = $_SESSION['user']; + $date = array ('year' => date('Y'),'month' => date('m'),'day' => date('d'),'time' => date('H:i')); + $catId = array('draft'); + $artId = '0000'; + $allow_com = $plxAdmin->aConf['allow_com']; + $template = 'article.php'; + $meta_description=$meta_keywords=$title_htmltag=''; + # Hook Plugins + eval($plxAdmin->plxPlugins->callHook('AdminArticleInitData')); +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +# On construit la liste des utilisateurs +foreach($plxAdmin->aUsers as $_userid => $_user) { + if($_user['active'] AND !$_user['delete'] ) { + if($_user['profil']==PROFIL_ADMIN) + $_users[L_PROFIL_ADMIN][$_userid] = plxUtils::strCheck($_user['name']); + elseif($_user['profil']==PROFIL_MANAGER) + $_users[L_PROFIL_MANAGER][$_userid] = plxUtils::strCheck($_user['name']); + elseif($_user['profil']==PROFIL_MODERATOR) + $_users[L_PROFIL_MODERATOR][$_userid] = plxUtils::strCheck($_user['name']); + elseif($_user['profil']==PROFIL_EDITOR) + $_users[L_PROFIL_EDITOR][$_userid] = plxUtils::strCheck($_user['name']); + else + $_users[L_PROFIL_WRITER][$_userid] = plxUtils::strCheck($_user['name']); + } +} + +# On récupère les templates des articles +$files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style']); +if ($array = $files->query('/^article(-[a-z0-9-_]+)?.php$/')) { + foreach($array as $k=>$v) + $aTemplates[$v] = $v; +} +$cat_id='000'; +?> + +
+ +
+ +
+

 :  + + '; + } + else + echo L_PUBLISHED; + ?> + +

+
+

+ '; + echo ''.plxUtils::strCheck($plxAdmin->aUsers[$author]['name']).''; + } + ?> +

+ + + + + + +

+
'; + $selected = (is_array($catId) AND in_array('home', $catId)) ? ' checked="checked"' : ''; + echo '
'; + foreach($plxAdmin->aCats as $cat_id => $cat_name) { + $selected = (is_array($catId) AND in_array($cat_id, $catId)) ? ' checked="checked"' : ''; + echo ''; + if($plxAdmin->aCats[$cat_id]['active']) + echo '
'; + else + echo '
'; + } + ?> + + +

+ + + + +

  

+ + + + + + aConf['allow_com']=='1') : ?> +

+ L_YES,'0'=>L_NO),$allow_com); ?> + + + + +

  

+ + +

+ + +

+ + +

+ + +

+ + + plxPlugins->callHook('AdminArticleSidebar')) # Hook Plugins ?> + + +
    +
  •  
  • +
  •  
  • +
+ + +
+ +
+ +
+ +

+ +

+ + plxPlugins->callHook('AdminArticleTop')) # Hook Plugins ?> + +
+
+ +

+ +

+ +   + +

+ +

+ + + urlRewrite('index.php?article'.intval($artId).'/'.$url) ?> + + ' ?> + +
+ plxPlugins->callHook('AdminArticleContent')) ?> +
+ +
+

+ + + PROFIL_MODERATOR AND $plxAdmin->aConf['mod_art']) { + if(in_array('draft', $catId)) { # brouillon + if($artId!='0000') # nouvel article + echo ''; + echo ''; + echo ''; + } else { + if(isset($_GET['a']) AND preg_match('/^_[0-9]{4}$/',$_GET['a'])) { # en attente + echo ''; + echo ''; + echo ''; + } else { + echo ''; + echo ''; + } + } + } else { + if($artId!='0000') + echo ''; + if(in_array('draft', $catId)) { + echo ''; + echo ''; + } else { + if(!isset($_GET['a']) OR preg_match('/^_[0-9]{4}$/',$_GET['a'])) + echo ''; + else + echo ''; + echo ''; + } + } + ?> +

+
+ +
+ +
+ +
+plxPlugins->callHook('AdminArticleFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/auth.php b/src/core/admin/auth.php new file mode 100644 index 0000000..17c0ad2 --- /dev/null +++ b/src/core/admin/auth.php @@ -0,0 +1,116 @@ +plxPlugins->callHook('AdminAuthPrepend')); + +# Initialisation variable erreur +$error = ''; +$msg = ''; + +# Control et filtrage du parametre $_GET['p'] +$redirect=$plxAdmin->aConf['racine'].'core/admin/'; +if(!empty($_GET['p'])) { + $racine = parse_url($plxAdmin->aConf['racine']); + $get_p = parse_url(urldecode($_GET['p'])); + $error = (!$get_p OR (isset($get_p['host']) AND $racine['host']!=$get_p['host'])); + if(!$error AND !empty($get_p['path']) AND file_exists(PLX_ROOT.'core/admin/'.basename($get_p['path']))) { + # filtrage des parametres de l'url + $query=''; + if(isset($get_p['query'])) { + $query=strtok($get_p['query'],'='); + $query=($query[0]!='d'?'?'.$get_p['query']:''); + } + # url de redirection + $redirect=$get_p['path'].$query; + } +} + +# Déconnexion +if(!empty($_GET['d']) AND $_GET['d']==1) { + + $_SESSION = array(); + session_destroy(); + header('Location: auth.php'); + exit; + + $formtoken = $_SESSION['formtoken']; # sauvegarde du token du formulaire + $_SESSION = array(); + session_destroy(); + session_start(); + $msg = L_LOGOUT_SUCCESSFUL; + $_GET['p']=''; + $_SESSION['formtoken']=$formtoken; # restauration du token du formulaire + unset($formtoken); +} + +# Authentification +if(!empty($_POST['login']) AND !empty($_POST['password'])) { + $connected = false; + foreach($plxAdmin->aUsers as $userid => $user) { + if ($_POST['login']==$user['login'] AND sha1($user['salt'].md5($_POST['password']))==$user['password'] AND $user['active'] AND !$user['delete']) { + $_SESSION['user'] = $userid; + $_SESSION['profil'] = $user['profil']; + $_SESSION['hash'] = plxUtils::charAleatoire(10); + $_SESSION['domain'] = $session_domain; + $_SESSION['lang'] = $user['lang']; + $connected = true; + } + } + if($connected) { + header('Location: '.htmlentities($redirect)); + exit; + } else { + $msg = L_ERR_WRONG_PASSWORD; + $error = 'error'; + } +} +plxUtils::cleanHeaders(); +?> + + + + + PluXml - <?php echo L_AUTH_PAGE_TITLE ?> + + + + plxPlugins->callHook('AdminAuthEndHead')) ?> + + + +
+ plxPlugins->callHook('AdminAuthTop')) ?> +
+
+ +
+ + + + + + plxPlugins->callHook('AdminAuth')) ?> +

+
+
+

|

+
+plxPlugins->callHook('AdminAuthEndBody')) ?> + + \ No newline at end of file diff --git a/src/core/admin/categorie.php b/src/core/admin/categorie.php new file mode 100644 index 0000000..3ec2c38 --- /dev/null +++ b/src/core/admin/categorie.php @@ -0,0 +1,84 @@ +plxPlugins->callHook('AdminCategoryPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR); + +# On édite la catégorie +if(!empty($_POST) AND isset($plxAdmin->aCats[ $_POST['id'] ])) { + $plxAdmin->editCategorie($_POST); + header('Location: categorie.php?p='.$_POST['id']); + exit; +} +elseif(!empty($_GET['p'])) { # On vérifie l'existence de la catégorie + $id = plxUtils::strCheck($_GET['p']); + if(!isset($plxAdmin->aCats[ $id ])) { + plxMsg::Error(L_CAT_UNKNOWN); + header('Location: categorie.php'); + exit; + } +} else { # Sinon, on redirige + header('Location: categories.php'); + exit; +} + +# On récupère les templates des categories +$files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style']); +if ($array = $files->query('/^categorie(-[a-z0-9-_]+)?.php$/')) { + foreach($array as $k=>$v) + $aTemplates[$v] = $v; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +

"aCats[$id]['name']); ?>"

+ +plxPlugins->callHook('AdminCategoryTop')) # Hook Plugins ?> + +
+
+ +

+ L_YES,'0'=>L_NO), $plxAdmin->aCats[$id]['homepage']);?> +

+ aCats[$id]['description']),95,8) ?> +

+ aCats[$id]['template']) ?> +

+ aCats[$id]['title_htmltag']),'text','50-255'); ?> +

+ aCats[$id]['meta_description']),'text','50-255') ?> +

+ aCats[$id]['meta_keywords']),'text','50-255') ?> +
+ plxPlugins->callHook('AdminCategory')) # Hook Plugins ?> +

+ + +

+
+ +plxPlugins->callHook('AdminCategoryFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/categories.php b/src/core/admin/categories.php new file mode 100644 index 0000000..9e6e75f --- /dev/null +++ b/src/core/admin/categories.php @@ -0,0 +1,132 @@ +plxPlugins->callHook('AdminCategoriesPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR); + +# On édite les catégories +if(!empty($_POST)) { + $plxAdmin->editCategories($_POST); + header('Location: categories.php'); + exit; +} + +# Tableau du tri +$aTri = array('desc'=>L_SORT_DESCENDING_DATE, 'asc'=>L_SORT_ASCENDING_DATE, 'alpha'=>L_SORT_ALPHABETICAL); + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +plxPlugins->callHook('AdminCategoriesTop')) # Hook Plugins ?> + +
+ + + + + + + + + + + + + + + + + aCats) { + foreach($plxAdmin->aCats as $k=>$v) { # Pour chaque catégorie + $ordre = ++$num; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + # On récupère le dernier identifiant + $a = array_keys($plxAdmin->aCats); + rsort($a); + } else { + $a['0'] = 0; + } + $new_catid = str_pad($a['0']+1, 3, "0", STR_PAD_LEFT); + ?> + + + + + + +
 
'.L_CATEGORY.' '.$k.''; + plxUtils::printInput($k.'_name', plxUtils::strCheck($v['name']), 'text', '15-50'); + echo ''; + plxUtils::printInput($k.'_url', $v['url'], 'text', '15-50'); + echo ''; + plxUtils::printSelect($k.'_active', array('1'=>L_YES,'0'=>L_NO), $v['active']); + echo ''; + plxUtils::printSelect($k.'_tri', $aTri, $v['tri']); + echo ''; + plxUtils::printInput($k.'_bypage', $v['bypage'], 'text', '4-3'); + echo ''; + plxUtils::printInput($k.'_ordre', $ordre, 'text', '3-3'); + echo ''; + plxUtils::printSelect($k.'_menu', array('oui'=>L_DISPLAY,'non'=>L_HIDE), $v['menu']); + echo ''.L_OPTIONS.'
  + '; + plxUtils::printInput($new_catid.'_template', 'categorie.php', 'hidden'); + plxUtils::printInput($new_catid.'_name', '', 'text', '15-50'); + echo ''; + plxUtils::printInput($new_catid.'_url', '', 'text', '15-50'); + echo ''; + plxUtils::printSelect($new_catid.'_active', array('1'=>L_YES,'0'=>L_NO), '1'); + echo ''; + plxUtils::printSelect($new_catid.'_tri', $aTri, $plxAdmin->aConf['tri']); + echo ''; + plxUtils::printInput($new_catid.'_bypage', $plxAdmin->aConf['bypage'], 'text', '4-3'); + echo ''; + plxUtils::printInput($new_catid.'_ordre', ++$num, 'text', '3-3'); + echo ''; + plxUtils::printSelect($new_catid.'_menu', array('oui'=>L_DISPLAY,'non'=>L_HIDE), '1'); + echo ' '; + ?> +
+

+ + +

+

+ L_FOR_SELECTION, 'delete' => L_DELETE), '', false, '', 'id_selection') ?> + +

+
+ +plxPlugins->callHook('AdminCategoriesFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/comment.php b/src/core/admin/comment.php new file mode 100644 index 0000000..699c81d --- /dev/null +++ b/src/core/admin/comment.php @@ -0,0 +1,183 @@ +plxPlugins->callHook('AdminCommentPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR); + +# Interdire de l'accès à la page si les commentaires sont désactivés +if(!$plxAdmin->aConf['allow_com']) { + header('Location: index.php'); + exit; +} + +# validation de l'id de l'article si passé en parametre +if(isset($_GET['a']) AND !preg_match('/^_?[0-9]{4}$/',$_GET['a'])) { + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); # Article inexistant + header('Location: index.php'); + exit; +} + +# On édite, supprime ou valide notre commentaire +if(!empty($_POST) AND !empty($_POST['comId'])) { + + # validation du numero de commentaire + if(!preg_match('/[[:punct:]]?[0-9]{4}.[0-9]{10}-[0-9]+$/', $_POST['comId'])) { + plxMsg::Error(L_ERR_UNKNOWN_COMMENT); + header('Location: comments.php'); + exit; + } + + # Suppression, on redirige + if(isset($_POST['delete'])) { + $plxAdmin->delCommentaire($_POST['comId']); + header('Location: comments.php'); + exit; + } + # Commentaire en ligne + if(isset($_POST['online'])) { + $plxAdmin->editCommentaire($_POST,$_POST['comId']); + $plxAdmin->modCommentaire($_POST['comId'],'online'); + header('Location: comment.php?c='.$_POST['comId'].(!empty($_GET['a'])?'&a='.$_GET['a']:'')); + exit; + } + # Commentaire hors-ligne + if(isset($_POST['offline'])) { + $plxAdmin->editCommentaire($_POST,$_POST['comId']); + $plxAdmin->modCommentaire($_POST['comId'],'offline'); + header('Location: comment.php?c='.$_POST['comId'].(!empty($_GET['a'])?'&a='.$_GET['a']:'')); + exit; + } + # Répondre au commentaire + if(isset($_POST['answer'])) { + header('Location: comment_new.php?c='.$_POST['comId']).(!empty($_GET['a'])?'&a='.$_GET['a']:''); + exit; + } + # Edition + $plxAdmin->editCommentaire($_POST,$_POST['comId']); + header('Location: comment.php?c='.$_POST['comId'].(!empty($_GET['a'])?'&a='.$_GET['a']:'')); + exit; +} + +# On va récupérer les infos sur le commentaire +if(!$plxAdmin->getCommentaires('/^'.plxUtils::nullbyteRemove($_GET['c']).'.xml$/','',0,1,'all')) { + # Commentaire inexistant, on redirige + plxMsg::Error(L_ERR_UNKNOWN_COMMENT); + header('Location: comments.php'); + exit; +} + +# On va récupérer les infos sur l'article +$artId = $plxAdmin->plxRecord_coms->f('article'); +# On va rechercher notre article +if(($aFile = $plxAdmin->plxGlob_arts->query('/^'.$artId.'.(.+).xml$/','','sort',0,1)) == false) { + # On indique que le commentaire est attaché à aucun article + $article = ''.L_COMMENT_ORPHAN.''; + # Statut du commentaire + $statut = ''.L_COMMENT_ORPHAN_STATUS.''; +} else { + $result = $plxAdmin->parseArticle(PLX_ROOT.$plxAdmin->aConf['racine_articles'].$aFile['0']); + # On génère notre lien + $article = ''; + $article .= plxUtils::strCheck($result['title']); + $article .= ''; +} + +# Statut du commentaire +$com=$plxAdmin->comInfoFromFilename($_GET['c'].'.xml'); +if($com['comStatus']=='_') + $statut = ''.L_COMMENT_OFFLINE.''; +elseif($com['comStatus']=='') + $statut = ''.L_COMMENT_ONLINE.''; +else + $statut = ''; + +# Date du commentaire +$date = plxDate::date2Array($plxAdmin->plxRecord_coms->f('date')); + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +?> + + +

+ +

+ + +

+ +plxPlugins->callHook('AdminCommentTop')) # Hook Plugins ?> + + +
+
+ + +

+ + + + + + +

+ plxRecord_coms->f('author')),'text','40-255') ?> +

+ plxRecord_coms->f('site')); + plxUtils::printInput('site',$site,'text','40-255'); + if($site != '') echo ''.$site.''; + ?> +

+ plxRecord_coms->f('mail')),'text','40-255') ?> + plxRecord_coms->f('mail') != '') : ?> + plxRecord_coms->f('mail').'">'.$plxAdmin->plxRecord_coms->f('mail').'' ?> + +

+ plxRecord_coms->f('type') == 'admin') : ?> + plxRecord_coms->f('content')), 60, 7); ?> + + plxRecord_coms->f('content'), 60, 7); ?> + + plxPlugins->callHook('AdminComment')) # Hook Plugins ?> +

+ + +      + + + + + + + +

+
+
+ +plxPlugins->callHook('AdminCommentFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/comment_new.php b/src/core/admin/comment_new.php new file mode 100644 index 0000000..bafab7a --- /dev/null +++ b/src/core/admin/comment_new.php @@ -0,0 +1,163 @@ +plxPlugins->callHook('AdminCommentNewPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR); + +# Interdire de l'accès à la page si les commentaires sont désactivés +if(!$plxAdmin->aConf['allow_com']) { + header('Location: index.php'); + exit; +} + +# validation de l'id de l'article si passé en parametre +if(isset($_GET['a']) AND !preg_match('/^_?[0-9]{4}$/',$_GET['a'])) { + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); # Article inexistant + header('Location: index.php'); + exit; +} + +# On va checker le mode (répondre ou écrire) +if(!empty($_GET['c'])) { # Mode "answer" + # On check que le commentaire existe et est "online" +// if(!$plxAdmin->getCommentaires('/^'.plxUtils::nullbyteRemove($_GET['c']).'.xml$/','')) { # Commentaire inexistant + if(!$plxAdmin->getCommentaires('/^'.plxUtils::nullbyteRemove($_GET['c']).'.xml$/','',0,1,'all')) { + # On redirige + plxMsg::Error(L_ERR_ANSWER_UNKNOWN_COMMENT); + header('Location: comments.php'.(!empty($_GET['a'])?'?a='.$_GET['a']:'')); + exit; + } + # Commentaire offline + if(preg_match('/^_/',$_GET['c'])) { + # On redirige + plxMsg::Error(L_ERR_ANSWER_OFFLINE_COMMENT); + header('Location: comments.php'.(!empty($_GET['a'])?'?a='.$_GET['a']:'')); + exit; + } + # On va rechercher notre article + if(($aFile = $plxAdmin->plxGlob_arts->query('/^'.$plxAdmin->plxRecord_coms->f('article').'.(.+).xml$/','','sort',0,1)) == false) { # Article inexistant + plxMsg::Error(L_ERR_COMMENT_UNKNOWN_ARTICLE); + header('Location: index.php'); + exit; + } + # Variables de traitement + $artId = $plxAdmin->plxRecord_coms->f('article'); + if(!empty($_GET['a'])) $get = 'c='.$_GET['c'].'&a='.$_GET['a']; + else $get = 'c='.$_GET['c']; + $aArt = $plxAdmin->parseArticle(PLX_ROOT.$plxAdmin->aConf['racine_articles'].$aFile['0']); + # Variable du formulaire + $content = '@'.$plxAdmin->plxRecord_coms->f('author')." :\n"; + $article = ''; + $article .= plxUtils::strCheck($aArt['title']); + $article .= ''; + # Ok, on récupère les commentaires de l'article + $plxAdmin->getCommentaires('/^'.str_replace('_','',$artId).'.(.*).xml$/','rsort'); +} elseif(!empty($_GET['a'])) { # Mode "new" + # On check l'article si il existe bien + if(($aFile = $plxAdmin->plxGlob_arts->query('/^'.$_GET['a'].'.(.+).xml$/','','sort',0,1)) == false) { + plxMsg::Error(L_ERR_COMMENT_UNEXISTENT_ARTICLE); + header('Location: index.php'); + exit; + } + # Variables de traitement + $artId = $_GET['a']; + $get = 'a='.$_GET['a']; + $aArt = $plxAdmin->parseArticle(PLX_ROOT.$plxAdmin->aConf['racine_articles'].$aFile['0']); + # Variable du formulaire + $content = ''; + $article = ''; + $article .= plxUtils::strCheck($aArt['title']); + $article .= ''; + # Ok, on récupère les commentaires de l'article + $plxAdmin->getCommentaires('/^'.str_replace('_','',$artId).'.(.*).xml$/','rsort'); +} else { # Mode inconnu + header('Location: .index.php'); + exit; +} + +# On a validé le formulaire +if(!empty($_POST) AND !empty($_POST['content'])) { + # Création du commentaire + if(!$plxAdmin->newCommentaire(str_replace('_','',$artId),$_POST['content'])) { # Erreur + plxMsg::Error(L_ERR_CREATING_COMMENT); + } else { # Ok + plxMsg::Info(L_CREATING_COMMENT_SUCCESSFUL); + } + header('Location: comment_new.php?a='.$artId); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + + +

+ +

+ + +

+

«»

+ +plxPlugins->callHook('AdminCommentNewTop')) # Hook Plugins ?> + + + +
+
+ +

+ + plxPlugins->callHook('AdminCommentNew')) # Hook Plugins ?> +

+ +

+
+
+ +plxRecord_coms)) : # On a des commentaires ?> +

+
+ plxRecord_coms->loop()) : # On boucle ?> + plxRecord_coms->f('article').'.'.$plxAdmin->plxRecord_coms->f('numero'); ?> +
+
+

 plxRecord_coms->f('author'); ?> + @ plxRecord_coms->f('date'), '#day #num_day #month #num_year(4) à #hour:#minute'); ?> + - + - +

+
+

plxRecord_coms->f('content')); ?>

+ plxPlugins->callHook('AdminCommentNewList')) # Hook Plugins ?> +
+ +
+ + +plxPlugins->callHook('AdminCommentNewFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/comments.php b/src/core/admin/comments.php new file mode 100644 index 0000000..f92853a --- /dev/null +++ b/src/core/admin/comments.php @@ -0,0 +1,239 @@ +plxPlugins->callHook('AdminCommentsPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR); + +# Interdire de l'accès à la page si les commentaires sont désactivés +if(!$plxAdmin->aConf['allow_com']) { + header('Location: index.php'); + exit; +} + +# validation de l'id de l'article si passé en parametre +if(isset($_GET['a']) AND !preg_match('/^_?[0-9]{4}$/',$_GET['a'])) { + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); # Article inexistant + header('Location: index.php'); + exit; +} + +# Suppression des commentaires selectionnes +if(isset($_POST['selection']) AND ((!empty($_POST['btn_ok1']) AND $_POST['selection'][0]=='delete') OR (!empty($_POST['btn_ok2']) AND $_POST['selection'][1]=='delete')) AND isset($_POST['idCom'])) { + foreach ($_POST['idCom'] as $k => $v) $plxAdmin->delCommentaire($v); + header('Location: comments.php'.(!empty($_GET['a'])?'?a='.$_GET['a']:'')); + exit; +} +# Validation des commentaires selectionnes +elseif(isset($_POST['selection']) AND (!empty($_POST['btn_ok1']) AND ($_POST['selection'][0]=='online') OR (!empty($_POST['btn_ok2']) AND $_POST['selection'][1]=='online')) AND isset($_POST['idCom'])) { + foreach ($_POST['idCom'] as $k => $v) $plxAdmin->modCommentaire($v, 'online'); + header('Location: comments.php'.(!empty($_GET['a'])?'?a='.$_GET['a']:'')); + exit; +} +# Mise hors-ligne des commentaires selectionnes +elseif (isset($_POST['selection']) AND ((!empty($_POST['btn_ok1']) AND $_POST['selection'][0]=='offline') OR (!empty($_POST['btn_ok2']) AND $_POST['selection'][1]=='offline')) AND isset($_POST['idCom'])) { + foreach ($_POST['idCom'] as $k => $v) $plxAdmin->modCommentaire($v, 'offline'); + header('Location: comments.php'.(!empty($_GET['a'])?'?a='.$_GET['a']:'')); + exit; +} + +# Récuperation des infos sur l'article attaché au commentaire si passé en paramètre +if(!empty($_GET['a'])) { + # Infos sur notre article + if(!$globArt = $plxAdmin->plxGlob_arts->query('/^'.$_GET['a'].'.(.*).xml$/','','sort',0,1)) { + plxMsg::Error(L_ERR_UNKNOWN_ARTICLE); # Article inexistant + header('Location: index.php'); + exit; + } + # Infos sur l'article + $aArt = $plxAdmin->parseArticle(PLX_ROOT.$plxAdmin->aConf['racine_articles'].$globArt['0']); + $portee = L_COMMENTS_ARTICLE_SCOPE.' «'.$aArt['title'].'»'; +} else { # Commentaires globaux + $portee = ''; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +# Récuperation du type de commentaire à afficher +$_GET['sel'] = !empty($_GET['sel']) ? $_GET['sel'] : ''; +if(in_array($_GET['sel'], array('online', 'offline', 'all'))) + $comSel = plxUtils::nullbyteRemove($_GET['sel']); +else + $comSel = ((isset($_SESSION['selCom']) AND !empty($_SESSION['selCom'])) ? $_SESSION['selCom'] : 'all'); + +if(!empty($_GET['a'])) { + $comSelMotif = '/^[[:punct:]]?'.str_replace('_','',$_GET['a']).'.(.*).xml$/'; + $_SESSION['selCom'] = 'all'; + $nbComPagination=$plxAdmin->nbComments($comSelMotif); + echo '

'.L_COMMENTS_ALL_LIST.'

'; +} +elseif($comSel=='online') { + $comSelMotif = '/^[0-9]{4}.(.*).xml$/'; + $_SESSION['selCom'] = 'online'; + $nbComPagination=$plxAdmin->nbComments('online'); + echo '

'.L_COMMENTS_ONLINE_LIST.'

'; +} +elseif($comSel=='offline') { + $comSelMotif = '/^_[0-9]{4}.(.*).xml$/'; + $_SESSION['selCom'] = 'offline'; + $nbComPagination=$plxAdmin->nbComments('offline'); + echo '

'.L_COMMENTS_OFFLINE_LIST.'

'; +} +elseif($comSel=='all') { // all + $comSelMotif = '/^[[:punct:]]?[0-9]{4}.(.*).xml$/'; + $_SESSION['selCom'] = 'all'; + $nbComPagination=$plxAdmin->nbComments('all'); + echo '

'.L_COMMENTS_ALL_LIST.'

'; +} + +if($portee!='') { + echo '

'.$portee.'

'; +} + +$breadcrumbs = array(); +$breadcrumbs[] = ''.L_ALL.' ('.$plxAdmin->nbComments('all').')'; +$breadcrumbs[] = ''.L_COMMENT_ONLINE.' ('.$plxAdmin->nbComments('online').')'; +$breadcrumbs[] = ''.L_COMMENT_OFFLINE.' ('.$plxAdmin->nbComments('offline').')'; +if(!empty($_GET['a'])) { + $breadcrumbs[] = ''.L_COMMENT_NEW_COMMENT.''; +} + +function selector($comSel, $id) { + ob_start(); + if($comSel=='online') + plxUtils::printSelect('selection[]', array(''=> L_FOR_SELECTION, 'offline' => L_COMMENT_SET_OFFLINE, '-'=>'-----', 'delete' => L_COMMENT_DELETE), '', false,'',$id); + elseif($comSel=='offline') + plxUtils::printSelect('selection[]', array(''=> L_FOR_SELECTION, 'online' => L_COMMENT_SET_ONLINE, '-'=>'-----', 'delete' => L_COMMENT_DELETE), '', false,'',$id); + elseif($comSel=='all') + plxUtils::printSelect('selection[]', array(''=> L_FOR_SELECTION, 'online' => L_COMMENT_SET_ONLINE, 'offline' => L_COMMENT_SET_OFFLINE, '-'=>'-----','delete' => L_COMMENT_DELETE), '', false,'',$id); + return ob_get_clean(); +} + +$selector1=selector($comSel, 'id_selection1'); +$selector2=selector($comSel, 'id_selection2'); +?> + +plxPlugins->callHook('AdminCommentsTop')) # Hook Plugins ?> + +
+ + +

+ +

+ + + + + + + + + + + + +getPage(); +$start = $plxAdmin->aConf['bypage_admin_coms']*($plxAdmin->page-1); +$coms = $plxAdmin->getCommentaires($comSelMotif,'rsort',$start,$plxAdmin->aConf['bypage_admin_coms'],'all'); +if($coms) { + $num=0; + while($plxAdmin->plxRecord_coms->loop()) { # On boucle + $artId = $plxAdmin->plxRecord_coms->f('article'); + $status = $plxAdmin->plxRecord_coms->f('status'); + $id = $status.$artId.'.'.$plxAdmin->plxRecord_coms->f('numero'); + $content = nl2br($plxAdmin->plxRecord_coms->f('content')); + if($_SESSION['selCom']=='all') { + $content = $content.' - '.($status==''?L_COMMENT_ONLINE:L_COMMENT_OFFLINE).'
'; + } + # On génère notre ligne + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } +} else { # Pas de commentaires + echo ''; +} +?> + +
'.plxDate::formatDate($plxAdmin->plxRecord_coms->f('date')).' '.$content.' '.plxUtils::strCut($plxAdmin->plxRecord_coms->f('author'),30).' '; + echo ''.L_COMMENT_ANSWER.' | '; + echo ''.L_COMMENT_EDIT.' | '; + echo ''.L_COMMENT_ARTICLE_LINKED.''; + echo '
'.L_NO_COMMENT.'
+

+ + +

+
+ + + +aConf['clef'])) : ?> +
+

:

+ +
+ + +plxPlugins->callHook('AdminCommentsFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/foot.php b/src/core/admin/foot.php new file mode 100644 index 0000000..c8fb341 --- /dev/null +++ b/src/core/admin/foot.php @@ -0,0 +1,12 @@ +
+ + + +plxPlugins->callHook('AdminFootEndBody')) ?> + + + + + diff --git a/src/core/admin/index.php b/src/core/admin/index.php new file mode 100644 index 0000000..072ab36 --- /dev/null +++ b/src/core/admin/index.php @@ -0,0 +1,269 @@ +plxPlugins->callHook('AdminIndexPrepend')); + +# Suppression des articles selectionnes +if(isset($_POST['selection']) AND ((!empty($_POST['sel1']) AND $_POST['selection'][0] == 'delete') OR (!empty($_POST['sel2']) AND $_POST['selection'][1] == 'delete')) AND isset($_POST['idArt'])) { + foreach ($_POST['idArt'] as $k => $v) $plxAdmin->delArticle($v); + header('Location: index.php'); + exit; +} + +# Récuperation de l'id de l'utilisateur +$userId = ($_SESSION['profil'] < PROFIL_WRITER ? '[0-9]{3}' : $_SESSION['user']); + +# Récuperation des paramètres +if(!empty($_GET['sel']) AND in_array($_GET['sel'], array('all','published', 'draft','mod'))) { + $_SESSION['sel_get']=plxUtils::nullbyteRemove($_GET['sel']); + $_SESSION['sel_cat']=''; +} +else + $_SESSION['sel_get']=(isset($_SESSION['sel_get']) AND !empty($_SESSION['sel_get']))?$_SESSION['sel_get']:'all'; + +if(!empty($_POST['sel_cat'])) + if(isset($_SESSION['sel_cat']) AND $_SESSION['sel_cat']==$_POST['sel_cat']) # annulation du filtre + $_SESSION['sel_cat']='all'; + else # prise en compte du filtre + $_SESSION['sel_cat']=$_POST['sel_cat']; +else + $_SESSION['sel_cat']=(isset($_SESSION['sel_cat']) AND !empty($_SESSION['sel_cat']))?$_SESSION['sel_cat']:'all'; + +# Recherche du motif de sélection des articles en fonction des paramètres +$catIdSel = ''; +$mod=''; +switch ($_SESSION['sel_get']) { +case 'published': + $catIdSel = '[home|0-9,]*FILTER[home|0-9,]*'; + $mod=''; + break; +case 'draft': + $catIdSel = '[home|0-9,]*draft,FILTER[home|0-9,]*'; + $mod='_?'; + break; +case 'all': + $catIdSel = '[home|draft|0-9,]*FILTER[draft|home|0-9,]*'; + $mod='_?'; + break; +case 'mod': + $catIdSel = '[home|draft|0-9,]*FILTER[draft|home|0-9,]*'; + $mod='_'; + break; +} + +switch ($_SESSION['sel_cat']) { +case 'all' : + $catIdSel = str_replace('FILTER', '', $catIdSel); break; +case '000' : + $catIdSel = str_replace('FILTER', '000', $catIdSel); break; +case 'home': + $catIdSel = str_replace('FILTER', 'home', $catIdSel); break; +case preg_match('/^[0-9]{3}$/', $_SESSION['sel_cat'])==1: + $catIdSel = str_replace('FILTER', $_SESSION['sel_cat'], $catIdSel); +} + +# Nombre d'article sélectionnés +$nbArtPagination = $plxAdmin->nbArticles($catIdSel, $userId); + +# Récuperation du texte à rechercher +$_GET['artTitle'] = (!empty($_GET['artTitle']))?plxUtils::unSlash(trim(urldecode($_GET['artTitle']))):''; + +# On génère notre motif de recherche +$motif = '/^'.$mod.'[0-9]{4}.'.$catIdSel.'.'.$userId.'.[0-9]{12}.(.*)'.plxUtils::title2filename($_GET['artTitle']).'(.*).xml$/'; + +# Calcul du nombre de page si on fait une recherche +if($_GET['artTitle']!='') { + if($arts = $plxAdmin->plxGlob_arts->query($motif)) + $nbArtPagination = sizeof($arts); +} + +# Traitement +$plxAdmin->prechauffage($motif); +$plxAdmin->getPage(); +$arts = $plxAdmin->getArticles('all'); # Recuperation des articles + +# Génération de notre tableau des catégories +$aFilterCat['all'] = L_ARTICLES_ALL_CATEGORIES; +$aFilterCat['home'] = L_CATEGORY_HOME; +$aFilterCat['000'] = L_UNCLASSIFIED; +if($plxAdmin->aCats) { + foreach($plxAdmin->aCats as $k=>$v) { + $aCat[$k] = plxUtils::strCheck($v['name']); + $aFilterCat[$k] = plxUtils::strCheck($v['name']); + } + $aAllCat[L_CATEGORIES_TABLE] = $aCat; +} +$aAllCat[L_SPECIFIC_CATEGORIES_TABLE]['home'] = L_CATEGORY_HOME_PAGE; +$aAllCat[L_SPECIFIC_CATEGORIES_TABLE]['draft'] = L_DRAFT; +$aAllCat[L_SPECIFIC_CATEGORIES_TABLE][''] = L_ALL_ARTICLES_CATEGORIES_TABLE; + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +?> + +plxPlugins->callHook('AdminIndexTop')) # Hook Plugins ?> + +

+ +
+
+

+ + + +

+
+
+ +
+ + +'; + plxUtils::printSelect('selection[]', array( '' => L_FOR_SELECTION, 'delete' => L_DELETE), '', false, '', 'id_selection1'); + echo ''; + echo '

'; +} +?> + + + + + + + + + + + + + + +plxRecord_arts->loop()) { # Pour chaque article + $author = plxUtils::getValue($plxAdmin->aUsers[$plxAdmin->plxRecord_arts->f('author')]['name']); + $publi = (boolean)($plxAdmin->plxRecord_arts->f('date') > $datetime); + # Catégories : liste des libellés de toutes les categories + $draft=''; + $libCats=''; + $catIds = explode(',', $plxAdmin->plxRecord_arts->f('categorie')); + if(sizeof($catIds)>0) { + $catsName = array(); + foreach($catIds as $catId) { + if($catId=='home') $catsName[] = L_CATEGORY_HOME; + elseif($catId=='draft') $draft= ' - '.L_CATEGORY_DRAFT.''; + elseif(!isset($plxAdmin->aCats[$catId])) $catsName[] = L_UNCLASSIFIED; + else $catsName[] = plxUtils::strCheck($plxAdmin->aCats[$catId]['name']); + } + if(sizeof($catsName)>0) { + $libCats = $catsName[0]; + unset($catsName[0]); + if(sizeof($catsName)>0) $libCats .= ', ...  '; + } + else $libCats = L_UNCLASSIFIED; + } + # en attente de validation ? + $idArt = $plxAdmin->plxRecord_arts->f('numero'); + $awaiting = $idArt[0]=='_' ? ' - '.L_AWAITING.'' : ''; + # Commentaires + $nbComsToValidate = $plxAdmin->getNbCommentaires('/^_'.$idArt.'.(.*).xml$/','all'); + $nbComsValidated = $plxAdmin->getNbCommentaires('/^'.$idArt.'.(.*).xml$/','all'); + # On affiche la ligne + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '"; + echo ""; + } +} else { # Pas d'article + echo ''; +} +?> + +
+ + +
'.plxDate::formatDate($plxAdmin->plxRecord_arts->f('date')).' '.plxUtils::strCheck(plxUtils::strCut($plxAdmin->plxRecord_arts->f('title'),60)).''.$draft.$awaiting.' '.$libCats.' '.$nbComsToValidate.' / '.$nbComsValidated.' '.plxUtils::strCheck($author).' '; + echo ''.L_ARTICLE_EDIT.''; + if($publi AND $draft=='') # Si l'article est publié + echo ' | '.L_ARTICLE_VIEW.''; + echo " 
'.L_NO_ARTICLE.'
+ +'; + echo plxToken::getTokenPostMethod(); + if($_SESSION['profil']<=PROFIL_MODERATOR) { + plxUtils::printSelect('selection[]', array( '' => L_FOR_SELECTION, 'delete' => L_DELETE), '', false, '', 'id_selection2'); + echo ''; + } + echo '

'; +?> + +
+ + + +plxPlugins->callHook('AdminIndexFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/medias.php b/src/core/admin/medias.php new file mode 100644 index 0000000..1488e6c --- /dev/null +++ b/src/core/admin/medias.php @@ -0,0 +1,293 @@ +plxPlugins->callHook('AdminMediasPrepend')); + +# Recherche du type de medias à afficher via la session +if(empty($_SESSION['medias']) OR !empty($_POST['btn_images'])) { + $_SESSION['medias'] = $plxAdmin->aConf['images']; + $_SESSION['folder'] = ''; +} +elseif(!empty($_POST['btn_documents'])) { + $_SESSION['medias'] = $plxAdmin->aConf['documents']; + $_SESSION['folder'] = ''; +} +elseif(!empty($_POST['folder'])) { + $_SESSION['currentfolder']= (isset($_SESSION['folder'])?$_SESSION['folder']:''); + $_SESSION['folder'] = ($_POST['folder']=='.'?'':$_POST['folder']); +} +# Nouvel objet de type plxMedias +if($plxAdmin->aConf['userfolders'] AND $_SESSION['profil']==PROFIL_WRITER) + $plxMedias = new plxMedias(PLX_ROOT.$_SESSION['medias'].$_SESSION['user'].'/',$_SESSION['folder']); +else + $plxMedias = new plxMedias(PLX_ROOT.$_SESSION['medias'],$_SESSION['folder']); + +#---- + +if(!empty($_POST['btn_newfolder']) AND !empty($_POST['newfolder'])) { + $newdir = plxUtils::title2filename(trim($_POST['newfolder'])); + if($plxMedias->newDir($newdir)) { + $_SESSION['folder'] = $_SESSION['folder'].$newdir.'/'; + } + header('Location: medias.php'); + exit; +} +elseif(!empty($_POST['btn_delete']) AND !empty($_POST['folder']) AND $_POST['folder']!='.') { + if($plxMedias->deleteDir($_POST['folder'])) { + $_SESSION['folder'] = ''; + } + header('Location: medias.php'); + exit; +} +elseif(!empty($_POST['btn_upload'])) { + $plxMedias->uploadFiles($_FILES, $_POST); + header('Location: medias.php'); + exit; +} +elseif(isset($_POST['selection']) AND ((!empty($_POST['btn_ok1']) AND $_POST['selection'][0]=='delete') OR (!empty($_POST['btn_ok2']) AND$_POST['selection'][1]=='delete')) AND isset($_POST['idFile'])) { + $plxMedias->deleteFiles($_POST['idFile']); + header('Location: medias.php'); + exit; +} +elseif(isset($_POST['selection']) AND ((!empty($_POST['btn_ok1']) AND $_POST['selection'][0]=='move') OR (!empty($_POST['btn_ok2']) AND$_POST['selection'][1]=='move')) AND isset($_POST['idFile'])) { + $plxMedias->moveFiles($_POST['idFile'], $_SESSION['currentfolder'], $_POST['folder']); + header('Location: medias.php'); + exit; +} +elseif(isset($_POST['selection']) AND ((!empty($_POST['btn_ok1']) AND $_POST['selection'][0]=='thumbs') OR (!empty($_POST['btn_ok2']) AND $_POST['selection'][1]=='thumbs')) AND isset($_POST['idFile'])) { + $plxMedias->makeThumbs($_POST['idFile'], $plxAdmin->aConf['miniatures_l'], $plxAdmin->aConf['miniatures_h']); + header('Location: medias.php'); + exit; +} + +# Tri de l'affichage des fichiers +if(isset($_POST['sort']) AND !empty($_POST['sort'])) { + $sort = $_POST['sort']; +} else { + $sort = isset($_SESSION['sort_medias']) ? $_SESSION['sort_medias'] : 'title_asc'; +} + +$sort_title = 'title_desc'; +$sort_date = 'date_desc'; +switch ($sort) { + case 'title_asc': + $sort_title = 'title_desc'; + usort($plxMedias->aFiles, create_function('$b, $a', 'return strcmp($a["name"], $b["name"]);')); + break; + case 'title_desc': + $sort_title = 'title_asc'; + usort($plxMedias->aFiles, create_function('$a, $b', 'return strcmp($a["name"], $b["name"]);')); + break; + case 'date_asc': + $sort_date = 'date_desc'; + usort($plxMedias->aFiles, create_function('$b, $a', 'return strcmp($a["date"], $b["date"]);')); + break; + case 'date_desc': + $sort_date = 'date_asc'; + usort($plxMedias->aFiles, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);')); + break; +} +$_SESSION['sort_medias']=$sort; + +# Contenu des 2 listes déroulantes +$selectionList = array('' =>L_FOR_SELECTION, 'move'=>L_PLXMEDIAS_MOVE_FOLDER, 'thumbs'=>L_MEDIAS_RECREATE_THUMB, '-'=>'-----', 'delete' =>L_DELETE); + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +?> + + + + + +

+ +plxPlugins->callHook('AdminMediasTop')) # Hook Plugins ?> + +

+ + + +
+
+
+
+  :  + + +
+ + + + +
+ +
+  :  + contentFolder() ?>  +   + + + +
+
+

+ + +

+ + + + + + + + + + + + + + aFiles) { + foreach($plxMedias->aFiles as $v) { # Pour chaque fichier + $ordre = ++$num; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $dimensions = ' '; + if(isset($v['infos']) AND isset($v['infos'][0]) AND isset($v['infos'][1])) { + $dimensions = $v['infos'][0].' x '.$v['infos'][1]; + } + echo ''; + echo ''; + echo ''; + } + } + else echo ''; + ?> + +
 
'; + echo ''.plxUtils::strCheck($v['name']).'
'; + if($v['thumb']) { + echo ''.L_MEDIAS_THUMB.' : '.$v['thumb']['infos'][0].' x '.$v['thumb']['infos'][1]. ' ('.plxUtils::formatFilesize($v['thumb']['filesize']).')'; + } + echo '
'.strtoupper($v['extension']).''.plxUtils::formatFilesize($v['filesize']).''.$dimensions.''.plxDate::formatDate(plxDate::timestamp2Date($v['date'])).'
'.L_MEDIAS_NO_FILE.'
+

+ + + +

+
+
+
+
+ +plxPlugins->callHook('AdminMediasFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> + diff --git a/src/core/admin/parametres_affichage.php b/src/core/admin/parametres_affichage.php new file mode 100644 index 0000000..7761930 --- /dev/null +++ b/src/core/admin/parametres_affichage.php @@ -0,0 +1,119 @@ +checkProfil(PROFIL_ADMIN); + +# On édite la configuration +if(!empty($_POST)) { + $_POST['feed_footer']=$_POST['content']; + $_POST['images_l']=plxUtils::getValue($_POST['images_l'],800); + $_POST['images_h']=plxUtils::getValue($_POST['images_h'],600); + $_POST['miniatures_l']=plxUtils::getValue($_POST['miniatures_l'],200); + $_POST['miniatures_h']=plxUtils::getValue($_POST['miniatures_h'],100); + unset($_POST['content']); + $plxAdmin->editConfiguration($plxAdmin->aConf,$_POST); + header('Location: parametres_affichage.php'); + exit; +} + +# On récupère les thèmes +$aStyles[''] = L_NONE1; +$files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'], true); +if($styles = $files->query("/[a-z0-9-_\.\(\)]+/i")) { + foreach($styles as $k=>$v) { + if(substr($v,0,7) != 'mobile.') $aStyles[$v] = $v; + } +} +# On récupère les templates de la page d'accueil +$files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style']); +if ($array = $files->query('/^home(-[a-z0-9-_]+)?.php$/')) { + foreach($array as $k=>$v) + $aTemplates[$v] = $v; +} + +# Tableau du tri +$aTriArts = array('desc'=>L_SORT_DESCENDING_DATE, 'asc'=>L_SORT_ASCENDING_DATE, 'alpha'=>L_SORT_ALPHABETICAL); +$aTriComs = array('desc'=>L_SORT_DESCENDING_DATE, 'asc'=>L_SORT_ASCENDING_DATE); + +# On va tester les variables pour les images et miniatures +if(!is_numeric($plxAdmin->aConf['images_l'])) $plxAdmin->aConf['images_l'] = 800; +if(!is_numeric($plxAdmin->aConf['images_h'])) $plxAdmin->aConf['images_h'] = 600; +if(!is_numeric($plxAdmin->aConf['miniatures_l'])) $plxAdmin->aConf['miniatures_l'] = 200; +if(!is_numeric($plxAdmin->aConf['miniatures_h'])) $plxAdmin->aConf['miniatures_h'] = 100; + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +
+

+
+ +plxPlugins->callHook('AdminSettingsDisplayTop')) # Hook Plugins ?> + +
+
+

+ aConf['style']); ?> + aConf['style']) AND is_dir(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style'])) : ?> +   «aConf['style'] ?>» + +

+ aConf['hometemplate']) ?> +

+ aConf['tri']); ?> +

+ aConf['bypage'], 'text', '2-2',false,'fieldnum'); ?> +

+ aConf['bypage_archives'], 'text', '2-2',false,'fieldnum'); ?> +

+ aConf['bypage_admin'], 'text', '2-2',false,'fieldnum'); ?> +

+ aConf['tri_coms']); ?> +

+ aConf['bypage_admin_coms'], 'text', '2-2',false,'fieldnum'); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['display_empty_cat']);?> +

+ aConf['images_l'], 'text', '4-4',false,'fieldnum'); ?> x + aConf['images_h'], 'text', '4-4',false,'fieldnum'); ?> +

+ aConf['miniatures_l'], 'text', '4-4',false,'fieldnum'); ?> x + aConf['miniatures_h'], 'text', '4-4',false,'fieldnum'); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['thumbs']);?> +

+ aConf['bypage_feed'], 'text', '2-2',false,'fieldnum'); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['feed_chapo']);?> +   +

+ aConf['feed_footer']),140,5); ?> +
+ plxPlugins->callHook('AdminSettingsDisplay')) # Hook Plugins ?> +

+ + +

+
+ +plxPlugins->callHook('AdminSettingsDisplayFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/parametres_avances.php b/src/core/admin/parametres_avances.php new file mode 100644 index 0000000..02d1fac --- /dev/null +++ b/src/core/admin/parametres_avances.php @@ -0,0 +1,93 @@ +checkProfil(PROFIL_ADMIN); + +# On édite la configuration +if(!empty($_POST)) { + $plxAdmin->editConfiguration($plxAdmin->aConf,$_POST); + unset($_SESSION['medias']); # réinit de la variable de session medias (pour medias.php) au cas si changmt de chemin images/documents + header('Location: parametres_avances.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +plxPlugins->callHook('AdminSettingsAdvancedTop')) # Hook Plugins ?> + +
+
+

+ + L_YES,'0'=>L_NO), $plxAdmin->aConf['urlrewriting']);?> + aConf['urlrewriting']==0) { ?> +   + + + + +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['gzip']);?> +   +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['capcha']);?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['userfolders']);?> +

+ aConf['clef'], 'text', '30-30'); ?> +   +
+
+

+ +   +

+ aConf['racine_articles']); ?> +   +

+ aConf['racine_commentaires']); ?> +   +

+ aConf['racine_statiques']); ?> +   +

+ aConf['images']); ?> +   +

+ aConf['documents']); ?> +   +

+ aConf['racine_themes']); ?> +   +

+ aConf['racine_plugins']); ?> +   +
+ plxPlugins->callHook('AdminSettingsAdvanced')) ?> +

+ + +

+
+ +plxPlugins->callHook('AdminSettingsAdvancedFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/parametres_base.php b/src/core/admin/parametres_base.php new file mode 100644 index 0000000..ced777c --- /dev/null +++ b/src/core/admin/parametres_base.php @@ -0,0 +1,67 @@ +checkProfil(PROFIL_ADMIN); + +# On édite la configuration +if(!empty($_POST)) { + $plxAdmin->editConfiguration($plxAdmin->aConf,$_POST); + header('Location: parametres_base.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +plxPlugins->callHook('AdminSettingsBaseTop')) # Hook Plugins ?> + +
+
+

+ aConf['title'])); ?> +

+ aConf['description'])); ?> +

+ aConf['meta_description'])); ?> +

+ aConf['meta_keywords'])); ?> +

+ aConf['default_lang']) ?> +

+ aConf['timezone']); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['allow_com']); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['mod_com']); ?> +

+ L_YES,'0'=>L_NO), $plxAdmin->aConf['mod_art']); ?> +
+ plxPlugins->callHook('AdminSettingsBase')) # Hook Plugins ?> +

+ + +

+
+ +plxPlugins->callHook('AdminSettingsBaseFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/parametres_edittpl.php b/src/core/admin/parametres_edittpl.php new file mode 100644 index 0000000..d639ebe --- /dev/null +++ b/src/core/admin/parametres_edittpl.php @@ -0,0 +1,106 @@ +checkProfil(PROFIL_ADMIN); + +# Initialisation +$tpl = isset($_POST['tpl'])?$_POST['tpl']:'home.php'; +if(!empty($_POST['load'])) $tpl = $_POST['template']; + +$style = $plxAdmin->aConf['style']; +$filename = realpath(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$style.'/'.$tpl); +if(!preg_match('#^'.str_replace('\\', '/', realpath(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$style.'/').'#'), str_replace('\\', '/', $filename))) { + $tpl='home.php'; +} +$filename = realpath(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$style.'/'.$tpl); + +# On teste l'existence du thème +if(empty($style) OR !is_dir(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$style)) { + plxMsg::Error(L_CONFIG_EDITTPL_ERROR_NOTHEME); + header('Location: parametres_affichage.php'); + exit; +} + +# Traitement du formulaire: sauvegarde du template +if(isset($_POST['submit']) AND trim($_POST['content']) != '') { + if(plxUtils::write($_POST['content'], $filename)) + plxMsg::Info(L_SAVE_FILE_SUCCESSFULLY); + else + plxMsg::Error(L_SAVE_FILE_ERROR); +} + +# On récupère les fichiers templates du thèmes +$aTemplates=array(); +function listFolderFiles($dir, $include, $root=''){ + $content = array(); + $ffs = scandir($dir); + foreach($ffs as $ff){ + if($ff!='.' && $ff!='..') { + $ext = strtolower(strrchr($ff,'.')); + if(!is_dir($dir.'/'.$ff) AND is_array($include) AND in_array($ext,$include)) { + $f = str_replace($root, "", PLX_ROOT.ltrim($dir.'/'.$ff,'./')); + $content[$f] = $f; + } + if(is_dir($dir.'/'.$ff)) + $content = array_merge($content, listFolderFiles($dir.'/'.$ff,$include,$root)); + } + } + return $content; +} +$root = PLX_ROOT.$plxAdmin->aConf['racine_themes'].$style; +$aTemplates=listFolderFiles($root, array('.php','.css','.htm','.html','.txt','.js'), $root); + +# On récupère le contenu du fichier template +$content = ''; +if(file_exists($filename) AND filesize($filename) > 0) { + if($f = fopen($filename, 'r')) { + $content = fread($f, filesize($filename)); + fclose($f); + } +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

«»

+ +plxPlugins->callHook('AdminSettingsEdittplTop')) # Hook Plugins ?> + +
+

+ + + +

+
+ +
+
+

+ + + plxPlugins->callHook('AdminSettingsEdittpl')) # Hook Plugins ?> +

+ + +

+
+
+ +plxPlugins->callHook('AdminSettingsEdittplFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/parametres_infos.php b/src/core/admin/parametres_infos.php new file mode 100644 index 0000000..2b2e777 --- /dev/null +++ b/src/core/admin/parametres_infos.php @@ -0,0 +1,49 @@ +checkProfil(PROFIL_ADMIN); + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +

+
+ +
+
+ +

checkMaj(); ?>

+
+plxPlugins->callHook('AdminSettingsInfos')) ?> + \ No newline at end of file diff --git a/src/core/admin/parametres_plugin.php b/src/core/admin/parametres_plugin.php new file mode 100644 index 0000000..7a32380 --- /dev/null +++ b/src/core/admin/parametres_plugin.php @@ -0,0 +1,47 @@ +checkProfil(PROFIL_ADMIN); + +$plugin = isset($_GET['p'])?urldecode($_GET['p']):''; +$plugin = plxUtils::nullbyteRemove($plugin); + +$output=''; +# chargement du fichier d'administration du plugin +$filename = realpath(PLX_PLUGINS.$plugin.'/config.php'); +if(is_file($filename)) { + # si le plugin n'est pas actif, aucune instance n'a été créée, on va donc la créer, sinon on prend celle qui existe + if(!isset($plxAdmin->plxPlugins->aPlugins[$plugin])) + $plxPlugin = $plxAdmin->plxPlugins->getInstance($plugin); + else + $plxPlugin = $plxAdmin->plxPlugins->aPlugins[$plugin]; + + # Control des autorisation d'accès à l'écran config.php du plugin + $plxAdmin->checkProfil($plxPlugin->getConfigProfil()); + # chargement de l'écran de parametrage du plugin config.php + ob_start(); + echo '

'.L_BACK_TO_PLUGINS.'

'; + include($filename); + $output=ob_get_clean(); +} +else { + plxMsg::Error(L_NO_ENTRY); + header('Location: parametres_plugins.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +# Affichage des données +echo $output; +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/parametres_plugincss.php b/src/core/admin/parametres_plugincss.php new file mode 100644 index 0000000..9807a7c --- /dev/null +++ b/src/core/admin/parametres_plugincss.php @@ -0,0 +1,72 @@ +checkProfil(PROFIL_ADMIN); + +$plugin = isset($_GET['p'])?urldecode($_GET['p']):''; +$plugin = plxUtils::nullbyteRemove($plugin); + +# chargement du fichier css du plugin pour le frontend +$file_frontend = PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.basename($plugin).'.site.css'; +# chargement du fichier css du plugin pour le backend +$file_backend = PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.basename($plugin).'.admin.css'; + +# Traitement du formulaire: sauvegarde du code css et regénération du cache +if(isset($_POST['submit'])) { + $ret_f = plxUtils::write(trim($_POST['frontend']), $file_frontend); + $ret_b = plxUtils::write(trim($_POST['backend']), $file_backend); + if($ret_f AND $ret_b) { + $ret_1 = $plxAdmin->plxPlugins->cssCache('site'); + $ret_2 = $plxAdmin->plxPlugins->cssCache('admin'); + } + if($ret_f AND $ret_b AND $ret_1 AND $ret_2) + plxMsg::Info(L_SAVE_FILE_SUCCESSFULLY); + else + plxMsg::Error(L_SAVE_FILE_ERROR); + header('Location: parametres_plugincss.php?p='.urlencode($plugin)); + exit; +} + +$backend = is_file($file_backend) ? trim(file_get_contents($file_backend)) : ''; +$file_backend_init = PLX_PLUGINS.basename($plugin).'/css/admin.css'; +$backend = ($backend=='' AND is_file($file_backend_init)) ? trim(file_get_contents($file_backend_init)) : $backend; +$frontend = is_file($file_frontend) ? trim(file_get_contents($file_frontend)) : ''; +$file_frontend_init = PLX_PLUGINS.basename($plugin).'/css/site.css'; +$frontend = ($frontend=='' AND is_file($file_frontend_init)) ? trim(file_get_contents($file_frontend_init)) : $frontend; + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +# Affichage des données +echo '

'.L_BACK_TO_PLUGINS.'

'; +?> +

+ +
+
+

+ +

+ + plxPlugins->callHook('AdminPluginCss')) # Hook Plugins ?> +

+ + +

+
+
+ diff --git a/src/core/admin/parametres_pluginhelp.php b/src/core/admin/parametres_pluginhelp.php new file mode 100644 index 0000000..ced1db5 --- /dev/null +++ b/src/core/admin/parametres_pluginhelp.php @@ -0,0 +1,38 @@ +checkProfil(PROFIL_ADMIN); + +$plugin = isset($_GET['p'])?urldecode($_GET['p']):''; +$plugin = plxUtils::nullbyteRemove($plugin); + +$output=''; +# chargement du fichier d'aide du plugin +$filename = realpath(PLX_PLUGINS.$plugin.'/lang/'.$plxAdmin->aConf['default_lang'].'-help.php'); +if(is_file($filename)) { + ob_start(); + echo '

'.L_BACK_TO_PLUGINS.'

'; + include($filename); + $output=ob_get_clean(); +} +else { + plxMsg::Error(L_NO_ENTRY); + header('Location: parametres_plugin.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +# Affichage des données +echo $output; +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/parametres_plugins.php b/src/core/admin/parametres_plugins.php new file mode 100644 index 0000000..c6c68d0 --- /dev/null +++ b/src/core/admin/parametres_plugins.php @@ -0,0 +1,171 @@ +checkProfil(PROFIL_ADMIN); + +if(isset($_POST['submit']) AND in_array($_POST['selection'], array('delete', 'activate', 'deactivate'))) { + $plxAdmin->plxPlugins->saveConfig($_POST); + header('Location: parametres_plugins.php'); + exit; +} +elseif(isset($_POST['update'])) { + $plxAdmin->plxPlugins->saveConfig($_POST); + header('Location: parametres_plugins.php'); + exit; +} + +function pluginsList($plugins, $defaultLang, $type) { +# plugins array() contient la liste des plugins à afficher +# defaultLang string langue utilisée dans l'admin +# type true|false true=liste des plugins actifs, false=liste des plugins inactifs + + $output=''; + if(sizeof($plugins)>0) { + $num=0; + foreach($plugins as $plugName => $plugInstance) { + $ordre = ++$num; + # détermination de l'icone à afficher + if(is_file(PLX_PLUGINS.$plugName.'/icon.png')) + $icon=PLX_PLUGINS.$plugName.'/icon.png'; + elseif(is_file(PLX_PLUGINS.$plugName.'/icon.jpg')) + $icon=PLX_PLUGINS.$plugName.'/icon.jpg'; + elseif(is_file(PLX_PLUGINS.$plugName.'/icon.gif')) + $icon=PLX_PLUGINS.$plugName.'/icon.gif'; + else + $icon=PLX_CORE.'admin/theme/images/icon_plugin.png'; + + $output .= ''; + + # checkbox + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + # icon + $output .= ''; + + # plugin infos + $output .= ''; + # title + version + $output .= ''.plxUtils::strCheck($plugInstance->getInfo('title')).' - '.L_PLUGINS_VERSION.' '.plxUtils::strCheck($plugInstance->getInfo('version')).''; + # date + if($plugInstance->getInfo('date')!='') $output .= ' ('.plxUtils::strCheck($plugInstance->getInfo('date')).')'; + # description + $output .= '
'.plxUtils::strCheck($plugInstance->getInfo('description')).'
'; + # author + $output .= L_PLUGINS_AUTHOR.' : '.plxUtils::strCheck($plugInstance->getInfo('author')); + # site + if($plugInstance->getInfo('site')!='') $output .= ' - '.plxUtils::strCheck($plugInstance->getInfo('site')).''; + # message d'alerte si plugin non configuré + if($type AND file_exists(PLX_PLUGINS.$plugName.'/config.php') AND !file_exists(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.xml')) $output .= '
'.L_PLUGIN_NO_CONFIG.''; + $output .= ''; + + # colonne pour trier les plugins + if($type) { + $output .= ''; + $output .= ''; + $output .= ''; + } + + # affichage des liens du plugin + $output .= ''; + # lien configuration + if(is_file(PLX_PLUGINS.$plugName.'/config.php')) { + $output .= ''.L_PLUGINS_CONFIG.'
'; + } + # lien pour code css + $output .= ''.L_PLUGINS_CSS.'
'; + # lien aide + if(is_file(PLX_PLUGINS.$plugName.'/lang/'.$defaultLang.'-help.php')) + $output .= ''.L_PLUGINS_HELP.''; + $output .= ''; + $output .= ''; + } + } + else + $output .= ''.L_NO_PLUGIN.''; + return $output; +} + +# récuperation de la liste des plugins inactifs +$aInactivePlugins = $plxAdmin->plxPlugins->getInactivePlugins(); +# nombre de plugins actifs +$nbActivePlugins = sizeof($plxAdmin->plxPlugins->aPlugins); +# nombre de plugins inactifs +$nbInactivePlugins = sizeof($aInactivePlugins); +# récuperation du type de plugins à afficher +$_GET['sel'] = isset($_GET['sel']) ? intval(plxUtils::nullbyteRemove($_GET['sel'])) : ''; +$session = isset($_SESSION['selPlugins']) ? $_SESSION['selPlugins'] : '1'; +$sel = (in_array($_GET['sel'], array('0', '1')) ? $_GET['sel'] : $session); +$_SESSION['selPlugins'] = $sel; +if($sel=='1') { + $aSelList = array('' => L_FOR_SELECTION, 'deactivate'=> L_PLUGINS_DEACTIVATE, '-' => '-----', 'delete' => L_PLUGINS_DELETE); + $plugins = pluginsList($plxAdmin->plxPlugins->aPlugins, $plxAdmin->aConf['default_lang'], true); +} else { + $aSelList = array('' => L_FOR_SELECTION, 'activate' => L_PLUGINS_ACTIVATE, '-' => '-----', 'delete' => L_PLUGINS_DELETE); + $plugins = pluginsList($aInactivePlugins, $plxAdmin->aConf['default_lang'], false); +} +# fil d'ariane +$breadcrumbs = array(); +$breadcrumbs[] = ''.L_PLUGINS_ACTIVE_LIST.' ('.$nbActivePlugins.')'; +$breadcrumbs[] = ''.L_PLUGINS_INACTIVE_LIST.' ('.$nbInactivePlugins.')'; + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +?> + +

+ +plxPlugins->callHook('AdminSettingsPluginsTop')) # Hook Plugins ?> + + +
+ + + + + + + + + + + + + + + +
 
+ +

+ +

+ +

+ +   + +

+
+ +plxPlugins->callHook('AdminSettingsPluginsFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/parametres_users.php b/src/core/admin/parametres_users.php new file mode 100644 index 0000000..5951f2e --- /dev/null +++ b/src/core/admin/parametres_users.php @@ -0,0 +1,133 @@ +checkProfil(PROFIL_ADMIN); + +# Edition des utilisateurs +if (!empty($_POST)) { + $plxAdmin->editUsers($_POST); + header('Location: parametres_users.php'); + exit; +} + +# Tableau des profils +$aProfils = array( + PROFIL_ADMIN => L_PROFIL_ADMIN, + PROFIL_MANAGER => L_PROFIL_MANAGER, + PROFIL_MODERATOR => L_PROFIL_MODERATOR, + PROFIL_EDITOR => L_PROFIL_EDITOR, + PROFIL_WRITER => L_PROFIL_WRITER +); + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +plxPlugins->callHook('AdminUsersTop')) # Hook Plugins ?> + +
+ + + + + + + + + + + + + + + aUsers) { + foreach($plxAdmin->aUsers as $_userid => $_user) { + if (!$_user['delete']) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + # On récupère le dernier identifiant + $a = array_keys($plxAdmin->aUsers); + rsort($a); + } else { + $a['0'] = 0; + } + $new_userid = str_pad($a['0']+1, 3, "0", STR_PAD_LEFT); + ?> + + + + '; + ?> + + + +
Utilisateur '.$_userid.''; + plxUtils::printInput($_userid.'_name', plxUtils::strCheck($_user['name']), 'text', '20-255'); + echo ''; + plxUtils::printInput($_userid.'_login', plxUtils::strCheck($_user['login']), 'text', '11-255'); + echo ''; + plxUtils::printInput($_userid.'_password', '', 'password', '11-255'); + echo ''; + if($_userid=='001') { + plxUtils::printInput($_userid.'_profil', $_user['profil'], 'hidden'); + plxUtils::printInput($_userid.'_active', $_user['active'], 'hidden'); + plxUtils::printSelect($_userid.'__profil', $aProfils, $_user['profil'], true, 'readonly'); + echo ''; + plxUtils::printSelect($_userid.'__active', array('1'=>L_YES,'0'=>L_NO), $_user['active'], true, 'readonly'); + } else { + plxUtils::printSelect($_userid.'_profil', $aProfils, $_user['profil']); + echo ''; + plxUtils::printSelect($_userid.'_active', array('1'=>L_YES,'0'=>L_NO), $_user['active']); + } + echo ''.L_OPTIONS.'
  + '; + plxUtils::printInput($new_userid.'_newuser', 'true', 'hidden'); + plxUtils::printInput($new_userid.'_name', '', 'text', '20-255'); + plxUtils::printInput($new_userid.'_infos', '', 'hidden'); + echo ''; + plxUtils::printInput($new_userid.'_login', '', 'text', '11-255'); + echo ''; + plxUtils::printInput($new_userid.'_password', '', 'password', '11-255'); + echo ''; + plxUtils::printSelect($new_userid.'_profil', $aProfils, PROFIL_WRITER); + echo ''; + plxUtils::printSelect($new_userid.'_active', array('1'=>L_YES,'0'=>L_NO), '1'); + echo ' 
+

+ + +

+

+ L_FOR_SELECTION, 'delete' => L_DELETE), '', false, '', 'id_selection') ?> + +

+
+ +plxPlugins->callHook('AdminUsersFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/plugin.php b/src/core/admin/plugin.php new file mode 100644 index 0000000..bc77d7b --- /dev/null +++ b/src/core/admin/plugin.php @@ -0,0 +1,38 @@ +plxPlugins->aPlugins[$plugin]) AND is_file($filename)) { + # utilisation de la variable plxPlugin pour faciliter la syntaxe dans les devs des plugins + $plxPlugin = $plxAdmin->plxPlugins->aPlugins[$plugin]; + # Control des autorisation d'accès à l'écran admin.php du plugin + $plxAdmin->checkProfil($plxPlugin->getAdminProfil()); + ob_start(); + include($filename); + $output=ob_get_clean(); +} +else { + plxMsg::Error(L_NO_ENTRY); + header('Location: index.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +# Affichage des données +echo $output; +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> diff --git a/src/core/admin/prepend.php b/src/core/admin/prepend.php new file mode 100644 index 0000000..d900f3f --- /dev/null +++ b/src/core/admin/prepend.php @@ -0,0 +1,67 @@ +aConf['default_lang']; +loadLang(PLX_CORE.'lang/'.$lang.'/admin.php'); + +# Hook Plugins +eval($plxAdmin->plxPlugins->callHook('AdminPrepend')); + +?> \ No newline at end of file diff --git a/src/core/admin/profil.php b/src/core/admin/profil.php new file mode 100644 index 0000000..3de4c96 --- /dev/null +++ b/src/core/admin/profil.php @@ -0,0 +1,79 @@ +plxPlugins->callHook('AdminProfilPrepend')); + +# On édite la configuration +if(!empty($_POST)) { + + if(!empty($_POST['profil'])) + $plxAdmin->editProfil($_POST); + elseif(!empty($_POST['password'])) + $plxAdmin->editPassword($_POST); + + header('Location: profil.php'); + exit; + +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); + +$_profil = $plxAdmin->aUsers[$_SESSION['user']]; +?> + +

+ +plxPlugins->callHook('AdminProfilTop')) # Hook Plugins ?> + +
+
+

 

+

+ +

+ +

+ +

+ +
+ plxPlugins->callHook('AdminProfil')) # Hook Plugins ?> +

+ + +

+
+ +

+
+
+

+ +

+ +
+

+ + +

+
+ +plxPlugins->callHook('AdminProfilFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/statique.php b/src/core/admin/statique.php new file mode 100644 index 0000000..a4a53d2 --- /dev/null +++ b/src/core/admin/statique.php @@ -0,0 +1,92 @@ +plxPlugins->callHook('AdminStaticPrepend')); + +# Control du token du formulaire +plxToken::validateFormToken($_POST); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER); + +# On édite la page statique +if(!empty($_POST) AND isset($plxAdmin->aStats[$_POST['id']])) { + $plxAdmin->editStatique($_POST); + header('Location: statique.php?p='.$_POST['id']); + exit; +} elseif(!empty($_GET['p'])) { # On affiche le contenu de la page + $id = plxUtils::strCheck(plxUtils::nullbyteRemove($_GET['p'])); + if(!isset($plxAdmin->aStats[ $id ])) { + plxMsg::Error(L_STATIC_UNKNOWN_PAGE); + header('Location: statiques.php'); + exit; + } + # On récupère le contenu + $content = trim($plxAdmin->getFileStatique($id)); + $title = $plxAdmin->aStats[$id]['name']; + $url = $plxAdmin->aStats[$id]['url']; + $active = $plxAdmin->aStats[$id]['active']; + $title_htmltag = $plxAdmin->aStats[$id]['title_htmltag']; + $meta_description = $plxAdmin->aStats[$id]['meta_description']; + $meta_keywords = $plxAdmin->aStats[$id]['meta_keywords']; + $template = $plxAdmin->aStats[$id]['template']; +} else { # Sinon, on redirige + header('Location: statiques.php'); + exit; +} + +# On récupère les templates des pages statiques +$files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style']); +if ($array = $files->query('/^static(-[a-z0-9-_]+)?.php$/')) { + foreach($array as $k=>$v) + $aTemplates[$v] = $v; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +

""

+ +plxPlugins->callHook('AdminStaticTop')) # Hook Plugins ?> + +
+
+ +

+ + + + +

+ +

+ +

+ +

+ +
+ plxPlugins->callHook('AdminStatic')) # Hook Plugins ?> +

+ + +

+
+ +plxPlugins->callHook('AdminStaticFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/statiques.php b/src/core/admin/statiques.php new file mode 100644 index 0000000..105c237 --- /dev/null +++ b/src/core/admin/statiques.php @@ -0,0 +1,152 @@ +plxPlugins->callHook('AdminStaticsPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN, PROFIL_MANAGER); + +# On édite les pages statiques +if(!empty($_POST)) { + if(isset($_POST['homeStatic'])) + $plxAdmin->editConfiguration($plxAdmin->aConf, array('homestatic'=>$_POST['homeStatic'][0])); + else + $plxAdmin->editConfiguration($plxAdmin->aConf, array('homestatic'=>'')); + $plxAdmin->editStatiques($_POST); + header('Location: statiques.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +plxPlugins->callHook('AdminStaticsTop')) # Hook Plugins ?> + +
+ + + + + + + + + + + + + + + + + aStats) { + foreach($plxAdmin->aStats as $k=>$v) { # Pour chaque page statique + $ordre = ++$num; + echo ''; + echo ''; + echo ''; + } + elseif($v['url'][0]=='?') + echo ''; + else + echo ''; + } + # On récupère le dernier identifiant + $a = array_keys($plxAdmin->aStats); + rsort($a); + } else { + $a['0'] = 0; + } + $new_staticid = str_pad($a['0']+1, 3, "0", STR_PAD_LEFT); + ?> + + + + + + + +
'.L_PAGE.' '.$k.''; + $selected = $plxAdmin->aConf['homestatic']==$k ? ' checked="checked"' : ''; + echo ''; + echo ''; + plxUtils::printInput($k.'_group', plxUtils::strCheck($v['group']), 'text', '13-100'); + echo ''; + plxUtils::printInput($k.'_name', plxUtils::strCheck($v['name']), 'text', '13-255'); + echo ''; + plxUtils::printInput($k.'_url', $v['url'], 'text', '12-255'); + echo ''; + plxUtils::printSelect($k.'_active', array('1'=>L_YES,'0'=>L_NO), $v['active']); + echo ''; + plxUtils::printInput($k.'_ordre', $ordre, 'text', '2-3'); + echo ''; + plxUtils::printSelect($k.'_menu', array('oui'=>L_DISPLAY,'non'=>L_HIDE), $v['menu']); + + if(!plxUtils::checkSite($v['url'])) { + echo ''; + echo ''.L_STATICS_SRC.''; + if($v['active']) { + echo ' - '.L_VIEW.''; + } + echo '
'.L_VIEW.'
'.L_VIEW.'
  + '; + plxUtils::printInput($new_staticid.'_group', '', 'hidden', '13-100'); + echo ''; + echo ''; + plxUtils::printInput($new_staticid.'_name', '', 'text', '13-255'); + plxUtils::printInput($new_staticid.'_template', 'static.php', 'hidden'); + echo ''; + plxUtils::printInput($new_staticid.'_url', '', 'text', '12-255'); + echo ''; + plxUtils::printSelect($new_staticid.'_active', array('1'=>L_YES,'0'=>L_NO), '0'); + echo ''; + plxUtils::printInput($new_staticid.'_ordre', ++$num, 'text', '2-3'); + echo ''; + plxUtils::printSelect($new_staticid.'_menu', array('oui'=>L_DISPLAY,'non'=>L_HIDE), '1'); + ?> +  
+

+ + +

+

+ L_FOR_SELECTION, 'delete' =>L_DELETE), '', false, '', 'id_selection') ?> + +

+
+ +plxPlugins->callHook('AdminStaticsFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/admin/theme/auth.css b/src/core/admin/theme/auth.css new file mode 100644 index 0000000..26ba62f --- /dev/null +++ b/src/core/admin/theme/auth.css @@ -0,0 +1,33 @@ +body { + background: #f9f9f9; + margin: 0; + padding: 0; + color: #555; + font-family: arial, helvetica, sans-serif; + font-size:0.72em; +} + +body#auth { + background-color:#f2f2f2; + margin-top:150px; +} + +a { + color:#2175bd; + font-size:11px; + font-weight:600; + text-decoration:none; + outline:none; +} +a:link, a:visited {color:#2175bd;} +a:hover { text-decoration:none; color:#db2020; } + +#login { margin:0 auto 0 auto; padding:20px; width:275px; background:#fff; border:1px solid #aaa; } +#login fieldset { border:0; } +#login .title { text-align:center; margin-bottom: 10px; padding: 0 0 10px 0; font-size:15px; border-bottom:1px solid #dedede; } +#login label { float:left; display:block; color:#7a7a7a; font-weight:bold; } +#login input[type=text], #login input[type=password] { margin:5px 0 15px 0; width:247px; padding:2px 3px 2px 3px; background-color:#f8f8f8; border:1px solid #aaa } +#login input[type=text]:focus, #login input[type=password]:focus { outline:none; color:#222; border:1px solid #77BACE; } +#login p { text-align:center; margin:0; padding:10px 0 0 0} +#login p.msg, #login p.error { margin:10px 0 10px 0; padding:10px 5px 10px 5px; } +#login p.error { background-color: #ffcfcf; border-color: #df8f8f 1px solid; color: #665252; } \ No newline at end of file diff --git a/src/core/admin/theme/base.css b/src/core/admin/theme/base.css new file mode 100644 index 0000000..282b9ab --- /dev/null +++ b/src/core/admin/theme/base.css @@ -0,0 +1,137 @@ +/* STRUCTURE */ +body { + margin:0; + padding:0 0 0 200px; /* width sidebar */ +} +div#sidebar { + position:absolute; + top:0; + left:0; + width: 200px; /* width sidebar */ + height:100%; +} +@media screen { + body>div#sidebar { + position:fixed; + } +} +* html body { + overflow:hidden; +} +* html div#content { + height:100%; + overflow:auto; +} + +/* BASE */ +body { + background-color:#fff; + font-family: arial, helvetica, sans-serif; + font-size:0.8em; + color:#222; +} +#content { + padding:20px 20px 20px 20px; +} +#sidebar { + background-color:#222; + color:#fff; + line-height:1.3em; +} +a { + outline:none; +} + +/* SIDEBAR */ +div#sidebar a, div#sidebar a:link, div#sidebar a:visited { + color:#fff; + font-weight:normal; + text-decoration:none; +} +div#sidebar a:hover { + color:#222; +} +div#sidebar ul { + list-style: none; + text-align:right; +} +div#sidebar ul li { + padding: 5px 20px 5px 0; + font-size: 14px; +} +div#sidebar li a.cpt, div#sidebar li.active a.cpt { + color:#fff !important; + padding:0 3px 0 3px; + background-color:red; +} +div#sidebar ul li.menu:hover { + background-color:#dedede; +} +div#sidebar ul li.menu a { + display:inline; + color:#fff; +} +div#sidebar ul li.menu:hover a { + color:#222; +} +div#sidebar ul li.active, div#sidebar ul li.active:hover, div#sidebar ul li.active a { + background-color:#fff; + color:#222 +} +div#sidebar ul li.sub { + font-style:italic; +} +div#sidebar ul li.nav, div#sidebar ul li.nav a { + color:#fff; + font-size: 12px; + margin: 5px 0 2px 0; + text-decoration:none; +} +div#sidebar ul li.nav a:hover { + text-decoration:underline; +} +div#sidebar ul li.user { + border-top: 1px solid #aaa; + background-color:#4a4a4a; + font-weight:bold; + padding-top: 10px; + padding-bottom:0; + font-size: 12px; +} +div#sidebar ul li.profil { + border-bottom: 1px solid #aaa; + background-color:#4a4a4a; + padding-top:0; + color:#f5f5f5; + padding-bottom:10px; + margin-bottom:20px; + font-size: 12px; +} +div#sidebar ul li.pluxml { + padding-top:5px; + border-top: 1px solid #555; +} +div#sidebar ul li.pluxml a { + font-size: 11px; + color:#666; + text-decoration:none; +} + +/* EXTRA */ +#extra-container{ + min-width:600px; + padding-bottom:80px; +} +#extra-container:after { + content:" "; + display:block; + clear:both; +} +#extra-sidebar { + float:right; + width:300px; +} +#extra-content { + position:relative; + margin-right:320px; +} \ No newline at end of file diff --git a/src/core/admin/theme/images/date.png b/src/core/admin/theme/images/date.png new file mode 100644 index 0000000..783c833 Binary files /dev/null and b/src/core/admin/theme/images/date.png differ diff --git a/src/core/admin/theme/images/delete.gif b/src/core/admin/theme/images/delete.gif new file mode 100644 index 0000000..745dbcf Binary files /dev/null and b/src/core/admin/theme/images/delete.gif differ diff --git a/src/core/admin/theme/images/feed-icon-14x14.png b/src/core/admin/theme/images/feed-icon-14x14.png new file mode 100644 index 0000000..b3c949d Binary files /dev/null and b/src/core/admin/theme/images/feed-icon-14x14.png differ diff --git a/src/core/admin/theme/images/file.png b/src/core/admin/theme/images/file.png new file mode 100644 index 0000000..09780e1 Binary files /dev/null and b/src/core/admin/theme/images/file.png differ diff --git a/src/core/admin/theme/images/help.gif b/src/core/admin/theme/images/help.gif new file mode 100644 index 0000000..e9a6872 Binary files /dev/null and b/src/core/admin/theme/images/help.gif differ diff --git a/src/core/admin/theme/images/icon_plugin.png b/src/core/admin/theme/images/icon_plugin.png new file mode 100644 index 0000000..6df4a95 Binary files /dev/null and b/src/core/admin/theme/images/icon_plugin.png differ diff --git a/src/core/admin/theme/images/index.html b/src/core/admin/theme/images/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/core/admin/theme/images/pluxml.gif b/src/core/admin/theme/images/pluxml.gif new file mode 100644 index 0000000..677f914 Binary files /dev/null and b/src/core/admin/theme/images/pluxml.gif differ diff --git a/src/core/admin/theme/images/pluxml.png b/src/core/admin/theme/images/pluxml.png new file mode 100644 index 0000000..fc3a3fc Binary files /dev/null and b/src/core/admin/theme/images/pluxml.png differ diff --git a/src/core/admin/theme/index.html b/src/core/admin/theme/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/core/admin/theme/reset.css b/src/core/admin/theme/reset.css new file mode 100644 index 0000000..320fefd --- /dev/null +++ b/src/core/admin/theme/reset.css @@ -0,0 +1,19 @@ +/* RESET */ +html, body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, a, span, blockquote, label, input, textarea, form, fieldset{ + border: 0; + font: inherit; + font-size: 100%; + margin: 0; + padding: 0; + vertical-align: baseline; +} +input{ + vertical-align: middle; +} +textarea{ + width: 100%; + max-width: 100%!important; +} +img { + border: none; +} diff --git a/src/core/admin/theme/style.css b/src/core/admin/theme/style.css new file mode 100644 index 0000000..ffca77e --- /dev/null +++ b/src/core/admin/theme/style.css @@ -0,0 +1,350 @@ +h2 { + margin:10px 0px 10px 0px; + padding:0px; + font-size:28px; + color:#555; +} +h3 { + font-size: 13px; +} +a { + color:#2175bd; + text-decoration:none; + font-weight:bold; + outline:none; +} +ul { + list-style: none; +} +a:link, a:visited {color:#2175bd;} +a:hover { text-decoration:none; color:#db2020; } + +p.back, p#medias_back { margin: 10px 0 10px 0; } +p.back a:before, p#medias_back a:before {content:"\00AB\00A0"; } +p.breadcrumbs { margin: 5px 0 5px 0 } + +a.help { + padding:0 0 0 16px; + margin:0 0 0 2px; + width:16px; + cursor:help; + background:url('images/help.gif') no-repeat 0 0; +} + +a.selected {color:#444 !important} + +.center { text-align:center; } +.left { text-align:left; } +.right { text-align:right; } +.top { vertical-align:top } + +a.hcolumn { + color:#000; + text-decoration:underline; +} +a.hcolumn:hover { + color:#000; + text-decoration:none; +} +#sitename { + margin:0; + padding:0; + font-size: 12px; + color: #888; +} + +/* index.php */ +.quicksearch { + float:right; + padding-top:18px; +} + +/* install.php */ +.panel ul { + list-style: none; +} +.panel ul li { + padding:2px 0 2px 0; +} + +/* Form + fieldset */ +fieldset { + border:0; + margin:0 0 10px; + padding:0 0 14px 0; + width:100%; +} +fieldset p, #p_content, #p_chapo { + clear:both; + padding:5px 0 2px 0 !important; +} +fieldset p.field label { + float:left; + width:300px; + padding-right: 15px; +} +fieldset.config p { + padding:8px 0 2px 0 !important; +} +fieldset.config label { + padding-top:10px; +} +fieldset.config select { + margin-top:7px; +} +fieldset p.field { + clear:both; + margin:0; + padding:0 0 2px 0; +} +fieldset.config input[type=text] { + margin-top:5px; + width: 300px; +} +fieldset input[type=text].fieldnum { + width: 40px; +} +textarea { + width:98%; + border:1px solid #bbb; +} +input { + border:1px solid #bbb; + cursor:pointer; +} +input:hover { + background:#DDF0F8; +} +input[type=checkbox], input[type=radio] { + border:0; +} +input[type=text], input[type=password] { + padding:3px 5px 3px 5px !important; +} +input[type=text]:focus, input[type=password]:focus, textarea:focus, select:focus { + outline:none; + color:#222; + border:1px solid #77BACE; +} +input[type=submit] { + margin: 0 2px 0 2px; + background-color:#dedede; + border:1px solid #A8A9A8; + color:#555; + padding:2px 5px 2px 5px !important; +} +input[type=submit]:hover { + color:#000; + background-color: #bbb ; +} +.select { + background-color:#333 !important; + color:#fff !important; +} +.readonly, .readonly:hover { + background-color:#efefef; +} +.fld1 { + width: 20px; +} +.fld2 { + width: 35px; +} +#extra-content #id_title, #extra-content #id_link { width: 96% } + +/* Pagination */ +#pagination { + width:100%; + text-align:left; + margin:10px auto 10px auto; + padding:10px 0 10px 0; +} +#pagination span { + border:1px #dedede solid; + padding:3px 5px 3px 5px; + margin-right:5px; +} + +/* Medias */ +#files_manager{ + margin-top: 15px; + min-width:700px; +} +#files_manager ul { + list-style: none; +} +#files_manager .manager { + margin-bottom: 10px; + float:left; + width:100%; +} +#files_manager .uploader { + margin-bottom: 10px; + float:right; +} +#files_manager .browser { + float:left; + margin:10px 0 20px 0; +} +#files_manager .browser .folder { + width: 300px; +} +#files_manager .create { + float:right; +} +#files_manager .files { + float:left; + width:100%; +} +#files_manager .files table { + margin:0 0 15px 0; +} +/* --- */ +#files_uploader { + margin-top: 15px; + display:none; +} +#files_uploader .manager { + float:left; +} +#files_uploader .uploader { + float:right; +} +#files_uploader .files_list{ + margin: 15px 0 15px 0; +} +#files_uploader .options1{ + clear:both; + float:left; + width: 300px; +} +#files_uploader .options2{ + float:left; + width: 300px; +} +#files_uploader ul { + list-style:none; +} +#files_uploader ul li { + margin: 3px 0 0 3px !important; +} +.rowfile { + clear:both; + float:left; + margin:0; + padding:0 0 5px; +} +a.btnDelete{ + margin:0; + padding:0; + outline: none; + float:left; + display:inline; +} +.divtitle { + margin: 2px 0 0 5px; + padding:0; + float:left; +} +#btn_upload { + clear:both; + float:left; +} + +/* Table */ +.table { + width:100%; + border: 1px #dedede solid; + margin:15px 0 10px 0; + border-collapse:collapse; +} +thead { + background-color:#ddd; + color:#000; + text-align:left; +} +th { + text-align:left; /* IE */ +} +th, tr, td { + padding: 8px 4px 8px 4px; +} +tr.new { + background-color:#e0e0e0; +} +tr.line-0 { + background-color:#ffffff; +} +tr.line-1 { + background-color:#f5f5f5; +} + +th.checkbox { width: 5px; } +th.date { width:65px; } +th.title , th.message { white-space: nowrap;} +th.category { width:250px; white-space: nowrap; } +th.nbcoms { width: 50px; white-space: nowrap;} +th.author, td.author { width:150px; white-space: nowrap; } +th.action { min-width: 150px; white-space: nowrap; text-align: center;} +td.action { min-width: 150px; white-space: nowrap; text-align: center;} + +th.datetime, td.datetime { width:120px; white-space: nowrap; } +th.image { width: 60px; } +th.infos {width:90px;} +th.description { width: 90%; } +th.col { width: 10%; } +th.icon { width: 50px; } + +td.config { width: 170px; text-align:right; } + +/* Nouvel article */ +p.field_head { + background-color: #dedede; + margin: 40px 15px 0 0; + padding: 5px 15px 5px 5px; +} + +/* Commentaires */ +#comments blockquote { + border:1px solid #ddd; + padding: 5px 10px 5px 10px; +} +.type-normal { + background-color: #fff; +} +.type-admin { + background-color: #fffdea !important; +} + +/* Messages */ +.warning { + margin: 10px 320px 10px 0; + padding: 10px 5px 10px 20px; + border: 1px solid #df8f8f; + font-size: 13px; + width:96%; + background-color: #ffcece; +} +.notification { + position:absolute; + top:-1px; + z-index:9999; + padding: 2px 15px 2px 15px; + border: 1px solid; + font-size: 13px; + font-weight:bold; + color:#000 !important; +} +.error { + background-color: #ffcfcf; + border-color: #df8f8f; +} +.success { + background-color: #fff1a8; + border-color: #e6db55; +} + +span.alert { + color: red; +} + diff --git a/src/core/admin/top.php b/src/core/admin/top.php new file mode 100644 index 0000000..01ca8f6 --- /dev/null +++ b/src/core/admin/top.php @@ -0,0 +1,120 @@ + + + + + + <?php echo plxUtils::strCheck($plxAdmin->aConf['title']) ?> <?php echo L_ADMIN ?> + + + + + + aConf['racine_plugins'].'admin.css')) + echo ''."\n"; + ?> + + + plxPlugins->callHook('AdminTopEndHead')) ?> + + + + + + +
+ +

aConf['title']) ?>

+ + +plxPlugins->callHook('AdminTopBottom')) ?> \ No newline at end of file diff --git a/src/core/admin/user.php b/src/core/admin/user.php new file mode 100644 index 0000000..098cda9 --- /dev/null +++ b/src/core/admin/user.php @@ -0,0 +1,71 @@ +plxPlugins->callHook('AdminUserPrepend')); + +# Control de l'accès à la page en fonction du profil de l'utilisateur connecté +$plxAdmin->checkProfil(PROFIL_ADMIN); + +# On édite la page statique +if(!empty($_POST) AND isset($plxAdmin->aUsers[ $_POST['id'] ])) { + $plxAdmin->editUser($_POST); + header('Location: user.php?p='.$_POST['id']); + exit; +} +elseif(!empty($_GET['p'])) { # On vérifie l'existence de l'utilisateur + $id = plxUtils::strCheck(plxUtils::nullbyteRemove($_GET['p'])); + if(!isset($plxAdmin->aUsers[ $id ])) { + plxMsg::Error(L_USER_UNKNOWN); + header('Location: parametres_users.php'); + exit; + } +} else { # Sinon, on redirige + header('Location: parametres_users.php'); + exit; +} + +# On inclut le header +include(dirname(__FILE__).'/top.php'); +?> + +

+ +

"aUsers[$id]['name']); ?>"

+ +plxPlugins->callHook('AdminUserTop')) # Hook Plugins ?> + +
+
+ +

+ aUsers[$id]['lang']) ?> +

+ aUsers[$id]['email']), 'text', '30-255') ?> +

+ aUsers[$id]['infos']),95,8) ?> +
+ plxPlugins->callHook('AdminUser')) ?> +

+ + +

+
+ +plxPlugins->callHook('AdminUserFoot')); +# On inclut le footer +include(dirname(__FILE__).'/foot.php'); +?> \ No newline at end of file diff --git a/src/core/index.html b/src/core/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/core/lang/de/admin.php b/src/core/lang/de/admin.php new file mode 100644 index 0000000..4f7d501 --- /dev/null +++ b/src/core/lang/de/admin.php @@ -0,0 +1,464 @@ + 'Unbekannter Fehler', +'L_CONFIRM_DELETE' => 'Bestätigen Sie die Löschung?', +'L_SAVE_FILE' => 'Speichern Sie die Datei', +'L_SAVE_FILE_SUCCESSFULLY' => 'Datei erfolgreich gespeichert', +'L_SAVE_FILE_ERROR' => 'Fehler beim Speichern der Datei für', +'L_SAVE_SUCCESSFUL' => 'Daten erflogreich gespeichert', +'L_SAVE_ERR' => 'Fehler während des Dateispeicherns', +'L_NO_ENTRY' => 'Datenzugriff verboten', +'L_ERR_USER_EMPTY' => 'Bitte geben Sie Benutzernamen ein', +'L_ERR_PASSWORD_EMPTY' => 'Bitte geben sie ein Passwort ein', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Ungültiges oder leeres Passwort', +'L_ERR_INVALID_EMAIL' => 'Ungültige E-Mail-Adresse', +'L_ERR_INVALID_SITE' => 'Ungültige Adresse der Website', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Ungültiges Artikel-ID !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'neue-kategorie', +'L_DEFAULT_NEW_STATIC_URL' => 'neue-seite', +'L_DEFAULT_NEW_ARTICLE_URL' => 'neuer-artikel', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Artikel erfolgreich angelegt', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Artikel erfolgreich aktualisiert', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Artikel erfolgreich gelöscht', +'L_ARTICLE_SAVE_ERR' => 'Fehler beim Speichern des Artikels', +'L_ARTICLE_DELETE_ERR' => 'Fehler beim Löschen des Artikels.', +'L_ERR_UNKNOWN_COMMENT' => 'Der angeforderte Kommentar existiert nicht oder nicht mehr', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Kommentar erfolgreich geändert', +'L_COMMENT_UPDATE_ERR' => 'Fehler während der Kommentaraktualisierung', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Kommentar erfolgreich gelöscht', +'L_COMMENT_DELETE_ERR' => 'Fehler beim Löschen.', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validierung erfolgreich', +'L_COMMENT_VALIDATE_ERR' => 'Fehler bei der Validierung.', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Durch den Moderator akzeptiert', +'L_COMMENT_MODERATE_ERR' => 'Fehler oder durch Moderator abgelehnt', +'L_COMMENT_WRITTEN_BY' => 'Geschrieben von', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Der Ordner "Medias" konnte für diesen Benutzer nicht angelegt werden', +'L_PLXMEDIAS_ROOT' => 'Grundverzeichnis', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Der Ordner konnte nicht angelegt werden', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Ordner erflogreich angelegt', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Dieser Ordner existiert bereits', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Fehler beim Löschen den Ordners', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Der Ordner wurde erfolgreich gelöscht', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'Dieser Dateityp ist nicht erlaubt', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'Die Datei ist größer als ', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Fehler beim Hochladen der Datei', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Die Datei wurde erfolgreich hochgeladen', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Fehler beim Hochladen von Dateien', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Dateien wurden erfolgreich hochgeladen', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Dateien wurdeb erfolgreich entfernt', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Fehler beim Löschen der Dateien', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Die Datei wurde erfolgreich gelöscht', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Fehler beim Löschen der Datei', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Fehler beim Verschieben der Dateien', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Fehler beim Verschieben der Datei', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Dateien wurden erfolgreich verschoben', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Datei wurde erfolgreich verschoben', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Verschieben', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Fehler beim Erstellen der Miniaturansicht', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Fehler beim Erstellen des Miniaturansichten', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniaturansicht erfolgreich erstellt', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Miniaturansichten erfolgreich erstellt', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Neuer Artikel', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Ungültiges Erscheinungsdatum.', +'L_ERR_UNKNOWN_ARTICLE' => 'Der angeforderte Artikel existiert nicht oder nicht mehr!', +'L_ERR_FORBIDDEN_ARTICLE' => 'Sie haben keine Berechtigung, auf diesen Artikel zuzugreifen!', +'L_BACK_TO_ARTICLES' => 'Zurück zur Artikelliste', +'L_ARTICLE_EDITING' => 'Artikel bearbeiten', +'L_ARTICLE_TITLE' => 'Titel', +'L_ARTICLE_LIST_AUTHORS' => 'Autor', +'L_HEADLINE_FIELD' => 'Vorspann (optional)', +'L_CONTENT_FIELD' => 'Inhalt', +'L_LINK_FIELD' => 'Link zum Artikel', +'L_LINK_ACCESS' => 'Zum Artikel', +'L_LINK_VIEW' => 'sehen', +'L_ARTICLE_STATUS' => 'Status', +'L_DRAFT' => 'Entwurf', +'L_PUBLISHED' => 'Publiziert', +'L_AWAITING' => 'Erwartet Moderation', +'L_ARTICLE_DATE' => 'Erscheinungsdatum', +'L_NOW' => 'jetzt', +'L_ARTICLE_CATEGORIES' => 'Kategorien', +'L_CATEGORY_HOME_PAGE' => 'Homepage', +'L_NEW_CATEGORY' => 'Neue Kategorie', +'L_ARTICLE_TAGS_FIELD' => 'Schlagworte', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Trennen Sie Schlagorte mit Komma', +'L_ARTICLE_TOGGLER_TITLE' => 'Schlagwortliste', +'L_NO_TAG' => 'Kein Schlagwort', +'L_ALLOW_COMMENTS' => 'Kommentare erlauben', +'L_ARTICLE_URL_FIELD' => 'URL', +'L_ARTICLE_URL_FIELD_TITLE' => 'URL wird bei der Artikelerstellung automatisch generiert', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Kommentare verwalten', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Kommentare dieses Artikels verwalten', +'L_ARTICLE_NEW_COMMENT' => 'Kommentar schreiben', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Einen Kommentar zu diesem Artikel schreiben', +'L_ARTICLE_DELETE_CONFIRM' => 'Diesen Artikel löschen?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Vorschau', +'L_ARTICLE_DRAFT_BUTTON' => 'Als Entwurf speichern', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publizieren', +'L_ARTICLE_MODERATE_BUTTON' => 'Zur Moderation einreichen', +'L_ARTICLE_OFFLINE_BUTTON' => 'Offline stellen', +'L_ARTICLE_UPDATE_BUTTON' => 'Speichern', +'L_CATEGORY_ADD_BUTTON' => 'Hinzufügen', +'L_ARTICLE_META_DESCRIPTION' => 'META Tag "description" (optional)', +'L_ARTICLE_META_KEYWORDS' => 'META Tag "keywords" (optional)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Title-Tag Inhalte (optional)', +'L_ARTICLE_CHAPO_HIDE' => 'verbergen', +'L_ARTICLE_CHAPO_DISPLAY' => 'anzeigen', +'L_AUTH_PAGE_TITLE' => 'Anmeldung', +'L_LOGOUT_SUCCESSFUL' => 'Sie wurden erflogreich abgemeldet', +'L_LOGIN_PAGE' => 'Administrator Anmeldung', +'L_AUTH_LOGIN_FIELD' => 'Benutzer', +'L_AUTH_PASSWORD_FIELD' => 'Passwort', +'L_SUBMIT_BUTTON' => 'Anmelden', +'L_ERR_WRONG_PASSWORD' => 'Benutzername und/oder Passwort sind falsch', +'L_POWERED_BY' => 'Generiert von PluXml', + +'L_CAT_TITLE' => 'Kategorien erstellen/ändern', +'L_CAT_LIST_ID' => 'ID', +'L_CAT_LIST_ACTIVE' => 'Aktiv', +'L_CAT_LIST_NAME' => 'Name der Kategorie', +'L_CAT_LIST_URL' => 'URL', +'L_CAT_LIST_SORT' => 'Sortierung der Artikel', +'L_CAT_LIST_BYPAGE' => 'Artikel/Seite', +'L_CAT_LIST_ORDER' => 'Reihenfolge', +'L_CAT_LIST_MENU' => 'Menü', +'L_CATEGORY' => 'Kategorie', +'L_DISPLAY' => 'Anzeigen', +'L_HIDE' => 'Verstecken', +'L_OPTIONS' => 'Optionen', +'L_FOR_SELECTION' => 'Aktion auswählen...', +'L_DELETE' => 'Löschen', +'L_CAT_APPLY_BUTTON' => 'Änderungen speichern', +'L_CAT_UNKNOWN' => 'Unbekannte Kategorie', +'L_EDITCAT_PAGE_TITLE' => 'Kategorieoptionen ändern', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Zeige Artikel in dieser Kategorie auf der Startseite', +'L_EDITCAT_DESCRIPTION' => 'Beschreibung', +'L_EDITCAT_TEMPLATE' => 'Vorlage', +'L_EDITCAT_BACK_TO_PAGE' => 'Zurück zur Liste der Kategorien', +'L_EDITCAT_UPDATE' => 'Kategorie aktualisieren', +'L_EDITCAT_TITLE_HTMLTAG' => 'Title-Tag Inhalte (optional)', +'L_EDITCAT_META_DESCRIPTION' => 'META Tag "description" - Inhalt für diese Kategorie (optional)', +'L_EDITCAT_META_KEYWORDS' => 'META Tag "keywords" - Inhalt für diese Kategorie (optional)', +'L_COMMENT_ORPHAN' => 'keinen Artikel', +'L_COMMENT_ORPHAN_STATUS' => 'verwaist (Sie sollten diesen Kommentar löschen)', +'L_COMMENT_ARTICLE_LINKED' => 'Artikel', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Artikel zu diesem Kommentar', +'L_COMMENT_OFFLINE' => 'Offline', +'L_COMMENT_ONLINE' => 'Online', +'L_COMMENT_ONLINE_TITLE' => 'Liste der publizierten Kommentare', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Zurück zur Liste der Kommentare dieses Artikels', +'L_BACK_TO_COMMENTS' => 'Zurück zur Liste der Kommentare', +'L_COMMENT_EDITING' => 'Kommentar bearbeiten', +'L_COMMENT_AUTHOR_FIELD' => 'Autor', +'L_COMMENT_TYPE_FIELD' => 'Art des Kommentars', +'L_COMMENT_DATE_FIELD' => 'Datum und Zeitpunkt der veröffentlichung', +'L_COMMENT_IP_FIELD' => 'IP', +'L_COMMENT_SITE_FIELD' => 'Website', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Status', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Bezieht sich auf Artikel', +'L_COMMENT_ARTICLE_FIELD' => 'Kommentar', +'L_COMMENT_DELETE_CONFIRM' => 'Diesen Kommentar löschen?', +'L_COMMENT_PUBLISH_BUTTON' => 'Publizieren bestätigen', +'L_COMMENT_OFFLINE_BUTTON' => 'Offline stellen', +'L_COMMENT_ANSWER_BUTTON' => 'Antworten', +'L_COMMENT_UPDATE_BUTTON' => 'Aktualisieren', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'Der Kommentar,auf den Sie antworten wollen, existiert nicht oder nicht mehr!', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Der Kommentar ist offline, Antworten ist nicht möglich!', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'Der gefragte Artikel existiert nicht oder nicht mehr, Sie können keinen Kommentar erstellen!', +'L_ERR_CREATING_COMMENT' => 'Es gab einen Fehler beim Erstellen des Kommentars', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Der Kommentar wurde erfolgreich erstellt', +'L_CREATE_NEW_COMMENT' => 'Kommentar schreiben', +'L_COMMENT_SAVE_BUTTON' => 'Speichern', +'L_ARTICLE_COMMENTS_LIST' => 'Kommentare dieses Artikels (neueste zuerst)', +'L_COMMENT_ANSWER_TITLE' => 'Auf diesen Kommentar antworten', +'L_COMMENT_ANSWER' => 'Antworten', +'L_COMMENTS_ONLINE_LIST' => 'Liste der veroffentlichten Kommentare', +'L_COMMENTS_ALL_LIST' => 'Liste aller Kommentare', +'L_COMMENT_SET_ONLINE' => 'Online nehmen', +'L_COMMENT_SET_OFFLINE' => 'Offline nehmen', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Einen neuen Kommentar für diesen Artikel schreiben', +'L_COMMENT_NEW_COMMENT' => 'Einen neuen Kommentar schreiben', +'L_COMMENTS_ARTICLE_SCOPE' => 'Artikel', +'L_COMMENTS_GLOBAL_SCOPE' => 'ganze Website', +'L_COMMENTS_OFFLINE_LIST' => 'Liste der wartenden Kommentare ', +'L_COMMENTS_LIST_DATE' => 'Datum', +'L_COMMENTS_LIST_AUTHOR' => 'Autor', +'L_COMMENTS_LIST_MESSAGE' => 'Nachricht', +'L_COMMENTS_LIST_ACTION' => 'Aktion', +'L_COMMENT_EDIT' => 'editieren', +'L_COMMENT_EDIT_TITLE' => 'Diesen Kommentar bearbeiten', +'L_COMMENT_DELETE' => 'Löschen', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Feed der Offline-Kommentare (Rss)', +'L_COMMENT_OFFLINE_FEEDS' => 'Offline Kommentare', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Feed der Online-Kommentare (Rss)', +'L_COMMENT_ONLINE_FEEDS' => 'Online-Kommentare', +'L_COMMENTS_PRIVATE_FEEDS' => 'Private Feed', +'L_ARTICLES_FILTER_BUTTON' => 'Filtern', +'L_CATEGORIES_TABLE' => 'Kategorien', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Exakter Ort', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Alle Artikel', +'L_ARTICLES_LIST' => 'Artikelliste', +'L_ARTICLE_LIST_DATE' => 'Datum', +'L_ARTICLE_LIST_TITLE' => 'Titel', +'L_ARTICLE_LIST_CATEGORIES' => 'Kategorie', +'L_ARTICLE_LIST_NBCOMS' => 'Kom. Nummer', +'L_ARTICLE_LIST_AUTHOR' => 'Autor', +'L_ARTICLE_LIST_ACTION' => 'Aktion', +'L_CATEGORY_HOME' => 'Homepage', +'L_CATEGORY_DRAFT' => 'Entwurf', +'L_ARTICLE_VIEW' => 'Ansehen', +'L_ARTICLE_VIEW_TITLE' => 'Den Artikel auf dem Website ansehen', +'L_ARTICLE_EDIT' => 'editieren', +'L_ARTICLE_EDIT_TITLE' => 'Diesen Artikel bearbeiten', +'L_NEW_COMMENTS_TITLE' => 'Wartende Kommentare', +'L_VALIDATED_COMMENTS_TITLE' => 'Publizierte Kommentare', +'L_NO_ARTICLE' => 'Kein(e) Artikel', +'L_ARTICLES_SEARCH_BUTTON' => 'Suche', +'L_ARTICLES_ALL_CATEGORIES' => 'Alle Kategorien ...', +'L_ALL' => 'Alle', +'L_ALL_PUBLISHED' => 'Veröffentlicht', +'L_ALL_DRAFTS' => 'Entwürfe', +'L_ALL_AWAITING_MODERATION' => 'erwarten Moderation', +'L_MEDIAS_DELETE_FOLDER' => 'Ordner löschen', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Ordner inkl. Inhalt löschen?', +'L_MEDIAS_NO_FILE' => 'Keine Datei(en)', +'L_MEDIAS_FILENAME' => 'Dateiname', +'L_MEDIAS_ADD_FILE' => 'Dateien hochladen', +'L_MEDIAS_BACK' => 'Zurück', +'L_MEDIAS_TITLE' => 'Datei und Medienverwaltung', +'L_MEDIAS_IMAGES' => 'Bilder', +'L_MEDIAS_DOCUMENTS' => 'Dokumente', +'L_MEDIAS_CREATE_FOLDER' => 'Ordner erstellen', +'L_MEDIAS_SUBMIT_FILE' => 'Abschicken', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Maximale Größe der Datei', +'L_MEDIAS_DIRECTORY' => 'Ort', +'L_MEDIAS_FOLDER' => 'Datei', +'L_MEDIAS_NEW_FOLDER' => 'Neuer Ordner', +'L_MEDIAS_FILESIZE' => 'Größe', +'L_MEDIAS_DATE' => 'Datum', +'L_MEDIAS_DIMENSIONS' => 'Abmessungen', +'L_MEDIAS_RESIZE' => 'Bilder skalieren', +'L_MEDIAS_RESIZE_NO' => 'Originalgröße', +'L_MEDIAS_THUMBS' => 'Miniaturansicht erstellen', +'L_MEDIAS_THUMBS_NONE' => 'Kein Bild', +'L_MEDIAS_MODIFY' => 'Bearbeiten', +'L_MEDIAS_THUMB' => 'Miniaturansicht', +'L_MEDIAS_EXTENSION' => 'Erweiterung', +'L_MEDIAS_ADD' => 'Hinzufügen', +'L_MEDIAS_ALIGNMENT' => 'Ausrichtung', +'L_MEDIAS_ALIGN_NONE' => 'Nein', +'L_MEDIAS_ALIGN_LEFT' => 'Links', +'L_MEDIAS_ALIGN_CENTER' => 'Center', +'L_MEDIAS_ALIGN_RIGHT' => 'Rechts', +'L_MEDIAS_RECREATE_THUMB' => 'Miniaturansicht neu erstellen', +'L_SORT_ASCENDING_DATE' => 'Datum aufsteigend', +'L_SORT_DESCENDING_DATE' => 'Datum absteigend', +'L_SORT_ALPHABETICAL' => 'alphabetisch', +'L_OK' => 'Ok', +'L_YES' => 'Ja', +'L_NO' => 'Nein', +'L_NONE1' => 'kein', +'L_NONE2' => 'kein', +'L_CONFIG_VIEW_FIELD' => 'Darstellungsoptionen', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Themenauswahl', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Themendateien editieren', +'L_CONFIG_VIEW_FILES_EDIT' => 'Themendateien editieren', +'L_CONFIG_VIEW_SORT' => 'Artikelsortierung', +'L_CONFIG_VIEW_BYPAGE' => 'Angezeigte Artikel pro Seite', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Angezeigte Artikel pro Seite (Archiv)', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Angezeigte Artikel pro Seite (Admin)', +'L_CONFIG_VIEW_SORT_COMS' => 'Kommentarsortierung', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Angezeigte Kommentare pro Seite (Admin)', +'L_CONFIG_VIEW_IMAGES' => 'Bildgröße (Breite x Höhe)', +'L_CONFIG_VIEW_THUMBS' => 'Größe der Miniaturansicht (Breite x Höhe)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Eine statische Seite als Homepage verwenden', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Achtung! Diese Seite ist inaktiv', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Themen von ressources.pluxml.org laden.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Anzahl der angezeigten Artikel/Kommentare im RSS Feed', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Im RSS Feed nur Vorspann des Artikels zeigen', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Wenn der Vorspann leer ist, Inhalt anzeigen', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Text am Artikelende jedes RSS Feeds', +'L_CONFIG_VIEW_UPDATE' => 'Änderungen speichern', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Leere Kategorien (ohne Artikel) anzeigen', +'L_CONFIG_HOMETEMPLATE' => 'Vorlage der Homepage', +'L_CONFIG_ADVANCED_DESC' => 'Erweiterte Einstellungen', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Adressweiterleitung aktivieren (URL rewrite)', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Achtung! Es ist bereits eine .htaccess Datei im Grundverzeichnis von PluXml vorhanden. Diese Datei wird beim Aktivieren modifiziert.', +'L_CONFIG_ADVANCED_GZIP' => 'GZIP Kompression aktivieren', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Komprimierung spart Bandreite, erhöht aber die Prozessorauslastung des Servers.', +'L_CONFIG_ADVANCED_CAPCHA' => 'ANTI-SPAM Kontrolle aktivieren', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Adminschlüssel (private URLs)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Feld leeren um neuen Schlüssel zu generieren', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Für jeden Benutzer einen eigenen Daten- und Bildordner verwenden', +'L_HELP_SLASH_END' => 'Schrägstrich (Slash) am Ende nicht vergessen!', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Bildordner', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Datenordner', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Artikelordner', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Kommentarordner', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Ordner für statische Seiten', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Themen Ordner', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Plugins Ordner', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Ort der Konfigurationsdateien (Ordner)', +'L_CONFIG_ADVANCED_UPDATE' => 'Änderungen speichern', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Grundeinstellungen', +'L_CONFIG_BASE_SITE_TITLE' => 'Titel der Website', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Untertitel/Beschreibung der Website', +'L_CONFIG_BASE_URL_HELP' => 'Schägstrich (Slash) am Ende nicht vergessen!', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Standardsprache der Website', +'L_CONFIG_BASE_TIMEZONE' => 'Zeitzone', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Kommentare erlaubt', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Kommentare moderieren', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Artikel moderieren/bearbeiten', +'L_CONFIG_BASE_UPDATE' => 'Grundeinstellungen speichern', +'L_CONFIG_META_DESCRIPTION' => 'META Tag "description" - Inhalt (optional)', +'L_CONFIG_META_KEYWORDS' => 'META Tag "keywords" - Inhalt (optional)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Dieses Thema existiert nicht!', +'L_CONFIG_EDITTPL_TITLE' => 'Thema editieren', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Wählen Sie die Datei, die Sie editieren wollen:', +'L_CONFIG_EDITTPL_LOAD' => 'Laden', +'L_CONFIG_INFOS_TITLE' => 'PluXml Systemnachrichten', +'L_CONFIG_INFOS_DESCRIPTION' => 'Systemstatus und nützliche Informationen zum Betrieb von PluXml', +'L_CONFIG_INFOS_NB_CATS' => 'Anzahl der Kategorien:', +'L_CONFIG_INFOS_NB_STATICS' => 'Anzahl der statischen Seiten:', +'L_CONFIG_INFOS_WRITER' => 'Benutzername der aktuellen SESSION:', +'L_PLUXML_CHECK_VERSION' => 'Aktualitätsprüfung von PluXml (über PluXml.org)', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Update hat nicht funktioniert. Sie sollten \'allow_url_fopen\' aktivieren.', +'L_PLUXML_UPDATE_ERR' => 'Updatefunktion mit unbekanntem Fehler abgebrochen.', +'L_PLUXML_UPTODATE' => 'Sie benützen die aktuelle Version von PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Eine neue Version ist verfügbar! Sie können sie hier herunterladen: ', +'L_CONFIG_USERS_TITLE' => 'Benutzerverwaltung', +'L_CONFIG_USER' => 'Benutzer', +'L_CONFIG_USERS_ID' => 'Benutzer-ID', +'L_CONFIG_USERS_ACTIVE' => 'Aktiv', +'L_CONFIG_USERS_ACTION' => 'Aktion', +'L_CONFIG_USERS_NEW' => 'Neuer Benutzer', +'L_CONFIG_USERS_UPDATE' => 'Änderungen speichern', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Diese Login-ID wird bereits verwendet', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Dieser Benutzername ist bereits vergeben', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Dieser Kategoriename existiert bereits', +'L_ERR_STATIC_ALREADY_EXISTS' => 'wird bereits verwendet', +'L_BACK_TO_PLUGINS' => 'Zurück zur Plugins-Seite', +'L_NO_PLUGIN' => 'Keine Plugins', +'L_PLUGIN_NO_CONFIG' => 'Nicht konfiguriert plugin', +'L_PLUGINS_CSS' => 'CSS-Code', +'L_PLUGINS_CSS_TITLE' => 'Bearbeiten Sie den CSS-Code des Plugins', +'L_CONTENT_FIELD_FRONTEND' => 'CSS-Datei-Inhalte Website', +'L_CONTENT_FIELD_BACKEND' => 'CSS-Datei Content-Administrator', +'L_PLUGINS_TITLE' => 'Pluginverwaltung', +'L_PLUGINS_VERSION' => 'Version', +'L_PLUGINS_AUTHOR' => 'Autor', +'L_PLUGINS_ACTIVATE' => 'Aktivieren', +'L_PLUGINS_DEACTIVATE' => 'Deaktivieren', +'L_PLUGINS_DELETE' => 'Löschen', +'L_PLUGINS_DELETE_ERROR' => 'Löschen fehlgeschlagen', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Löschen war erfolgreich', +'L_PLUGINS_CONFIG' => 'Konfiguration', +'L_PLUGINS_CONFIG_TITLE' => 'Pluginkonfiguration', +'L_PLUGINS_HELP' => 'Hilfe', +'L_PLUGINS_HELP_TITLE' => 'Pluginshilfe aufrufen', +'L_PLUGINS_REQUIREMENTS' => 'Vorraussetzungen', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Vorausgesetzte Plugins (installiert und aktiviert), damit dieses Plugin verwendet werden kann', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Kein', +'L_PLUGINS_ALPHA_SORT' => 'Alphabetisch sortieren Plugins', +'L_PLUGINS_LOADING_SORT' => 'Geladen, um', +'L_PLUGINS_ACTION' => 'Aktion', +'L_PLUGINS_APPLY_BUTTON' => 'Ändern Sie die Liste der Plugins', +'L_PLUGINS_ACTIVE_LIST' => 'Aktive plugins', +'L_PLUGINS_INACTIVE_LIST' => 'Inaktive plugins', +'L_PROFIL_EDIT_TITLE' => 'Benutzerprofil bearbeiten', +'L_PROFIL' => 'Profil', +'L_PROFIL_LOGIN' => 'Login', +'L_PROFIL_USER' => 'Benutzername', +'L_PROFIL_MAIL' => 'E-Mail-Adresse', +'L_PROFIL_ADMIN_LANG' => 'Administration Sprache', +'L_PROFIL_INFOS' => 'Nachrichten', +'L_PROFIL_UPDATE' => 'Benutzerprofil speichern', +'L_PROFIL_CHANGE_PASSWORD' => 'Passwort ändern', +'L_PROFIL_PASSWORD' => 'Neues Passwort', +'L_PROFIL_CONFIRM_PASSWORD' => 'Neues Passwort wiederholen', +'L_PROFIL_UPDATE_PASSWORD' => 'Passwortänderung speichern', +'L_STATIC_BACK_TO_PAGE' => 'Zurück zur Liste', +'L_STATIC_UNKNOWN_PAGE' => 'Diese statische Seite existiert nicht oder nicht mehr!', +'L_STATIC_TITLE' => 'Quellcodes der statischen Seite editieren', +'L_STATIC_VIEW_PAGE' => 'Voransicht von', +'L_STATIC_ON_SITE' => 'im Frontend', +'L_STATIC_UPDATE' => 'Änderungen speichern', +'L_STATIC_TITLE_HTMLTAG' => 'Title-Tag Inhalte (optional)', +'L_STATIC_META_DESCRIPTION' => 'META Tag "description" - Inhalt für diese statische Seite (optional)', +'L_STATIC_META_KEYWORDS' => 'META Tag "keywords" - Inhalt für diese statische Seite (optional)', +'L_STATICS_PAGE_TITLE' => 'Statische Seiten erstellen/edtitieren', +'L_STATICS_ID' => 'ID', +'L_STATICS_GROUP' => 'Gruppe', +'L_STATICS_TITLE' => 'Titel', +'L_STATICS_URL' => 'URL', +'L_STATICS_ACTIVE' => 'Aktiv', +'L_STATICS_ORDER' => 'Sortierung', +'L_STATICS_MENU' => 'Menü', +'L_STATICS_ACTION' => 'Aktion', +'L_STATICS_TEMPLATE_FIELD' => 'Template', +'L_STATICS_PAGE_HOME' => 'Als Startseite', +'L_STATICS_HOME_PAGE' => 'Startseite', +'L_PAGE' => 'Seite', +'L_VIEW' => 'Ansehen', +'L_STATICS_SRC_TITLE' => 'Quellcode dieser Seite editieren', +'L_STATICS_SRC' => 'Ändern', +'L_STATICS_NEW_PAGE' => 'Neue Seite', +'L_STATICS_UPDATE' => 'Änderungen speichern', +'L_PROFIL_ADMIN' => 'Admin', +'L_PROFIL_MANAGER' => 'Manager', +'L_PROFIL_MODERATOR' => 'Moderator', +'L_PROFIL_EDITOR' => 'Redakteur', +'L_PROFIL_WRITER' => 'Autor', +'L_ADMIN' => '- Admin', +'L_LOGIN' => 'Angemeldet als ', +'L_ADMIN_LOGOUT' => 'Abmelden', +'L_ADMIN_LOGOUT_TITLE' => 'Administration beenden', +'L_BACK_TO_SITE' => 'Startseite', +'L_BACK_TO_SITE_TITLE' => 'Zurück zum startseite', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Zurück zum Blog', +'L_MENU_ARTICLES' => 'Artikel', +'L_MENU_ARTICLES_TITLE' => 'Artikelverwaltung', +'L_MENU_NEW_ARTICLES' => 'Neuer Artikel', +'L_MENU_NEW_ARTICLES_TITLE' => 'Neuer Artikel', +'L_MENU_STATICS_TITLE' => 'Statische Seiten Verwaltung', +'L_MENU_STATICS' => 'Statische Seiten', +'L_MENU_COMMENTS_TITLE' => 'Kommentarverwaltung', +'L_MENU_COMMENTS' => 'Kommentare', +'L_MENU_MEDIAS_TITLE' => 'Dateien hochladen und verwalten', +'L_MENU_MEDIAS' => 'Mediathek', +'L_MENU_CATEGORIES_TITLE' => 'Kategorieverwaltung', +'L_MENU_CATEGORIES' => 'Kategorien', +'L_MENU_CONFIG_TITLE' => 'PluXml Konfiguration', +'L_MENU_CONFIG' => 'Konfiguration', +'L_MENU_PROFIL_TITLE' => 'Mein Benutzerprofil verwalten', +'L_MENU_PROFIL' => 'Mein Profil', +'L_WARNING_INSTALLATION_FILE' => '

Die Datei install.php existiert noch im Grundverzeichnis von PluXml.
Sie sollten diese aus Sicherheitsgründen löschen.

', +'L_USER_UNKNOWN' => 'Unbekannter Benutzer', +'L_USER_LANG' => 'Spracher des Admins', +'L_USER_MAIL' => 'E-Mail-Adresse', +'L_USER_INFOS' => 'Nachrichten', +'L_USER_UPDATE' => 'Benutzer aktualisieren', +'L_USER_PAGE_TITLE' => 'Benutzeroptionen bearbeiten', +'L_USER_BACK_TO_PAGE' => 'Zurück zur Benutzerliste', +'L_MENU_CONFIG_BASE_TITLE' => 'PluXml Grundeinstellungen bearbeiten', +'L_MENU_CONFIG_BASE' => 'Grundeinstellungen', +'L_MENU_CONFIG_VIEW_TITLE' => 'PluXml Anzeigeoptionen bearbeiten', +'L_MENU_CONFIG_VIEW' => 'Anzeigeoptionen', +'L_MENU_CONFIG_USERS_TITLE' => 'PluXml Benutzerverwaltung', +'L_MENU_CONFIG_USERS' => 'Benutzer', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'PluXml Erweiterte Einstellungen bearbeiten', +'L_MENU_CONFIG_ADVANCED' => 'Erweiterte Einstellungen', +'L_MENU_CONFIG_INFOS_TITLE' => 'Sie haben Nachrichten von Ihrem PluXml', +'L_MENU_CONFIG_INFOS' => 'Nachrichten', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Plugins verwalten', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', +'L_ERR_URL_ALREADY_EXISTS' => 'Url bereits im Einsatz. Bitte ändern Sie den Wert des Feldes \'Url\'', + +); + +?> \ No newline at end of file diff --git a/src/core/lang/de/core.php b/src/core/lang/de/core.php new file mode 100644 index 0000000..19b0b45 --- /dev/null +++ b/src/core/lang/de/core.php @@ -0,0 +1,136 @@ + 'Deutsch', + +# common +'L_PLUXML_VERSION' => 'Pluxml Version', +'L_HOMEPAGE' => 'Homepage', +'L_UNCLASSIFIED' => 'Nicht kategorisiert', +'L_INFO_PHP_VERSION' => 'PHP Version', +'L_INFO_MAGIC_QUOTES' => '"magic quotes" Status', +'L_INFO_CHARSET' => 'Kodierung', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Der Hauptthema von PluXml konnte nicht gefunden werden.', +'L_ERR_FILE_NOTFOUND' => 'Die angeforderte Datei konnte von PluXml nicht gefunden werden.', +'L_ERR_PAGE_NOT_FOUND' => 'Seite nicht gefunden', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'jan', +'L_SHORT_FEBRUARY' => 'feb', +'L_SHORT_MARCH' => 'märz', +'L_SHORT_APRIL' => 'apr', +'L_SHORT_MAY' => 'mai', +'L_SHORT_JUNE' => 'juni', +'L_SHORT_JULY' => 'juli', +'L_SHORT_AUGUST' => 'aug', +'L_SHORT_SEPTEMBER' => 'sept', +'L_SHORT_OCTOBER' => 'okt', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dez', +'L_JANUARY' => 'Januar', +'L_FEBRUARY' => 'Februar', +'L_MARCH' => 'März', +'L_APRIL' => 'April', +'L_MAY' => 'Mai', +'L_JUNE' => 'Juni', +'L_JULY' => 'Juli', +'L_AUGUST' => 'August', +'L_SEPTEMBER' => 'September', +'L_OCTOBER' => 'Oktober', +'L_NOVEMBER' => 'November', +'L_DECEMBER' => 'Dezember', +'L_MONDAY' => 'Montag', +'L_TUESDAY' => 'Dienstag', +'L_WEDNESDAY' => 'Mittwoch', +'L_THURSDAY' => 'Donnerstag', +'L_FRIDAY' => 'Freitag', +'L_SATURDAY' => 'Samstag', +'L_SUNDAY' => 'Sonntag', + +# class.plx.capcha.php +'L_LAST' => 'letzte', +'L_FIRST' => 'erste', +'L_SECOND' => 'zweiste', +'L_THIRD' => 'dritte', +'L_FOURTH' => 'vierte', +'L_FIFTH' => 'fünfte', +'L_SIXTH' => 'sechste', +'L_SEVENTH' => 'siebte', +'L_EIGTH' => 'achte', +'L_NINTH' => 'neunte', +'L_TENTH' => 'zehnte', +'L_NTH' => 'te', +'L_CAPCHA_QUESTION' => 'Was ist der %s Buchstabe des Wortes %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s ist schreibbar', +'L_WRITE_NOT_ACCESS' => '%s ist nicht schreibbar', +'L_MODREWRITE_AVAILABLE' => 'mod_rewrite APACHE-modul ist verfügbar', +'L_MODREWRITE_NOT_AVAILABLE'=> 'mod_rewrite APACHE-Modul ist nicht verfügbar', +'L_LIBGD_INSTALLED' => 'GD Grafikbibliothek ist verfügbar', +'L_LIBGD_NOT_INSTALLED' => 'GD Grafikbibliothek ist nicht verfügbar', +'L_MAIL_AVAILABLE' => 'E-Mail versenden ist möglich', +'L_MAIL_NOT_AVAILABLE' => 'E-Mail versenden ist nicht möglich', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Die Datei "%sversion" wird für PluXml benötigt', +'L_ARTICLE_NO_TAG' => 'Es gibt keinen Artikel für dieses Schlagwort!', +'L_UNKNOWN_CATEGORY' => 'Diese Kategorie existiert nicht!', +'L_NO_ARTICLE_PAGE' => 'Es gibt keinen Artikel für diese Seite!', +'L_UNKNOWN_ARTICLE' => 'Dieser Artikel existiert nicht oder nicht mehr!', +'L_COM_IN_MODERATION' => 'Der Kommentar muss erst vom Administrator moderiert werden.', +'L_UNKNOWN_STATIC' => 'Diese Seite existiert nicht oder nicht mehr!', +'L_DOCUMENT_NOT_FOUND' => 'Das angeforderte Dokument kann nicht gefunden werden.', +'L_NEWCOMMENT_ERR' => 'Es gab einen Fehler beim Anlegen dieses Kommentars.', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Sie müssen alle Pflichtfelder ausfüllen', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Anti-SPAM Überprüfung fehlgeschlagen', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Datenkompression %s aktiviert', +'L_PAGETITLE_ARCHIVES' => 'Archive', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'keine Kategorie', +'L_CATEGORY' => 'Kategorie', +'L_CATEGORIES' => 'Kategorien', +'L_NO_ARTICLE' => 'keine Artikel', +'L_ARTICLE' => 'Artikel', +'L_ARTICLES' => 'Artikel', +'L_ARTAUTHOR_UNKNOWN' => 'unbekannt', +'L_ARTTAGS_NONE' => 'kein', +'L_ARTCHAPO' => 'Den Artikel #art_title lesen', +'L_ARTFEED_RSS_CATEGORY' => 'Artikel-Feed (RSS) dieser Kategorie', +'L_ARTFEED_RSS_TAG' => 'Artikel-Feed (RSS) dieser Tag', +'L_ARTFEED_RSS' => 'Artikel-Feed (RSS)', +'L_NO_COMMENT' => 'keine Kommentare', +'L_COMMENT' => 'Kommentar', +'L_COMMENTS' => 'Kommentare', +'L_COMFEED_RSS_ARTICLE' => 'Kommentare-Feed (RSS) dieses Artikels', +'L_COMFEED_RSS' => 'Kommentare-Feed (RSS)', +'L_STATICCONTENT_INPROCESS' => 'Diese Seite wird gerade bearbeitet', +'L_SAID' => 'sagte', + +'L_PAGINATION_FIRST_TITLE' => 'Zur ersten Seite', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Letzte Seite', +'L_PAGINATION_PREVIOUS' => 'Letzte', +'L_PAGINATION_NEXT_TITLE' => 'Nächste Seite', +'L_PAGINATION_NEXT' => 'Nächste', +'L_PAGINATION_LAST_TITLE' => 'Zur letzten Seite', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'Seite %s auf %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Private URLs wurden in der Administration nicht konfiguriert!', +'L_FEED_COMMENTS' => 'Kommentare', +'L_FEED_ONLINE_COMMENTS' => 'Online Kommentare', +'L_FEED_OFFLINE_COMMENTS' => 'Offline Kommentaire', +'L_FEED_WRITTEN_BY' => 'Geschrieben von', + +); +?> \ No newline at end of file diff --git a/src/core/lang/de/install.php b/src/core/lang/de/install.php new file mode 100644 index 0000000..bd95115 --- /dev/null +++ b/src/core/lang/de/install.php @@ -0,0 +1,32 @@ + 'Installation', +'L_WRONG_PHP_VERSION' => 'PluXml benötigt mindestens PHP 5 um zu funktionieren.', +'L_SELECT_LANG' => 'Wählen Sie Ihre Sprache', +'L_INPUT_CHANGE' => 'Ändern', +'L_DEFAULT_CATEGORY_TITLE' => 'Kategorie 1', +'L_DEFAULT_CATEGORY_URL' => 'kategorie-1', +'L_DEFAULT_STATIC_TITLE' => 'Statische 1', +'L_DEFAULT_STATIC_URL' => 'statische-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Erster Artikel', +'L_DEFAULT_ARTICLE_URL' => 'erster-artikel', +'L_DEFAULT_COMMENT_CONTENT' => 'Das ist der erste Kommentar!', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml ist bereits installiert!', +'L_ERR_MISSING_USER' => 'Geben Sie einen Namen für den Administrator ein!', +'L_ERR_MISSING_LOGIN' => 'Geben Sie einen Benutzername ein!', +'L_ERR_MISSING_PASSWORD' => 'Geben Sie ein Passwort ein!', +'L_ERR_PASSWORD_CONFIRMATION' => 'Die Passwörter sind nicht identlich!', +'L_PLUXML_INSTALLATION' => 'Installation von PluXml', +'L_SITE_DESCRIPTION' => 'Blog oder CMS basierend auf Xml!', +'L_VERSION' => 'Version', +'L_USERNAME' => 'Name des Administrators', +'L_LOGIN' => 'Benutzername', +'L_PASSWORD' => 'Passwort', +'L_PASSWORD_CONFIRMATION' => 'Passwort wiederholen', +'L_INPUT_INSTALL' => 'Installieren', +'L_TIMEZONE' => 'Zeitzone', +); +?> \ No newline at end of file diff --git a/src/core/lang/de/update.php b/src/core/lang/de/update.php new file mode 100644 index 0000000..e4a598a --- /dev/null +++ b/src/core/lang/de/update.php @@ -0,0 +1,58 @@ + 'Daten erfolgreich gespeichert', +'L_UPDATE_TITLE' => 'Aktualisierung PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml braucht PHP 5 am wenigsten um zu funktionieren.', + +'L_SELECT_LANG' => 'Wählen Sie Ihre Sprache', +'L_INPUT_CHANGE' => 'Ändern', + +'L_UPDATE_UPTODATE' => 'Ihre PluXml ist schön aktualisiert.', +'L_UPDATE_NOT_AVAILABLE' => 'Es gibt keine Aktulisierung.', +'L_UPDATE_BACK' => 'Zurück zur Website', +'L_UPDATE_WARNING1' => 'Ihr altes PluXml wird aktualisiert.', +'L_UPDATE_SELECT_VERSION' => 'Wählen Sie Ihre alte PluXml Version.', +'L_UPDATE_WARNING2' => 'Wenn Ihre alte PluXml Version präsent nicht ist, ist sie zu alt.
Wir empfehlen Ihnen die neuste Version von PluXml laden un eine neue Anlage machen.', +'L_UPDATE_WARNING3' => 'Achtung vor der Aktualisierung, speichern Sie die Datei "data"', +'L_UPDATE_START' => 'Anfangen die Aktualisierung', + +'L_UPDATE_ENDED' => 'Aktualisierung der Version %s beendet.', +'L_UPDATE_INPROGRESS' => 'Updating version', +'L_UPDATE_ERROR' => 'Ein Fehler der Aktualisierung ist aufgetreten.', +'L_UPDATE_SUCCESSFUL' => 'Alle Aktualisierungen sind erflogreich getan worden !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Aktualisierung der Datei parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Dateierstellung tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Fehler der Dateierstellung tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Dateierstellung thème', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Fehler der Dateierstellung', +'L_UPDATE_ARTICLES_CONVERSION' => 'Artikelkonvertierung', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Fehler der Dateiverarbeitung', +'L_UPDATE_STATICS_MIGRATION' => 'Dateiverarbeitung der statischen Seiten', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Fehler der Dateiverarbeitung der statischen Seiten', +'L_UPDATE_CREATE_USERS_FILE' => 'Dateierstellung der Benutzer', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Fehler der Dateierstellung der Benutzer', +'L_UPDATE_USERS_MIGRATION' => 'Dateiverarbeitung der Benutzer', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Fehler der Dateiverarbeitung der Benutzer', +'L_UPDATE_ERR_NO_USERS' => 'Es gibt keine Benutzer', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Dateierstellung .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Fehler der Dateierstellung .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Aktualisieren Sie die Datei .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Fehler beim Aktualisieren der Datei .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Dateiverarbeitung der Kategorien', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Fehler der Dateiverarbeitung der Kategorien', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Dateierstellung plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Fehler der Dateierstellung plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Dateilöschung core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE' => 'Fehler der Dateilöschung core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Dateilöschung core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Fehler der Dateilöschung core/plxtoolbar/', +'L_UPDATE_FILE' => 'Update Datei', +'L_UPDATE_ERR_FILE' => 'Fehler während des Update-Datei', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migration von Dateien aus Plugin-Parameter-Einstellungen in der Konfigurationsdatei', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Aktualisierung der Datei plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lang/en/admin.php b/src/core/lang/en/admin.php new file mode 100644 index 0000000..ce0812c --- /dev/null +++ b/src/core/lang/en/admin.php @@ -0,0 +1,462 @@ + 'Unknown error', +'L_CONFIRM_DELETE' => 'Confirm the deletion?', +'L_SAVE_FILE' => 'Save the file', +'L_SAVE_FILE_SUCCESSFULLY' => 'File saved successfully', +'L_SAVE_FILE_ERROR' => 'Error while saving file', +'L_SAVE_SUCCESSFUL' => 'Data was succesfully saved', +'L_SAVE_ERR' => 'Error while saving data', +'L_NO_ENTRY' => 'No entry', +'L_ERR_USER_EMPTY' => 'Please enter a username', +'L_ERR_PASSWORD_EMPTY' => 'Please enter a password', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Wrong or missing password', +'L_ERR_INVALID_EMAIL' => 'Invalid email adress', +'L_ERR_INVALID_SITE' => 'Wrong site url', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Wrong article id !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'new-category', +'L_DEFAULT_NEW_STATIC_URL' => 'new-page', +'L_DEFAULT_NEW_ARTICLE_URL' => 'new-article', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Post was succesfully created', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Post was succesfully updated', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Post was succesfully deleted', +'L_ARTICLE_SAVE_ERR' => 'Post couldn\'t be saved', +'L_ARTICLE_DELETE_ERR' => 'An error occured : post couldn\'t be deleted', +'L_ERR_UNKNOWN_COMMENT' => 'Selected comment no longer exists', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Comment was succesfully saved', +'L_COMMENT_UPDATE_ERR' => 'Error updating comment', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Comment was sucessfully deleted', +'L_COMMENT_DELETE_ERR' => 'An error occured in deletion of the comment', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Comment was sucessfully validated', +'L_COMMENT_VALIDATE_ERR' => 'An error occured in the validation', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Sucessfull moderation', +'L_COMMENT_MODERATE_ERR' => 'An error occured in the moderation', +'L_COMMENT_WRITTEN_BY' => 'Written by', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Coul\'t create the media folder for connected user', +'L_PLXMEDIAS_ROOT' => 'root', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Could\'t create folder', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Folder succesfully created', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'This folder already exists', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Error during the folder deletion', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Folder sucessfully deleted', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'The file type is not allowed', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'A file\'s size is bigger than', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Error while sending a file', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'File sent successfully', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Error while uploading files', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Files sent successfully', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Successfully removed files', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Error while deleting a file', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'File successfully deleted', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Error while deleting the file', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Files sucessfully moved', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'File sucessfully moved', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'An error occured while moving the files', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'An error occured while moving the file', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Move', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Error while creating the thumbnail', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Error creating thumbnail', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Thumbnail successfully created', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Thumbnails created successfully', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'New article', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Invalid publishing date.', +'L_ERR_UNKNOWN_ARTICLE' => 'The article doesn\'t exist', +'L_ERR_FORBIDDEN_ARTICLE' => 'You don\'t have permission to access this article!', +'L_BACK_TO_ARTICLES' => 'Back to articles', +'L_ARTICLE_EDITING' => 'Article editing', +'L_ARTICLE_TITLE' => 'Title', +'L_ARTICLE_LIST_AUTHORS' => 'Author', +'L_HEADLINE_FIELD' => 'Headline (optional)', +'L_CONTENT_FIELD' => 'Content', +'L_LINK_FIELD' => 'Link to article', +'L_LINK_ACCESS' => 'Go to article', +'L_LINK_VIEW' => 'view', +'L_ARTICLE_STATUS' => 'Status', +'L_DRAFT' => 'Draft', +'L_PUBLISHED' => 'Published', +'L_AWAITING' => 'Awaiting validation', +'L_ARTICLE_DATE' => 'Article date', +'L_NOW' => 'now', +'L_ARTICLE_CATEGORIES' => 'Categories', +'L_CATEGORY_HOME_PAGE' => 'Homepage', +'L_NEW_CATEGORY' => 'New category', +'L_ARTICLE_TAGS_FIELD' => 'Tags', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separate tags with commas', +'L_ARTICLE_TOGGLER_TITLE' => 'Tag list', +'L_NO_TAG' => 'No tag', +'L_ALLOW_COMMENTS' => 'Allow comments', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'URL field auto-fills when the article is created', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Manage comments', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Manage comments on this article', +'L_ARTICLE_NEW_COMMENT' => 'Write a comment', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Write a comment about this article', +'L_ARTICLE_DELETE_CONFIRM' => 'Delete this article?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Preview', +'L_ARTICLE_DRAFT_BUTTON' => 'Save draft', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publish', +'L_ARTICLE_MODERATE_BUTTON' => 'Submit for validation', +'L_ARTICLE_OFFLINE_BUTTON' => 'Switch offline', +'L_ARTICLE_UPDATE_BUTTON' => 'Save', +'L_CATEGORY_ADD_BUTTON' => 'Add', +'L_ARTICLE_META_DESCRIPTION' => '"Description" Meta tag content (optional)', +'L_ARTICLE_META_KEYWORDS' => '"Keywords" Meta tag content (optional)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Title tag contents (optional)', +'L_ARTICLE_CHAPO_HIDE' => 'hide', +'L_ARTICLE_CHAPO_DISPLAY' => 'display', +'L_AUTH_PAGE_TITLE' => 'Authentication page', +'L_LOGOUT_SUCCESSFUL' => 'Logout successful', +'L_LOGIN_PAGE' => 'Login to administration', +'L_AUTH_LOGIN_FIELD' => 'Login', +'L_AUTH_PASSWORD_FIELD' => 'Password', +'L_SUBMIT_BUTTON' => 'Submit', +'L_ERR_WRONG_PASSWORD' => 'Incorrect login or password', +'L_POWERED_BY' => 'Powered by PluXml', +'L_CAT_TITLE' => 'Category Manager', +'L_CAT_LIST_ID' => 'ID', +'L_CAT_LIST_ACTIVE' => 'Active', +'L_CAT_LIST_NAME' => 'Category name', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Article sorting', +'L_CAT_LIST_BYPAGE' => 'Articles/page', +'L_CAT_LIST_ORDER' => 'Rank', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Category', +'L_DISPLAY' => 'Display', +'L_HIDE' => 'Hide', +'L_OPTIONS' => 'Options', +'L_SORT_ASCENDING_DATE' => 'ascending date', +'L_SORT_DESCENDING_DATE' => 'descending date', +'L_SORT_ALPHABETICAL' => 'alphabetical', +'L_OK' => 'Ok', +'L_YES' => 'Yes', +'L_NO' => 'No', +'L_NONE1' => 'none', +'L_NONE2' => 'none', +'L_FOR_SELECTION' => 'Selected items...', +'L_DELETE' => 'Delete', +'L_CAT_APPLY_BUTTON' => 'Change categories list', +'L_CAT_UNKNOWN' => 'Unknown category', +'L_EDITCAT_PAGE_TITLE' => 'Edit category options', +'L_EDITCAT_DESCRIPTION' => 'Description', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Show articles on the homepage', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Back to categories', +'L_EDITCAT_UPDATE' => 'Update this category', +'L_EDITCAT_TITLE_HTMLTAG' => 'Title tag contents (optional)', +'L_EDITCAT_META_DESCRIPTION' => '"Description" Meta tag content (optional)', +'L_EDITCAT_META_KEYWORDS' => '"Keywords" Meta tag content (optional)', +'L_COMMENT_ORPHAN' => 'no article', +'L_COMMENT_ORPHAN_STATUS' => 'not displayed (we advise you to delete this comment)', +'L_COMMENT_ARTICLE_LINKED' => 'Article', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Article linked to this comment', +'L_COMMENT_OFFLINE' => 'offline', +'L_COMMENT_ONLINE' => 'online', +'L_COMMENT_ONLINE_TITLE' => 'Published comments', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Back to this article\'s comments', +'L_BACK_TO_COMMENTS' => 'Back to comments', +'L_COMMENT_EDITING' => 'Comment edit', +'L_COMMENT_AUTHOR_FIELD' => 'Author', +'L_COMMENT_TYPE_FIELD' => 'Comment type', +'L_COMMENT_DATE_FIELD' => 'Date and time of publication', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Status', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Linked article', +'L_COMMENT_ARTICLE_FIELD' => 'Comments', +'L_COMMENT_DELETE_CONFIRM' => 'Delete this comment?', +'L_COMMENT_PUBLISH_BUTTON' => 'Confirm publication', +'L_COMMENT_OFFLINE_BUTTON' => 'Switch offline', +'L_COMMENT_ANSWER_BUTTON' => 'Reply to this comment', +'L_COMMENT_UPDATE_BUTTON' => 'Update', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'The comment you are trying to reply to no longer exists!', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Comment is offline, you can\'t answer it!', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'The article doesn\'t exist and you can\'t comment it!', +'L_ERR_CREATING_COMMENT' => 'An error occured while creating the comment', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Comment succesfully created', +'L_CREATE_NEW_COMMENT' => 'Write a comment', +'L_COMMENT_SAVE_BUTTON' => 'Save', +'L_ARTICLE_COMMENTS_LIST' => 'Comments for this article (from most recent to the oldest)', +'L_COMMENT_ANSWER_TITLE' => 'Reply to this comment', +'L_COMMENT_ANSWER' => 'Answer', +'L_COMMENTS_ARTICLE_SCOPE' => 'article', +'L_COMMENTS_GLOBAL_SCOPE' => 'entire site', +'L_COMMENTS_OFFLINE_LIST' => 'Comments awaiting moderation', +'L_COMMENTS_LIST_DATE' => 'Date', +'L_COMMENTS_LIST_AUTHOR' => 'Author', +'L_COMMENTS_LIST_MESSAGE' => 'Message', +'L_COMMENTS_LIST_ACTION' => 'Action', +'L_COMMENT_EDIT' => 'Edit', +'L_COMMENT_EDIT_TITLE' => 'Edit this comment', +'L_COMMENT_DELETE' => 'Delete', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Rss feed for offline comments', +'L_COMMENT_OFFLINE_FEEDS' => 'Offline comments', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Rss feed for online comments', +'L_COMMENT_ONLINE_FEEDS' => 'Online comments', +'L_COMMENTS_PRIVATE_FEEDS' => 'Private feeds', +'L_COMMENTS_ONLINE_LIST' => 'List of published reviews', +'L_COMMENTS_ALL_LIST' => 'Comments List', +'L_COMMENT_SET_ONLINE' => 'Set online', +'L_COMMENT_SET_OFFLINE' => 'Set Offline', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Write a new comment for this article', +'L_COMMENT_NEW_COMMENT' => 'Write a new comment', +'L_ARTICLES_FILTER_BUTTON' => 'Filter', +'L_CATEGORIES_TABLE' => 'Categories', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Spectific categories', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'All articles', +'L_ARTICLES_LIST' => 'Article list', +'L_ARTICLE_LIST_DATE' => 'Date', +'L_ARTICLE_LIST_TITLE' => 'Title', +'L_ARTICLE_LIST_CATEGORIES' => 'Category', +'L_ARTICLE_LIST_NBCOMS' => 'N° coms', +'L_ARTICLE_LIST_AUTHOR' => 'Author', +'L_ARTICLE_LIST_ACTION' => 'Action', +'L_CATEGORY_HOME' => 'Home', +'L_CATEGORY_DRAFT' => 'Draft', +'L_ARTICLE_VIEW' => 'View', +'L_ARTICLE_VIEW_TITLE' => 'View this article online', +'L_ARTICLE_EDIT' => 'Edit', +'L_ARTICLE_EDIT_TITLE' => 'Edit this article', +'L_NEW_COMMENTS_TITLE' => 'Comments awaiting moderation', +'L_VALIDATED_COMMENTS_TITLE' => 'Published comments', +'L_NO_ARTICLE' => 'No article', +'L_ARTICLES_SEARCH_BUTTON' => 'Search', +'L_ARTICLES_ALL_CATEGORIES' => 'All Categories ...', +'L_ALL' => 'All', +'L_ALL_PUBLISHED' => 'Published', +'L_ALL_DRAFTS' => 'Drafts', +'L_ALL_AWAITING_MODERATION' => 'Awaiting validation', +'L_MEDIAS_DELETE_FOLDER' => 'Delete folder', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Delete folder and its content ?', +'L_MEDIAS_NO_FILE' => 'No file', +'L_MEDIAS_FILENAME' => 'File name', +'L_MEDIAS_ADD_FILE' => 'Add file', +'L_MEDIAS_BACK' => 'Back', +'L_MEDIAS_TITLE' => 'Media manager', +'L_MEDIAS_IMAGES' => 'Pictures', +'L_MEDIAS_DOCUMENTS' => 'Documents', +'L_MEDIAS_CREATE_FOLDER' => 'Create folder', +'L_MEDIAS_SUBMIT_FILE' => 'Send', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Maximum file size', +'L_MEDIAS_DIRECTORY' => 'Location', +'L_MEDIAS_FOLDER' => 'File', +'L_MEDIAS_NEW_FOLDER' => 'New Folder', +'L_MEDIAS_FILESIZE' => 'Size', +'L_MEDIAS_DATE' => 'Date', +'L_MEDIAS_DIMENSIONS' => 'Dimensions', +'L_MEDIAS_RESIZE' => 'Resize Images', +'L_MEDIAS_RESIZE_NO' => 'Original Size', +'L_MEDIAS_THUMBS' => 'Create thumbnails', +'L_MEDIAS_THUMBS_NONE' => 'No thumbnail', +'L_MEDIAS_MODIFY' => 'Edit', +'L_MEDIAS_THUMB' => 'Thumbnail', +'L_MEDIAS_EXTENSION' => 'Extension', +'L_MEDIAS_ADD' => 'Add', +'L_MEDIAS_ALIGNMENT' => 'Alignment', +'L_MEDIAS_ALIGN_NONE' => 'None', +'L_MEDIAS_ALIGN_LEFT' => 'Left', +'L_MEDIAS_ALIGN_CENTER' => 'Center', +'L_MEDIAS_ALIGN_RIGHT' => 'Right', +'L_MEDIAS_RECREATE_THUMB' => 'Recreate thumbnail', +'L_CONFIG_VIEW_FIELD' => 'Display preferences', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Skin', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Edit theme files', +'L_CONFIG_VIEW_FILES_EDIT' => 'Edit theme files', +'L_CONFIG_VIEW_SORT' => 'Sorting articles', +'L_CONFIG_VIEW_BYPAGE' => 'Articles per page', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Articles per page in archives', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Articles per page in administration', +'L_CONFIG_VIEW_SORT_COMS' => 'Sorting comments', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Comments per page in administraton', +'L_CONFIG_VIEW_IMAGES' => 'Image Size (width x height)', +'L_CONFIG_VIEW_THUMBS' => 'Thumbnails size (width x height)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Use a static page as Homepage', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Warning: this page is inactive', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Download themes at ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'N° of Articles or comments in the Rss feed', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Only display headlines in the Rss article feed', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Headline field is empty, content is displayed instead', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Signature used in the end of every Rss feed\'s article', +'L_CONFIG_VIEW_UPDATE' => 'Save display settings', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Display categories without article', +'L_CONFIG_HOMETEMPLATE' => 'Template of the homepage', +'L_CONFIG_ADVANCED_DESC' => 'Advanced configuration', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Enable url rewriting', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Warning: a .htaccess file already exists at your PluXml\'s installation root. Activating url rewriting will overwrite this file', +'L_CONFIG_ADVANCED_GZIP' => 'Enable GZIP compression', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Makes it possible to compress pages to save bandwidth, but could increase CPU usage', +'L_CONFIG_ADVANCED_CAPCHA' => 'Enable anti spam-capcha', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Administration key (private URLs)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Leave this field empty to rebuild key', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Use separate Images and Documents folders for every user', +'L_HELP_SLASH_END' => 'Don\'t forget the slash at the end', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Images (folder) location', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Documents (folder) location', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Articles (folder) location', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Comments (folder) location', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Static page (folder) location', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Themes (folder) location', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Plugins (folder) location', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Configuration files (folder) location', +'L_CONFIG_ADVANCED_UPDATE' => 'Save advanced configuration', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Basic configuration', +'L_CONFIG_BASE_SITE_TITLE' => 'Site title', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Subtitle / Site description', +'L_CONFIG_BASE_URL_HELP' => 'Don\'t forget the slash at the end', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Default site language', +'L_CONFIG_BASE_TIMEZONE' => 'Time Zone', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Allow comments', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Moderate comments when created', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Moderate articles for Editor and Publisher profiles', +'L_CONFIG_BASE_UPDATE' => 'Save basic configuration', +'L_CONFIG_META_DESCRIPTION' => 'Content of "description" meta tag (optional)', +'L_CONFIG_META_KEYWORDS' => 'Content of "keywords" meta tag (optional)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'There is no such theme!', +'L_CONFIG_EDITTPL_TITLE' => 'Theme edit', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Choose file to edit:', +'L_CONFIG_EDITTPL_LOAD' => 'Load', +'L_CONFIG_INFOS_TITLE' => 'Information about PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Information about your PluXml installation, can be useful to repair it if needed.', +'L_CONFIG_INFOS_NB_CATS' => 'N° of categories :', +'L_CONFIG_INFOS_NB_STATICS' => 'N° of static pages :', +'L_CONFIG_INFOS_WRITER' => 'N° of users in session :', +'L_PLUXML_CHECK_VERSION' => 'Checking version number on the official PluXml.org site', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Can\'t check for updates as long as \'allow_url_fopen\' is disabled on this system', +'L_PLUXML_UPDATE_ERR' => 'Update check failed for an unknown reason', +'L_PLUXML_UPTODATE' => 'You are using PluXml\'s last version', +'L_PLUXML_UPDATE_AVAILABLE' => 'A new PluXml version is available ! You can download it from', +'L_CONFIG_USERS_TITLE' => 'Manage users', +'L_CONFIG_USER' => 'User', +'L_CONFIG_USERS_ID' => 'User ID', +'L_CONFIG_USERS_ACTIVE' => 'Active', +'L_CONFIG_USERS_ACTION' => 'Action', +'L_CONFIG_USERS_NEW' => 'New user', +'L_CONFIG_USERS_UPDATE' => 'Modify the users\' list', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Login ID already used', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Username already in use', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Category name already used', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Title already used', +'L_BACK_TO_PLUGINS' => 'Back to plugins\' page', +'L_NO_PLUGIN' => 'No plugin', +'L_PLUGIN_NO_CONFIG' => 'Not configured plugin', +'L_PLUGINS_CSS' => 'Css code', +'L_PLUGINS_CSS_TITLE' => 'Edit the css code of the plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Css file content site', +'L_CONTENT_FIELD_BACKEND' => 'Css file content administrator', +'L_PLUGINS_TITLE' => 'Manage plugins', +'L_PLUGINS_VERSION' => 'Version', +'L_PLUGINS_AUTHOR' => 'Author', +'L_PLUGINS_ACTIVATE' => 'Enable', +'L_PLUGINS_DEACTIVATE' => 'Disable', +'L_PLUGINS_DELETE' => 'Delete', +'L_PLUGINS_DELETE_ERROR' => 'An error occured while deleting', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Successfull deletion', +'L_PLUGINS_CONFIG' => 'Configuration', +'L_PLUGINS_CONFIG_TITLE' => 'Plugin\'s configuration', +'L_PLUGINS_HELP' => 'Help', +'L_PLUGINS_HELP_TITLE' => 'See plugin\'s help', +'L_PLUGINS_REQUIREMENTS' => 'Requirements', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Available and active plugins to activate this one', +'L_PLUGINS_REQUIREMENTS_NONE' => 'None', +'L_PLUGINS_ALPHA_SORT' => 'Sort alphabetically plugins', +'L_PLUGINS_LOADING_SORT' => 'Loading order', +'L_PLUGINS_ACTION' => 'Action', +'L_PLUGINS_APPLY_BUTTON' => 'Modify the plugins list', +'L_PLUGINS_ACTIVE_LIST' => 'Active plugins', +'L_PLUGINS_INACTIVE_LIST' => 'Inactive plugins', +'L_PROFIL_EDIT_TITLE' => 'Profile edit', +'L_PROFIL' => 'Profile', +'L_PROFIL_LOGIN' => 'Login', +'L_PROFIL_USER' => 'Username', +'L_PROFIL_MAIL' => 'Email address', +'L_PROFIL_ADMIN_LANG' => 'Language for administration', +'L_PROFIL_INFOS' => 'Information', +'L_PROFIL_UPDATE' => 'Save profile', +'L_PROFIL_CHANGE_PASSWORD' => 'Change password', +'L_PROFIL_PASSWORD' => 'Password', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirm password', +'L_PROFIL_UPDATE_PASSWORD' => 'Change password', +'L_STATIC_BACK_TO_PAGE' => 'Back to static page list', +'L_STATIC_UNKNOWN_PAGE' => 'This static page doesn\'t exist!', +'L_STATIC_TITLE' => 'Edit static page\'s source code', +'L_STATIC_VIEW_PAGE' => 'View page', +'L_STATIC_ON_SITE' => 'on site', +'L_STATIC_UPDATE' => 'Save this page', +'L_STATIC_TITLE_HTMLTAG' => 'Title tag contents (optional)', +'L_STATIC_META_DESCRIPTION' => 'Meta tag "description" content for this static page (optional)', +'L_STATIC_META_KEYWORDS' => 'Meta tag "keywords" content for this static page (optional)', +'L_STATICS_PAGE_TITLE' => 'Create and edit static pages', +'L_STATICS_ID' => 'ID', +'L_STATICS_GROUP' => 'Group', +'L_STATICS_TITLE' => 'Title', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Active', +'L_STATICS_ORDER' => 'Rank', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Action', +'L_STATICS_TEMPLATE_FIELD' => 'Template', +'L_STATICS_PAGE_HOME' => 'Set as Homepage', +'L_STATICS_HOME_PAGE' => 'Homepage', +'L_PAGE' => 'Page', +'L_VIEW' => 'See', +'L_STATICS_SRC_TITLE' => 'Edit source code for this page', +'L_STATICS_SRC' => 'Edit', +'L_STATICS_NEW_PAGE' => 'New page', +'L_STATICS_UPDATE' => 'Modify static page list', +'L_PROFIL_ADMIN' => 'Administrator', +'L_PROFIL_MANAGER' => 'Manager', +'L_PROFIL_MODERATOR' => 'Moderator', +'L_PROFIL_EDITOR' => 'Editor', +'L_PROFIL_WRITER' => 'Writer', +'L_ADMIN' => '- Administration', +'L_LOGIN' => 'Connected as', +'L_ADMIN_LOGOUT' => 'Disconnect', +'L_ADMIN_LOGOUT_TITLE' => 'Leave administrator\'s session', +'L_BACK_TO_SITE' => 'Home', +'L_BACK_TO_SITE_TITLE' => 'Back to homepage', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Back to blog', +'L_MENU_ARTICLES' => 'Articles', +'L_MENU_ARTICLES_TITLE' => 'List or Edit Articles', +'L_MENU_NEW_ARTICLES' => 'New article', +'L_MENU_NEW_ARTICLES_TITLE' => 'New article', +'L_MENU_STATICS_TITLE' => 'List or Edit Static pages', +'L_MENU_STATICS' => 'Static pages', +'L_MENU_COMMENTS_TITLE' => 'List or Edit Comments', +'L_MENU_COMMENTS' => 'Comments', +'L_MENU_MEDIAS_TITLE' => 'Upload and insert media', +'L_MENU_MEDIAS' => 'Media', +'L_MENU_CATEGORIES_TITLE' => 'Create, manage, edit categories', +'L_MENU_CATEGORIES' => 'Categories', +'L_MENU_CONFIG_TITLE' => 'Configure PluXml', +'L_MENU_CONFIG' => 'Parameters', +'L_MENU_PROFIL_TITLE' => 'Manage your user profiles', +'L_MENU_PROFIL' => 'Profile', +'L_WARNING_INSTALLATION_FILE' => '

install.php file can still be found at your PluXml root.
For security reasons, it is strongly recommended to delete it.

', +'L_USER_UNKNOWN' => 'Unknown user', +'L_USER_LANG' => 'Language used in administration', +'L_USER_MAIL' => 'Email adress', +'L_USER_INFOS' => 'Information', +'L_USER_UPDATE' => 'Update this user', +'L_USER_PAGE_TITLE' => 'Edit user options', +'L_USER_BACK_TO_PAGE' => 'Back to users\' list', +'L_MENU_CONFIG_BASE_TITLE' => 'Edit basic PluXml configuration', +'L_MENU_CONFIG_BASE' => 'Basic configuration', +'L_MENU_CONFIG_VIEW_TITLE' => 'Change your PluXml\'s display settings', +'L_MENU_CONFIG_VIEW' => 'Display settings', +'L_MENU_CONFIG_USERS_TITLE' => 'Manage user accounts on your PluXml', +'L_MENU_CONFIG_USERS' => 'User accounts', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Edit advanced configuration on your PluXml', +'L_MENU_CONFIG_ADVANCED' => 'Advanced configuration', +'L_MENU_CONFIG_INFOS_TITLE' => 'Information about your PluXml', +'L_MENU_CONFIG_INFOS' => 'Information', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Manage plugins', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', +'L_ERR_URL_ALREADY_EXISTS' => 'Url already in use. Please change the value of the field \'Url\'', +); + +?> diff --git a/src/core/lang/en/core.php b/src/core/lang/en/core.php new file mode 100644 index 0000000..dd57b05 --- /dev/null +++ b/src/core/lang/en/core.php @@ -0,0 +1,136 @@ + 'English', + +# common +'L_PLUXML_VERSION' => 'PluXml version', +'L_HOMEPAGE' => 'Homepage', +'L_UNCLASSIFIED' => 'Uncategorized', +'L_INFO_PHP_VERSION' => 'PHP version', +'L_INFO_MAGIC_QUOTES' => 'State of "magic quotes"', +'L_INFO_CHARSET' => 'charset', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Main PluXml theme not found', +'L_ERR_FILE_NOTFOUND' => 'PluXml target file not found', +'L_ERR_PAGE_NOT_FOUND' => 'Page not found', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'jan', +'L_SHORT_FEBRUARY' => 'feb', +'L_SHORT_MARCH' => 'mar', +'L_SHORT_APRIL' => 'apr', +'L_SHORT_MAY' => 'may', +'L_SHORT_JUNE' => 'june', +'L_SHORT_JULY' => 'july', +'L_SHORT_AUGUST' => 'aug', +'L_SHORT_SEPTEMBER' => 'sept', +'L_SHORT_OCTOBER' => 'oct', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dec', +'L_JANUARY' => 'january', +'L_FEBRUARY' => 'february', +'L_MARCH' => 'march', +'L_APRIL' => 'april', +'L_MAY' => 'may', +'L_JUNE' => 'june', +'L_JULY' => 'july', +'L_AUGUST' => 'august', +'L_SEPTEMBER' => 'september', +'L_OCTOBER' => 'october', +'L_NOVEMBER' => 'november', +'L_DECEMBER' => 'december', +'L_MONDAY' => 'monday', +'L_TUESDAY' => 'tuesday', +'L_WEDNESDAY' => 'wednesday', +'L_THURSDAY' => 'thursday', +'L_FRIDAY' => 'friday', +'L_SATURDAY' => 'saturday', +'L_SUNDAY' => 'sunday', + +# class.plx.capcha.php +'L_LAST' => 'last', +'L_FIRST' => 'first', +'L_SECOND' => 'second', +'L_THIRD' => 'third', +'L_FOURTH' => 'fourth', +'L_FIFTH' => 'fifth', +'L_SIXTH' => 'sixth', +'L_SEVENTH' => 'seventh', +'L_EIGTH' => 'eighth', +'L_NINTH' => 'ninth', +'L_TENTH' => 'tenth', +'L_NTH' => 'nth', +'L_CAPCHA_QUESTION' => 'What is the %s letter of the word %s?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s has write access', +'L_WRITE_NOT_ACCESS' => '%s does not have write access or does not exist', +'L_MODREWRITE_AVAILABLE' => 'Apache URL Rewriting module mod_rewrite available', +'L_MODREWRITE_NOT_AVAILABLE' => 'Apache URL Rewriting module mod_rewrite unavailable', +'L_LIBGD_INSTALLED' => 'GD library installed', +'L_LIBGD_NOT_INSTALLED' => 'GD library not installed', +'L_MAIL_AVAILABLE' => 'Mail sending function available', +'L_MAIL_NOT_AVAILABLE' => 'Mail sending function unavailable', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'File "%sversion" is required by PluXml', +'L_ARTICLE_NO_TAG' => 'No article has been found for this tag!', +'L_UNKNOWN_CATEGORY' => 'This category does not exist!!', +'L_NO_ARTICLE_PAGE' => 'No article has been found for this page!', +'L_UNKNOWN_ARTICLE' => 'This article does not exist or does not exist anymore!', +'L_COM_IN_MODERATION' => 'The comment is being reviewed by this site\'s administrator', +'L_UNKNOWN_STATIC' => 'This page does not exist or does not exist anymore!', +'L_DOCUMENT_NOT_FOUND' => 'Document not found', +'L_NEWCOMMENT_ERR' => 'An error occurred during comment\'s publication', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Please fill all the required fields', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Antispam verification failed', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compression %s activated', +'L_PAGETITLE_ARCHIVES' => 'Archives', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'no categorie', +'L_CATEGORY' => 'category', +'L_CATEGORIES' => 'categories', +'L_NO_ARTICLE' => 'no article', +'L_ARTICLE' => 'article', +'L_ARTICLES' => 'articles', +'L_ARTAUTHOR_UNKNOWN' => 'unknown', +'L_ARTTAGS_NONE' => 'none', +'L_ARTCHAPO' => 'Read more #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Rss feed of the category', +'L_ARTFEED_RSS_TAG' => 'Rss feed of the tag', +'L_ARTFEED_RSS' => 'Rss feed of the articles', +'L_NO_COMMENT' => 'no comments', +'L_COMMENT' => 'comment', +'L_COMMENTS' => 'comments', +'L_COMFEED_RSS_ARTICLE' => 'Rss feed of the article\'s comments', +'L_COMFEED_RSS' => 'Rss feed of comments', +'L_STATICCONTENT_INPROCESS' => 'This page is currently being edited', +'L_SAID' => 'said', + +'L_PAGINATION_FIRST_TITLE' => 'Go to first page', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Previous page', +'L_PAGINATION_PREVIOUS' => 'previous', +'L_PAGINATION_NEXT_TITLE' => 'Next page', +'L_PAGINATION_NEXT' => 'next', +'L_PAGINATION_LAST_TITLE' => 'Go to last page', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'page %s of %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Private URLs have not been initialized in your administration settings!', +'L_FEED_COMMENTS' => 'Comments', +'L_FEED_ONLINE_COMMENTS' => 'Online comments', +'L_FEED_OFFLINE_COMMENTS' => 'Offline comments', +'L_FEED_WRITTEN_BY' => 'Written by', + +); +?> \ No newline at end of file diff --git a/src/core/lang/en/install.php b/src/core/lang/en/install.php new file mode 100644 index 0000000..87da10a --- /dev/null +++ b/src/core/lang/en/install.php @@ -0,0 +1,32 @@ + 'Installation', +'L_WRONG_PHP_VERSION' => 'PluXml requires PHP 5 or higher', +'L_SELECT_LANG' => 'Choose your language', +'L_INPUT_CHANGE' => 'Change', +'L_DEFAULT_CATEGORY_TITLE' => 'Category 1', +'L_DEFAULT_CATEGORY_URL' => 'caregory-1', +'L_DEFAULT_STATIC_TITLE' => 'Static 1', +'L_DEFAULT_STATIC_URL' => 'static-1', +'L_DEFAULT_ARTICLE_TITLE' => 'First article', +'L_DEFAULT_ARTICLE_URL' => 'first-article', +'L_DEFAULT_COMMENT_CONTENT' => 'This is a first comment !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml is already set up !', +'L_ERR_MISSING_USER' => 'Please fill in the contributor\'s field !', +'L_ERR_MISSING_LOGIN' => 'Please fill the login field !', +'L_ERR_MISSING_PASSWORD' => 'Please fill the password field !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Invalid password confirmation !', +'L_PLUXML_INSTALLATION' => 'PluXml installation', +'L_SITE_DESCRIPTION' => 'Blog or CMS, XML powered !', +'L_VERSION' => 'version', +'L_USERNAME' => 'Admin username', +'L_LOGIN' => 'Admin login', +'L_PASSWORD' => 'Password', +'L_PASSWORD_CONFIRMATION' => 'Confirm password', +'L_INPUT_INSTALL' => 'Install', +'L_TIMEZONE' => 'Time Zone', +); +?> \ No newline at end of file diff --git a/src/core/lang/en/update.php b/src/core/lang/en/update.php new file mode 100644 index 0000000..ed7e06a --- /dev/null +++ b/src/core/lang/en/update.php @@ -0,0 +1,58 @@ + 'Data was successfully saved', +'L_UPDATE_TITLE' => 'PluXml update', +'L_WRONG_PHP_VERSION' => 'PluXml requires PHP 5 or higher.', + +'L_SELECT_LANG' => 'Choose your language', +'L_INPUT_CHANGE' => 'Change', + +'L_UPDATE_UPTODATE' => 'Your PluXml has already been updated.', +'L_UPDATE_NOT_AVAILABLE' => 'No update available.', +'L_UPDATE_BACK' => 'Back to Home page', +'L_UPDATE_WARNING1' => 'You are about to update your old version of PluXml', +'L_UPDATE_SELECT_VERSION' => 'Please choose the old PluXml version you wish to update.', +'L_UPDATE_WARNING2' => 'If you can\'t find the old version of PluXml in the list below, then there is no automatic procedure to update, because your version is too old.
We advise you to download the latest version of PluXml and to make a new installation.', +'L_UPDATE_WARNING3' => 'Warning: before you start updating, don\'t forget to save a copy of your site by copying the "data" folder', +'L_UPDATE_START' => 'Start the update', + +'L_UPDATE_ENDED' => 'Update complete', +'L_UPDATE_INPROGRESS' => 'Applying version updates', +'L_UPDATE_ERROR' => 'An error occured during the update.', +'L_UPDATE_SUCCESSFUL' => 'All the updates were successfully completed !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Updating parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Creating tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'An error occured while creating tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Creating the theme file', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'An error occured while creating the file', +'L_UPDATE_ARTICLES_CONVERSION' => 'Converting articles to new format', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Error in file processing', +'L_UPDATE_STATICS_MIGRATION' => 'Static page file migration', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'An error occured while migrating static pages file', +'L_UPDATE_CREATE_USERS_FILE' => 'Creating users\' file', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'An error occured while creating users file', +'L_UPDATE_USERS_MIGRATION' => 'Migrating users\' file', +'L_UPDATE_ERR_USERS_MIGRATION' => 'An error occured while migrating users file', +'L_UPDATE_ERR_NO_USERS' => 'No user in the file', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Creating .htaccess file', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'An error occured while creating .htaccess file', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Updating .htaccess file', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'An error occured while updating .htaccess file', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migrating category file', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'An error occured while migrating category file', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Creating plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'An error occured while creating plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Deleting core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'An error occured while deleting core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Deleting core/plxtoolbar/ folder', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'An error occured while deleting core/plxtoolbar/ folder', +'L_UPDATE_FILE' => 'Updating file', +'L_UPDATE_ERR_FILE' => 'An error occured while updating file', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migration of plugins parameter file in the configuration folder', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Updating plugins.xml', + +); +?> diff --git a/src/core/lang/es/admin.php b/src/core/lang/es/admin.php new file mode 100644 index 0000000..98824dd --- /dev/null +++ b/src/core/lang/es/admin.php @@ -0,0 +1,543 @@ + 'Error desconocido', +'L_CONFIRM_DELETE' => '¿Desea confirmar la eliminación?', +'L_SAVE_FILE' => 'Guardar el archivo', +'L_SAVE_FILE_SUCCESSFULLY' => 'Archivo guardado correctamente', +'L_SAVE_FILE_ERROR' => 'Error al guardar el archivo', + +# class.plx.admin.php + +'L_SAVE_SUCCESSFUL' => 'Se guradaron los datos correctamente', +'L_SAVE_ERR' => 'Error al guardar los datos', +'L_NO_ENTRY' => 'Acceso denegado', +'L_ERR_USER_EMPTY' => 'Introduzca un nombre de usuario', +'L_ERR_PASSWORD_EMPTY' => 'Introduzca una contraseña', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Contraseña incorrecta o vacía', +'L_ERR_INVALID_EMAIL' => 'Dirección de correo incorrecta', +'L_ERR_INVALID_SITE' => 'URL de sitio incorrecta', +'L_ERR_INVALID_ARTICLE_IDENT' => '¡Identificador de artículo incorrecto!', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nueva-categoria', +'L_DEFAULT_NEW_STATIC_URL' => 'nueva-pagina', +'L_DEFAULT_NEW_ARTICLE_URL' => 'nuevo-articulo', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Artículo creado correctamente', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Artículo actualizado correctamente', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Artículo eliminado correctamente', +'L_ARTICLE_SAVE_ERR' => 'Error al guardar el artículo', +'L_ARTICLE_DELETE_ERR' => 'Error al eliminar el artículo', +'L_ERR_UNKNOWN_COMMENT' => 'El comentario buscado no existe', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Comentario guardado correctamente', +'L_COMMENT_UPDATE_ERR' => 'Error al actualizar el comentario', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Comentario eliminado correctamente', +'L_COMMENT_DELETE_ERR' => 'Error al eliminar el comentario', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Comentario aprobado correctamente', +'L_COMMENT_VALIDATE_ERR' => 'Error al aprobar el comentario', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Comentario moderado correctamente', +'L_COMMENT_MODERATE_ERR' => 'Error al moderar el comentario', +'L_ERR_URL_ALREADY_EXISTS' => 'URL ya utilizada. Cambie el valor del campo «URL»', + +# class.plx.media.php + +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'No se pudo crear la carpeta de medios para el usuario', +'L_PLXMEDIAS_ROOT' => 'raíz', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Archivos eliminados correctamente', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Error al eliminar un archivo', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Archivo eliminado correctamente', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Error al eliminar el archivo', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Error al eliminar la carpeta', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Carpeta eliminada correctamente', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'No se pudo crear la carpeta', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Carpeta creada correctamente', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Esta carpeta ya existe', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'El tamaño de un archivo es superior a:', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'El tipo de archivo no está permitido', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Error al subir un archivo', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Archivo subido correctamente', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Error al subir archivos', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Archivos subidos correctamente', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Archivos movidos correctamente', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Archivo movido correctamente', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Error al mover los archivos', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Error al mover el archivo', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Mover', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Error al crear la miniatura', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Error al crear las miniaturas', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniatura creada correctamente', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Miniaturas creadas correctamente', + +# article.php + +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Nuevo artículo', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Fecha de publicación incorrecta.', +'L_ERR_UNKNOWN_ARTICLE' => 'El artículo solicitado no existe.', +'L_ERR_FORBIDDEN_ARTICLE' => 'No tiene los permisos necesarios para acceder a este artículo ', +'L_BACK_TO_ARTICLES' => 'Volver a la lista de artículos', +'L_ARTICLE_EDITING' => 'Modificar un artículo', +'L_ARTICLE_TITLE' => 'Título', +'L_ARTICLE_LIST_AUTHORS' => 'Autor', +'L_HEADLINE_FIELD' => 'Subtítulo (opcional)', +'L_CONTENT_FIELD' => 'Contenido', +'L_LINK_FIELD' => 'Enlace al artículo', +'L_LINK_ACCESS' => 'Ir al artículo', +'L_LINK_VIEW' => 'ver', +'L_ARTICLE_STATUS' => 'Estado', +'L_DRAFT' => 'Borrador', +'L_PUBLISHED' => 'Publicado', +'L_AWAITING' => 'En espera de validación', +'L_ARTICLE_DATE' => 'Fecha de publicación', +'L_NOW' => 'ahora', +'L_ARTICLE_CATEGORIES' => 'Categorías', +'L_CATEGORY_HOME_PAGE' => 'Página de inicio', +'L_NEW_CATEGORY' => 'Nueva categoría', # duplicated in categories.php section +'L_ARTICLE_TAGS_FIELD' => 'Etiquetas', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separe las etiquetas con comas', +'L_ARTICLE_TOGGLER_TITLE' => 'Lista de etiquetas', +'L_NO_TAG' => 'Ninguna etiqueta', +'L_ALLOW_COMMENTS' => 'Permitir comentarios', +'L_ARTICLE_URL_FIELD' => 'URL', +'L_ARTICLE_URL_FIELD_TITLE' => 'La URL se llena automáticamente durante la creación', +'L_ARTICLE_TEMPLATE_FIELD' => 'Plantilla', +'L_ARTICLE_MANAGE_COMMENTS' => 'Moderar los comentarios', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Moderar los comentarios de este artículo', +'L_ARTICLE_NEW_COMMENT' => 'Escribir un comentario', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Escribir un comentario sobre este artículo', +'L_ARTICLE_DELETE_CONFIRM' => '¿Eliminar este artículo?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Previsualización', +'L_ARTICLE_DRAFT_BUTTON' => 'Guardar borrador', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publicar', +'L_ARTICLE_MODERATE_BUTTON' => 'Agregar a cola de validación', +'L_ARTICLE_OFFLINE_BUTTON' => 'Poner invisible', +'L_ARTICLE_UPDATE_BUTTON' => 'Guardar', +'L_CATEGORY_ADD_BUTTON' => 'Agregar', +'L_ARTICLE_META_DESCRIPTION' => 'Contenido de la metaetiqueta de descripción («description», opcional)', +'L_ARTICLE_META_KEYWORDS' => 'Contenido de la metaetiqueta de palabras clave («keywords», opcional)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Contenido de la etiqueta de título («title», opcional)', +'L_ARTICLE_CHAPO_HIDE' => 'ocultar', +'L_ARTICLE_CHAPO_DISPLAY' => 'mostrar', + +# auth.php + +'L_AUTH_PAGE_TITLE' => 'Página de autenticación', +'L_LOGOUT_SUCCESSFUL' => 'Sesión finalizada correctamente correctamente', +'L_LOGIN_PAGE' => 'Iniciar sesión en la zona de administración', +'L_AUTH_LOGIN_FIELD' => 'Nombre de usuario', +'L_AUTH_PASSWORD_FIELD' => 'Contraseña', +'L_SUBMIT_BUTTON' => 'Enviar', +'L_ERR_WRONG_PASSWORD' => 'Nombre de usuario o contraseña incorrectos', +'L_POWERED_BY' => 'Generado con PluXml', + +# + +'L_SORT_ASCENDING_DATE' => 'más antiguo a más reciente', +'L_SORT_DESCENDING_DATE' => 'más reciente a más antiguo', +'L_SORT_ALPHABETICAL' => 'alfabético', +'L_YES' => 'Si', +'L_NO' => 'No', +'L_OK' => 'OK', +'L_NONE1' => 'ninguno', +'L_NONE2' => 'ninguna', + +# categories.php + +'L_CAT_TITLE' => 'Gestor de categorías', +'L_CAT_LIST_ID' => 'Identificador', +'L_CAT_LIST_ACTIVE' => 'Activa', +'L_CAT_LIST_NAME' => 'Nombre de la categoría', +'L_CAT_LIST_URL' => 'URL', +'L_CAT_LIST_SORT' => 'Ordenar artículos', +'L_CAT_LIST_BYPAGE' => 'Artículo/página', +'L_CAT_LIST_ORDER' => 'Orden', +'L_CAT_LIST_MENU' => 'Menú', +'L_CATEGORY' => 'Categoría', +'L_DISPLAY' => 'Mostrar', +'L_HIDE' => 'Esconder', +'L_OPTIONS' => 'Opciones', +'L_NEW_CATEGORY' => 'Nueva categoría', +'L_FOR_SELECTION' => 'Elementos seleccionados...', +'L_DELETE' => 'Eliminar', +'L_CAT_APPLY_BUTTON' => 'Modificar la lista de categorías', +'L_CAT_UNKNOWN' => 'Categoría desconocida', + +# categorie.php + +'L_EDITCAT_PAGE_TITLE' => 'Editar opciones de categoría', +'L_EDITCAT_DESCRIPTION' => 'Descripción', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Mostrar artículos en la página principal', +'L_EDITCAT_TEMPLATE' => 'Plantilla', +'L_EDITCAT_BACK_TO_PAGE' => 'Volver a la lista de categorías', +'L_EDITCAT_UPDATE' => 'Actualizar esta categoría', +'L_EDITCAT_TITLE_HTMLTAG' => 'Contenido de la etiqueta de título («title», opcional)', +'L_EDITCAT_META_DESCRIPTION' => 'Contenido de la metaetiqueta de descripción («description», opcional) ', +'L_EDITCAT_META_KEYWORDS' => 'Contenido de la metaetiqueta de palabras clave («keywords», opcional)', + +# commentaire.php + +'L_COMMENT_ORPHAN' => 'sin artículo', +'L_COMMENT_ORPHAN_STATUS' => 'invisible (sugerimos elimiar este comentario)', +'L_COMMENT_ARTICLE_LINKED' => 'Artículo', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Artículo asociado a este comentario', +'L_COMMENT_OFFLINE' => 'desconectado', +'L_COMMENT_ONLINE' => 'conectado', +'L_COMMENT_ONLINE_TITLE' => 'Lista de comentarios publicados', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Volver a la lista de comentarios de este artículo', +'L_BACK_TO_COMMENTS' => 'Volver a la lista de comentarios', +'L_COMMENT_EDITING' => 'Modificar un comentario', +'L_COMMENT_AUTHOR_FIELD' => 'Autor', +'L_COMMENT_TYPE_FIELD' => 'Tipo de comentario', +'L_COMMENT_DATE_FIELD' => 'Fecha y hora de publicación', +'L_COMMENT_IP_FIELD' => 'IP', +'L_COMMENT_SITE_FIELD' => 'Sitio web', +'L_COMMENT_EMAIL_FIELD' => 'Dirección de correo', +'L_COMMENT_STATUS_FIELD' => 'Estado', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Artículo asociado', +'L_COMMENT_ARTICLE_FIELD' => 'Comentarios', +'L_COMMENT_DELETE_CONFIRM' => '¿Desea eliminar este comentario?', +'L_COMMENT_PUBLISH_BUTTON' => 'Aprobar la publicación', +'L_COMMENT_OFFLINE_BUTTON' => 'Cambiar a invisible', +'L_COMMENT_ANSWER_BUTTON' => 'Responder a este comentario', +'L_COMMENT_UPDATE_BUTTON' => 'Actualizar', +'L_COMMENT_WRITTEN_BY' => 'Escrito por', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Ya existe una categoría con ese nombre', + +# sous_navigation/commentaires.php + +'L_COMMENT_NEW_COMMENT_TITLE' => 'Escribir un nuevo comentario para este artículo', +'L_COMMENT_NEW_COMMENT' => 'Escribir un nuevo comentario', + +# commentaire_new.php + +'L_ERR_ANSWER_UNKNOWN_COMMENT' => '¡El comentario al que está intentando responder no existe!', +'L_ERR_ANSWER_OFFLINE_COMMENT' => '¡Es imposible responder a un comentario invisible!', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => '¡Es imposible comentar en un artículo que no existe!', +'L_ERR_CREATING_COMMENT' => 'Error grave durante la creación del comentario', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Comentario creado correctamente', +'L_CREATE_NEW_COMMENT' => 'Escribir un comentario', +'L_COMMENT_SAVE_BUTTON' => 'Guardar', +'L_ARTICLE_COMMENTS_LIST' => 'Comentarios de este artículo (del más reciente al más antiguo)', +'L_COMMENT_ANSWER_TITLE' => 'Responder a este comentario', +'L_COMMENT_ANSWER' => 'Responder', + +# comments.php + +'L_COMMENTS_ARTICLE_SCOPE' => 'Artículo', +'L_COMMENTS_GLOBAL_SCOPE' => 'todo el sitio', +'L_COMMENTS_LIST_DATE' => 'Fecha', +'L_COMMENTS_LIST_AUTHOR' => 'Autor', +'L_COMMENTS_LIST_MESSAGE' => 'Mensaje', +'L_COMMENTS_LIST_ACTION' => 'Acción', +'L_COMMENT_EDIT' => 'Editar', +'L_COMMENT_EDIT_TITLE' => 'Editar este comentario', +'L_COMMENT_DELETE' => 'Eliminar', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Sindicación RSS de los comentarios invisibles', +'L_COMMENT_OFFLINE_FEEDS' => 'Comentarios invisibles', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Sindicación RSS de los comentarios visibles', +'L_COMMENT_ONLINE_FEEDS' => 'Comentarios visibles', +'L_COMMENTS_PRIVATE_FEEDS' => 'Sindicaciones RSS privadas', +'L_COMMENTS_ONLINE_LIST' => 'Lista de revisiones publicadas', +'L_COMMENTS_OFFLINE_LIST' => 'Comentarios esperando moderación', +'L_COMMENTS_ALL_LIST' => 'Lista de comentarios', +'L_COMMENT_SET_ONLINE' => 'Configurar como visible', +'L_COMMENT_SET_OFFLINE' => 'Configurar como invisible', + +# index.php + +'L_ARTICLES_SEARCH_BUTTON' => 'Búsqueda', +'L_ARTICLES_ALL_CATEGORIES' => 'Todas las categorías...', +'L_ALL' => 'Todos', +'L_ALL_PUBLISHED' => 'Publicados', +'L_ALL_DRAFTS' => 'Borradores', +'L_ALL_AWAITING_MODERATION' => 'En espera de validación', +'L_ARTICLES_FILTER_BUTTON' => 'Filtrar', +'L_CATEGORIES_TABLE' => 'Categorías', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Categorías específicas', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Todos los artículos', +'L_ARTICLES_LIST' => 'Lista de artículos', +'L_ARTICLE_LIST_DATE' => 'Fecha', +'L_ARTICLE_LIST_TITLE' => 'Título', +'L_ARTICLE_LIST_CATEGORIES' => 'Categoría', +'L_ARTICLE_LIST_NBCOMS' => 'Cant. de comentarios', +'L_ARTICLE_LIST_AUTHOR' => 'Autor', +'L_ARTICLE_LIST_ACTION' => 'Acción', +'L_CATEGORY_HOME' => 'Inicio', +'L_CATEGORY_DRAFT' => 'Borrador', +'L_ARTICLE_VIEW' => 'Visualizar', +'L_ARTICLE_VIEW_TITLE' => 'Visualizar este artílo en el sitio', +'L_ARTICLE_EDIT' => 'Editar', +'L_ARTICLE_EDIT_TITLE' => 'Editar este artículo', +'L_NEW_COMMENTS_TITLE' => 'Comentarios en espera de moderación', +'L_VALIDATED_COMMENTS_TITLE' => 'Comentarios publicados', +'L_NO_ARTICLE' => 'No existe este artículo', + +# medias.php + +'L_MEDIAS_FILENAME' => 'Nombre del archivo', +'L_MEDIAS_TITLE' => 'Gestión de medios', +'L_MEDIAS_DIRECTORY' => 'Localización', +'L_MEDIAS_BACK' => 'Volver', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Tamaño máximo de archivo', +'L_MEDIAS_SUBMIT_FILE' => 'Enviar', +'L_MEDIAS_IMAGES' => 'Imágenes', +'L_MEDIAS_DOCUMENTS' => 'Documentos', +'L_MEDIAS_ADD_FILE' => 'Agregar archivo', +'L_MEDIAS_DELETE_FOLDER' => 'Eliminar la carpeta', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => '¿Desea eliminar la carpeta y su contenido?', +'L_MEDIAS_FOLDER' => 'Archivo', +'L_MEDIAS_NEW_FOLDER' => 'Nueva carpeta', +'L_MEDIAS_CREATE_FOLDER' => 'Crear una carpeta', +'L_MEDIAS_FILESIZE' => 'Tamaño', +'L_MEDIAS_DATE' => 'Fecha', +'L_MEDIAS_DIMENSIONS' => 'Dimensiones', +'L_MEDIAS_NO_FILE' => 'Sin archivos', +'L_MEDIAS_RESIZE' => 'Cambiar el tamaño de las imágenes', +'L_MEDIAS_RESIZE_NO' => 'Tamaño original', +'L_MEDIAS_THUMBS' => 'Crear miniaturas', +'L_MEDIAS_THUMBS_NONE' => 'Sin miniatura', +'L_MEDIAS_MODIFY' => 'Editar', +'L_MEDIAS_THUMB' => 'Miniatura', +'L_MEDIAS_EXTENSION' => 'Extensión', +'L_MEDIAS_ADD' => 'Agregar', +'L_MEDIAS_ALIGNMENT' => 'Alineación', +'L_MEDIAS_ALIGN_NONE' => 'Ninguna', +'L_MEDIAS_ALIGN_LEFT' => 'Izquierda', +'L_MEDIAS_ALIGN_CENTER' => 'Centro', +'L_MEDIAS_ALIGN_RIGHT' => 'Derecha', +'L_MEDIAS_RECREATE_THUMB' => 'Crear miniatura nuevamente', + +# parametres_affichage.php + +'L_CONFIG_VIEW_FIELD' => 'Opciones de visualización', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Elegir tema', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Editar archivos del tema', +'L_CONFIG_VIEW_FILES_EDIT' => 'Editar archivos del tema', +'L_CONFIG_VIEW_SORT' => 'Ordenar artículos', +'L_CONFIG_VIEW_BYPAGE' => 'Cantidad de artículos por página', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Cantidad de artículos por página en los archivos', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Cantidad de artículos por página en la página de administración', +'L_CONFIG_VIEW_SORT_COMS' => 'Ordenar comentarios', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Cantidad de comentarios por página en la página de administración', +'L_CONFIG_VIEW_IMAGES' => 'Tamaño de la imagen (largo x ancho)', +'L_CONFIG_VIEW_THUMBS' => 'Tamaño de las miniaturas (largo x ancho)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Utilizar una página estática como página de inicio', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Advertencia: esta página está desactivada', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Descargar otros temas en ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Cantidad de artículos en la sindicación RSS', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Sómo mostrar subtítulos en la sindicación RSS de los artículos', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'En caso de que el subtítulo esté vacío, se mostrará el contenido', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Texto al final de cada artículo en la sindicación RSS', +'L_CONFIG_VIEW_UPDATE' => 'Guardar opciones de visualización', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Mostrar categorías sin artículos', +'L_CONFIG_HOMETEMPLATE' => 'Plantilla de la página principal', + +# parametres_avances.php + +'L_CONFIG_ADVANCED_DESC' => 'Configuración avanzada', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Activar la reescritura de URLs', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Advertencia: ya existe un archivo «.htaccess» en la raíz de su instalación de PluXml. Si activa la reescritura de URLs, se modificará este archivo', +'L_CONFIG_ADVANCED_GZIP' => 'Activar compresión GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Permite comprimir las páginas para ahorrar ancho de banda, pero puede aumentar la carga del procesador', +'L_CONFIG_ADVANCED_CAPCHA' => 'Activar protección nti-spam («CAPTCHA»)', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Clave de administración (URLs privadas)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Deje este campo vacío para regenerar la clave', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Utilizar carpetas diferentes para imágenes y documentos en cada usuario', +'L_HELP_SLASH_END' => 'No olvide la barra al final', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Ubicación de la carpeta de imágenes', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Ubicación de la carpeta de documentos', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Ubicación de la carpeta de artículos', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Ubicación de la carpeta de comentarios', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Ubicación de la carpeta de páginas éstaticas', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Ubicación de la carpeta de temas', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Ubicación de la carpeta de complementos', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Ubicación de la carpeta de configuración', +'L_CONFIG_ADVANCED_UPDATE' => 'Guardar configuración avanzada', + +# parametres_base.php + +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configuración básica', +'L_CONFIG_BASE_SITE_TITLE' => 'Título del sitio', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Subtítulo y descripción del sitio', +'L_CONFIG_BASE_URL_HELP' => 'No olvide la barra al final', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Idioma predeterminado', +'L_CONFIG_BASE_TIMEZONE' => 'Huso horario', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Permitir comentarios', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Moderar los comentarios creados', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Moderar los artículos para los perfiles «Redactor» y «Editor»', +'L_CONFIG_BASE_UPDATE' => 'Guardar la configuración básica', +'L_CONFIG_META_DESCRIPTION' => 'Contenido de la metaetiqueta de description («description», opcional)', +'L_CONFIG_META_KEYWORDS' => 'Contenido de la metaetiqueta de palabras clave («keywords», opcional)', + +# parametres_edittpl.php + +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => '¡No existe el tema!', +'L_CONFIG_EDITTPL_TITLE' => 'Edición del tema', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Seleccione un archivo para editar:', +'L_CONFIG_EDITTPL_LOAD' => 'Cargar', + +# parametres_infos.php + +'L_CONFIG_INFOS_TITLE' => 'Información sobre PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Información sobre su instalación de PluXml, puede serle útil para diagnosticar problemas.', +'L_CONFIG_INFOS_NB_CATS' => 'Cantidad de categorías:', +'L_CONFIG_INFOS_NB_STATICS' => 'Cantidad de páginas estáticas:', +'L_CONFIG_INFOS_WRITER' => 'Cantidad de usuarios en sesión:', +'L_PLUXML_CHECK_VERSION' => 'Comprobación de la versión de PluXml en el sitio oficial PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Es imposible comprobar las actualizaciones disponibles si la función «allow_url_fopen» está desactivada en este sistema', +'L_PLUXML_UPDATE_ERR' => 'Falló la comprobación de actualizaciones por una razón desconocida', +'L_PLUXML_UPTODATE' => 'Está utilizando la última versión de PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => '¡Existe una nueva versión de PluXml! Puede descargarla desde', + +# parametres_users.php + +'L_CONFIG_USERS_TITLE' => 'Gestión de usuarios', +'L_CONFIG_USER' => 'Usuario', +'L_CONFIG_USERS_ID' => 'Identificador de usuario', +'L_CONFIG_USERS_ACTIVE' => 'Activo', +'L_CONFIG_USERS_ACTION' => 'Acción', +'L_CONFIG_USERS_NEW' => 'Nuevo usuario', +'L_CONFIG_USERS_UPDATE' => 'Modificar la lista de usuarios', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Ya existe un usuario con ese identificador', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Ya existe un usuario con ese nombre', +'L_CONFIG_USERS_DELETE_CONFIRM' => '¿Desea eliminar los usuarios seleccionados?', + +# parametre_plugins.php + +'L_BACK_TO_PLUGINS' => 'Volver a la página de complementos', +'L_NO_PLUGIN' => 'Ningún complemento', +'L_PLUGIN_NO_CONFIG' => 'Complemento sin configuración', +'L_PLUGINS_CSS' => 'Código CSS', +'L_PLUGINS_CSS_TITLE' => 'Editar el código CSS del complemento', +'L_CONTENT_FIELD_FRONTEND' => 'Contenido del archivo de código CSS para el sitio web', +'L_CONTENT_FIELD_BACKEND' => 'Contenido del archivo de código CSS para el sitio de administración', + +# parametres_plugins.php + +'L_PLUGINS_TITLE' => 'Gestión de complementos', +'L_PLUGINS_VERSION' => 'Versión', +'L_PLUGINS_AUTHOR' => 'Autor', +'L_PLUGINS_ACTIVATE' => 'Activar', +'L_PLUGINS_DEACTIVATE' => 'Desactivar', +'L_PLUGINS_DELETE' => 'Eliminar', +'L_PLUGINS_DELETE_ERROR' => 'Error al eliminar el complemento', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Complemento eliminado correctamente', +'L_PLUGINS_CONFIG' => 'Configuración', +'L_PLUGINS_CONFIG_TITLE' => 'Configuración del complemento', +'L_PLUGINS_HELP' => 'Ayuda', +'L_PLUGINS_HELP_TITLE' => 'Ayuda del complemento', +'L_PLUGINS_REQUIREMENTS' => 'Requerimientos', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Complementos disponibles y activos necesarios para activar este complemento', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Ninguno', +'L_PLUGINS_ALPHA_SORT' => 'Ordenar complementos alfabéticamente', +'L_PLUGINS_LOADING_SORT' => 'Orden de cargar', +'L_PLUGINS_ACTION' => 'Acción', +'L_PLUGINS_APPLY_BUTTON' => 'Modificar la lista de complementos', +'L_PLUGINS_ACTIVE_LIST' => 'Complementos activos', +'L_PLUGINS_INACTIVE_LIST' => 'Complementos desactivados', + +# profil.php + +'L_PROFIL_EDIT_TITLE' => 'Edición de perfiles', +'L_PROFIL' => 'Perfil', +'L_PROFIL_LOGIN' => 'Cuenta de usuario', +'L_PROFIL_USER' => 'Nombre de usuario', +'L_PROFIL_MAIL' => 'Dirección correo', +'L_PROFIL_ADMIN_LANG' => 'Idioma de administración', +'L_PROFIL_INFOS' => 'Información', +'L_PROFIL_UPDATE' => 'Guardar perfil', +'L_PROFIL_CHANGE_PASSWORD' => 'Cambiar contraseña', +'L_PROFIL_PASSWORD' => 'Contraseña', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirme la contraseña', +'L_PROFIL_UPDATE_PASSWORD' => 'Cambiar contraseña', + +# statique.php + +'L_STATIC_BACK_TO_PAGE' => 'Volver a la lista de páginas estáticas', +'L_STATIC_UNKNOWN_PAGE' => '¡No existe esta página estática!', +'L_STATIC_TITLE' => 'Editar código fuente de la página estática', +'L_STATIC_VIEW_PAGE' => 'Visualizar página', +'L_STATIC_ON_SITE' => 'en el sitio', +'L_STATIC_UPDATE' => 'Guardar esta página', +'L_STATIC_TITLE_HTMLTAG' => 'Contenido de la etiqueta de título («title», opcional)', +'L_STATIC_META_DESCRIPTION' => 'Contenido de la metaetiqueta de descripción («description», opcional)', +'L_STATIC_META_KEYWORDS' => 'Contenido de la metaetiqueta de palabras claves («keywords», opcional)', + +# statiques.php + +'L_STATICS_PAGE_TITLE' => 'Crear y editar páginas estáticas', +'L_STATICS_ID' => 'Identificador', +'L_STATICS_GROUP' => 'Grupo', +'L_STATICS_TITLE' => 'Título', +'L_STATICS_URL' => 'URL', +'L_STATICS_ACTIVE' => 'Activo', +'L_STATICS_ORDER' => 'Orden', +'L_STATICS_MENU' => 'Menú', +'L_STATICS_ACTION' => 'Acción', +'L_STATICS_TEMPLATE_FIELD' => 'Plantilla', +'L_STATICS_PAGE_HOME' => 'Establecer como página de inicio', +'L_STATICS_HOME_PAGE' => 'Página de inicio', +'L_PAGE' => 'Página', +'L_VIEW' => 'Visualizar', +'L_STATICS_SRC_TITLE' => 'Editar código fuente de esta página', +'L_STATICS_SRC' => 'Editar', +'L_STATICS_NEW_PAGE' => 'Nueva página', +'L_STATICS_UPDATE' => 'Modificar la lista de las páginas estáticas', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Ya existe una página con ese título', + +# top.php +'L_PROFIL_ADMIN' => 'Administrador', +'L_PROFIL_MANAGER' => 'Gestor', +'L_PROFIL_MODERATOR' => 'Moderador', +'L_PROFIL_EDITOR' => 'Editor', +'L_PROFIL_WRITER' => 'Redactor', +'L_ADMIN' => '- Administración', +'L_LOGIN' => 'Connectado como', +'L_ADMIN_LOGOUT' => 'Desconectar', +'L_ADMIN_LOGOUT_TITLE' => 'Finalizar sesión del administrador', +'L_BACK_TO_SITE' => 'Inicio', +'L_BACK_TO_SITE_TITLE' => 'Volver al inicio', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Volver al blog', +'L_MENU_ARTICLES' => 'Artículos', +'L_MENU_ARTICLES_TITLE' => 'Enumerar o editar artículos', +'L_MENU_NEW_ARTICLES' => 'Nuevo artículo', +'L_MENU_NEW_ARTICLES_TITLE' => 'Nuevo artículo', +'L_MENU_STATICS_TITLE' => 'Enumerar o editar páginas estáticas', +'L_MENU_STATICS' => 'Páginas estáticas', +'L_MENU_COMMENTS_TITLE' => 'Enumerar o editar comentarios', +'L_MENU_COMMENTS' => 'Comentarios', +'L_MENU_MEDIAS_TITLE' => 'Subir e insertar un medio', +'L_MENU_MEDIAS' => 'Medios', +'L_MENU_CATEGORIES_TITLE' => 'Crear, gestionar y editar categorías', +'L_MENU_CATEGORIES' => 'Categorías', +'L_MENU_CONFIG_TITLE' => 'Configurar PluXml', +'L_MENU_CONFIG' => 'Parámetros', +'L_MENU_PROFIL_TITLE' => 'Gestionar sus perfiles de usuario', +'L_MENU_PROFIL' => 'Perfil', +'L_WARNING_INSTALLATION_FILE' => '

Todavía existe el archivo «install.php» en la raíz de PluXml.
Por razones de seguridad, le sugerimos que lo elimine.

', + +# user.php +'L_USER_UNKNOWN' => 'Usuario desconocido', +'L_USER_LANG' => 'Idioma utilizado en la administración', +'L_USER_MAIL' => 'Dirección de correo', +'L_USER_INFOS' => 'Información', +'L_USER_UPDATE' => 'Actualizar este usuario', +'L_USER_PAGE_TITLE' => 'Editar opciones de usuario', +'L_USER_BACK_TO_PAGE' => 'Volver a la lista de usuarios', + +# + +'L_MENU_CONFIG_BASE_TITLE' => 'Editar configuración básica de PluXml', +'L_MENU_CONFIG_BASE' => 'Configuración básica', +'L_MENU_CONFIG_VIEW_TITLE' => 'Esitar sus opciones de visualización de PluXml', +'L_MENU_CONFIG_VIEW' => 'Opciones de visualización', +'L_MENU_CONFIG_USERS_TITLE' => 'Gestionar cuentas de usuario de PluXml', +'L_MENU_CONFIG_USERS' => 'Cuentas de usuario', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Editar configuración avanzada de PluXml', +'L_MENU_CONFIG_ADVANCED' => 'Configuración avanzada', +'L_MENU_CONFIG_INFOS_TITLE' => 'Información de PluXml', +'L_MENU_CONFIG_INFOS' => 'Información', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Gestionar complementos', +'L_MENU_CONFIG_PLUGINS' => 'Complementos', + +); +?> \ No newline at end of file diff --git a/src/core/lang/es/core.php b/src/core/lang/es/core.php new file mode 100644 index 0000000..c83f6b8 --- /dev/null +++ b/src/core/lang/es/core.php @@ -0,0 +1,136 @@ + 'Español', + +# common +'L_PLUXML_VERSION' => 'Versión de PluXml', +'L_HOMEPAGE' => 'Inicio', +'L_UNCLASSIFIED' => 'Sin categoría', +'L_INFO_PHP_VERSION' => 'Versión de PHP', +'L_INFO_MAGIC_QUOTES' => 'Estado de las «comillas mágicas» («magic quotes»)', +'L_INFO_CHARSET' => 'codificación', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'No se encontró el tema principal de PluXml', +'L_ERR_FILE_NOTFOUND' => 'No se encontró el archivo destino de PluXml', +'L_ERR_PAGE_NOT_FOUND' => 'No se encontró la página', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'ene', +'L_SHORT_FEBRUARY' => 'feb', +'L_SHORT_MARCH' => 'mar', +'L_SHORT_APRIL' => 'abr', +'L_SHORT_MAY' => 'may', +'L_SHORT_JUNE' => 'jun', +'L_SHORT_JULY' => 'jul', +'L_SHORT_AUGUST' => 'ago', +'L_SHORT_SEPTEMBER' => 'sep', +'L_SHORT_OCTOBER' => 'oct', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dic', +'L_JANUARY' => 'enero', +'L_FEBRUARY' => 'febrero', +'L_MARCH' => 'marzo', +'L_APRIL' => 'abril', +'L_MAY' => 'mayo', +'L_JUNE' => 'junio', +'L_JULY' => 'julio', +'L_AUGUST' => 'agosto', +'L_SEPTEMBER' => 'septiembre', +'L_OCTOBER' => 'octubre', +'L_NOVEMBER' => 'noviembre', +'L_DECEMBER' => 'diciembre', +'L_MONDAY' => 'lunes', +'L_TUESDAY' => 'martes', +'L_WEDNESDAY' => 'miércoles', +'L_THURSDAY' => 'jueves', +'L_FRIDAY' => 'viernes', +'L_SATURDAY' => 'sábado', +'L_SUNDAY' => 'domingo', + +# class.plx.capcha.php +'L_LAST' => 'última', +'L_FIRST' => 'primera', +'L_SECOND' => 'segunda', +'L_THIRD' => 'tercera', +'L_FOURTH' => 'cuarta', +'L_FIFTH' => 'quinta', +'L_SIXTH' => 'sexta', +'L_SEVENTH' => 'septima', +'L_EIGTH' => 'octava', +'L_NINTH' => 'novena', +'L_TENTH' => 'décima', +'L_NTH' => 'º', +'L_CAPCHA_QUESTION' => '¿Cuál es la %s letra en la palabra %s?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => 'Puede editar %s', +'L_WRITE_NOT_ACCESS' => 'No se puede editar %s o no existe', +'L_MODREWRITE_AVAILABLE' => 'Módulo de Apache para re-escritura de URLs («mod_rewrite») disponible', +'L_MODREWRITE_NOT_AVAILABLE' => 'Módulo de Apache para re-escritura de URLs («mod_rewrite») no disponible', +'L_LIBGD_INSTALLED' => 'Biblioteca GD instalada', +'L_LIBGD_NOT_INSTALLED' => 'Biblioteca GD no instalada', +'L_MAIL_AVAILABLE' => 'Función de envío de correos disponible', +'L_MAIL_NOT_AVAILABLE' => 'Función de envío de correos no disponible', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'El archivo "%sversion" es necesario para el funcionamiento de PluXml', +'L_ARTICLE_NO_TAG' => '¡No existen artículos para esta etiqueta!', +'L_UNKNOWN_CATEGORY' => '¡Esta categoría no existe!', +'L_NO_ARTICLE_PAGE' => '¡No existen artículos para esta página!', +'L_UNKNOWN_ARTICLE' => '¡Este artículo no existe!', +'L_COM_IN_MODERATION' => 'Comentario en proceso de moderación por el administrador de este sitio', +'L_UNKNOWN_STATIC' => '¡Esta página no existe!', +'L_DOCUMENT_NOT_FOUND' => '¡No se encotró el documento especificado!', +'L_NEWCOMMENT_ERR' => 'Se ha producido un error al publicar este comentario', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Ingrese todos los campos obligatorios', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Falló La comprobación anti-spam', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compresión %s activada', +'L_PAGETITLE_ARCHIVES' => 'Archivos', +'L_PAGETITLE_TAG' => 'Etiqueta', +'L_NO_CATEGORY' => 'ninguna categoría', +'L_CATEGORY' => 'categoría', +'L_CATEGORIES' => 'categorías', +'L_NO_ARTICLE' => 'ningún artículo', +'L_ARTICLE' => 'artículo', +'L_ARTICLES' => 'artículos', +'L_ARTAUTHOR_UNKNOWN' => 'desconocido', +'L_ARTTAGS_NONE' => 'ninguna', +'L_ARTCHAPO' => 'Leer más #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Sindicación RSS de los artículos de esta categoría', +'L_ARTFEED_RSS_TAG' => 'Sindicación RSS de los artículos de esta etiqueta', +'L_ARTFEED_RSS' => 'Sindicación RSS de los artículos', +'L_NO_COMMENT' => 'sin comentarios', +'L_COMMENT' => 'comentario', +'L_COMMENTS' => 'comentarios', +'L_COMFEED_RSS_ARTICLE' => 'Sindicación RSS de los comentarios de este artículo', +'L_COMFEED_RSS' => 'Sindicación RSS de los comentarios', +'L_STATICCONTENT_INPROCESS' => 'Página en proceso de edición', +'L_SAID' => 'ha dicho', + +'L_PAGINATION_FIRST_TITLE' => 'Ir a la primera página', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Página anterior', +'L_PAGINATION_PREVIOUS' => 'anterior', +'L_PAGINATION_NEXT_TITLE' => 'Página siguiente', +'L_PAGINATION_NEXT' => 'siguiente', +'L_PAGINATION_LAST_TITLE' => 'Ir a la última página', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'página %s de %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => '¡Las URLs privadas no han sido inicializadas en sus parámetros de administración!', +'L_FEED_COMMENTS' => 'Comentarios', +'L_FEED_ONLINE_COMMENTS' => 'Comentarios de usuarios', +'L_FEED_OFFLINE_COMMENTS' => 'Comentarios sin conexión', +'L_FEED_WRITTEN_BY' => 'Escrito por', + +); +?> diff --git a/src/core/lang/es/install.php b/src/core/lang/es/install.php new file mode 100644 index 0000000..04bc115 --- /dev/null +++ b/src/core/lang/es/install.php @@ -0,0 +1,32 @@ + 'Instalación', +'L_WRONG_PHP_VERSION' => 'PluXml necesita PHP 5 o posterior', +'L_SELECT_LANG' => 'Seleccione su idioma', +'L_INPUT_CHANGE' => 'Cambiar', +'L_DEFAULT_CATEGORY_TITLE' => 'Categoría 1', +'L_DEFAULT_CATEGORY_URL' => 'categoria-1', +'L_DEFAULT_STATIC_TITLE' => 'Estática 1', +'L_DEFAULT_STATIC_URL' => 'estatica-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Primer artículo', +'L_DEFAULT_ARTICLE_URL' => 'primer-articulo', +'L_DEFAULT_COMMENT_CONTENT' => '¡Este es un primer comentario!', +'L_ERR_PLUXML_ALREADY_INSTALLED'=> '¡PluXml ya está configurado!', +'L_ERR_MISSING_USER' => '¡Indique el nombre del editor!', +'L_ERR_MISSING_LOGIN' => '¡Indique el nombre de usuario!', +'L_ERR_MISSING_PASSWORD' => '¡Indique una contraseña!', +'L_ERR_PASSWORD_CONFIRMATION' => '¡La contraseña es incorrecta!', +'L_PLUXML_INSTALLATION' => 'Instalación de PluXml', +'L_SITE_DESCRIPTION' => '¡Blog o CMS con XML!', +'L_VERSION' => 'versión', +'L_USERNAME' => 'Nombre del administrador', +'L_LOGIN' => 'Nombre de usuario del administrador', +'L_PASSWORD' => 'Contraseña', +'L_PASSWORD_CONFIRMATION' => 'Confirmar contraseña', +'L_INPUT_INSTALL' => 'Instalar', +'L_TIMEZONE' => 'Huso horario', +); +?> \ No newline at end of file diff --git a/src/core/lang/es/update.php b/src/core/lang/es/update.php new file mode 100644 index 0000000..7b8d0d1 --- /dev/null +++ b/src/core/lang/es/update.php @@ -0,0 +1,58 @@ + 'Se guardaron los datos correctamente', +'L_UPDATE_TITLE' => 'Actualización de PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml necesita PHP 5 o posterior.', + +'L_SELECT_LANG' => 'Seleccione su idioma', +'L_INPUT_CHANGE' => 'Cambiar', + +'L_UPDATE_UPTODATE' => 'Su PluXml ya está actualizado.', +'L_UPDATE_NOT_AVAILABLE' => 'No hay ninguna actualización disponible.', +'L_UPDATE_BACK' => 'Volver al sitio', +'L_UPDATE_WARNING1' => 'Va a actualizar su versión antigua de PluXml', +'L_UPDATE_SELECT_VERSION' => 'Selecccione la versión antigua de PluXml para actualizar.', +'L_UPDATE_WARNING2' => 'Si no encuentra su versión antigua en esta lista, es que no existe un proceso automático de actualización desde dicha versión por ser demasiado anitgua.
Le sugerimos que descargue la última versión de PluXml y realice una nueva instalación.', +'L_UPDATE_WARNING3' => 'Advertencia: antes de iniciar una actualización, no olvide hacer un respaldo de sus datos haciendo una copia de la carpeta «data»', +'L_UPDATE_START' => 'Inciar la actualización', + +'L_UPDATE_ENDED' => 'Actualización finalizada', +'L_UPDATE_INPROGRESS' => 'Actualizando la versión', +'L_UPDATE_ERROR' => 'Ocurrió un error durante la actualización.', +'L_UPDATE_SUCCESSFUL' => '¡Se completaron correctamente todas las actualizaciones!', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Actualización del archivo «parametres.xml»', +'L_UPDATE_CREATE_TAGS_FILE' => 'Creación del archivo «tags.xml»', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Error al crear el archivo «tags.xml»', +'L_UPDATE_CREATE_THEME_FILE' => 'Creación del archivo de tema', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Error al crear el archivo', +'L_UPDATE_ARTICLES_CONVERSION' => 'Conversión de los artículos al nuevo formato', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Error al procesar el archivo', +'L_UPDATE_STATICS_MIGRATION' => 'Actualización del archivo de páginas estáticas', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Error al actualizar el archivo de páginas estáticas', +'L_UPDATE_CREATE_USERS_FILE' => 'Creación del archivo de usuarios', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Error al crear el archivo de usuarios', +'L_UPDATE_USERS_MIGRATION' => 'Actualización del archivo de usuarios', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Error al actualizar el archivo de usuarios', +'L_UPDATE_ERR_NO_USERS' => 'No se encontraron usuarios en el archivo', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Creación del archivo «.htaccess»', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Error al crear el archivo «.htaccess»', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Actualización del archivo «.htaccess»', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Error al actualizar el archivo «.htaccess»', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Actualización del archivo de categorías', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Error al actualizar el archivo de categorías', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Creación del archivo «plugins.xml»', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Error al crear el archivo «plugins.xml»', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Eliminación del archivo «core/admin/fullscreen.php»', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE' => 'Error al eliminar el archivo «core/admin/fullscreen.php»', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Eliminación de la carpeta «core/plxtoolbar/»', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Error al eliminar la carpeta «core/plxtoolbar/»', +'L_UPDATE_FILE' => 'Actualizando archivo', +'L_UPDATE_ERR_FILE' => 'Error al actualizar archivo', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Actualización de archivos de parámetros de complementos en la carpeta de configuración', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Actualización del archivo «plugins.xml»', + +); +?> \ No newline at end of file diff --git a/src/core/lang/fr/admin.php b/src/core/lang/fr/admin.php new file mode 100644 index 0000000..ff806f5 --- /dev/null +++ b/src/core/lang/fr/admin.php @@ -0,0 +1,543 @@ + 'Erreur inconnue', +'L_CONFIRM_DELETE' => 'Confirmer la suppression ?', +'L_SAVE_FILE' => 'Sauvegarder le fichier', +'L_SAVE_FILE_SUCCESSFULLY' => 'Fichier enregistré avec succès', +'L_SAVE_FILE_ERROR' => 'Erreur pendant l\'enregistrement du fichier', + +# class.plx.admin.php + +'L_SAVE_SUCCESSFUL' => 'Enregistrement des données effectué avec succès', +'L_SAVE_ERR' => 'Erreur pendant l\'enregistrement des données', +'L_NO_ENTRY' => 'Accès interdit', +'L_ERR_USER_EMPTY' => 'Veuillez saisir un nom d\'utilisateur', +'L_ERR_PASSWORD_EMPTY' => 'Veuillez saisir un mot de passe', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Mauvaise confirmation ou mot de passe vide', +'L_ERR_INVALID_EMAIL' => 'Adresse email invalide', +'L_ERR_INVALID_SITE' => 'Adresse du site invalide', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Identifiant d\'article invalide !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nouvelle-categorie', +'L_DEFAULT_NEW_STATIC_URL' => 'nouvelle-page', +'L_DEFAULT_NEW_ARTICLE_URL' => 'nouvel-article', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Article créé avec succès', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Article mis à jour avec succès', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Suppression effectuée avec succès', +'L_ARTICLE_SAVE_ERR' => 'Erreur lors de la sauvegarde de l\'article', +'L_ARTICLE_DELETE_ERR' => 'Une erreur est survenue pendant la suppression de la l\article', +'L_ERR_UNKNOWN_COMMENT' => 'Le commentaire demandé n\'existe pas ou n\'existe plus', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Commentaire modifié avec succès', +'L_COMMENT_UPDATE_ERR' => 'Erreur lors de la mise à jour du commentaire', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Suppression effectuée avec succès', +'L_COMMENT_DELETE_ERR' => 'Une erreur est survenue pendant la suppression', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validation effectuée avec succès', +'L_COMMENT_VALIDATE_ERR' => 'Une erreur est survenue pendant la validation', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Modération effectuée avec succès', +'L_COMMENT_MODERATE_ERR' => 'Une erreur est survenue lors de la modération', +'L_ERR_URL_ALREADY_EXISTS' => 'Url déjà utilisée. Veuillez modifier la valeur du champ \'Url\'', + +# class.plx.media.php + +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Impossible de créer le dossier médias pour l\'utilisateur connecté', +'L_PLXMEDIAS_ROOT' => 'racine', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL'=> 'Fichiers supprimés avec succès', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Erreur pendant le suppression d\'un fichier', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL'=> 'Fichier supprimé avec succès', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Erreur pendant le suppression du fichier', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Erreur pendant la suppression du dossier', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Dossier supprimé avec succès', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Impossible de créer le dossier', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Dossier créé avec succès', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Ce dossier existe déjà', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'La taille d\'un fichier est supérieure à', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'Le type d\'un fichier n\'est pas autorisé', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Erreur pendant l\'envoi du fichier', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Fichier envoyé avec succès', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Erreur pendant l\'envoi d\'un fichier', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Fichiers envoyés avec succès', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Fichiers déplacés avec succès', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Fichier déplacé avec succès', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Erreur pendant le déplacement des fichiers', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Erreur pendant le déplacement du fichier', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Déplacer', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Erreur pendant la création de la vignette', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Erreur pendant la création des vignettes', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Vignette créée avec succès', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL'=> 'Vignettes créées avec succès', + +# article.php + +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Nouvel article', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Date de publication invalide.', +'L_ERR_UNKNOWN_ARTICLE' => 'L\'article demandé n\'existe pas ou n\'existe plus !', +'L_ERR_FORBIDDEN_ARTICLE' => 'Vous n\'avez pas les droits pour accéder à cet article !', +'L_BACK_TO_ARTICLES' => 'Retour à la liste des articles', +'L_ARTICLE_EDITING' => 'Modification d\'un article', +'L_ARTICLE_TITLE' => 'Titre', +'L_ARTICLE_LIST_AUTHORS' => 'Auteur', +'L_HEADLINE_FIELD' => 'Chapô (facultatif)', +'L_CONTENT_FIELD' => 'Contenu', +'L_LINK_FIELD' => 'Lien de l\'article', +'L_LINK_ACCESS' => 'Accéder à l\'article', +'L_LINK_VIEW' => 'voir', +'L_ARTICLE_STATUS' => 'État', +'L_DRAFT' => 'Brouillon', +'L_PUBLISHED' => 'Publié', +'L_AWAITING' => 'En attente de validation', +'L_ARTICLE_DATE' => 'Date de publication', +'L_NOW' => 'maintenant', +'L_ARTICLE_CATEGORIES' => 'Emplacements', +'L_CATEGORY_HOME_PAGE' => 'Page d\'accueil', +'L_NEW_CATEGORY' => 'Nouvelle catégorie', +'L_ARTICLE_TAGS_FIELD' => 'Mots clés', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Séparer les mots clés par une virgule', +'L_ARTICLE_TOGGLER_TITLE' => 'Liste des mots clés', +'L_NO_TAG' => 'Aucun tag', +'L_ALLOW_COMMENTS' => 'Autoriser les commentaires', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'l\'URL se remplit automatiquement à la création', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Gérer les commentaires', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Gérer les commentaires de cet article', +'L_ARTICLE_NEW_COMMENT' => 'Rédiger un commentaire', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Rédiger un commentaire sur cet article', +'L_ARTICLE_DELETE_CONFIRM' => 'Supprimer cet article ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Aperçu', +'L_ARTICLE_DRAFT_BUTTON' => 'Enregistrer brouillon', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publier', +'L_ARTICLE_MODERATE_BUTTON' => 'Soumettre pour validation', +'L_ARTICLE_OFFLINE_BUTTON' => 'Mettre hors ligne', +'L_ARTICLE_UPDATE_BUTTON' => 'Enregistrer', +'L_CATEGORY_ADD_BUTTON' => "Ajouter", +'L_ARTICLE_META_DESCRIPTION' => 'Contenu balise meta "description" (option)', +'L_ARTICLE_META_KEYWORDS' => 'Contenu balise meta "keywords" (option)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Contenu balise title (option)', +'L_ARTICLE_CHAPO_HIDE' => 'masquer', +'L_ARTICLE_CHAPO_DISPLAY' => 'afficher', + +# auth.php + +'L_AUTH_PAGE_TITLE' => 'Page d\'authentification', +'L_LOGOUT_SUCCESSFUL' => 'Vous avez correctement été déconnecté', +'L_LOGIN_PAGE' => 'Connexion à la zone d\'administration', +'L_AUTH_LOGIN_FIELD' => 'Login de connexion', +'L_AUTH_PASSWORD_FIELD' => 'Mot de passe', +'L_SUBMIT_BUTTON' => 'Valider', +'L_ERR_WRONG_PASSWORD' => 'Login et/ou mot de passe incorrect', +'L_POWERED_BY' => 'Généré par PluXml', + +# + +'L_SORT_ASCENDING_DATE' => 'date croissante', +'L_SORT_DESCENDING_DATE' => 'date décroissante', +'L_SORT_ALPHABETICAL' => 'alphabétique', +'L_YES' => 'Oui', +'L_NO' => 'Non', +'L_OK' => 'Ok', +'L_NONE1' => 'aucun', +'L_NONE2' => 'aucune', + +# categories.php + +'L_CAT_TITLE' => 'Création et édition des catégories', +'L_CAT_LIST_ID' => 'Identifiant', +'L_CAT_LIST_ACTIVE' => 'Active', +'L_CAT_LIST_NAME' => 'Nom de la catégorie', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Tri des articles', +'L_CAT_LIST_BYPAGE' => 'Nb art/page', +'L_CAT_LIST_ORDER' => 'Ordre', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Catégorie', +'L_DISPLAY' => 'Afficher', +'L_HIDE' => 'Masquer', +'L_OPTIONS' => 'Options', +'L_NEW_CATEGORY' => 'Nouvelle catégorie', +'L_FOR_SELECTION' => 'Pour la sélection...', +'L_DELETE' => 'Supprimer', +'L_CAT_APPLY_BUTTON' => 'Modifier la liste des catégories', +'L_CAT_UNKNOWN' => 'catégorie ionconnue', + +# categorie.php + +'L_EDITCAT_PAGE_TITLE' => 'Edition des options de la catégorie', +'L_EDITCAT_DESCRIPTION' => 'Description', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Afficher les articles de cette catégorie sur la page d\'accueil', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Retour à la liste des catégories', +'L_EDITCAT_UPDATE' => 'Mettre à jour cette catégorie', +'L_EDITCAT_TITLE_HTMLTAG' => 'Contenu balise title (option)', +'L_EDITCAT_META_DESCRIPTION' => 'Contenu de la balise meta "description" pour cette catégorie (option)', +'L_EDITCAT_META_KEYWORDS' => 'Contenu de la balise meta "keywords" pour cette catégorie (option)', + +# commentaire.php + +'L_COMMENT_ORPHAN' => 'aucun article', +'L_COMMENT_ORPHAN_STATUS' => 'non visible (nous vous conseillons de supprimer ce commentaire)', +'L_COMMENT_ARTICLE_LINKED' => 'Article', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Article attaché à ce commentaire', +'L_COMMENT_OFFLINE' => 'Hors ligne', +'L_COMMENT_ONLINE' => 'En ligne', +'L_COMMENT_ONLINE_TITLE' => 'Visualiser ce commentaire en ligne', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Retour à la liste des commentaires de cet article', +'L_BACK_TO_COMMENTS' => 'Retour à la liste des commentaires', +'L_COMMENT_EDITING' => 'Édition d\'un commentaire', +'L_COMMENT_AUTHOR_FIELD' => 'Auteur', +'L_COMMENT_TYPE_FIELD' => 'Type de commentaire', +'L_COMMENT_DATE_FIELD' => 'Date et heure de publication', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Statut', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Article attaché', +'L_COMMENT_ARTICLE_FIELD' => 'Commentaire', +'L_COMMENT_DELETE_CONFIRM' => 'Supprimer ce commentaire ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Valider la publication', +'L_COMMENT_OFFLINE_BUTTON' => 'Mettre hors ligne', +'L_COMMENT_ANSWER_BUTTON' => 'Répondre à ce commentaire', +'L_COMMENT_UPDATE_BUTTON' => 'Mettre à jour', +'L_COMMENT_WRITTEN_BY' => 'Rédigé par', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Nom de catégorie déjà utilisé', + +# sous_navigation/commentaires.php + +'L_COMMENT_NEW_COMMENT_TITLE' => 'Rédiger un nouveau commentaire pour cet article', +'L_COMMENT_NEW_COMMENT' => 'Rédiger un nouveau commentaire', + +# commentaire_new.php + +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'Le commentaire auquel vous tentez de répondre n\'existe pas ou n\'existe plus !', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Le commentaire est hors ligne, impossible d\'y répondre !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'L\'article demandé n\'existe pas ou n\'existe plus, impossible d\'écrire un commentaire !', +'L_ERR_CREATING_COMMENT' => 'Une erreur est survenue au cours de la création du commentaire', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Le commentaire a été crée avec succès', +'L_CREATE_NEW_COMMENT' => 'Rédiger un commentaire', +'L_COMMENT_SAVE_BUTTON' => 'Enregistrer', +'L_ARTICLE_COMMENTS_LIST' => 'Commentaires de cet article', +'L_COMMENT_ANSWER_TITLE' => 'Répondre à ce commentaire', +'L_COMMENT_ANSWER' => 'Répondre', + +# comments.php + +'L_COMMENTS_ARTICLE_SCOPE' => 'article', +'L_COMMENTS_GLOBAL_SCOPE' => 'site entier', +'L_COMMENTS_LIST_DATE' => 'Date', +'L_COMMENTS_LIST_AUTHOR' => 'Auteur', +'L_COMMENTS_LIST_MESSAGE' => 'Message', +'L_COMMENTS_LIST_ACTION' => 'Action', +'L_COMMENT_EDIT' => 'Éditer', +'L_COMMENT_EDIT_TITLE' => 'Éditer ce commentaire', +'L_COMMENT_DELETE' => 'Supprimer', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Flux rss des commentaires hors-ligne', +'L_COMMENT_OFFLINE_FEEDS' => 'Commentaires hors-ligne', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Flux rss des commentaires en-ligne', +'L_COMMENT_ONLINE_FEEDS' => 'Commentaires en-ligne', +'L_COMMENTS_PRIVATE_FEEDS' => 'Flux de syndication privés', +'L_COMMENTS_ONLINE_LIST' => 'Liste des commentaires publiés', +'L_COMMENTS_OFFLINE_LIST' => 'Liste des commentaires en attente de validation', +'L_COMMENTS_ALL_LIST' => 'Liste des commentaires', +'L_COMMENT_SET_ONLINE' => 'Mettre en ligne', +'L_COMMENT_SET_OFFLINE' => 'Mettre hors ligne', + +# index.php + +'L_ARTICLES_SEARCH_BUTTON' => 'Rechercher', +'L_ARTICLES_ALL_CATEGORIES' => 'Toutes les catégories...', +'L_ALL' => 'Tous', +'L_ALL_PUBLISHED' => 'Publiés', +'L_ALL_DRAFTS' => 'Brouillons', +'L_ALL_AWAITING_MODERATION' => 'En attente de validation', +'L_ARTICLES_FILTER_BUTTON' => 'Filtrer', +'L_CATEGORIES_TABLE' => 'Catégories', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Emplacements spécifiques', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Tous les articles', +'L_ARTICLES_LIST' => 'Liste des articles', +'L_ARTICLE_LIST_DATE' => 'Date', +'L_ARTICLE_LIST_TITLE' => 'Titre', +'L_ARTICLE_LIST_CATEGORIES' => 'Catégorie', +'L_ARTICLE_LIST_NBCOMS' => 'Nb coms', +'L_ARTICLE_LIST_AUTHOR' => 'Auteur', +'L_ARTICLE_LIST_ACTION' => 'Action', +'L_CATEGORY_HOME' => 'Page d\'accueil', +'L_CATEGORY_DRAFT' => 'Brouillon', +'L_ARTICLE_VIEW' => 'Visualiser', +'L_ARTICLE_VIEW_TITLE' => 'Visualiser cet article sur le site', +'L_ARTICLE_EDIT' => 'Éditer', +'L_ARTICLE_EDIT_TITLE' => 'Éditer cet article', +'L_NEW_COMMENTS_TITLE' => 'Commentaires en attente de validation', +'L_VALIDATED_COMMENTS_TITLE' => 'Commentaires publiés', +'L_NO_ARTICLE' => 'Aucun article', + +# medias.php + +'L_MEDIAS_FILENAME' => 'Nom du fichier', +'L_MEDIAS_TITLE' => 'Gestion des médias', +'L_MEDIAS_DIRECTORY' => 'Emplacement', +'L_MEDIAS_BACK' => 'Retour à la liste des médias', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Taille maxi des fichiers', +'L_MEDIAS_SUBMIT_FILE' => 'Envoyer', +'L_MEDIAS_IMAGES' => 'Images', +'L_MEDIAS_DOCUMENTS' => 'Documents', +'L_MEDIAS_ADD_FILE' => 'Ajouter fichiers', +'L_MEDIAS_DELETE_FOLDER' => 'Supprimer', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Supprimer ce dossier et son contenu ?', +'L_MEDIAS_FOLDER' => 'Dossier', +'L_MEDIAS_NEW_FOLDER' => 'Nouveau dossier', +'L_MEDIAS_CREATE_FOLDER' => 'Créer', +'L_MEDIAS_FILESIZE' => 'Taille', +'L_MEDIAS_DATE' => 'Date', +'L_MEDIAS_DIMENSIONS' => 'Dimensions', +'L_MEDIAS_NO_FILE' => 'Aucun fichier', +'L_MEDIAS_RESIZE' => 'Redimensionner images', +'L_MEDIAS_RESIZE_NO' => 'Taille originale', +'L_MEDIAS_THUMBS' => 'Créer miniatures', +'L_MEDIAS_THUMBS_NONE' => 'Pas de miniature', +'L_MEDIAS_MODIFY' => 'Modifier', +'L_MEDIAS_THUMB' => 'Miniature', +'L_MEDIAS_EXTENSION' => 'Extension', +'L_MEDIAS_ADD' => 'Ajouter', +'L_MEDIAS_ALIGNMENT' => 'Alignement', +'L_MEDIAS_ALIGN_NONE' => 'Aucun', +'L_MEDIAS_ALIGN_LEFT' => 'Gauche', +'L_MEDIAS_ALIGN_CENTER' => 'Centre', +'L_MEDIAS_ALIGN_RIGHT' => 'Droite', +'L_MEDIAS_RECREATE_THUMB' => 'Recréer miniatures', + +# parametres_affichage.php + +'L_CONFIG_VIEW_FIELD' => 'Options d\'affichage', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Choix du thème', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Éditer les fichiers du thème', +'L_CONFIG_VIEW_FILES_EDIT' => 'Éditer les fichiers du thème', +'L_CONFIG_VIEW_SORT' => 'Tri des articles', +'L_CONFIG_VIEW_BYPAGE' => 'Nombre d\'articles affichés par page', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Nombre d\'articles affichés par page dans les archives', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Nombre d\'articles affichés par page dans l\'administration', +'L_CONFIG_VIEW_SORT_COMS' => 'Tri des commentaires', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Nombre de commentaires affichés par page dans l\'administration', +'L_CONFIG_VIEW_IMAGES' => 'Taille des images (largeur x hauteur)', +'L_CONFIG_VIEW_THUMBS' => 'Taille des miniatures (largeur x hauteur)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Utiliser une page statique comme page d\'accueil', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Attention cette page est inactive', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Télécharger d\'autres thèmes sur ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Nombre d\'articles/commentaires affichés sur les fils Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Afficher que le chapô dans les flux Rss des articles', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Si le chapô est vide, le contenu est affiché', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Texte à ajouter comme signature au bas de chaque flux Rss des articles', +'L_CONFIG_VIEW_UPDATE' => 'Modifier les options d\'affichage', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Afficher les catégories sans article', +'L_CONFIG_HOMETEMPLATE' => 'Template de la page d\'accueil', + +# parametres_avances.php + +'L_CONFIG_ADVANCED_DESC' => 'Configuration avancée', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Activer la réécriture d\'urls', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT'=> 'Attention un fichier .htaccess est déjà présent à la racine de votre PluXml. En activant la réécriture d\'url ce fichier sera modifié', +'L_CONFIG_ADVANCED_GZIP' => 'Activer la compression GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Permet de compresser les pages pour économiser de la bande passante, cependant cela peut augmenter la charge processeur', +'L_CONFIG_ADVANCED_CAPCHA' => 'Activer le capcha anti-spam', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Clef d\'administration (URLs privés)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Vider ce champs pour regénérer la clef', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Utiliser un dossier images et documents différent pour chaque utilisateur', +'L_HELP_SLASH_END' => 'Ne pas oublier le slash à la fin', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Emplacement des images (dossier)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Emplacement des documents (dossier)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Emplacement des articles (dossier)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Emplacement des commentaires (dossier)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Emplacement des pages statiques (dossier)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Emplacement des thèmes (dossier)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Emplacement des plugins (dossier)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Emplacement des fichiers de configuration (dossier)', +'L_CONFIG_ADVANCED_UPDATE' => 'Modifier la configuration avancée', + +# parametres_base.php + +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configuration de base', +'L_CONFIG_BASE_SITE_TITLE' => 'Titre du site', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Sous-titre/description du site', +'L_CONFIG_BASE_URL_HELP' => 'Ne pas oublier le slash à la fin', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Langue par défaut du site', +'L_CONFIG_BASE_TIMEZONE' => 'Fuseau horaire', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Autoriser les commentaires', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Modérer les commentaires à la création', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Modérer les articles pour les profils Rédacteur et Editeur', +'L_CONFIG_BASE_UPDATE' => 'Modifier la configuration de base', +'L_CONFIG_META_DESCRIPTION' => 'Contenu de la balise meta "description" du site (optionnel)', +'L_CONFIG_META_KEYWORDS' => 'Contenu de la balises meta "keywords" du site (optionnel)', + +# parametres_edittpl.php + +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Ce thème n\'existe pas !', +'L_CONFIG_EDITTPL_TITLE' => 'Édition du thème', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Choix du fichier à éditer :', +'L_CONFIG_EDITTPL_LOAD' => 'Charger', + +# parametres_infos.php + +'L_CONFIG_INFOS_TITLE' => 'Informations relatives à PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Ces informations vous renseignent sur le fonctionnement de votre PluXml et peuvent s\'avérer utiles pour son dépannage.', +'L_CONFIG_INFOS_NB_CATS' => 'Nombre de catégories :', +'L_CONFIG_INFOS_NB_STATICS' => 'Nombre de pages statiques :', +'L_CONFIG_INFOS_WRITER' => 'Nom du rédacteur en session :', +'L_PLUXML_CHECK_VERSION' => 'Vérification du numéro de version de PluXml sur le site officiel PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Impossible de vérifier les mises à jour tant que \'allow_url_fopen\' est désactivé sur ce système', +'L_PLUXML_UPDATE_ERR' => 'La vérification de mise à jour a échoué pour une raison inconnue', +'L_PLUXML_UPTODATE' => 'Vous utilisez la dernière version de PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Une nouvelle version de PluXml est sortie ! Vous pouvez la télécharger sur', + +# parametres_users.php + +'L_CONFIG_USERS_TITLE' => 'Gestion des utilisateurs', +'L_CONFIG_USER' => 'Utilisateur', +'L_CONFIG_USERS_ID' => 'Numéro d\'utilisateur', +'L_CONFIG_USERS_ACTIVE' => 'Actif', +'L_CONFIG_USERS_ACTION' => 'Action', +'L_CONFIG_USERS_NEW' => 'Nouvel utilisateur', +'L_CONFIG_USERS_UPDATE' => 'Modifier la liste des utilisateurs', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Identifiant de connexion déjà utilisé', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Nom d\'utilisateur déjà utilisé', +'L_CONFIG_USERS_DELETE_CONFIRM' => 'Supprimer les utilisateurs sélectionnés ?', + +# parametre_plugins.php + +'L_BACK_TO_PLUGINS' => 'Retour à la page des plugins', +'L_NO_PLUGIN' => 'Aucun plugin', +'L_PLUGIN_NO_CONFIG' => 'Plugin non configuré', +'L_PLUGINS_CSS' => 'Code css', +'L_PLUGINS_CSS_TITLE' => 'Éditer le code css du plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Contenu fichier css site', +'L_CONTENT_FIELD_BACKEND' => 'Contenu fichier css administrateur', + +# parametres_plugins.php + +'L_PLUGINS_TITLE' => 'Gestion des plugins', +'L_PLUGINS_VERSION' => 'Version', +'L_PLUGINS_AUTHOR' => 'Auteur', +'L_PLUGINS_ACTIVATE' => 'Activer', +'L_PLUGINS_DEACTIVATE' => 'Désactiver', +'L_PLUGINS_DELETE' => 'Supprimer', +'L_PLUGINS_DELETE_ERROR' => 'Une erreur s\'est produite pendant la suppression', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Suppression effectuée avec succès', +'L_PLUGINS_CONFIG' => 'Configuration', +'L_PLUGINS_CONFIG_TITLE' => 'Configuration du plugin', +'L_PLUGINS_HELP' => 'Aide', +'L_PLUGINS_HELP_TITLE' => 'Voir l\'aide du plugin', +'L_PLUGINS_REQUIREMENTS' => 'Pré-requis', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Liste des plugins présents et actifs pour activer ce plugin', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Aucun', +'L_PLUGINS_ALPHA_SORT' => 'Trier par ordre alphabétique les plugins', +'L_PLUGINS_LOADING_SORT' => 'Ordre de chargement', +'L_PLUGINS_ACTION' => 'Action', +'L_PLUGINS_APPLY_BUTTON' => 'Modifier la liste des plugins', +'L_PLUGINS_ACTIVE_LIST' => 'Plugins actifs', +'L_PLUGINS_INACTIVE_LIST' => 'Plugins inactifs', + +# profil.php + +'L_PROFIL_EDIT_TITLE' => 'Édition de votre profil', +'L_PROFIL' => 'Profil', +'L_PROFIL_LOGIN' => 'Identifiant de connexion', +'L_PROFIL_USER' => 'Nom d\'utilisateur', +'L_PROFIL_MAIL' => 'Adresse email', +'L_PROFIL_ADMIN_LANG' => 'Langue utilisée dans l\'administration', +'L_PROFIL_INFOS' => 'Informations', +'L_PROFIL_UPDATE' => 'Modifier votre profil', +'L_PROFIL_CHANGE_PASSWORD' => 'Changement du mot de passe', +'L_PROFIL_PASSWORD' => 'Mot de passe', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirmation du mot de passe', +'L_PROFIL_UPDATE_PASSWORD' => 'Changer votre mot de passe', + +# statique.php + +'L_STATIC_BACK_TO_PAGE' => 'Retour à la liste des pages statiques', +'L_STATIC_UNKNOWN_PAGE' => 'Cette page statique n\'existe pas ou n\'existe plus !', +'L_STATIC_TITLE' => 'Édition du code source de la page statique', +'L_STATIC_VIEW_PAGE' => 'Visualiser la page', +'L_STATIC_ON_SITE' => 'sur le site', +'L_STATIC_UPDATE' => 'Enregistrer cette page statique', +'L_STATIC_TITLE_HTMLTAG' => 'Contenu balise title (option)', +'L_STATIC_META_DESCRIPTION' => 'Contenu de la balise meta "description" pour cette page statique (option)', +'L_STATIC_META_KEYWORDS' => 'Contenu de la balise meta "keywords" pour cette page statique (option)', + +# statiques.php + +'L_STATICS_PAGE_TITLE' => 'Création et édition des pages statiques', +'L_STATICS_ID' => 'Identifiant', +'L_STATICS_GROUP' => 'Groupe', +'L_STATICS_TITLE' => 'Titre', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Active', +'L_STATICS_ORDER' => 'Ordre', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Action', +'L_STATICS_TEMPLATE_FIELD' => 'Template', +'L_STATICS_PAGE_HOME' => 'Définir en tant que page d\'accueil', +'L_STATICS_HOME_PAGE' => 'Page
d\'accueil', +'L_PAGE' => 'Page', +'L_VIEW' => 'Voir', +'L_STATICS_SRC_TITLE' => 'Éditer le code source de cette page', +'L_STATICS_SRC' => 'Éditer', +'L_STATICS_NEW_PAGE' => 'Nouvelle page', +'L_STATICS_UPDATE' => 'Modifier la liste des pages statiques', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Titre de page statique déjà utilisé', + +# top.php +'L_PROFIL_ADMIN' => 'Administrateur', +'L_PROFIL_MANAGER' => 'Gestionnaire', +'L_PROFIL_MODERATOR' => 'Modérateur', +'L_PROFIL_EDITOR' => 'Editeur', +'L_PROFIL_WRITER' => 'Rédacteur', +'L_ADMIN' => '- Administration', +'L_LOGIN' => 'Connecté en tant que', +'L_ADMIN_LOGOUT' => 'Déconnexion', +'L_ADMIN_LOGOUT_TITLE' => 'Quitter la session d\'administration', +'L_BACK_TO_SITE' => 'Retour au site', +'L_BACK_TO_SITE_TITLE' => 'Retour à la page d\'accueil du site', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Retour à la page du blog', +'L_MENU_ARTICLES' => 'Articles', +'L_MENU_ARTICLES_TITLE' => 'Liste et modification d\'articles', +'L_MENU_NEW_ARTICLES' => 'Nouvel article', +'L_MENU_NEW_ARTICLES_TITLE' => 'Nouvel article', +'L_MENU_STATICS_TITLE' => 'Liste et modification des pages statiques', +'L_MENU_STATICS' => 'Pages statiques', +'L_MENU_COMMENTS_TITLE' => 'Liste et modification des commentaires', +'L_MENU_COMMENTS' => 'Commentaires', +'L_MENU_MEDIAS_TITLE' => 'Uploader et insérer un média', +'L_MENU_MEDIAS' => 'Médias', +'L_MENU_CATEGORIES_TITLE' => 'Créer, gérer, éditer les catégories', +'L_MENU_CATEGORIES' => 'Catégories', +'L_MENU_CONFIG_TITLE' => 'Configurer PluXml', +'L_MENU_CONFIG' => 'Paramètres', +'L_MENU_PROFIL_TITLE' => 'Gérer votre profil utilisateur', +'L_MENU_PROFIL' => 'Profil', +'L_WARNING_INSTALLATION_FILE' => '

Le fichier install.php est présent à la racine de votre PluXml.
Pour des raisons de sécurité, il est fortement conseillé de le supprimer.

', + +# user.php +'L_USER_UNKNOWN' => 'Utilisateur inconnu', +'L_USER_LANG' => 'Langue utilisée dans l\'administration', +'L_USER_MAIL' => 'Adresse email', +'L_USER_INFOS' => 'Informations', +'L_USER_UPDATE' => 'Mettre à jour cet utilisateur', +'L_USER_PAGE_TITLE' => 'Edition des options de l\'utilisateur', +'L_USER_BACK_TO_PAGE' => 'Retour à la liste des utilisateurs', + +# + +'L_MENU_CONFIG_BASE_TITLE' => 'Modifier la configuration de base de votre PluXml', +'L_MENU_CONFIG_BASE' => 'Configuration de base', +'L_MENU_CONFIG_VIEW_TITLE' => 'Modifier les options d\'affichage de votre PluXml', +'L_MENU_CONFIG_VIEW' => 'Options d\'affichage', +'L_MENU_CONFIG_USERS_TITLE' => 'Gérer les comptes utilisateurs de votre PluXml', +'L_MENU_CONFIG_USERS' => 'Comptes utilisateurs', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Modifier la configuration avancée de votre PluXml', +'L_MENU_CONFIG_ADVANCED' => 'Configuration avancée', +'L_MENU_CONFIG_INFOS_TITLE' => 'Avoir des informations sur votre PluXml', +'L_MENU_CONFIG_INFOS' => 'Informations', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Gérer les plugins', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', + +); +?> diff --git a/src/core/lang/fr/core.php b/src/core/lang/fr/core.php new file mode 100644 index 0000000..4ad5ea9 --- /dev/null +++ b/src/core/lang/fr/core.php @@ -0,0 +1,136 @@ + 'Français', + +# common +'L_PLUXML_VERSION' => 'Pluxml version', +'L_HOMEPAGE' => 'Accueil', +'L_UNCLASSIFIED' => 'Non classé', +'L_INFO_PHP_VERSION' => 'Version de php', +'L_INFO_MAGIC_QUOTES' => 'Etat des "magic quotes"', +'L_INFO_CHARSET' => 'encodage', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Le theme principal de PluXml est introuvable', +'L_ERR_FILE_NOTFOUND' => 'Le fichier cible de PluXml est introuvable', +'L_ERR_PAGE_NOT_FOUND' => 'Page non trouvée', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'janv', +'L_SHORT_FEBRUARY' => 'févr', +'L_SHORT_MARCH' => 'mars', +'L_SHORT_APRIL' => 'avril', +'L_SHORT_MAY' => 'mai', +'L_SHORT_JUNE' => 'juin', +'L_SHORT_JULY' => 'juil', +'L_SHORT_AUGUST' => 'août', +'L_SHORT_SEPTEMBER' => 'sept', +'L_SHORT_OCTOBER' => 'oct', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'déc', +'L_JANUARY' => 'janvier', +'L_FEBRUARY' => 'février', +'L_MARCH' => 'mars', +'L_APRIL' => 'avril', +'L_MAY' => 'mai', +'L_JUNE' => 'juin', +'L_JULY' => 'juillet', +'L_AUGUST' => 'août', +'L_SEPTEMBER' => 'septembre', +'L_OCTOBER' => 'octobre', +'L_NOVEMBER' => 'novembre', +'L_DECEMBER' => 'décembre', +'L_MONDAY' => 'lundi', +'L_TUESDAY' => 'mardi', +'L_WEDNESDAY' => 'mercredi', +'L_THURSDAY' => 'jeudi', +'L_FRIDAY' => 'vendredi', +'L_SATURDAY' => 'samedi', +'L_SUNDAY' => 'dimanche', + +# class.plx.capcha.php +'L_LAST' => 'dernière', +'L_FIRST' => 'première', +'L_SECOND' => 'deuxième', +'L_THIRD' => 'troisième', +'L_FOURTH' => 'quatrième', +'L_FIFTH' => 'cinquième', +'L_SIXTH' => 'sizième', +'L_SEVENTH' => 'septième', +'L_EIGTH' => 'huitième', +'L_NINTH' => 'neuvième', +'L_TENTH' => 'dixième', +'L_NTH' => 'ème', +'L_CAPCHA_QUESTION' => 'Quelle est la %s lettre du mot %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s est accessible en écriture', +'L_WRITE_NOT_ACCESS' => '%s n\'est pas accessible en écriture ou n\'existe pas', +'L_MODREWRITE_AVAILABLE' => 'Module apache de réécriture d\'url mod_rewrite disponible', +'L_MODREWRITE_NOT_AVAILABLE' => 'Module apache de réécriture d\'url mod_rewrite non disponible', +'L_LIBGD_INSTALLED' => 'Bibliothèque GD installée', +'L_LIBGD_NOT_INSTALLED' => 'Bibliothèque GD non installée', +'L_MAIL_AVAILABLE' => 'Fonction d\'envoi de mail disponible', +'L_MAIL_NOT_AVAILABLE' => 'Fonction d\'envoi de mail non disponible', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Le fichier "%sversion" est nécessaire au fonctionnement de PluXml', +'L_ARTICLE_NO_TAG' => 'Aucun article pour ce mot clé !', +'L_UNKNOWN_CATEGORY' => 'Cette catégorie est inexistante !', +'L_NO_ARTICLE_PAGE' => 'Aucun article pour cette page !', +'L_UNKNOWN_ARTICLE' => 'Cet article n\'existe pas ou n\'existe plus !', +'L_COM_IN_MODERATION' => 'Le commentaire est en cours de modération par l\'administrateur de ce site', +'L_UNKNOWN_STATIC' => 'Cette page n\'existe pas ou n\'existe plus !', +'L_DOCUMENT_NOT_FOUND' => 'Le document spécifié est introuvable', +'L_NEWCOMMENT_ERR' => 'Une erreur s\'est produite lors de la publication de ce commentaire', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Merci de remplir tous les champs obligatoires requis', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'La vérification anti-spam a échoué', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compression %s activée', +'L_PAGETITLE_ARCHIVES' => 'Archives', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'aucune catégorie', +'L_CATEGORY' => 'catégorie', +'L_CATEGORIES' => 'catégories', +'L_NO_ARTICLE' => 'aucun article', +'L_ARTICLE' => 'article', +'L_ARTICLES' => 'articles', +'L_ARTAUTHOR_UNKNOWN' => 'inconnu', +'L_ARTTAGS_NONE' => 'aucun', +'L_ARTCHAPO' => 'Lire la suite de #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Fil Rss des articles de cette catégorie', +'L_ARTFEED_RSS_TAG' => 'Fil Rss des articles de ce mot clé', +'L_ARTFEED_RSS' => 'Fil Rss des articles', +'L_NO_COMMENT' => 'aucun commentaire', +'L_COMMENT' => 'commentaire', +'L_COMMENTS' => 'commentaires', +'L_COMFEED_RSS_ARTICLE' => 'Fil Rss des commentaires de cet article', +'L_COMFEED_RSS' => 'Fil Rss des commentaires', +'L_STATICCONTENT_INPROCESS' => 'Cette page est actuellement en cours de rédaction', +'L_SAID' => 'a dit', + +'L_PAGINATION_FIRST_TITLE' => 'Aller à la première page', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Page précédente', +'L_PAGINATION_PREVIOUS' => 'précédente', +'L_PAGINATION_NEXT_TITLE' => 'page suivante', +'L_PAGINATION_NEXT' => 'suivante', +'L_PAGINATION_LAST_TITLE' => 'Aller à la dernière page', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'page %s sur %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Les URLs privees n\'ont pas ete initialisees dans vos parametres d\'administration !', +'L_FEED_COMMENTS' => 'Commentaires', +'L_FEED_ONLINE_COMMENTS' => 'Commentaires en ligne', +'L_FEED_OFFLINE_COMMENTS' => 'Commentaires hors ligne', +'L_FEED_WRITTEN_BY' => 'Rédigé par', + +); +?> \ No newline at end of file diff --git a/src/core/lang/fr/install.php b/src/core/lang/fr/install.php new file mode 100644 index 0000000..ae18e70 --- /dev/null +++ b/src/core/lang/fr/install.php @@ -0,0 +1,32 @@ + 'Installation', +'L_WRONG_PHP_VERSION' => 'PluXml requiert PHP 5 ou superieur pour fonctionner.', +'L_SELECT_LANG' => 'Sélectionnez votre langue', +'L_INPUT_CHANGE' => 'Changer', +'L_DEFAULT_CATEGORY_TITLE' => 'Rubrique 1', +'L_DEFAULT_CATEGORY_URL' => 'rubrique-1', +'L_DEFAULT_STATIC_TITLE' => 'Statique 1', +'L_DEFAULT_STATIC_URL' => 'statique-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Premier article', +'L_DEFAULT_ARTICLE_URL' => 'premier-article', +'L_DEFAULT_COMMENT_CONTENT' => 'Ceci est un premier commentaire !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml est déjà configuré !', +'L_ERR_MISSING_USER' => 'Veuillez renseigner le nom du rédacteur !', +'L_ERR_MISSING_LOGIN' => 'Veuillez renseigner le login de connexion !', +'L_ERR_MISSING_PASSWORD' => 'Veuillez renseigner un mot de passe !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Confirmation du mot de passe incorrecte !', +'L_PLUXML_INSTALLATION' => 'Installation de PluXml', +'L_SITE_DESCRIPTION' => 'Blog ou Cms à l\'Xml !', +'L_VERSION' => 'version', +'L_USERNAME' => 'Nom de l\'administrateur', +'L_LOGIN' => 'Identifiant de connexion à l\'administration', +'L_PASSWORD' => 'Mot de passe', +'L_PASSWORD_CONFIRMATION' => 'Confirmation du mot de passe', +'L_INPUT_INSTALL' => 'Installer', +'L_TIMEZONE' => 'Fuseau horaire', +); +?> \ No newline at end of file diff --git a/src/core/lang/fr/update.php b/src/core/lang/fr/update.php new file mode 100644 index 0000000..3dbdd25 --- /dev/null +++ b/src/core/lang/fr/update.php @@ -0,0 +1,58 @@ + 'Enregistrement des données effectué avec succès', +'L_UPDATE_TITLE' => 'Mise à jour PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml requiert PHP 5 ou superieur pour fonctionner.', + +'L_SELECT_LANG' => 'Sélectionnez votre langue', +'L_INPUT_CHANGE' => 'Changer', + +'L_UPDATE_UPTODATE' => 'Votre PluXml est déjà à jour.', +'L_UPDATE_NOT_AVAILABLE' => 'Aucune mise à jour n\'est disponible.', +'L_UPDATE_BACK' => 'Revenir au site', +'L_UPDATE_WARNING1' => 'Vous allez mettre à jour votre ancienne version de PluXml', +'L_UPDATE_SELECT_VERSION' => 'Veuillez sélectionner dans la liste ci-dessous votre ancienne version de PluXml à mettre à jour.', +'L_UPDATE_WARNING2' => 'Si votre ancienne version n\'est pas listée ici, c\'est qu\'il n\'existe pas de procédure automatisée de mise à jour car votre version est trop vieille.
Nous vous suggérons de télécharger la dernière version de PluXml et de faire une nouvelle installation.', +'L_UPDATE_WARNING3' => 'Attention, avant de démarrer la mise à jour, n\'oubliez pas de faire une sauvegarde de vos données en faisant une copie du dossier "data"', +'L_UPDATE_START' => 'Démarrer la mise à jour', + +'L_UPDATE_ENDED' => 'Mise à jour de la version %s terminée.', +'L_UPDATE_INPROGRESS' => 'Applications des mises à jour version', +'L_UPDATE_ERROR' => 'Une erreur s\'est produite pendant la mise à jour.', +'L_UPDATE_SUCCESSFUL' => 'Toutes les mises à jour ont été appliquées avec succès !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Mise à jour du fichier parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Création du fichier tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Erreur pendant la création du fichier tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Création du fichier thème', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Erreur pendant la création du fichier', +'L_UPDATE_ARTICLES_CONVERSION' => 'Conversion des articles au nouveau format', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Erreur pendant le traitement du fichier', +'L_UPDATE_STATICS_MIGRATION' => 'Migration du fichier des pages statiques', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Erreur pendant la migration du fichier des pages statiques', +'L_UPDATE_CREATE_USERS_FILE' => 'Création du fichier des utilisateurs', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Erreur pendant la création du fichier des utilisateurs', +'L_UPDATE_USERS_MIGRATION' => 'Migration du fichier des utilisateurs', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Erreur pendant la migration du fichier des utilisateurs', +'L_UPDATE_ERR_NO_USERS' => 'Aucun utilisateur présent dans le fichier', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Création du fichier .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Erreur pendant la création du fichier .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Mise à jour du fichier .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Erreur pendant la mise à jour du fichier .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migration du fichier des catégories', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Erreur pendant la migration du fichier des catégories', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Création du fichier plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Erreur pendant la création du fichier plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Suppression du fichier core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Erreur pendant la suppression du fichier core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Suppression du dossier core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Erreur pendant la suppression du dossier core/plxtoolbar/', +'L_UPDATE_FILE' => 'Mise à jour du fichier', +'L_UPDATE_ERR_FILE' => 'Erreur pendant la mise à jour du fichier', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migration des fichiers de paramètrage des plugins dans le dossier de configuration', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Mise à jour du fichier plugins.xml', + +); +?> diff --git a/src/core/lang/index.html b/src/core/lang/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/core/lang/it/admin.php b/src/core/lang/it/admin.php new file mode 100644 index 0000000..2f140aa --- /dev/null +++ b/src/core/lang/it/admin.php @@ -0,0 +1,462 @@ + 'Errore sconosciuto', +'L_CONFIRM_DELETE' => 'Confermare l\'eliminazione ?', +'L_SAVE_FILE' => 'Salvare il file', +'L_SAVE_FILE_SUCCESSFULLY' => 'File salvato con successo', +'L_SAVE_FILE_ERROR' => 'Salvataggio del file per errore', +'L_SAVE_SUCCESSFUL' => 'Dati salvati con successo', +'L_SAVE_ERR' => 'Errore durante il salvataggio dei dati', +'L_NO_ENTRY' => 'Accesso non consentito', +'L_ERR_USER_EMPTY' => 'Inserisci un nome utente', +'L_ERR_PASSWORD_EMPTY' => 'Inserisci una password', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Conferma della password errata o non esistente', +'L_ERR_INVALID_EMAIL' => 'Indirizzo email non valido', +'L_ERR_INVALID_SITE' => 'Indirizzo del sito non valido', +'L_ERR_INVALID_ARTICLE_IDENT' => 'ID dell\'articolo non valido', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nuova-categoria', +'L_DEFAULT_NEW_STATIC_URL' => 'nuova-pagina', +'L_DEFAULT_NEW_ARTICLE_URL' => 'nuovo-articolo', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Articolo creato con successo', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Articolo aggiornato con successo', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Articolo cancellato con successo', +'L_ARTICLE_SAVE_ERR' => 'Errore durante il salvataggio dell\'articolo', +'L_ARTICLE_DELETE_ERR' => 'Errore durante la cancellazione dell\'articolo', +'L_ERR_UNKNOWN_COMMENT' => 'Il commento richiesto non esiste oppure è stato cancellato', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Commento modificato con successo', +'L_COMMENT_UPDATE_ERR' => 'Errore durante l\'aggiornamento del commento', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Commento cancellato con successo', +'L_COMMENT_DELETE_ERR' => 'Errore durante la cancellazione del commento', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Pubblicazione del commento avvenuta con successo', +'L_COMMENT_VALIDATE_ERR' => 'Errore durante la pubblicazione del commento', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Il commento è stato moderato con successo', +'L_COMMENT_MODERATE_ERR' => 'Errore durante la moderazione del commento', +'L_COMMENT_WRITTEN_BY' => 'Pubblicato da', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Impossibile creare la cartella media per l\'utente in uso', +'L_PLXMEDIAS_ROOT' => 'radice', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Impossibile creare la cartella', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Cartella creata con successo', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Questa cartella esiste già', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Errore durante la cancellazione della cartella', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Cartella cancellata con successo', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'Il tipo di file non è permesso', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'La dimensione di un file è maggiore di', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Errore durante l\'invio un file', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'File inviato con successo', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Errore durante il caricamento di file', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'I file inviati con successo', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Rimosso con successo i file', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Errore durante l\'eliminazione di un file', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'File eliminato con successo', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Errore durante l\'eliminazione del file', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Errore durante lo spostamento dei file', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Errore durante lo spostamento del file', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'I file sono stati spostati con successo', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Il file è stato spostato con successo', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Sposta', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Errore durante la creazione della miniatura', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Errore nella creazione delle miniature', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniature creato con successo', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Miniature creato con successo', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Nuovo articolo', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Data di pubblicazione non valida', +'L_ERR_UNKNOWN_ARTICLE' => 'L\'articolo richiesto non esiste o è stato cancellato !', +'L_ERR_FORBIDDEN_ARTICLE' => 'Non disponi dei diritti per accedere a questo articolo !', +'L_BACK_TO_ARTICLES' => 'Ritorna alla lista degli articoli', +'L_ARTICLE_EDITING' => 'Modifica articolo', +'L_ARTICLE_TITLE' => 'Titolo', +'L_ARTICLE_LIST_AUTHORS' => 'Autore', +'L_HEADLINE_FIELD' => 'Premessa (facoltativo)', +'L_CONTENT_FIELD' => 'Contenuto', +'L_LINK_FIELD' => 'Link all\'articolo', +'L_LINK_ACCESS' => 'Vai all\'articolo', +'L_LINK_VIEW' => 'vedere', +'L_ARTICLE_STATUS' => 'Stato', +'L_DRAFT' => 'Bozza', +'L_PUBLISHED' => 'Pubblicato', +'L_AWAITING' => 'In attesa di convalida', +'L_ARTICLE_DATE' => 'Data di pubblicazione', +'L_NOW' => 'adesso', +'L_ARTICLE_CATEGORIES' => 'Categoria', +'L_CATEGORY_HOME_PAGE' => 'Homepage', +'L_NEW_CATEGORY' => 'Nuova categoria', +'L_ARTICLE_TAGS_FIELD' => 'Tag', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separa i tag con una virgola', +'L_ARTICLE_TOGGLER_TITLE' => 'Lista dei tag', +'L_NO_TAG' => 'Nessuna tag presente', +'L_ALLOW_COMMENTS' => 'Autorizza i commenti', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'Il campo URL si riempie automaticamente durante la creazione', +'L_ARTICLE_TEMPLATE_FIELD' => 'Modello', +'L_ARTICLE_MANAGE_COMMENTS' => 'Gestisci i commenti', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Gestisci i commenti dell\'articolo', +'L_ARTICLE_NEW_COMMENT' => 'Scrivi un commento', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Scrivi un commento sull\'articolo', +'L_ARTICLE_DELETE_CONFIRM' => 'Vuoi cancellare questo articolo ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Anteprima', +'L_ARTICLE_DRAFT_BUTTON' => 'Salva la bozza', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Pubblica', +'L_ARTICLE_MODERATE_BUTTON' => 'Sottoporre per l\'approvazione', +'L_ARTICLE_OFFLINE_BUTTON' => 'Disabilita', +'L_ARTICLE_UPDATE_BUTTON' => 'Registra', +'L_CATEGORY_ADD_BUTTON' => 'Aggiungi', +'L_ARTICLE_META_DESCRIPTION' => 'Contenuto del meta tag "description" (facoltativo)', +'L_ARTICLE_META_KEYWORDS' => 'Contenuto del meta tag "keywords" (facoltativo)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Titolo contenuto tag (opzionale)', +'L_ARTICLE_CHAPO_HIDE' => 'nascondere', +'L_ARTICLE_CHAPO_DISPLAY' => 'mostrare', +'L_AUTH_PAGE_TITLE' => 'Pagina di autenticazione', +'L_LOGOUT_SUCCESSFUL' => 'Disconnessione avvenuta con successo', +'L_LOGIN_PAGE' => 'Pannello di amministrazione', +'L_AUTH_LOGIN_FIELD' => 'Nome utente', +'L_AUTH_PASSWORD_FIELD' => 'Password', +'L_SUBMIT_BUTTON' => 'Collegati', +'L_ERR_WRONG_PASSWORD' => 'Nome utente e/o password non corretti', +'L_POWERED_BY' => 'Powered by PluXml', +'L_CAT_TITLE' => 'Gestione categorie', +'L_CAT_LIST_ID' => 'ID', +'L_CAT_LIST_ACTIVE' => 'Attiva', +'L_CAT_LIST_NAME' => 'Nome categoria', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Ordinamento', +'L_CAT_LIST_BYPAGE' => 'N. art/pagina', +'L_CAT_LIST_ORDER' => 'Ordine', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Categoria', +'L_DISPLAY' => 'Visualizza', +'L_HIDE' => 'Nascondi', +'L_OPTIONS' => 'Opzioni', +'L_FOR_SELECTION' => 'Se selezionati...', +'L_DELETE' => 'Cancella', +'L_CAT_APPLY_BUTTON' => 'Modifica la lista delle categorie', +'L_CAT_UNKNOWN' => 'categoria sconosciuta', +'L_EDITCAT_PAGE_TITLE' => 'Gestisci le opzioni delle categorie', +'L_EDITCAT_DESCRIPTION' => 'Descrizione', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Mostra articoli in questa categoria nella home page', +'L_EDITCAT_TEMPLATE' => 'Modello', +'L_EDITCAT_BACK_TO_PAGE' => 'Ritorna alla lista delle categorie', +'L_EDITCAT_UPDATE' => 'Aggiorna questa categoria', +'L_EDITCAT_TITLE_HTMLTAG' => 'Titolo contenuto tag (opzionale)', +'L_EDITCAT_META_DESCRIPTION' => 'Contenuto del meta tag "description" per questa categoria (facoltativo)', +'L_EDITCAT_META_KEYWORDS' => 'Contenuto del meta tag "keywords" per questa categoria (facoltativo)', +'L_COMMENT_ORPHAN' => 'nessun articolo', +'L_COMMENT_ORPHAN_STATUS' => 'non visibile (consiglio: cancella questo commento)', +'L_COMMENT_ARTICLE_LINKED' => 'Articolo', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Articolo collegato a questo commento', +'L_COMMENT_OFFLINE' => 'disabilitato', +'L_COMMENT_ONLINE' => 'attivo', +'L_COMMENT_ONLINE_TITLE' => 'Visualizza questo commento sul sito', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Ritorna alla lista dei commenti di questo articolo', +'L_BACK_TO_COMMENTS' => 'Ritorna alla lista dei commenti', +'L_COMMENT_EDITING' => 'Modifica un commento', +'L_COMMENT_AUTHOR_FIELD' => 'Autore', +'L_COMMENT_TYPE_FIELD' => 'Tipo di commento', +'L_COMMENT_DATE_FIELD' => 'Data e ora di pubblicazione', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Sito', +'L_COMMENT_EMAIL_FIELD' => 'Email', +'L_COMMENT_STATUS_FIELD' => 'Stato', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Articolo correlato;', +'L_COMMENT_ARTICLE_FIELD' => 'Commento', +'L_COMMENT_DELETE_CONFIRM' => 'Vuoi cancellare questo commento ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Pubblica', +'L_COMMENT_OFFLINE_BUTTON' => 'Disabilita', +'L_COMMENT_ANSWER_BUTTON' => 'Rispondi a questo commento', +'L_COMMENT_UPDATE_BUTTON' => 'Aggiorna', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'Il commento non esiste o non è più disponibile !', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Il commento è stato disabilitato, non è possibile rispondere !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'L\'articolo richiesto non esiste o non è più possibile scrivere un commento !', +'L_ERR_CREATING_COMMENT' => 'Errore durante la creazione del commento', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Il commento è stato creato con successo', +'L_CREATE_NEW_COMMENT' => 'Scrivi un commento', +'L_COMMENT_SAVE_BUTTON' => 'Salva', +'L_ARTICLE_COMMENTS_LIST' => 'Commenti dell\'articolo (dal più recente al più vecchio)', +'L_COMMENT_ANSWER_TITLE' => 'Rispondi a questo commento', +'L_COMMENT_ANSWER' => 'Rispondi', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Scrivi un nuovo commento per questo articolo', +'L_COMMENT_NEW_COMMENT' => 'Scrivi un nuovo commento', +'L_COMMENTS_ARTICLE_SCOPE' => 'articolo', +'L_COMMENTS_GLOBAL_SCOPE' => 'sito intero', +'L_COMMENTS_OFFLINE_LIST' => 'Lista dei commenti in attesa di pubblicazione ', +'L_COMMENTS_LIST_DATE' => 'Data', +'L_COMMENTS_LIST_AUTHOR' => 'Autore', +'L_COMMENTS_LIST_MESSAGE' => 'Messaggio', +'L_COMMENTS_LIST_ACTION' => 'Azione', +'L_COMMENT_EDIT' => 'Modifica', +'L_COMMENT_EDIT_TITLE' => 'Modifica questo commento', +'L_COMMENT_DELETE' => 'Cancella', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Rss dei commenti disabilitati', +'L_COMMENT_OFFLINE_FEEDS' => 'Commenti disabilitati', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Rss dei commenti abilitati', +'L_COMMENT_ONLINE_FEEDS' => 'Commenti abilititati', +'L_COMMENTS_PRIVATE_FEEDS' => 'Feed privati', +'L_COMMENTS_ONLINE_LIST' => 'Lista delle recensioni pubblicate', +'L_COMMENTS_ALL_LIST' => 'Elenca commenti', +'L_COMMENT_SET_ONLINE' => 'Carica', +'L_COMMENT_SET_OFFLINE' => 'Non in linea', +'L_ARTICLES_FILTER_BUTTON' => 'Filtra', +'L_CATEGORIES_TABLE' => 'Categorie', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Categorie specifiche', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Tutti gli articoli', +'L_ARTICLES_LIST' => 'Lista degli articoli', +'L_ARTICLE_LIST_DATE' => 'Data', +'L_ARTICLE_LIST_TITLE' => 'Titolo', +'L_ARTICLE_LIST_CATEGORIES' => 'Categoria', +'L_ARTICLE_LIST_NBCOMS' => 'No commenti', +'L_ARTICLE_LIST_AUTHOR' => 'Autore', +'L_ARTICLE_LIST_ACTION' => 'Azione', +'L_CATEGORY_HOME' => 'Homepage', +'L_CATEGORY_DRAFT' => 'Bozza', +'L_ARTICLE_VIEW' => 'Visualizza', +'L_ARTICLE_VIEW_TITLE' => 'Visualizza questo articolo sul sito', +'L_ARTICLE_EDIT' => 'Modifica', +'L_ARTICLE_EDIT_TITLE' => 'Modifica questo articolo', +'L_NEW_COMMENTS_TITLE' => 'Commenti in attesa di pubblicazione', +'L_VALIDATED_COMMENTS_TITLE' => 'Commenti pubblicati', +'L_NO_ARTICLE' => 'Nessun articolo', +'L_ARTICLES_SEARCH_BUTTON' => 'Cerca', +'L_ARTICLES_ALL_CATEGORIES' => 'Tutte le categorie ...', +'L_ALL' => 'Tutte le', +'L_ALL_PUBLISHED' => 'Edizione', +'L_ALL_DRAFTS' => 'Bozze', +'L_ALL_AWAITING_MODERATION' => 'In attesa di convalida', +'L_MEDIAS_DELETE_FOLDER' => 'Cancella questa cartella', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Vuoi cancellare la cartella e il suo contenuto ?', +'L_MEDIAS_NO_FILE' => 'Nessun file', +'L_MEDIAS_FILENAME' => 'Nome del file', +'L_MEDIAS_ADD_FILE' => 'Aggiungi file', +'L_MEDIAS_BACK' => 'Indietro', +'L_MEDIAS_TITLE' => 'Gestione dei media', +'L_MEDIAS_IMAGES' => 'Immagini', +'L_MEDIAS_DOCUMENTS' => 'Documenti', +'L_MEDIAS_CREATE_FOLDER' => 'Crea una cartella', +'L_MEDIAS_SUBMIT_FILE' => 'Invia', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Dimensione max dei file', +'L_MEDIAS_DIRECTORY' => 'Posizione', +'L_MEDIAS_FOLDER' => 'File', +'L_MEDIAS_NEW_FOLDER' => 'Nuova Cartella', +'L_MEDIAS_FILESIZE' => 'Dimensioni', +'L_MEDIAS_DATE' => 'Data', +'L_MEDIAS_DIMENSIONS' => 'Dimensioni', +'L_MEDIAS_RESIZE' => 'Ridimensionare Immagini', +'L_MEDIAS_RESIZE_NO' => 'Dimensioni originali', +'L_MEDIAS_THUMBS' => 'Crea anteprima', +'L_MEDIAS_THUMBS_NONE' => 'Nessuna anteprima', +'L_MEDIAS_MODIFY' => 'Modifica', +'L_MEDIAS_THUMB' => 'Thumbnail', +'L_MEDIAS_EXTENSION' => 'Estensione', +'L_MEDIAS_ADD' => 'Aggiungi', +'L_MEDIAS_ALIGNMENT' => 'Allineamento', +'L_MEDIAS_ALIGN_NONE' => 'No', +'L_MEDIAS_ALIGN_LEFT' => 'Sinistra', +'L_MEDIAS_ALIGN_CENTER' => 'Centro', +'L_MEDIAS_ALIGN_RIGHT' => 'Diritto', +'L_MEDIAS_RECREATE_THUMB' => 'Ricrea thumbnail', +'L_SORT_ASCENDING_DATE' => 'data ascendente', +'L_SORT_DESCENDING_DATE' => 'data discendente', +'L_SORT_ALPHABETICAL' => 'alfabetico', +'L_OK' => 'Ok', +'L_YES' => 'Si', +'L_NO' => 'No', +'L_NONE1' => 'nessuno', +'L_NONE2' => 'nessuna', +'L_CONFIG_VIEW_FIELD' => 'Opzioni di visualizzazione', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Scelta del tema', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Modifica i file del tema', +'L_CONFIG_VIEW_FILES_EDIT' => 'Modifica i file del tema', +'L_CONFIG_VIEW_SORT' => 'Ordinamento degli articoli', +'L_CONFIG_VIEW_BYPAGE' => 'Numero di articoli visualizzati per pagina', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Numero di articoli visualizzati per pagina nell\'archivio', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Numero di articoli visualizzati per pagina nel pannello di amministrazione', +'L_CONFIG_VIEW_SORT_COMS' => 'Ordinamento dei commenti', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Numero di commenti visualizzati per nel pannello di amministrazione', +'L_CONFIG_VIEW_IMAGES' => 'Immagine Dimensioni (larghezza x altezza)', +'L_CONFIG_VIEW_THUMBS' => 'Dimensione delle miniature (larghezza x altezza)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Usa una pagina statica come homepage', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Attenzione, questa pagina non è attiva', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Scarica altri temi su ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Numero di articoli/commenti visualizzati', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Visualizzare solo la premessa degli articoli', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Se la premessa è vuota, visualizza il contenuto', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Testo da aggiungere come firma in basso ad ogni flusso Rss degli articoli', +'L_CONFIG_VIEW_UPDATE' => 'Modifica le opzioni di visualizzazione', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Visualizzare le categorie senza l\'articolo', +'L_CONFIG_HOMETEMPLATE' => 'Modello della homepage', +'L_CONFIG_ADVANCED_DESC' => 'Configurazione avanzata', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Abilita la riscrittura degli url', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Attenzione un file .htaccess è già presente alla radice di PluXml. Abilitando la riscrittura degli url questo file sarà modificato', +'L_CONFIG_ADVANCED_GZIP' => 'Abilita la compressione GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Consente la compressione delle pagine per ridurre la banda utilizzata, ciò potrebbe richiedere un maggiore utilizzo del processore', +'L_CONFIG_ADVANCED_CAPCHA' => 'Abilita il capcha anti-spam', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Chiave di amministrazione (URL privati)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Svuota questo campo per rigenerare la chiave', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Usare delle cartelle immagini e documenti diverse per ogni user', +'L_HELP_SLASH_END' => 'Non dimenticare la slash alla fine', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Posizionamento delle immagini (cartella)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Posizionamento dei documenti (cartella)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Posizionamento degli articoli(cartella)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Posizionamento dei commenti (cartella)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Posizionamento delle pagine statiche (cartella)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Posizionamento dei argomenti (cartella)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Posizionamento dei plugin (cartella)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Posizionamento dei file di configurazione (cartella)', +'L_CONFIG_ADVANCED_UPDATE' => 'Modifica la configurazione avanzata', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configurazione base', +'L_CONFIG_BASE_SITE_TITLE' => 'Titolo del sito', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Sottotitolo/descrizione del sito', +'L_CONFIG_BASE_URL_HELP' => 'Non dimenticare la slash alla fine', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Lingua predefinita del sito', +'L_CONFIG_BASE_TIMEZONE' => 'Fuso orario', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Autorizza i commenti', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Modera i commenti durante la creazione', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Modera gli articoli per i profili redattore ed editore', +'L_CONFIG_BASE_UPDATE' => 'Modifica la configurazione base', +'L_CONFIG_META_DESCRIPTION' => 'Contenuto della meta tag "description" del sito (facoltativo)', +'L_CONFIG_META_KEYWORDS' => 'Contenuto della meta tag "keywords" del sito (facoltativo)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Questo tema non esiste !', +'L_CONFIG_EDITTPL_TITLE' => 'Modifica il tema', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Scelta del file da modificare', +'L_CONFIG_EDITTPL_LOAD' => 'Carica', +'L_CONFIG_INFOS_TITLE' => 'Informazioni relative a PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Informazioni di dettaglio sul funzionamento di PluXml, possono essere utili per richiedere assistenza.', +'L_CONFIG_INFOS_NB_CATS' => 'Numero di categorie', +'L_CONFIG_INFOS_NB_STATICS' => 'Numero di pagine statiche :', +'L_CONFIG_INFOS_WRITER' => 'Nome dell\'utente collegato :', +'L_PLUXML_CHECK_VERSION' => 'Verifica della versione di PluXml sul sito ufficiale PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Impossibile verificare gli aggiornamenti perchè \'allow_url_fopen\' è disattivato su questo sistema', +'L_PLUXML_UPDATE_ERR' => 'Verifica degli aggiornamenti non riuscita', +'L_PLUXML_UPTODATE' => 'State utilizzando l\'ultima versione di PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Una nuova versione di PluXml è disponibile su', +'L_CONFIG_USERS_TITLE' => 'Gestione utenti', +'L_CONFIG_USER' => 'Utente', +'L_CONFIG_USERS_ID' => 'ID utente', +'L_CONFIG_USERS_ACTIVE' => 'Attivo', +'L_CONFIG_USERS_ACTION' => 'Azione', +'L_CONFIG_USERS_NEW' => 'Nuovo utente', +'L_CONFIG_USERS_UPDATE' => 'Modifica la lista degli utenti', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Login ID già usato', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Username già in uso', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Categoria nome già usato', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Come già usato', +'L_BACK_TO_PLUGINS' => 'Ritornare alla pagina dei plugin', +'L_NO_PLUGIN' => 'Nessun plugin', +'L_PLUGIN_NO_CONFIG' => 'Plugin non configurato', +'L_PLUGINS_CSS' => 'Css', +'L_PLUGINS_CSS_TITLE' => 'Modificare il codice css del plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Sito web contenuto del file Css', +'L_CONTENT_FIELD_BACKEND' => 'Amministratore contenuti css', +'L_PLUGINS_TITLE' => 'Gestione plugin', +'L_PLUGINS_VERSION' => 'Versione', +'L_PLUGINS_AUTHOR' => 'Autore', +'L_PLUGINS_ACTIVATE' => 'Abilita', +'L_PLUGINS_DEACTIVATE' => 'Disabilita', +'L_PLUGINS_DELETE' => 'Cancella', +'L_PLUGINS_DELETE_ERROR' => 'Errore durante la cancellazione', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Cancellazione avvenuta con successo', +'L_PLUGINS_CONFIG' => 'Configurazione', +'L_PLUGINS_CONFIG_TITLE' => 'Configurazione del plugin', +'L_PLUGINS_HELP' => 'Aiuto', +'L_PLUGINS_HELP_TITLE' => 'Vedere l\'aiuto del plugin', +'L_PLUGINS_REQUIREMENTS' => 'Prerequisiti', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Lista dei plugin presenti e attivi per attivare questo plugin', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Nessuno', +'L_PLUGINS_ALPHA_SORT' => 'Ordine alfabetico plugins', +'L_PLUGINS_LOADING_SORT' => 'Caricamento in corso per', +'L_PLUGINS_ACTION' => 'Azione', +'L_PLUGINS_APPLY_BUTTON' => 'Modificare l\'elenco dei plugin', +'L_PLUGINS_ACTIVE_LIST' => 'Plugins attivi', +'L_PLUGINS_INACTIVE_LIST' => 'Plugins inattivi', +'L_PROFIL_EDIT_TITLE' => 'Gestione profilo', +'L_PROFIL' => 'Profilo', +'L_PROFIL_LOGIN' => 'Nome utente', +'L_PROFIL_USER' => 'Nome utente', +'L_PROFIL_MAIL' => 'Indirizzo email', +'L_PROFIL_ADMIN_LANG' => 'Lingua usata nel pannello di amministrazione', +'L_PROFIL_INFOS' => 'Informazioni', +'L_PROFIL_UPDATE' => 'Modifica il profilo', +'L_PROFIL_CHANGE_PASSWORD' => 'Cambia la password', +'L_PROFIL_PASSWORD' => 'Password', +'L_PROFIL_CONFIRM_PASSWORD' => 'Conferma la password', +'L_PROFIL_UPDATE_PASSWORD' => 'Cambia la password', +'L_STATIC_BACK_TO_PAGE' => 'Ritorna alla lista delle pagine statiche', +'L_STATIC_UNKNOWN_PAGE' => 'Questa pagina statica non esiste oppure è stato cancellata !', +'L_STATIC_TITLE' => 'Modifica il codice della pagina statica', +'L_STATIC_VIEW_PAGE' => 'Visualizza la pagina', +'L_STATIC_ON_SITE' => 'sul sito', +'L_STATIC_UPDATE' => 'Salva questa pagina statica', +'L_STATIC_TITLE_HTMLTAG' => 'Titolo contenuto tag (opzionale)', +'L_STATIC_META_DESCRIPTION' => 'Contenuto della meta tag "description" per questa pagina statica (facoltativo)', +'L_STATIC_META_KEYWORDS' => 'Contenuto della meta tag "keywords" per questa pagina statica (facoltativo)', +'L_STATICS_PAGE_TITLE' => 'Gestione pagine statiche', +'L_STATICS_ID' => 'ID', +'L_STATICS_GROUP' => 'Gruppo', +'L_STATICS_TITLE' => 'Titolo', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Attiva', +'L_STATICS_ORDER' => 'Ordine', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Azione', +'L_STATICS_TEMPLATE_FIELD' => 'Modello', +'L_STATICS_PAGE_HOME' => 'Imposta come pagine iniziale', +'L_STATICS_HOME_PAGE' => 'Homepage', +'L_PAGE' => 'Pagina', +'L_VIEW' => 'Visualizza', +'L_STATICS_SRC_TITLE' => 'Modifica il codice di questa pagina', +'L_STATICS_SRC' => 'Modifica', +'L_STATICS_NEW_PAGE' => 'Nuova pagina', +'L_STATICS_UPDATE' => 'Modifica la lista delle pagine statiche', +'L_PROFIL_ADMIN' => 'Amministratore', +'L_PROFIL_MANAGER' => 'Manager', +'L_PROFIL_MODERATOR' => 'Moderatore', +'L_PROFIL_EDITOR' => 'Editore', +'L_PROFIL_WRITER' => 'Redattore', +'L_ADMIN' => '- Amministrazione', +'L_LOGIN' => 'Connesso come', +'L_ADMIN_LOGOUT' => 'Disconnettiti', +'L_ADMIN_LOGOUT_TITLE' => 'Esci dal pannello di amministrazione', +'L_BACK_TO_SITE' => 'Home', +'L_BACK_TO_SITE_TITLE' => 'Ritorna al sito', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Ritorna al blog', +'L_MENU_ARTICLES' => 'Articoli', +'L_MENU_ARTICLES_TITLE' => 'Gestisci gli articoli', +'L_MENU_NEW_ARTICLES' => 'Nuovo articolo', +'L_MENU_NEW_ARTICLES_TITLE' => 'Nuovo articolo', +'L_MENU_STATICS_TITLE' => 'Gestisci le pagine statiche', +'L_MENU_STATICS' => 'Pagine statiche', +'L_MENU_COMMENTS_TITLE' => 'Gestisci i commenti', +'L_MENU_COMMENTS' => 'Commenti', +'L_MENU_MEDIAS_TITLE' => 'Gestisci i media', +'L_MENU_MEDIAS' => 'Media', +'L_MENU_CATEGORIES_TITLE' => 'Gestisci le categorie', +'L_MENU_CATEGORIES' => 'Categorie', +'L_MENU_CONFIG_TITLE' => 'Configura PluXml', +'L_MENU_CONFIG' => 'Parametri', +'L_MENU_PROFIL_TITLE' => 'Gestisci il profilo', +'L_MENU_PROFIL' => 'Profilo', +'L_WARNING_INSTALLATION_FILE' => '

Il file install.php è presente nella radice di PluXml.
Per motivi di sicurezza, è fortemente consigliata la cancellazione.

', +'L_USER_UNKNOWN' => 'Utente sconosciuto', +'L_USER_LANG' => 'Lingua usata nel pannello di amministrazione', +'L_USER_MAIL' => 'Indirizzo email', +'L_USER_INFOS' => 'Informazioni', +'L_USER_UPDATE' => 'Aggiorna utente', +'L_USER_PAGE_TITLE' => 'Modifica le opzioni dell\'utente', +'L_USER_BACK_TO_PAGE' => 'Ritorna alla lista degli utenti', +'L_MENU_CONFIG_BASE_TITLE' => 'Configurazione di base', +'L_MENU_CONFIG_BASE' => 'Configurazione base', +'L_MENU_CONFIG_VIEW_TITLE' => 'Gestione opzioni di visualizzazione', +'L_MENU_CONFIG_VIEW' => 'Opzioni di visualizzazione', +'L_MENU_CONFIG_USERS_TITLE' => 'Gestisci gli utenti', +'L_MENU_CONFIG_USERS' => 'Utenti', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Gestione della configurazione avanzata', +'L_MENU_CONFIG_ADVANCED' => 'Configurazione avanzata', +'L_MENU_CONFIG_INFOS_TITLE' => 'Ottieni informazioni sulla versione di PluXml in uso', +'L_MENU_CONFIG_INFOS' => 'Informazioni', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Gestisci i plugin', +'L_MENU_CONFIG_PLUGINS' => 'Plugin', +'L_ERR_URL_ALREADY_EXISTS' => 'Url già in uso. Si prega di modificare il valore del campo \'Url\'', +); + +?> diff --git a/src/core/lang/it/core.php b/src/core/lang/it/core.php new file mode 100644 index 0000000..8f7d38c --- /dev/null +++ b/src/core/lang/it/core.php @@ -0,0 +1,136 @@ + 'Italiano', + +# common +'L_PLUXML_VERSION' => 'PluXml versione', +'L_HOMEPAGE' => 'Homepage', +'L_UNCLASSIFIED' => 'Non classificato', +'L_INFO_PHP_VERSION' => 'Versione di php', +'L_INFO_MAGIC_QUOTES' => 'Stato delle "magic quotes"', +'L_INFO_CHARSET' => 'encoding', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Tema principale non trovato', +'L_ERR_FILE_NOTFOUND' => 'File index non trovato', +'L_ERR_PAGE_NOT_FOUND' => 'Pagina non trovata', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'genn', +'L_SHORT_FEBRUARY' => 'febbr', +'L_SHORT_MARCH' => 'mar', +'L_SHORT_APRIL' => 'apr', +'L_SHORT_MAY' => 'magg', +'L_SHORT_JUNE' => 'guigno', +'L_SHORT_JULY' => 'luglio', +'L_SHORT_AUGUST' => 'ag', +'L_SHORT_SEPTEMBER' => 'sett', +'L_SHORT_OCTOBER' => 'ott', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dic', +'L_JANUARY' => 'gennaio', +'L_FEBRUARY' => 'febbraio', +'L_MARCH' => 'marzo', +'L_APRIL' => 'aprile', +'L_MAY' => 'mggio', +'L_JUNE' => 'giugno', +'L_JULY' => 'luglio', +'L_AUGUST' => 'agosto', +'L_SEPTEMBER' => 'settembre', +'L_OCTOBER' => 'ottobre', +'L_NOVEMBER' => 'novembre', +'L_DECEMBER' => 'dicembre', +'L_MONDAY' => 'lunedì', +'L_TUESDAY' => 'martedì', +'L_WEDNESDAY' => 'mercoledì', +'L_THURSDAY' => 'giovedì', +'L_FRIDAY' => 'venerdì', +'L_SATURDAY' => 'sabato', +'L_SUNDAY' => 'domenica', + +# class.plx.capcha.php +'L_LAST' => 'ultima', +'L_FIRST' => 'prima', +'L_SECOND' => 'seconda', +'L_THIRD' => 'terza', +'L_FOURTH' => 'quarta', +'L_FIFTH' => 'quinta', +'L_SIXTH' => 'sesta', +'L_SEVENTH' => 'settima', +'L_EIGTH' => 'ottava', +'L_NINTH' => 'nona', +'L_TENTH' => 'decima', +'L_NTH' => 'esima', +'L_CAPCHA_QUESTION' => 'Qual\'è la %s lettera della parola %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s è accessibile in scrittura', +'L_WRITE_NOT_ACCESS' => '%s non è accessibile in scrittura o non esiste', +'L_MODREWRITE_AVAILABLE' => 'Modulo mod_rewrite disponibile', +'L_MODREWRITE_NOT_AVAILABLE' => 'Modulo mod_rewrite non disponibile', +'L_LIBGD_INSTALLED' => 'Biblioteca GD installata', +'L_LIBGD_NOT_INSTALLED' => 'Biblioteca GD non installata', +'L_MAIL_AVAILABLE' => 'Funzione di invio mail disponible', +'L_MAIL_NOT_AVAILABLE' => 'Funzione di invio mail non disponible', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Il file "%sversion" è necessario al funzionamento di PluXml', +'L_ARTICLE_NO_TAG' => 'Nessun articolo per questo tag !', +'L_UNKNOWN_CATEGORY' => 'Questa categoria non esiste !', +'L_NO_ARTICLE_PAGE' => 'Nessun articolo per questa pagina !', +'L_UNKNOWN_ARTICLE' => 'Questo articolo non esiste o non è più disponibile !', +'L_COM_IN_MODERATION' => 'Il commento è in corso di moderazione', +'L_UNKNOWN_STATIC' => 'Questa pagina non esiste o non è più disponibile !', +'L_DOCUMENT_NOT_FOUND' => 'Il documento specificato non esiste', +'L_NEWCOMMENT_ERR' => 'Errore durante la pubblicazione del commento', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Compilare tutti i campi obbligatori', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Verifica anti-spam fallita', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compressione %s attivata', +'L_PAGETITLE_ARCHIVES' => 'Archivio', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'nessuna categoria', +'L_CATEGORY' => 'categoria', +'L_CATEGORIES' => 'categorie', +'L_NO_ARTICLE' => 'nessun articolo', +'L_ARTICLE' => 'articolo ', +'L_ARTICLES' => 'articoli', +'L_ARTAUTHOR_UNKNOWN' => 'sconosciuto', +'L_ARTTAGS_NONE' => 'nessuno', +'L_ARTCHAPO' => 'Leggi il contenuto di #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Feed degli articoli di questa categoria', +'L_ARTFEED_RSS_TAG' => 'Feed degli articoli di questo tag', +'L_ARTFEED_RSS' => 'Feed degli articoli', +'L_NO_COMMENT' => 'Nessun commento', +'L_COMMENT' => 'commento', +'L_COMMENTS' => 'commenti', +'L_COMFEED_RSS_ARTICLE' => 'Feed dei commenti di questo articolo', +'L_COMFEED_RSS' => 'Feed dei commenti', +'L_STATICCONTENT_INPROCESS' => 'Questa pagina è in corso di redazione', +'L_SAID' => 'ha detto', + +'L_PAGINATION_FIRST_TITLE' => 'Vai alla prima pagina', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Pagina precedente', +'L_PAGINATION_PREVIOUS' => 'precedente', +'L_PAGINATION_NEXT_TITLE' => 'Vai all\'ultima pagina', +'L_PAGINATION_NEXT' => 'successivo', +'L_PAGINATION_LAST_TITLE' => 'Aller à la dernière page', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'pagina %s su %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Gli URL privati non sono stati configurati !', +'L_FEED_COMMENTS' => 'Commenti', +'L_FEED_ONLINE_COMMENTS' => 'Commenti online', +'L_FEED_OFFLINE_COMMENTS' => 'Commenti offline', +'L_FEED_WRITTEN_BY' => 'Pubblicato da', + +); +?> diff --git a/src/core/lang/it/install.php b/src/core/lang/it/install.php new file mode 100644 index 0000000..e04fc9b --- /dev/null +++ b/src/core/lang/it/install.php @@ -0,0 +1,32 @@ + 'Installazione', +'L_WRONG_PHP_VERSION' => 'PluXml ha bisogno di PHP5 o superiore per funzionare.', +'L_SELECT_LANG' => 'Selezionare la lingua', +'L_INPUT_CHANGE' => 'Cambia', +'L_DEFAULT_CATEGORY_TITLE' => 'Voce 1', +'L_DEFAULT_CATEGORY_URL' => 'voce-1', +'L_DEFAULT_STATIC_TITLE' => 'Statica 1', +'L_DEFAULT_STATIC_URL' => 'statica-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Primo articolo', +'L_DEFAULT_ARTICLE_URL' => 'primo-articolo', +'L_DEFAULT_COMMENT_CONTENT' => 'Questo è un primo commento !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml è già configurato !', +'L_ERR_MISSING_USER' => 'Inserisci il nome del redattore !', +'L_ERR_MISSING_LOGIN' => 'Inserisci il nome utente !', +'L_ERR_MISSING_PASSWORD' => 'Inserisci una password !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Conferma della password non corretta !', +'L_PLUXML_INSTALLATION' => 'Installazione di PluXml', +'L_SITE_DESCRIPTION' => 'Blog o Cms XML powered !', +'L_VERSION' => 'versione', +'L_USERNAME' => 'Nome dell\'amministratore', +'L_LOGIN' => 'Nome utente dell\'amministrazione', +'L_PASSWORD' => 'Password', +'L_PASSWORD_CONFIRMATION' => 'Conferma password', +'L_INPUT_INSTALL' => 'Installa', +'L_TIMEZONE' => 'Fuso orario', +); +?> diff --git a/src/core/lang/it/update.php b/src/core/lang/it/update.php new file mode 100644 index 0000000..04556cf --- /dev/null +++ b/src/core/lang/it/update.php @@ -0,0 +1,58 @@ + 'Salvataggio dei dati avvenuto con sucesso', +'L_UPDATE_TITLE' => 'Aggiornamento PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml richiede PHP5 o superiore per funzionare.', + +'L_SELECT_LANG' => 'Seleziona la lingua', +'L_INPUT_CHANGE' => 'Cambia', + +'L_UPDATE_UPTODATE' => 'PluXml è già alla versione più recente.', +'L_UPDATE_NOT_AVAILABLE' => 'Nessun aggiornamento disponibile.', +'L_UPDATE_BACK' => 'Ritorna al sito', +'L_UPDATE_WARNING1' => 'Stai per aggiornare PluXml', +'L_UPDATE_SELECT_VERSION' => 'Seleziona la versione di PluXml da aggiornare.', +'L_UPDATE_WARNING2' => 'Se la vecchia versione di PluXml non è presente nella lista, non esiste una procedura automatizzata di aggiornamento perchè la versione in uso è troppo vecchia.
Scaricare l\'ultima versione di PluXml e procedere con una nuova installazione.', +'L_UPDATE_WARNING3' => 'Attenzione, prima di eseguire l\'aggiornamento, eseguire un backup della cartella "data"', +'L_UPDATE_START' => 'Inizia l\'aggiornamento', + +'L_UPDATE_ENDED' => 'Aggiornamento completato.', +'L_UPDATE_INPROGRESS' => 'Aggiornamento in corso', +'L_UPDATE_ERROR' => 'Errore durante l\'aggiornamento.', +'L_UPDATE_SUCCESSFUL' => 'Tutti gli aggiornamenti sono stati eseguiti con successo !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Aggiornamento del file parametres.xml', //pas traduit le nom des fichiers xml +'L_UPDATE_CREATE_TAGS_FILE' => 'Creazione del file tags.xml',//pas traduit le nom des fichiers xml +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Errore durante la creazione del file tags.xml',//pas traduit le nom des fichiers xml +'L_UPDATE_CREATE_THEME_FILE' => 'Creazione del file del tema', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Errore durante la creazione del file', +'L_UPDATE_ARTICLES_CONVERSION' => 'Conversione degli articoli nel nuovo formato', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Errore durante l\'elaborazione', +'L_UPDATE_STATICS_MIGRATION' => 'Migrazione delle pagine statiche', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Errore durante la migrazione del file delle pagine statiche', +'L_UPDATE_CREATE_USERS_FILE' => 'Creazione del file degli utenti', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Errore durante la creazione del file degli utenti', +'L_UPDATE_USERS_MIGRATION' => 'Migrazione del file degli utenti', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Errore durante la migrazione del file degli utenti', +'L_UPDATE_ERR_NO_USERS' => 'Nessun utente presente nel file', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Creazione del file .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Errore durante la creazione del file .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Aggiornare il file .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Errore durante l\'aggiornamento del file .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migrazione del file delle categorie', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Errore durante la migrazione del file delle categorie', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Creazione del file plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Errore durante creazione del file plugins.xml',//pas traduit le nom des fichiers xml +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Cancellazione del file core/admin/fullscreen.php', //pas traduit le nom des fichiers xml +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Errore durante la cancellazione del file core/admin/fullscreen.php',//pas traduit le nom des fichiers xml +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Cancellazione della cartella core/plxtoolbar/',//pas traduit le nom des fichiers xml +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Errore durante la cancellazione della cartella core/plxtoolbar/',//pas traduit le nom des fichiers xml +'L_UPDATE_FILE' => 'Aggiornamento File', +'L_UPDATE_ERR_FILE' => 'Errore durante il file di aggiornamento', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'La migrazione di file dalle impostazioni dei parametri del plugin nel file di configurazione', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Aggiornamento del file plugins.xml', + +); +?> diff --git a/src/core/lang/nl/admin.php b/src/core/lang/nl/admin.php new file mode 100644 index 0000000..0b92963 --- /dev/null +++ b/src/core/lang/nl/admin.php @@ -0,0 +1,462 @@ + 'Onbekende fout', +'L_CONFIRM_DELETE' => 'Bevestig de verwijdering ?', +'L_SAVE_FILE' => 'Sla het bestand op', +'L_SAVE_FILE_SUCCESSFULLY' => 'Bestand succesvol opgeslagen', +'L_SAVE_FILE_ERROR' => 'Fout bij het ​​opslaan van het bestand voor', +'L_SAVE_SUCCESSFUL' => 'Gegevens succesvol opgeslagen', +'L_SAVE_ERR' => 'Fout bij het opslaan van de gegevens', +'L_NO_ENTRY' => 'Geen toegang', +'L_ERR_USER_EMPTY' => 'Gelieve een gebruikersnaam in te geven', +'L_ERR_PASSWORD_EMPTY' => 'Gelieve een wachtwoord in te geven', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Ongeldig wachtwoord of geen wachtwoord ingegeven', +'L_ERR_INVALID_EMAIL' => 'Ongeldig emailadres', +'L_ERR_INVALID_SITE' => 'Ongeldig website-adres', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Ongeldig artikel-ID', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nieuwe-categorie', +'L_DEFAULT_NEW_STATIC_URL' => 'nieuwe-pagina', +'L_DEFAULT_NEW_ARTICLE_URL' => 'nieuw-artikel', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Artikel succesvol aangemaakt', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Artikel succesvol bijgewerkt', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Artikel succesvol verwijderd', +'L_ARTICLE_SAVE_ERR' => 'Fout bij het opslaan van het artikel', +'L_ARTICLE_DELETE_ERR' => 'Fout tijdens het verwijderen van het artikel', +'L_ERR_UNKNOWN_COMMENT' => 'De opgevraagde commentaar bestaat niet of niet meer', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Commentaar succesvol opgeslagen', +'L_COMMENT_UPDATE_ERR' => 'Fout tijdens aanpassen van de commentaar', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Commentaar succesvol verwijderd', +'L_COMMENT_DELETE_ERR' => 'Er is een fout opgetreden bij het verwijderen van de commentaar', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validatie van de commentaar succesvol doorgevoerd', +'L_COMMENT_VALIDATE_ERR' => 'Er is een fout opgetreden bij het valideren van de commentaar', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Moderatie succesvol uitgevoerd', +'L_COMMENT_MODERATE_ERR' => 'Er is een fout opgetreden tijdens de moderatie', +'L_COMMENT_WRITTEN_BY' => 'Geschreven door', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Het is onmogelijk de MEDIA folder aan te maken voor deze gebruiker', +'L_PLXMEDIAS_ROOT' => 'root-map', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Kan de map niet aanmaken', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Map succesvol aangemaakt', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Map bestaat al', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Er is een fout opgetreden tijdens het verwijderen van de map', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Map succesvol verwijderd', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'Het bestandstype is niet toegestaan', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'Een bestand is groter dan', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Fout tijdens het verzenden van een bestand', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Bestand dat verstuurd wordt met succes', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Fout tijdens het uploaden van bestanden', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Bestanden succesvol verzonden', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Succesvol verwijderde bestanden', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Fout tijdens het verwijderen van een bestand', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Bestand met succes verwijderd', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Fout tijdens het verwijderen van het bestand', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Bestanden succesvol verplaatst', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Bestand succesvol verwijderd', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Er is een fout opgetreden tijdens het verplaatsen van de bestanden', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Er is een fout opgetreden tijdens het verplaatsen van het bestand', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Verplaatsen', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Fout tijdens het maken van de thumbnail', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Fout bij het ??aanmaken van thumbnail', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Thumbnail succes aangemaakt', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Thumbnails gemaakt met succes', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Nieuw Artikel', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Ongeldige publicatiedatum', +'L_ERR_UNKNOWN_ARTICLE' => 'Het opgevraagde artikel bestaat niet of niet meer !', +'L_ERR_FORBIDDEN_ARTICLE' => 'U beschikt niet over de nodige rechten om het artikel te lezen', +'L_BACK_TO_ARTICLES' => 'Terug naar lijst met artikels', +'L_ARTICLE_EDITING' => 'Artikel wijzigen', +'L_ARTICLE_TITLE' => 'Titel', +'L_ARTICLE_LIST_AUTHORS' => 'Auteur', +'L_HEADLINE_FIELD' => 'Artikelkop (facultatief)', +'L_CONTENT_FIELD' => 'Inhoud', +'L_LINK_FIELD' => 'Link naar artikel', +'L_LINK_ACCESS' => 'Ga naar artikel', +'L_LINK_VIEW' => 'zien', +'L_ARTICLE_STATUS' => 'Status', +'L_DRAFT' => 'Klad', +'L_PUBLISHED' => 'Gepublieerd', +'L_AWAITING' => 'In afwachting van de validatie', +'L_ARTICLE_DATE' => 'Publicatiedatum', +'L_NOW' => 'onmiddellijk', +'L_ARTICLE_CATEGORIES' => 'Categorie', +'L_CATEGORY_HOME_PAGE' => 'Startpagina', +'L_NEW_CATEGORY' => 'Nieuwe categorie', +'L_ARTICLE_TAGS_FIELD' => 'Sleutelwoorden', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Scheidt de sleutelwoorden door middel van een komma', +'L_ARTICLE_TOGGLER_TITLE' => 'Lijst van sleutelwoorden', +'L_NO_TAG' => 'Geen tag', +'L_ALLOW_COMMENTS' => 'Commentaar toelaten', +'L_ARTICLE_URL_FIELD' => 'URL', +'L_ARTICLE_URL_FIELD_TITLE' => 'de URL wordt automatisch bij het aanmaken gecr?eerd', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Commentaar beheren', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Commentaren van dit artikel beheren', +'L_ARTICLE_NEW_COMMENT' => 'Commentaar ingeven', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Commentaar ingeven voor dit artikel', +'L_ARTICLE_DELETE_CONFIRM' => 'Dit artikel daadwerkelijk verwijderen ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Overzicht', +'L_ARTICLE_DRAFT_BUTTON' => 'Kladversie opslaan', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Posten', +'L_ARTICLE_MODERATE_BUTTON' => 'Ter goedkeuring voorleggen', +'L_ARTICLE_OFFLINE_BUTTON' => 'Artikel offline plaatsen', +'L_ARTICLE_UPDATE_BUTTON' => 'Opslaan', +'L_CATEGORY_ADD_BUTTON' => 'Toevoegen', +'L_ARTICLE_META_DESCRIPTION' => 'Inhoud meta-tag "description" (optioneel)', +'L_ARTICLE_META_KEYWORDS' => 'Inhoud meta-tag "keywords" (optioneel)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Title tag inhoud (optioneel)', +'L_ARTICLE_CHAPO_HIDE' => 'verstoppen', +'L_ARTICLE_CHAPO_DISPLAY' => 'tonen', +'L_AUTH_PAGE_TITLE' => 'Aanmeldpagina', +'L_LOGOUT_SUCCESSFUL' => 'U bent succesvol aangemeld', +'L_LOGIN_PAGE' => 'Aanmelden in administratie', +'L_AUTH_LOGIN_FIELD' => 'Uw Login', +'L_AUTH_PASSWORD_FIELD' => 'Uw Paswoord', +'L_SUBMIT_BUTTON' => 'Verzenden', +'L_ERR_WRONG_PASSWORD' => 'Login en/of wachtwoord ongeldig', +'L_POWERED_BY' => 'Gegenereerd door PluXml', +'L_CAT_TITLE' => 'Aanmaken en aanpassen van categorie?n', +'L_CAT_LIST_ID' => 'Identifiant', +'L_CAT_LIST_ACTIVE' => 'Actief', +'L_CAT_LIST_NAME' => 'Naam categorie', +'L_CAT_LIST_URL' => 'URL', +'L_CAT_LIST_SORT' => 'Artikels sorteren', +'L_CAT_LIST_BYPAGE' => 'Aantal art/pag', +'L_CAT_LIST_ORDER' => 'Volgorde', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Categorie', +'L_DISPLAY' => 'Tonen', +'L_HIDE' => 'Onzichtbaar maken', +'L_OPTIONS' => 'Opties', +'L_FOR_SELECTION' => 'Met geselecteerde...', +'L_DELETE' => 'Verwijderen', +'L_CAT_APPLY_BUTTON' => 'Categorielijst aanpassen', +'L_CAT_UNKNOWN' => 'onbekende categorie', +'L_EDITCAT_PAGE_TITLE' => 'Categorie-opties aanpassen', +'L_EDITCAT_DESCRIPTION' => 'Beschrijving', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Toon items in deze categorie op de home page', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Terug naar categorielijst', +'L_EDITCAT_UPDATE' => 'De wijzigingen voor deze categorie doorveoeren', +'L_EDITCAT_TITLE_HTMLTAG' => 'Title tag inhoud (optioneel)', +'L_EDITCAT_META_DESCRIPTION' => 'META-informatie voor deze categorie (optie)', +'L_EDITCAT_META_KEYWORDS' => 'META-informatie voor de "keywords" voor deze categorie (optie)', +'L_COMMENT_ORPHAN' => 'geen artikel', +'L_COMMENT_ORPHAN_STATUS' => 'Niet zichtbaar (Wij raden u aan deze commentaar te verwijderen)', +'L_COMMENT_ARTICLE_LINKED' => 'Artikel', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Artikel van deze commentaar', +'L_COMMENT_OFFLINE' => 'offline', +'L_COMMENT_ONLINE' => 'online', +'L_COMMENT_ONLINE_TITLE' => 'Deze commentaar online bekijken', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Terug naar commentaar van dit artikel', +'L_BACK_TO_COMMENTS' => 'Terug naar lijst van commentaar', +'L_COMMENT_EDITING' => 'Commentaar aanpassen', +'L_COMMENT_AUTHOR_FIELD' => 'Auteur', +'L_COMMENT_TYPE_FIELD' => 'Type commentaar', +'L_COMMENT_DATE_FIELD' => 'Datum en tijd van publicatie', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Statuut', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Artikel vastgepind', +'L_COMMENT_ARTICLE_FIELD' => 'Commentaar;', +'L_COMMENT_DELETE_CONFIRM' => 'Commentaar verwijderen ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Publicatie bevestigen', +'L_COMMENT_OFFLINE_BUTTON' => 'Offline plaatsen', +'L_COMMENT_ANSWER_BUTTON' => 'Antwoorden op commentaar', +'L_COMMENT_UPDATE_BUTTON' => 'Aanpassingen doorvoeren', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'De commentaar bestaat niet of niet meer!', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Commentaar is offline. Kan niet antwoorden op commentaar !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'Het artikel bestaat niet of niet meer. Onmogelijk te antwoorden !', +'L_ERR_CREATING_COMMENT' => 'er is een fout opgetreden tijdens het opslaan van de commentaar', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Commentaar plaatsen succesvol', +'L_CREATE_NEW_COMMENT' => 'Commentaar schrijven', +'L_COMMENT_SAVE_BUTTON' => 'Opslaan', +'L_ARTICLE_COMMENTS_LIST' => 'Commentaar van dit artikel (nieuwste commentaar eerst)', +'L_COMMENT_ANSWER_TITLE' => 'Antwoorden op deze commentaar', +'L_COMMENT_ANSWER' => 'Antwoorden', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Nieuwe commentaar schrijven voor dit artikel', +'L_COMMENT_NEW_COMMENT' => 'Nieuwe commentaar schrijven', +'L_COMMENTS_ARTICLE_SCOPE' => 'artikel', +'L_COMMENTS_GLOBAL_SCOPE' => 'volledige site', +'L_COMMENTS_OFFLINE_LIST' => 'Commentaar dat wacht op goedkeuring ', +'L_COMMENTS_LIST_DATE' => 'Datum', +'L_COMMENTS_LIST_AUTHOR' => 'Auteur', +'L_COMMENTS_LIST_MESSAGE' => 'Bericht', +'L_COMMENTS_LIST_ACTION' => 'Actie', +'L_COMMENT_EDIT' => 'Aanpassen', +'L_COMMENT_EDIT_TITLE' => 'Deze commentaar aanpassen', +'L_COMMENT_DELETE' => 'Verwijderen', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Feed van offline commentaren', +'L_COMMENT_OFFLINE_FEEDS' => 'Offline commentaar', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Feed van online commentaren', +'L_COMMENT_ONLINE_FEEDS' => 'Online commentaren', +'L_COMMENTS_PRIVATE_FEEDS' => 'Feed prive syndicaties', +'L_COMMENTS_ONLINE_LIST' => 'Lijst van gepubliceerde beoordelingen', +'L_COMMENTS_ALL_LIST' => 'Reacties Lijst', +'L_COMMENT_SET_ONLINE' => 'Neem Online', +'L_COMMENT_SET_OFFLINE' => 'Neem Offline', +'L_ARTICLES_FILTER_BUTTON' => 'Filteren', +'L_CATEGORIES_TABLE' => 'Categorie?n', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Specifieke locatie', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Alle artikels', +'L_ARTICLES_LIST' => 'Lijst met artikels', +'L_ARTICLE_LIST_DATE' => 'Datum', +'L_ARTICLE_LIST_TITLE' => 'Titel', +'L_ARTICLE_LIST_CATEGORIES' => 'Categorie', +'L_ARTICLE_LIST_NBCOMS' => 'Aantal comm.', +'L_ARTICLE_LIST_AUTHOR' => 'Auteur', +'L_ARTICLE_LIST_ACTION' => 'Actie', +'L_CATEGORY_HOME' => 'Home', +'L_CATEGORY_DRAFT' => 'Klad', +'L_ARTICLE_VIEW' => 'Bekijken', +'L_ARTICLE_VIEW_TITLE' => 'Bekijk het artikel op de site', +'L_ARTICLE_EDIT' => 'Aanpassen', +'L_ARTICLE_EDIT_TITLE' => 'Artikel aanpassen', +'L_NEW_COMMENTS_TITLE' => 'Commentaar die op goedkeuring wacht', +'L_VALIDATED_COMMENTS_TITLE' => 'Geplubliceerde commentaar', +'L_NO_ARTICLE' => 'Geen artikel', +'L_ARTICLES_SEARCH_BUTTON' => 'Zoek', +'L_ARTICLES_ALL_CATEGORIES' => 'Alle categorie?n ...', +'L_ALL' => 'Alle', +'L_ALL_PUBLISHED' => 'Gepubliceerd', +'L_ALL_DRAFTS' => 'Concepten', +'L_ALL_AWAITING_MODERATION' => 'In afwachting van de validatie', +'L_MEDIAS_DELETE_FOLDER' => 'Map verwijderen', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Map en inhoud van de map verwijderen ?', +'L_MEDIAS_NO_FILE' => 'Geen bestand', +'L_MEDIAS_FILENAME' => 'Naam bastand', +'L_MEDIAS_ADD_FILE' => 'Bestand toevoegne', +'L_MEDIAS_BACK' => 'Terug', +'L_MEDIAS_TITLE' => 'Media beheren', +'L_MEDIAS_IMAGES' => 'Afbeeldingen', +'L_MEDIAS_DOCUMENTS' => 'Documenten', +'L_MEDIAS_CREATE_FOLDER' => 'Map aanmaken', +'L_MEDIAS_SUBMIT_FILE' => 'Versturen', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Max. grootte bestand', +'L_MEDIAS_DIRECTORY' => 'Locatie', +'L_MEDIAS_FOLDER' => 'Bestand', +'L_MEDIAS_NEW_FOLDER' => 'Nieuwe map', +'L_MEDIAS_FILESIZE' => 'Maat', +'L_MEDIAS_DATE' => 'Datum', +'L_MEDIAS_DIMENSIONS' => 'Dimensies', +'L_MEDIAS_RESIZE' => 'Afbeeldinggrootte', +'L_MEDIAS_RESIZE_NO' => 'Oorspronkelijk formaat', +'L_MEDIAS_THUMBS' => 'Maak thumbnails', +'L_MEDIAS_THUMBS_NONE' => 'Geen miniatuur', +'L_MEDIAS_MODIFY' => 'Bewerken', +'L_MEDIAS_THUMB' => 'Thumbnail', +'L_MEDIAS_EXTENSION' => 'Uitbreiding', +'L_MEDIAS_ADD' => 'Toevoegen', +'L_MEDIAS_ALIGNMENT' => 'Uitlijning', +'L_MEDIAS_ALIGN_NONE' => 'Geen', +'L_MEDIAS_ALIGN_LEFT' => 'Links', +'L_MEDIAS_ALIGN_CENTER' => 'Centrum', +'L_MEDIAS_ALIGN_RIGHT' => 'Rechts', +'L_MEDIAS_RECREATE_THUMB' => 'Opnieuw thumbnail', +'L_SORT_ASCENDING_DATE' => 'datum oplopend', +'L_SORT_DESCENDING_DATE' => 'datum aflopend', +'L_SORT_ALPHABETICAL' => 'alfabetisch', +'L_OK' => 'Ok', +'L_YES' => 'Ja', +'L_NO' => 'Neen', +'L_NONE1' => 'geen', +'L_NONE2' => 'geen', +'L_CONFIG_VIEW_FIELD' => 'Options d\'affichage', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Keuze van layout', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Layout-bestanden aanpassen', +'L_CONFIG_VIEW_FILES_EDIT' => 'Layout-bestanden editeren', +'L_CONFIG_VIEW_SORT' => 'Artikels sorteren', +'L_CONFIG_VIEW_BYPAGE' => 'Aantal artikels per pagina', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Aantal artikels par pagina in archief', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Aantal artikels per pagina in administratie-gedeelte', +'L_CONFIG_VIEW_SORT_COMS' => 'Commentaar sorteren', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Aantal commentaren per pagina in administratie-gedeelte', +'L_CONFIG_VIEW_IMAGES' => 'Beeldformaat (breedte x hoogte)', +'L_CONFIG_VIEW_THUMBS' => 'Grootte thumbnails (breedte x hoogte)', +'L_CONFIG_VIEW_HOMESTATIC' => 'een statische pagina als verwelkomingspagina gebruiken', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Opgelet. Deze pagina is niet actief', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Nieuwe layouts downloaden op ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Aantal artikels/commentaar in RSS feed', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Korte samenvatting in RSS feed opnemen', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Indien samenvatting leeg is zal artikelinhoud getoond worden', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Tekskt die getoond zal worden onder elke RSS feed', +'L_CONFIG_VIEW_UPDATE' => 'Pas de veranderingen toe', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Toon categorieën zonder artikel', +'L_CONFIG_HOMETEMPLATE' => 'Template van de homepage', +'L_CONFIG_ADVANCED_DESC' => 'Geavanceerde configuratie', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'herschrijven van URLs aanzetten', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Opgepast. Er bestaat al een .htaccess bestand in de root van uw installatie. Door het inschakelen van URL herschrijven dit bestand zal worden gewijzigd', +'L_CONFIG_ADVANCED_GZIP' => 'GZIP compressie activeren', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Compressie activeren zal het verbruik van uw bandbreedte naar beneden halen, maar kan uw processor wat meer belasten', +'L_CONFIG_ADVANCED_CAPCHA' => 'Anti-spam CAPTCHA gebruiken', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Code voor versleuteling gegevens (Prive URLs)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Maak dit veld leeg om een nieuwe sleutel te genereren', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Een verschillende documenten- en afbeeldingenmap gebruiken voor elke gebruiker', +'L_HELP_SLASH_END' => 'vergeet de slash niet op het einde', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Locatie Afbeeldingen (map)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Locatie documenten (map)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Locatie artikels (map)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Locatie commentaar (map)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Locatie statische paginas (map)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Locatie van onderwerpen (map)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Locatie van de plugins (map)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Locatie van de configuratie-bestanden (map)', +'L_CONFIG_ADVANCED_UPDATE' => 'Aanpassingen doorvoeren', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Basisconfiguratie', +'L_CONFIG_BASE_SITE_TITLE' => 'Titel van de site', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Ondertitel van de site', +'L_CONFIG_BASE_URL_HELP' => 'Vergeet de slech niet op het einde', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Standaardtaal', +'L_CONFIG_BASE_TIMEZONE' => 'Tijdzone', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Commentaar toelaten', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Commentaar modereren bij creatie', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'De artikelen voor de profielen Redacteur en Uitgever matigen', +'L_CONFIG_BASE_UPDATE' => 'Basisconfiguratie aanpassen', +'L_CONFIG_META_DESCRIPTION' => 'META-tag "descriptie" van de site (optioneel)', +'L_CONFIG_META_KEYWORDS' => 'META-tag "keywords" van de site (optioneel)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Layout bestaat niet !', +'L_CONFIG_EDITTPL_TITLE' => 'Layout aanpassen', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Keuze aan te passen bestand :', +'L_CONFIG_EDITTPL_LOAD' => 'Laden', +'L_CONFIG_INFOS_TITLE' => 'Informatie over uw PluXml-installatie', +'L_CONFIG_INFOS_DESCRIPTION' => 'Deze informatie kan handig zijn om eventuele problemen van uw installatie te vinden', +'L_CONFIG_INFOS_NB_CATS' => 'aantal categorie?n :', +'L_CONFIG_INFOS_NB_STATICS' => 'aantal statische paginas :', +'L_CONFIG_INFOS_WRITER' => 'Naam redacteur :', +'L_PLUXML_CHECK_VERSION' => 'Uw huidige versie van PluXml wordt vergeleken met de nieuwste op de website van PluXML', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Onmogelijk om updates te vinden zolang de optie \'allow_url_fopen\' gedesactiveerd is op dit systeem', +'L_PLUXML_UPDATE_ERR' => 'De verificatie van updates kon om een onbekende reden niet doorgevoerd worden', +'L_PLUXML_UPTODATE' => 'U beschikt over de laatste versie van PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Er is een nieuwe versie van PluXml beschikbaar ! U kan ze downloaden op ', +'L_CONFIG_USERS_TITLE' => 'Gebruikers beheren', +'L_CONFIG_USER' => 'Gebruiker', +'L_CONFIG_USERS_ID' => 'Gebruikersnummer', +'L_CONFIG_USERS_ACTIVE' => 'Actief', +'L_CONFIG_USERS_ACTION' => 'Actie', +'L_CONFIG_USERS_NEW' => 'Nieuwe gebruiker', +'L_CONFIG_USERS_UPDATE' => 'Lijst van gebruikers aanpassen', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Login ID al in gebruik', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Gebruikersnaam al in gebruik', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Categorie naam al in gebruik', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Zoals reeds gebruikt', +'L_BACK_TO_PLUGINS' => 'Terug naar Plugin-pagina', +'L_NO_PLUGIN' => 'Geen plugin', +'L_PLUGIN_NO_CONFIG' => 'Plugin niet geconfigureerd', +'L_PLUGINS_CSS' => 'CSS-code', +'L_PLUGINS_CSS_TITLE' => 'Bewerk de CSS-code van de plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Css-bestand inhoud website', +'L_CONTENT_FIELD_BACKEND' => 'Css-bestand inhoud administrator', +'L_PLUGINS_TITLE' => 'Plugins beheren', +'L_PLUGINS_VERSION' => 'Versie', +'L_PLUGINS_AUTHOR' => 'Auteur', +'L_PLUGINS_ACTIVATE' => 'Activeren', +'L_PLUGINS_DEACTIVATE' => 'Desactiveren', +'L_PLUGINS_DELETE' => 'Verwijderen', +'L_PLUGINS_DELETE_ERROR' => 'Er is een fout opgetreden bij het verwijderen', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Verwijdering succesvl doorgevoerd', +'L_PLUGINS_CONFIG' => 'Configuratie', +'L_PLUGINS_CONFIG_TITLE' => 'Configuratie van de plugin', +'L_PLUGINS_HELP' => 'Hulp', +'L_PLUGINS_HELP_TITLE' => 'Plugin hulp bekijken', +'L_PLUGINS_REQUIREMENTS' => 'Benodigdheden', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Lijst van beschikbare en actieve plugins voor deze plugin', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Geen', +'L_PLUGINS_ALPHA_SORT' => 'Alfabetisch sorteren plugins', +'L_PLUGINS_LOADING_SORT' => 'Laden om', +'L_PLUGINS_ACTION' => 'Actie', +'L_PLUGINS_APPLY_BUTTON' => 'De lijst met plugins', +'L_PLUGINS_ACTIVE_LIST' => 'Actieve plugins', +'L_PLUGINS_INACTIVE_LIST' => 'Inactief plugins', +'L_PROFIL_EDIT_TITLE' => 'Uw profiel aanpassen', +'L_PROFIL' => 'Profiel', +'L_PROFIL_LOGIN' => 'Kies uw loginnaam', +'L_PROFIL_USER' => 'Kies uw gebruikersnaam', +'L_PROFIL_MAIL' => 'Emailadres', +'L_PROFIL_ADMIN_LANG' => 'Taal van administratiegedeelte', +'L_PROFIL_INFOS' => 'Informatie', +'L_PROFIL_UPDATE' => 'Uw profiel aanpassen', +'L_PROFIL_CHANGE_PASSWORD' => 'Wachtwoord veranderen', +'L_PROFIL_PASSWORD' => 'Wachtwoord', +'L_PROFIL_CONFIRM_PASSWORD' => 'Wachtwoord bevestigen', +'L_PROFIL_UPDATE_PASSWORD' => 'Wachtwoord veranderen', +'L_STATIC_BACK_TO_PAGE' => 'Terug naar lijst van statische paginas', +'L_STATIC_UNKNOWN_PAGE' => 'Deze statische pagina bestaat niet of niet meer !', +'L_STATIC_TITLE' => 'Bron van statische pagina aanpassen', +'L_STATIC_VIEW_PAGE' => 'Bekijk de pagina', +'L_STATIC_ON_SITE' => 'op de site', +'L_STATIC_UPDATE' => 'Statische pagina opslaan', +'L_STATIC_TITLE_HTMLTAG' => 'Title tag inhoud (optioneel)', +'L_STATIC_META_DESCRIPTION' => 'META-tag "description" voor deze statische pagina (optioneel)', +'L_STATIC_META_KEYWORDS' => 'META-tag "keywords" voor deze statische pagina (optioneel)', +'L_STATICS_PAGE_TITLE' => 'Aanmaken en aanpassen van statische paginas', +'L_STATICS_ID' => 'Naam pagina', +'L_STATICS_GROUP' => 'Groep', +'L_STATICS_TITLE' => 'Titel', +'L_STATICS_URL' => 'URL', +'L_STATICS_ACTIVE' => 'Actief', +'L_STATICS_ORDER' => 'Volgorde', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Actie', +'L_STATICS_TEMPLATE_FIELD' => 'Layout', +'L_STATICS_PAGE_HOME' => 'Instellen als homepage', +'L_STATICS_HOME_PAGE' => 'Startpagina', +'L_PAGE' => 'Pagina', +'L_VIEW' => 'Bekijken', +'L_STATICS_SRC_TITLE' => 'Bron van deze pagina aanpassen', +'L_STATICS_SRC' => 'Aanpassen', +'L_STATICS_NEW_PAGE' => 'Nieuwe pagina', +'L_STATICS_UPDATE' => 'Lijst van statische paginas bewerken', +'L_PROFIL_ADMIN' => 'Administrateur', +'L_PROFIL_MANAGER' => 'Beheerder', +'L_PROFIL_MODERATOR' => 'Moderator', +'L_PROFIL_EDITOR' => 'Editeur', +'L_PROFIL_WRITER' => 'Redacteur', +'L_ADMIN' => '- Administratie', +'L_LOGIN' => 'Aangemeld als', +'L_ADMIN_LOGOUT' => 'Afmelden', +'L_ADMIN_LOGOUT_TITLE' => 'Sluit adminstratie-sessie', +'L_BACK_TO_SITE' => 'Home', +'L_BACK_TO_SITE_TITLE' => 'Terug naar home', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Terug naar blog', +'L_MENU_ARTICLES' => 'Artikels', +'L_MENU_ARTICLES_TITLE' => 'Lijst en aanpassingen artikels', +'L_MENU_NEW_ARTICLES' => 'Nieuw artikel', +'L_MENU_NEW_ARTICLES_TITLE' => 'Nieuw artikel', +'L_MENU_STATICS_TITLE' => 'Lijst en aanpassingen statische paginas', +'L_MENU_STATICS' => 'Statische paginas', +'L_MENU_COMMENTS_TITLE' => 'Lijst en aanpassingen commentaren', +'L_MENU_COMMENTS' => 'Commentaren', +'L_MENU_MEDIAS_TITLE' => 'Media uploaden en toevoegen', +'L_MENU_MEDIAS' => 'Media', +'L_MENU_CATEGORIES_TITLE' => 'Categorie?n aanmaken, beheren, verwijderen', +'L_MENU_CATEGORIES' => 'Categorie?n', +'L_MENU_CONFIG_TITLE' => 'PluXml configureren', +'L_MENU_CONFIG' => 'Parameters', +'L_MENU_PROFIL_TITLE' => 'Uw gebruikersprofiel beheren', +'L_MENU_PROFIL' => 'Profiel', +'L_WARNING_INSTALLATION_FILE' => '

het bestand install.php is nog aanwezig in de basismap van uw PluXml.
Om veiligheidsredenen raden wij u aan dit bestand te verwijderen of te hernoemen.

', +'L_USER_UNKNOWN' => 'Onbekende gebruiker', +'L_USER_LANG' => 'Gebruikte taal in adminstratief gedeelte', +'L_USER_MAIL' => 'Emailadres', +'L_USER_INFOS' => 'Informatie', +'L_USER_UPDATE' => 'Deze gebruiker aanpassen', +'L_USER_PAGE_TITLE' => 'Gebruikersopties aanpassen', +'L_USER_BACK_TO_PAGE' => 'Terug naar gebruikerslijst', +'L_MENU_CONFIG_BASE_TITLE' => 'Uw PluXml basisconfiguratie bewerken', +'L_MENU_CONFIG_BASE' => 'Basisconfiguratie', +'L_MENU_CONFIG_VIEW_TITLE' => 'PluXml Scherminstellingen', +'L_MENU_CONFIG_VIEW' => 'Opties scherminstelling', +'L_MENU_CONFIG_USERS_TITLE' => 'Uw PluXml gebruikers beheren', +'L_MENU_CONFIG_USERS' => 'Gebruikers', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Geavanceerde opties van PluXml bewerken', +'L_MENU_CONFIG_ADVANCED' => 'Geavanceerde opties', +'L_MENU_CONFIG_INFOS_TITLE' => 'Informatie over uw PluXml-installatie', +'L_MENU_CONFIG_INFOS' => 'Informatie', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Plugins beheren', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', +'L_ERR_URL_ALREADY_EXISTS' => 'Url al in gebruik. Moet u de waarde van het veld \'Url\'', +); + +?> \ No newline at end of file diff --git a/src/core/lang/nl/core.php b/src/core/lang/nl/core.php new file mode 100644 index 0000000..41a87bf --- /dev/null +++ b/src/core/lang/nl/core.php @@ -0,0 +1,136 @@ + 'Nederlands', + +# common +'L_PLUXML_VERSION' => 'PluXml versie', +'L_HOMEPAGE' => 'Onthaal', +'L_UNCLASSIFIED' => 'Niet geclassificeerd', +'L_INFO_PHP_VERSION' => 'PHP-versie', +'L_INFO_MAGIC_QUOTES' => '"magic quotes" staan nu', +'L_INFO_CHARSET' => 'codering', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'De standaardlayout van PluXml werd niet gevonden', +'L_ERR_FILE_NOTFOUND' => 'Het gevraagde PluXml bestand kan niet gevonden worden', +'L_ERR_PAGE_NOT_FOUND' => 'Pagina niet gevonden', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'jan', +'L_SHORT_FEBRUARY' => 'feb', +'L_SHORT_MARCH' => 'maart', +'L_SHORT_APRIL' => 'apr', +'L_SHORT_MAY' => 'mei', +'L_SHORT_JUNE' => 'juni', +'L_SHORT_JULY' => 'juli', +'L_SHORT_AUGUST' => 'aug', +'L_SHORT_SEPTEMBER' => 'sept', +'L_SHORT_OCTOBER' => 'okt', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dec', +'L_JANUARY' => 'januari', +'L_FEBRUARY' => 'februari', +'L_MARCH' => 'maart', +'L_APRIL' => 'april', +'L_MAY' => 'mei', +'L_JUNE' => 'juni', +'L_JULY' => 'juli', +'L_AUGUST' => 'augustus', +'L_SEPTEMBER' => 'september', +'L_OCTOBER' => 'oktober', +'L_NOVEMBER' => 'november', +'L_DECEMBER' => 'december', +'L_MONDAY' => 'maandag', +'L_TUESDAY' => 'dinsdag', +'L_WEDNESDAY' => 'woensdag', +'L_THURSDAY' => 'donderdag', +'L_FRIDAY' => 'vrijdag', +'L_SATURDAY' => 'zaterdag', +'L_SUNDAY' => 'zondag', + +# class.plx.capcha.php +'L_LAST' => 'laatste', +'L_FIRST' => 'eerste', +'L_SECOND' => 'tweede', +'L_THIRD' => 'derde', +'L_FOURTH' => 'vierde', +'L_FIFTH' => 'vijfde', +'L_SIXTH' => 'zesde', +'L_SEVENTH' => 'zevende', +'L_EIGTH' => 'achste', +'L_NINTH' => 'negende', +'L_TENTH' => 'tiende', +'L_NTH' => 'de', +'L_CAPCHA_QUESTION' => 'Welke is de %s letter van het woord %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s is toegankelijk met schrijfrechten', +'L_WRITE_NOT_ACCESS' => '%s is niet toegankelijk met schrijfrechten of bestaat niet', +'L_MODREWRITE_AVAILABLE' => 'Apache module mod_rewrite voor het herschrijven van URLs is beschikbaar', +'L_MODREWRITE_NOT_AVAILABLE' => 'Apache module mod_rewrite voor het herschrijven van URLs is niet beschikbaar', +'L_LIBGD_INSTALLED' => 'GD-bibliotheek is geïnstalleerd', +'L_LIBGD_NOT_INSTALLED' => 'GD-bibliotheek is niet geïnstalleerd of beschikbaar', +'L_MAIL_AVAILABLE' => 'Email verzendfunctie is beschikbaar', +'L_MAIL_NOT_AVAILABLE' => 'Email verzendfunctie is niet beschikbaar', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Het bestand "%sversion" is nodig voor een goede werking van PluXml', +'L_ARTICLE_NO_TAG' => 'Geen artikel gevonden voor dit sleutelwoord !', +'L_UNKNOWN_CATEGORY' => 'Deze categorie bestaat niet !', +'L_NO_ARTICLE_PAGE' => 'Geen artikel gevonden voor deze pagina !', +'L_UNKNOWN_ARTICLE' => 'Dit artikel bestaat niet of niet meer !', +'L_COM_IN_MODERATION' => 'De commentaar wordt momenteel gemodereerd door de beheerder van deze site', +'L_UNKNOWN_STATIC' => 'Deze pagina bestaat niet of niet meer !', +'L_DOCUMENT_NOT_FOUND' => 'Het opgevraagde document is onvindbaar', +'L_NEWCOMMENT_ERR' => 'Er is een fout opgetreden bij het wegschrijven van de commentaar', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Gelieve alle verplichte velden in te vullen a.u.b.', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'La vérification anti-spam a échoué', + +# class.plx.show.php + +'L_HTTPENCODING' => '%s compressie is geactiveerd', +'L_PAGETITLE_ARCHIVES' => 'Archieven', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'geen categorie', +'L_CATEGORY' => 'categorie', +'L_CATEGORIES' => 'categorieën', +'L_NO_ARTICLE' => 'geen artikel', +'L_ARTICLE' => 'artikel', +'L_ARTICLES' => 'artikels', +'L_ARTAUTHOR_UNKNOWN' => 'onbekend', +'L_ARTTAGS_NONE' => 'geen', +'L_ARTCHAPO' => 'Lees het vervolg #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Rss-feed van artikels uit deze categorie', +'L_ARTFEED_RSS_TAG' => 'Rss-feed van artikels uit deze tag', +'L_ARTFEED_RSS' => 'Rss-feed van de artikels', +'L_NO_COMMENT' => 'geen commentaar', +'L_COMMENT' => 'commentaar', +'L_COMMENTS' => 'commentaren', +'L_COMFEED_RSS_ARTICLE' => 'Rss-feed van de commentaren van dit artikel', +'L_COMFEED_RSS' => 'Rss-feed van de commentaren', +'L_STATICCONTENT_INPROCESS' => 'Deze pagine wordt momenteel bijgewerkt', +'L_SAID' => 'zei', + +'L_PAGINATION_FIRST_TITLE' => 'Ga naar de eerste pagina', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Vorige pagina', +'L_PAGINATION_PREVIOUS' => 'vorige', +'L_PAGINATION_NEXT_TITLE' => 'Volgende pagina', +'L_PAGINATION_NEXT' => 'volgende', +'L_PAGINATION_LAST_TITLE' => 'Ga naar de laatste pagina', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'pagina %s in %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Privé URLs zijn niet geïnitialiseerd in uw instellingen !', +'L_FEED_COMMENTS' => 'Commentaren', +'L_FEED_ONLINE_COMMENTS' => 'Online commentaren', +'L_FEED_OFFLINE_COMMENTS' => 'Offline commentaren', +'L_FEED_WRITTEN_BY' => 'Geschreven door', + +); +?> diff --git a/src/core/lang/nl/install.php b/src/core/lang/nl/install.php new file mode 100644 index 0000000..1101d0b --- /dev/null +++ b/src/core/lang/nl/install.php @@ -0,0 +1,32 @@ + 'Installatie', +'L_WRONG_PHP_VERSION' => 'PluXml heeft PHP-versie 5 of hoger nodig om goed te functioneren.', +'L_SELECT_LANG' => 'Kies uw taal', +'L_INPUT_CHANGE' => 'Verander', +'L_DEFAULT_CATEGORY_TITLE' => 'Rubriek 1', +'L_DEFAULT_CATEGORY_URL' => 'rubriek-1', +'L_DEFAULT_STATIC_TITLE' => 'Statisch 1', +'L_DEFAULT_STATIC_URL' => 'statisch-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Eerste artikel', +'L_DEFAULT_ARTICLE_URL' => 'eerste-artikel', +'L_DEFAULT_COMMENT_CONTENT' => 'Dit is een eerste commentaar !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml is al geconfigureerd !', +'L_ERR_MISSING_USER' => 'Vul de naam van de redacteur in !', +'L_ERR_MISSING_LOGIN' => 'Vul een loginnaam in !', +'L_ERR_MISSING_PASSWORD' => 'Vul een wachtwoord in !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Bevestiging van wachtwoord mislukt !', +'L_PLUXML_INSTALLATION' => 'Installatie van PluXml', +'L_SITE_DESCRIPTION' => 'Blog of Cms in XML !', +'L_VERSION' => 'versie', +'L_USERNAME' => 'Naam van de beheerder', +'L_LOGIN' => 'Login van de beheerder', +'L_PASSWORD' => 'Wachtwoord', +'L_PASSWORD_CONFIRMATION' => 'Bevestig het wachtwoord', +'L_INPUT_INSTALL' => 'Installeer', +'L_TIMEZONE' => 'Tijdzone', +); +?> \ No newline at end of file diff --git a/src/core/lang/nl/update.php b/src/core/lang/nl/update.php new file mode 100644 index 0000000..02a49be --- /dev/null +++ b/src/core/lang/nl/update.php @@ -0,0 +1,58 @@ + 'Gegevens werden succesvol opgeslagen', +'L_UPDATE_TITLE' => 'Updates voor PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml heeft PHP-versie 5 of hoger nodig om te functioneren', + +'L_SELECT_LANG' => 'Kies uw taal', +'L_INPUT_CHANGE' => 'Verander', + +'L_UPDATE_UPTODATE' => 'Uw PluXml is al up to date', +'L_UPDATE_NOT_AVAILABLE' => 'Er zijn momenteel geen updates', +'L_UPDATE_BACK' => 'Terug naar de site', +'L_UPDATE_WARNING1' => 'U staat op het punt uw oude versie van PluXml bij te werken', +'L_UPDATE_SELECT_VERSION' => 'Gelieve in onderstaande lijst de huidige versie van uw PluXml-installatie te kiezen om bij te werken.', +'L_UPDATE_WARNING2' => 'Indien u uw versie van PluXml niet terug kan vinden in de lijst dan betekent dit dat uw huidige versie van PluXml te oud is om automatisch bij te werken.
Wij raden u aan de laatste versie van PluXml te downloaden en een nieuwe installatie uit te voeren.', +'L_UPDATE_WARNING3' => 'Opgapast, wij raden u aan om vooraleer u een update uitvoert een kopie te maken van uw gegevens in de map "data"', +'L_UPDATE_START' => 'Start het bijwerken', + +'L_UPDATE_ENDED' => 'Het bijwerken van de %s versie is afgerond.', +'L_UPDATE_INPROGRESS' => 'Bezig met bijwerken van de versie', +'L_UPDATE_ERROR' => 'Er is een fout opgetreden tijdens het bijwerken.', +'L_UPDATE_SUCCESSFUL' => 'Alle bijwerkingen zijn succesvol doorgevoerd !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Bijwerken van het bestand parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'tags.xml wordt aangemaakt', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Er is een fout opgetreden tijdens het maken van het bestand tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Lay-out bestand wordt aangemaakt', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Er is een fout opgetreden tijdens het aanmaken van het bestand', +'L_UPDATE_ARTICLES_CONVERSION' => 'Artikels worden naar nieuw formaat geconverteerd', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Er is een fout opgetreden tijdens het verwerken van het bestand', +'L_UPDATE_STATICS_MIGRATION' => 'Migratie van het bestand van de statische paginas', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Er is een fout opgetreden tijdens de migratie van het statische paginas bestand', +'L_UPDATE_CREATE_USERS_FILE' => 'Gebruikersbestand wordt aangemaakt', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Er is een fout opgetreden tijdens het aanmaken van het gebruikersbestand', +'L_UPDATE_USERS_MIGRATION' => 'Migratie van het gebruikersbestand', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Er is een fout opgetreden tijdens de migratie van het gebruikersbestand', +'L_UPDATE_ERR_NO_USERS' => 'Geen gebruikers in het gebruikersbestand', +'L_UPDATE_CREATE_HTACCESS_FILE' => '.htaccess-bestand wordt aangemaakt', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Er is een fout opgetreden tijdens het aanmaken van het .htaccess-bestand', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Bijwerken van het bestand .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Fout bij het bijwerken van het bestand .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migratie van het categorie-bestand', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Er is een fout opgetreden tijdens de migratie van het categorie-bestand', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'plugins.xml wordt aangemaakt', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Er is een fout opgetreden tijdens het aanmaken van het plugins.xml bestand', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Verwijderen van het bestand core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Er is een fout opgetreden tijdens het verwijderen van het bestand core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Verwijderen van de map core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Er is een fout opgetreden tijdens het verwijderen van de map core/plxtoolbar/', +'L_UPDATE_FILE' => 'Update File', +'L_UPDATE_ERR_FILE' => 'Fout tijdens het update-bestand', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migratie van bestanden van plug-in parameter instellingen in het configuratiebestand', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Bijwerken van het bestand plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lang/pl/admin.php b/src/core/lang/pl/admin.php new file mode 100644 index 0000000..71e72d8 --- /dev/null +++ b/src/core/lang/pl/admin.php @@ -0,0 +1,462 @@ + 'Erro desconhecido', +'L_CONFIRM_DELETE' => 'Potwierdź usunięcie ?', +'L_SAVE_FILE' => 'Zapisz plik', +'L_SAVE_FILE_SUCCESSFULLY' => 'Plik zapisany pomyślnie', +'L_SAVE_FILE_ERROR' => 'Błąd podczas zapisywania pliku do', +'L_SAVE_SUCCESSFUL' => 'Grabação dos dados efectuada com sucesso', +'L_SAVE_ERR' => 'Ocorreu um erro durante o processo de grabação dos dados', +'L_NO_ENTRY' => 'Acesso refusado', +'L_ERR_USER_EMPTY' => 'Queira dígitar um nome de utilizador', +'L_ERR_PASSWORD_EMPTY' => 'Queira dígitar uma senha', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'A confirmação da senha está errada', +'L_ERR_INVALID_EMAIL' => 'Enderêço e-mail inválido', +'L_ERR_INVALID_SITE' => 'Enderêço do web-site inválido', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Identificante do artigo inválido !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nova-categoria', +'L_DEFAULT_NEW_STATIC_URL' => 'nova-página', +'L_DEFAULT_NEW_ARTICLE_URL' => 'novo-artigo', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Artigo criado com sucesso', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Artigo actualizado com sucesso', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Suppressão efectuada com sucesso', +'L_ARTICLE_SAVE_ERR' => 'Erro a salvaguarda do artigo', +'L_ARTICLE_DELETE_ERR' => 'Ocorreu um erro durante o processo de supressão do artigo', +'L_ERR_UNKNOWN_COMMENT' => 'O comentário ao qual faz refrência nunca existiu ou foi suprimido', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Comentário alterado com sucesso', +'L_COMMENT_UPDATE_ERR' => 'Ocorreu um erro durante o processo de alteração do comentário', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Supressão efectuada com sucesso', +'L_COMMENT_DELETE_ERR' => 'Ocorreu um erro durante o processo de supressão', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validatção efectuada com sucesso', +'L_COMMENT_VALIDATE_ERR' => 'Ocorreu um erro durante o processo de validação', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Moderação efectuada com sucesso', +'L_COMMENT_MODERATE_ERR' => 'Ocorreu um erro durante o processo de moderação', +'L_COMMENT_WRITTEN_BY' => 'Napisał', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Impossivél de criar a pasta para os médias do utilizador conectado', +'L_PLXMEDIAS_ROOT' => 'raíz', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Impossivél de criar a pasta', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'pasta criada com sucesso', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'A pasta já existe', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Ocorreu um erro durante o processo de supressão da pasta', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'pasta suprimida com sucesso', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'O tipo de arquivo não é permitido', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'O tamanho do ficheiro é superior ao;', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Erro ao enviar um arquivo', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Arquivo enviada com sucesso!', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Erro ao carregar arquivos', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Arquivos enviada com sucesso!', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Removido com sucesso arquivos', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Erro ao excluir um arquivo', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Arquivo excluído com sucesso', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Erro ao apagar o arquivo', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Ficheiros movidos com sucesso', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Ficheiro movido com sucesso', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Ocorreu um erro durante o processo moção dos ficheiros', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Ocorreu um erro durante o processo moção do ficheiro', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Mover', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Erro ao criar a miniatura', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Erro na criação de miniaturas', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniatura criado com sucesso', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Miniaturas criado com sucesso', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Novo artigo', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Data de publicação inválida.', +'L_ERR_UNKNOWN_ARTICLE' => 'O artigo ao qual faz refrência nunca existiu ou foi suprimido!', +'L_ERR_FORBIDDEN_ARTICLE' => 'Voçê não tem os direitos necessários para visualizar este artigo!', +'L_BACK_TO_ARTICLES' => 'Voltar à lista dos artigos', +'L_ARTICLE_EDITING' => 'Modificação de um artigo', +'L_ARTICLE_TITLE' => 'Titúlo', +'L_ARTICLE_LIST_AUTHORS' => 'Autor', +'L_HEADLINE_FIELD' => 'Chapéu; (facultativo)', +'L_CONTENT_FIELD' => 'Conteúdo', +'L_LINK_FIELD' => 'Link do artykułu', +'L_LINK_ACCESS' => 'Przejdź do artykułu', +'L_LINK_VIEW' => 'zobaczyć', +'L_ARTICLE_STATUS' => 'Estado', +'L_DRAFT' => 'Brouillon', +'L_PUBLISHED' => 'Publicado', +'L_AWAITING' => 'Validação pendente', +'L_ARTICLE_DATE' => 'Data de publicação', +'L_NOW' => 'agora', +'L_ARTICLE_CATEGORIES' => 'Local', +'L_CATEGORY_HOME_PAGE' => 'Página de inicio', +'L_NEW_CATEGORY' => 'Nova categoria', +'L_ARTICLE_TAGS_FIELD' => 'Tags', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separe os tags com uma virgúla', +'L_ARTICLE_TOGGLER_TITLE' => 'Lista de tags', +'L_NO_TAG' => 'Nenhum tag', +'L_ALLOW_COMMENTS' => 'Autorizar os comentários', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'O URL se preenche automáticamente com o titúlo do seu artigo', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Gerir os comentários', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Gerir os comentários deste artigo', +'L_ARTICLE_NEW_COMMENT' => 'Digitar um comentário', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Digitar um comentário sobre este artigo', +'L_ARTICLE_DELETE_CONFIRM' => 'Suprimir este artigo ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Pré-vizualização', +'L_ARTICLE_DRAFT_BUTTON' => 'Grabar brouillon', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publicar', +'L_ARTICLE_MODERATE_BUTTON' => 'Submeter à aprovação', +'L_ARTICLE_OFFLINE_BUTTON' => 'Por offline', +'L_ARTICLE_UPDATE_BUTTON' => 'Grabar', +'L_CATEGORY_ADD_BUTTON' => 'Adicionar', +'L_ARTICLE_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" (opção)', +'L_ARTICLE_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" (opção)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Título conteúdo tag (opcional)', +'L_ARTICLE_CHAPO_HIDE' => 'esconder', +'L_ARTICLE_CHAPO_DISPLAY' => 'mostrar', +'L_AUTH_PAGE_TITLE' => 'Página de identificação', +'L_LOGOUT_SUCCESSFUL' => 'Foi correctamente deconectado', +'L_LOGIN_PAGE' => 'Conexão á zona de administração ', +'L_AUTH_LOGIN_FIELD' => 'Login de conexão', +'L_AUTH_PASSWORD_FIELD' => 'Senha', +'L_SUBMIT_BUTTON' => 'Validar', +'L_ERR_WRONG_PASSWORD' => 'Login ou senha incorrecta', +'L_POWERED_BY' => 'Propulsado por: PluXml', +'L_CAT_TITLE' => 'Criação e edição das cetegorias', +'L_CAT_LIST_ID' => 'Nome interno', +'L_CAT_LIST_ACTIVE' => 'Activa', +'L_CAT_LIST_NAME' => 'Nome da categoria', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Classificação', +'L_CAT_LIST_BYPAGE' => 'Artigos/página', +'L_CAT_LIST_ORDER' => 'Ordem', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Categoria', +'L_DISPLAY' => 'Mostrar', +'L_HIDE' => 'Esconder', +'L_OPTIONS' => 'Opções', +'L_FOR_SELECTION' => 'Para a selecção...', +'L_DELETE' => 'Suprimir', +'L_CAT_APPLY_BUTTON' => 'Alterar a lista das categorias', +'L_CAT_UNKNOWN' => 'categoria desconhecida', +'L_EDITCAT_PAGE_TITLE' => 'Edição das opções da categoria', +'L_EDITCAT_DESCRIPTION' => 'Descrição', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Pokaż produkty z tej kategorii na stronie głównej', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Voltar á lista das categorias', +'L_EDITCAT_UPDATE' => 'Actualizar esta categoria', +'L_EDITCAT_TITLE_HTMLTAG' => 'Título conteúdo tag (opcional)', +'L_EDITCAT_META_DESCRIPTION' => 'Conteúdo da baliza meta"description" para esta categoria (opção)', +'L_EDITCAT_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" para esta categoriae (opção)', +'L_COMMENT_ORPHAN' => 'nenhum artigo', +'L_COMMENT_ORPHAN_STATUS' => 'não visivél (aconselhamos a supressão deste comentário)', +'L_COMMENT_ARTICLE_LINKED' => 'Artigo', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Artigo ligado a este comentário', +'L_COMMENT_OFFLINE' => 'offline', +'L_COMMENT_ONLINE' => 'online', +'L_COMMENT_ONLINE_TITLE' => 'Lista dos comentários publicados', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Voltar à lista dos comentários deste artigo', +'L_BACK_TO_COMMENTS' => 'Voltar à lista dos comentários', +'L_COMMENT_EDITING' => 'Edição do comentário', +'L_COMMENT_AUTHOR_FIELD' => 'Autor', +'L_COMMENT_TYPE_FIELD' => 'Tipo comentário', +'L_COMMENT_DATE_FIELD' => 'Data i czas publikacji', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'web-site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Statuto', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Artigo ligado;', +'L_COMMENT_ARTICLE_FIELD' => 'Comentário', +'L_COMMENT_DELETE_CONFIRM' => 'Suprimir este comentário ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Validar a publicação', +'L_COMMENT_OFFLINE_BUTTON' => 'Por offline', +'L_COMMENT_ANSWER_BUTTON' => 'Responder a este comentário', +'L_COMMENT_UPDATE_BUTTON' => 'Actualizar', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'O comentário ao qual tenta responder nunca existiu ou foi suprimido !', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'O comentário está offline, impossivél de responder !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'O artigo ao quel faz referência não foi suprimido, impossivél de escrever um comentário !', +'L_ERR_CREATING_COMMENT' => 'Ocorreu um erro durante o processo de criação do comentário', +'L_CREATING_COMMENT_SUCCESSFUL' => 'O comentário foi criado com sucesso', +'L_CREATE_NEW_COMMENT' => 'Dígitar um comentário', +'L_COMMENT_SAVE_BUTTON' => 'Grabar', +'L_ARTICLE_COMMENTS_LIST' => 'Comentários deste artigo (do mais recente ao mais antigo)', +'L_COMMENT_ANSWER_TITLE' => 'Responder a este comentário', +'L_COMMENT_ANSWER' => 'Responder', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Dígitar um novo comentário para este artigo', +'L_COMMENT_NEW_COMMENT' => 'Dígitar um novo comentário', +'L_COMMENTS_ARTICLE_SCOPE' => 'artigo', +'L_COMMENTS_GLOBAL_SCOPE' => 'web-site inteiro', +'L_COMMENTS_OFFLINE_LIST' => 'Lista dos comentários á espera de validação ', +'L_COMMENTS_LIST_DATE' => 'Data', +'L_COMMENTS_LIST_AUTHOR' => 'Autor', +'L_COMMENTS_LIST_MESSAGE' => 'Mensagem', +'L_COMMENTS_LIST_ACTION' => 'Ação', +'L_COMMENT_EDIT' => 'Editar', +'L_COMMENT_EDIT_TITLE' => 'Editar este comentário', +'L_COMMENT_DELETE' => 'Suprimir', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Fluxo rss dos comentários offline', +'L_COMMENT_OFFLINE_FEEDS' => 'Comentários offline', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Fluxo rss dos comentários online', +'L_COMMENT_ONLINE_FEEDS' => 'Comentários online', +'L_COMMENTS_PRIVATE_FEEDS' => 'Fluxo de sindicação privado', +'L_COMMENTS_ONLINE_LIST' => 'Lista de opiniões publicadas', +'L_COMMENTS_ALL_LIST' => 'Lista de comentários', +'L_COMMENT_SET_ONLINE' => 'Take Online', +'L_COMMENT_SET_OFFLINE' => 'Take Offline', +'L_ARTICLES_FILTER_BUTTON' => 'Filtrar', +'L_CATEGORIES_TABLE' => 'Categorias', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Locais específicos', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Todos os artigos', +'L_ARTICLES_LIST' => 'Lista dos artigos', +'L_ARTICLE_LIST_DATE' => 'Data', +'L_ARTICLE_LIST_TITLE' => 'Titúlo', +'L_ARTICLE_LIST_CATEGORIES' => 'Categoria', +'L_ARTICLE_LIST_NBCOMS' => 'Nro coms', +'L_ARTICLE_LIST_AUTHOR' => 'Autor', +'L_ARTICLE_LIST_ACTION' => 'Ação', +'L_CATEGORY_HOME' => 'Índice', +'L_CATEGORY_DRAFT' => 'Brouillon', +'L_ARTICLE_VIEW' => 'Visualizar', +'L_ARTICLE_VIEW_TITLE' => 'Visualizar este artigo no web-site', +'L_ARTICLE_EDIT' => 'Editar', +'L_ARTICLE_EDIT_TITLE' => 'Editar este artigo', +'L_NEW_COMMENTS_TITLE' => 'Comentários á espera de validação', +'L_VALIDATED_COMMENTS_TITLE' => 'Comentários publicados', +'L_NO_ARTICLE' => 'Nenhum artigo', +'L_ARTICLES_SEARCH_BUTTON' => 'Pesquisa', +'L_ARTICLES_ALL_CATEGORIES' => 'Todas as categorias ...', +'L_ALL' => 'Todos', +'L_ALL_PUBLISHED' => 'Publicação', +'L_ALL_DRAFTS' => 'Rascunhos', +'L_ALL_AWAITING_MODERATION' => 'Validação pendente', +'L_MEDIAS_DELETE_FOLDER' => 'Suprimir a pasta', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Suprimir a pasta e o seu conteúdo ?', +'L_MEDIAS_NO_FILE' => 'Nenhum ficheiro', +'L_MEDIAS_FILENAME' => 'Nome de ficheiro', +'L_MEDIAS_ADD_FILE' => 'Adicionar o ficheiro', +'L_MEDIAS_BACK' => 'Voltar', +'L_MEDIAS_TITLE' => 'Gestão dos médias', +'L_MEDIAS_IMAGES' => 'Imagens', +'L_MEDIAS_DOCUMENTS' => 'Documentos', +'L_MEDIAS_CREATE_FOLDER' => 'Criar uma pasta', +'L_MEDIAS_SUBMIT_FILE' => 'Enviar', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Tamanho máximo dos ficheiros', +'L_MEDIAS_DIRECTORY' => 'Localização', +'L_MEDIAS_FOLDER' => 'Arquivo', +'L_MEDIAS_NEW_FOLDER' => 'Nova Pasta', +'L_MEDIAS_FILESIZE' => 'Tamanho', +'L_MEDIAS_DATE' => 'Data', +'L_MEDIAS_DIMENSIONS' => 'Dimensões', +'L_MEDIAS_RESIZE' => 'Redimensionar Imagens', +'L_MEDIAS_RESIZE_NO' => 'Tamanho Original', +'L_MEDIAS_THUMBS' => 'Utwórz miniaturę', +'L_MEDIAS_THUMBS_NONE' => 'Não miniatura', +'L_MEDIAS_MODIFY' => 'Editar', +'L_MEDIAS_THUMB' => 'Miniatura', +'L_MEDIAS_EXTENSION' => 'Extensão', +'L_MEDIAS_ADD' => 'Adicionar', +'L_MEDIAS_ALIGNMENT' => 'Alinhamento', +'L_MEDIAS_ALIGN_NONE' => 'Não', +'L_MEDIAS_ALIGN_LEFT' => 'Esquerda', +'L_MEDIAS_ALIGN_CENTER' => 'Centro', +'L_MEDIAS_ALIGN_RIGHT' => 'Direito', +'L_MEDIAS_RECREATE_THUMB' => 'Recriar de miniaturas', +'L_SORT_ASCENDING_DATE' => 'data ascendente', +'L_SORT_DESCENDING_DATE' => 'data decrescente', +'L_SORT_ALPHABETICAL' => 'alfabético', +'L_OK' => 'Ok', +'L_YES' => 'Sim', +'L_NO' => 'Não', +'L_NONE1' => 'nenhum', +'L_NONE2' => 'nenhuma', +'L_CONFIG_VIEW_FIELD' => 'Opções de exibição', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Escolha do tema', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Editar os ficheiros do tema', +'L_CONFIG_VIEW_FILES_EDIT' => 'Editar os ficheiros do tema', +'L_CONFIG_VIEW_SORT' => 'Classificação dos artigos ', +'L_CONFIG_VIEW_BYPAGE' => 'Numero de artigos mostrados / página', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Numero de artigos mostrados / página nos arquivos', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Numero de artigos mostrados / página na administração', +'L_CONFIG_VIEW_SORT_COMS' => 'Classificação dos comentários', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Numero de comentários mostrados / página na administração', +'L_CONFIG_VIEW_IMAGES' => 'Tamanho da imagem (largura x altura)', +'L_CONFIG_VIEW_THUMBS' => 'Tamanhos das miniaturas (largura x altura)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Utilizar uma página stática como página de índice', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Atenção esta página está inactiva', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Descarregue outros temas em ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Numero de artigos/comentários exibidoss nops fluxos Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Mostrar sómente o chapéu dos artigos nos fluxos Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Se o chapéu estiver vazio o conteúdo será exibido', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Texto (assinatura) a inserir no fundo de cada fluxo Rss dos artigos', +'L_CONFIG_VIEW_UPDATE' => 'Alterar as opções de exibição', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Wyświetlanie kategorie bez art', +'L_CONFIG_HOMETEMPLATE' => 'Szablon strony głównej', +'L_CONFIG_ADVANCED_DESC' => 'Configuração avançada', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Activar a re-escritura dos URLS', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Baczność .htaccess jest obecna w katalogu głównym PluXml. Poprzez umożliwienie przepisywania URL ten plik zostanie zmodyfikowany', +'L_CONFIG_ADVANCED_GZIP' => 'Activar a compressão GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Permite de comprimir as páginas afim de economizar os dados transferidos entre o servidor e o seu computer, em consequência aumenta a carga do servidor ! Desactive se o sue web-site fôr muito visitado', +'L_CONFIG_ADVANCED_CAPCHA' => 'Activar o capcha anti-spam', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Chave de administração (URLS privadas)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Esvaziar o campo afim de regenerar a chave novamente', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Utilizar uma pasta imagens e documentos diferente para cada utilizador', +'L_HELP_SLASH_END' => 'Não esquecêr o flash "/" no fim', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Położenie obrazów (katalog)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Lokalizacja dokument (katalog)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Lokalizacja elementów (katalog)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Lokalizacja komentarzy (katalog)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Lokalizacja statycznych stron (katalog)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Lokalizacja tematy (katalog)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Lokalizacja plugins (katalog)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Lokalizacja plików konfiguracyjnych (katalog)', +'L_CONFIG_ADVANCED_UPDATE' => 'Alterar a configura avançada', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configuração de base', +'L_CONFIG_BASE_SITE_TITLE' => 'Titúlo do web-site', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Sob-titúlo/descrição do web-site', +'L_CONFIG_BASE_URL_HELP' => 'Não esquecer o flash "/" do fim', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Idioma padrão do web-site', +'L_CONFIG_BASE_TIMEZONE' => 'Fuso horário', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Autorizar os comentários', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Moderar os comentários á criação', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Umiarkowany w okolicy Edytor profili i Publisher', +'L_CONFIG_BASE_UPDATE' => 'Alterar a configuração de base', +'L_CONFIG_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" do web-site (opção)', +'L_CONFIG_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" do web-site (opção)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'O tema não existe !', +'L_CONFIG_EDITTPL_TITLE' => 'Edição do tema', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Ecolha do ficheiro a editar :', +'L_CONFIG_EDITTPL_LOAD' => 'Carregar', +'L_CONFIG_INFOS_TITLE' => 'Informações relativas ao PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Esta informações o informão sobre o funcionamento de PluXml e poder ser uteis em caso de disfuncionamento do sistema.', +'L_CONFIG_INFOS_NB_CATS' => 'Numero de categorias :', +'L_CONFIG_INFOS_NB_STATICS' => 'Numero de páginas státicas:', +'L_CONFIG_INFOS_WRITER' => 'Nome do redactor na sessão :', +'L_PLUXML_CHECK_VERSION' => 'Verificação do numero de versão no web-site oficial PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Impossivél verificar a exestência de novas actualizações, enquanto a função \'allow_url_fopen\' estiver desactivada neste sistema', +'L_PLUXML_UPDATE_ERR' => 'A verificação de novas actualizações abortou por razões desconhecidas', +'L_PLUXML_UPTODATE' => 'Está a utilizar a ultima versão de PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Uma nova versão de PluXml está disponivél ! pode descarregá-la em', +'L_CONFIG_USERS_TITLE' => 'Gestão dos utilizadores', +'L_CONFIG_USER' => 'Utilizador', +'L_CONFIG_USERS_ID' => 'Numero do utilizador', +'L_CONFIG_USERS_ACTIVE' => 'Activo', +'L_CONFIG_USERS_ACTION' => 'Ação', +'L_CONFIG_USERS_NEW' => 'Novo utilizador', +'L_CONFIG_USERS_UPDATE' => 'Alterar a lista dos utilizadores', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'ID de login já utilizados', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Nome de Usuário já está em uso', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Categoria nome já utilizado', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Como já foi utilizado', +'L_BACK_TO_PLUGINS' => 'Voltar á página dos plugins', +'L_NO_PLUGIN' => 'Brak wtyczki', +'L_PLUGIN_NO_CONFIG' => 'Nie skonfigurowane wtyczki', +'L_PLUGINS_CSS' => 'Css', +'L_PLUGINS_CSS_TITLE' => 'Edycja kodu CSS wtyczki', +'L_CONTENT_FIELD_FRONTEND' => 'Strona zawartość pliku css', +'L_CONTENT_FIELD_BACKEND' => 'Css administrator treści', +'L_PLUGINS_TITLE' => 'Gestão dos plugins', +'L_PLUGINS_VERSION' => 'Versão', +'L_PLUGINS_AUTHOR' => 'Autor', +'L_PLUGINS_ACTIVATE' => 'Activar', +'L_PLUGINS_DEACTIVATE' => 'Desactivar', +'L_PLUGINS_DELETE' => 'Suprimir', +'L_PLUGINS_DELETE_ERROR' => 'Ocoreu um erro durante a supressão', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Supressão efectuada com sucesso', +'L_PLUGINS_CONFIG' => 'Configuração', +'L_PLUGINS_CONFIG_TITLE' => 'Configuração do plugin', +'L_PLUGINS_HELP' => 'Ajuda', +'L_PLUGINS_HELP_TITLE' => 'Vêr a ajuda do plugin', +'L_PLUGINS_REQUIREMENTS' => 'Nacessário', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Lista dos plugins presentes e activos para activar este plugin', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Nenhum', +'L_PLUGINS_ALPHA_SORT' => 'Sortuj alfabetycznie pluginy', +'L_PLUGINS_LOADING_SORT' => 'Ładowanie zamówienie', +'L_PLUGINS_ACTION' => 'Akcja', +'L_PLUGINS_APPLY_BUTTON' => 'Zmienić listę wtyczek', +'L_PLUGINS_ACTIVE_LIST' => 'Całość plugins', +'L_PLUGINS_INACTIVE_LIST' => 'Nieaktywne plugins', +'L_PROFIL_EDIT_TITLE' => 'Edição do seu perfil', +'L_PROFIL' => 'Perfil', +'L_PROFIL_LOGIN' => 'Login de conexão', +'L_PROFIL_USER' => 'Nome do utilizador', +'L_PROFIL_MAIL' => 'Enderêo e-mail', +'L_PROFIL_ADMIN_LANG' => 'Idioma do utilizador na administração', +'L_PROFIL_INFOS' => 'Informações', +'L_PROFIL_UPDATE' => 'Alterar o seu perfil', +'L_PROFIL_CHANGE_PASSWORD' => 'Alteração da senha', +'L_PROFIL_PASSWORD' => 'Senha', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirmação da senha', +'L_PROFIL_UPDATE_PASSWORD' => 'Alterar a sua senha', +'L_STATIC_BACK_TO_PAGE' => 'Voltar á lista das páginas státicas', +'L_STATIC_UNKNOWN_PAGE' => 'Esta página stática nunca existui ou foi suprimida !', +'L_STATIC_TITLE' => 'Edição página stática ', +'L_STATIC_VIEW_PAGE' => 'Visualizar a página', +'L_STATIC_ON_SITE' => 'directamente no web-site', +'L_STATIC_UPDATE' => 'Grabar esta página stática', +'L_STATIC_TITLE_HTMLTAG' => 'Título conteúdo tag (opcional)', +'L_STATIC_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" para esta página stática (opção)', +'L_STATIC_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" para esta página stática (opção)', +'L_STATICS_PAGE_TITLE' => 'Criação e edição das páginas státicas', +'L_STATICS_ID' => 'Identificante', +'L_STATICS_GROUP' => 'Groupo', +'L_STATICS_TITLE' => 'Titúlo', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Activa', +'L_STATICS_ORDER' => 'Ordem', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Ação', +'L_STATICS_TEMPLATE_FIELD' => 'Template', +'L_STATICS_PAGE_HOME' => 'Definir como página inicial', +'L_STATICS_HOME_PAGE' => 'Página
de inicio', +'L_PAGE' => 'Página', +'L_VIEW' => 'Vêr', +'L_STATICS_SRC_TITLE' => 'Editar o código fonte desta página', +'L_STATICS_SRC' => 'Editar', +'L_STATICS_NEW_PAGE' => 'Página nova', +'L_STATICS_UPDATE' => 'Alterar a lista das páginas státicas', +'L_PROFIL_ADMIN' => 'Administrador', +'L_PROFIL_MANAGER' => 'Gestionário', +'L_PROFIL_MODERATOR' => 'Moderador', +'L_PROFIL_EDITOR' => 'Editor', +'L_PROFIL_WRITER' => 'Redactor', +'L_ADMIN' => 'Administração', +'L_LOGIN' => 'Conectado como:', +'L_ADMIN_LOGOUT' => 'Deconectar', +'L_ADMIN_LOGOUT_TITLE' => 'Fechar a sessão de administração', +'L_BACK_TO_SITE' => 'Início', +'L_BACK_TO_SITE_TITLE' => 'Voltar ao início', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Voltar ao blog', +'L_MENU_ARTICLES' => 'Artigos', +'L_MENU_ARTICLES_TITLE' => 'Lista e modificação dos artigos', +'L_MENU_NEW_ARTICLES' => 'Novo artigo', +'L_MENU_NEW_ARTICLES_TITLE' => 'Novo artigo', +'L_MENU_STATICS_TITLE' => 'Lista e modificação das páginas státicas', +'L_MENU_STATICS' => 'Páginas státicas', +'L_MENU_COMMENTS_TITLE' => 'Lista e modificação dos comentários', +'L_MENU_COMMENTS' => 'Comentários', +'L_MENU_MEDIAS_TITLE' => 'Enviar e inserir um média', +'L_MENU_MEDIAS' => 'Médias', +'L_MENU_CATEGORIES_TITLE' => 'Criar, gerir ou editar as categorias', +'L_MENU_CATEGORIES' => 'Categorias', +'L_MENU_CONFIG_TITLE' => 'Configurar PluXml', +'L_MENU_CONFIG' => 'Parâmetros', +'L_MENU_PROFIL_TITLE' => 'Gerir o perfil do utilizador', +'L_MENU_PROFIL' => 'Perfil', +'L_WARNING_INSTALLATION_FILE' => '

O ficheiro install.php está presente na raíz de PluXml.
Por razões de segurança apague (delete) este ficheiro.

', +'L_USER_UNKNOWN' => 'Utilizador desconhecido', +'L_USER_LANG' => 'Idioma utilizado na administração', +'L_USER_MAIL' => 'Enderêco e-mail', +'L_USER_INFOS' => 'Informações', +'L_USER_UPDATE' => 'Actualizar este utilizador', +'L_USER_PAGE_TITLE' => 'Edição das opções do utilizador', +'L_USER_BACK_TO_PAGE' => 'Voltar á lista dos utilizadores', +'L_MENU_CONFIG_BASE_TITLE' => 'Alterar a configuração de base de PluXml', +'L_MENU_CONFIG_BASE' => 'Configuração de base', +'L_MENU_CONFIG_VIEW_TITLE' => 'Alterar as opções de exibição de Pluxml', +'L_MENU_CONFIG_VIEW' => 'Opções de exibição', +'L_MENU_CONFIG_USERS_TITLE' => 'Gerir as contas dos utilizadores', +'L_MENU_CONFIG_USERS' => 'Contas dos utilizadores', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Alterar a configuração avançada', +'L_MENU_CONFIG_ADVANCED' => 'Configuração avançada', +'L_MENU_CONFIG_INFOS_TITLE' => 'Ter informações sobre o seu PluXml', +'L_MENU_CONFIG_INFOS' => 'Informações', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Gerir os plugins', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', +'L_ERR_URL_ALREADY_EXISTS' => 'Url już w użyciu. Proszę zmienić wartość pola \'Url\'', +); + +?> diff --git a/src/core/lang/pl/core.php b/src/core/lang/pl/core.php new file mode 100644 index 0000000..3106aa6 --- /dev/null +++ b/src/core/lang/pl/core.php @@ -0,0 +1,136 @@ + 'pl', + +# common +'L_PLUXML_VERSION' => 'Wydanie PluXml', +'L_HOMEPAGE' => 'Strona domowa', +'L_UNCLASSIFIED' => 'Brak kategorii', +'L_INFO_PHP_VERSION' => 'Wydane PHP', +'L_INFO_MAGIC_QUOTES' => 'State of "magic quotes"', +'L_INFO_CHARSET' => 'kodowanie', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Główna skórka PluXml nie funkcjonuje', +'L_ERR_FILE_NOTFOUND' => 'Plik nie istnieje', +'L_ERR_PAGE_NOT_FOUND' => 'Nie znaleziono strony', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'stycz', +'L_SHORT_FEBRUARY' => 'luty', +'L_SHORT_MARCH' => 'mar', +'L_SHORT_APRIL' => 'kwiec', +'L_SHORT_MAY' => 'maj', +'L_SHORT_JUNE' => 'czerw', +'L_SHORT_JULY' => 'lip', +'L_SHORT_AUGUST' => 'sierp', +'L_SHORT_SEPTEMBER' => 'wrzes', +'L_SHORT_OCTOBER' => 'pazdz', +'L_SHORT_NOVEMBER' => 'listop', +'L_SHORT_DECEMBER' => 'grudz', +'L_JANUARY' => 'styczeń', +'L_FEBRUARY' => 'luty', +'L_MARCH' => 'marzec', +'L_APRIL' => 'kwiecień', +'L_MAY' => 'maj', +'L_JUNE' => 'czerwiec', +'L_JULY' => 'lipec', +'L_AUGUST' => 'sierpień', +'L_SEPTEMBER' => 'wrzesień', +'L_OCTOBER' => 'październik', +'L_NOVEMBER' => 'listopad', +'L_DECEMBER' => 'grudzień', +'L_MONDAY' => 'poniedziałek', +'L_TUESDAY' => 'wtorek', +'L_WEDNESDAY' => 'środa', +'L_THURSDAY' => 'czwartek', +'L_FRIDAY' => 'piątek', +'L_SATURDAY' => 'sobota', +'L_SUNDAY' => 'niedziela', + +# class.plx.capcha.php +'L_LAST' => 'ostatnią', +'L_FIRST' => 'pierwszą', +'L_SECOND' => 'drugą', +'L_THIRD' => 'trzecią', +'L_FOURTH' => 'czwartą', +'L_FIFTH' => 'piątą', +'L_SIXTH' => 'szóstą', +'L_SEVENTH' => 'siódmą', +'L_EIGTH' => 'ósmą', +'L_NINTH' => 'dziewiątą', +'L_TENTH' => 'dziesiątą', +'L_NTH' => 'nth', +'L_CAPCHA_QUESTION' => 'Przepisz %s literę z palety %s?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s posiada możliwy zapis', +'L_WRITE_NOT_ACCESS' => '%s nie jest zapisywalny lub nie istnieje', +'L_MODREWRITE_AVAILABLE' => 'Moduł apatche mod_rewrite jest dostępny', +'L_MODREWRITE_NOT_AVAILABLE' => 'Moduł Apatche mod_rewrite nie jest dostępny', +'L_LIBGD_INSTALLED' => 'Biblioteka GD jest zainstalowana', +'L_LIBGD_NOT_INSTALLED' => 'Biblioteka GD nie jest zainstalowana', +'L_MAIL_AVAILABLE' => 'Funkcja mail jest dostępna', +'L_MAIL_NOT_AVAILABLE' => 'Funkcja mail nie jest dostępna', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Do poprawnego działania wersja "%sversion" jest wymagana przez PluXml', +'L_ARTICLE_NO_TAG' => 'Nie znaleziono artykułów przypisanych do tego tagu!', +'L_UNKNOWN_CATEGORY' => 'Kategoria nie istnieje!!', +'L_NO_ARTICLE_PAGE' => 'Brak artykułów!', +'L_UNKNOWN_ARTICLE' => 'Ten artykuł nie istnieje!', +'L_COM_IN_MODERATION' => 'Komentarz zostanie sprawdzony przez administratora strony', +'L_UNKNOWN_STATIC' => 'Ta strona nie istnieje!', +'L_DOCUMENT_NOT_FOUND' => 'Ten dokument nie istnieje', +'L_NEWCOMMENT_ERR' => 'Wystąpił błąd podczas publikacji komentarza', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Proszę wypenić wszystkie wymagane pola', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Błędna weryfikacja zabezpieczająca', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Kompresja %s jest aktywna', +'L_PAGETITLE_ARCHIVES' => 'Archiwum', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'brak kategorii', +'L_CATEGORY' => 'kategoria ', +'L_CATEGORIES' => 'kategoriach', +'L_NO_ARTICLE' => 'żaden artykuł', +'L_ARTICLE' => 'artykuł ', +'L_ARTICLES' => 'artykuły', +'L_ARTAUTHOR_UNKNOWN' => 'brak informacji', +'L_ARTTAGS_NONE' => 'brak', +'L_ARTCHAPO' => 'Czytaj więcej #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Pokaż kanał RSS dla tej kategorii', +'L_ARTFEED_RSS_TAG' => 'Pokaż kanał RSS dla tej tag', +'L_ARTFEED_RSS' => 'Pokaż kanał RSS dla tego artykułu', +'L_NO_COMMENT' => 'żadnych komentarzy', +'L_COMMENT' => 'komentarz', +'L_COMMENTS' => 'komentarzy', +'L_COMFEED_RSS_ARTICLE' => 'Pokał kanał RSS dla komentarzy tego artykułu', +'L_COMFEED_RSS' => 'Kanał RSS dla komentarzy', +'L_STATICCONTENT_INPROCESS' => 'Ta strona jest aktualnie w budowie', +'L_SAID' => 'rzekł', + +'L_PAGINATION_FIRST_TITLE' => 'Przejdź do pierwszej strony', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Poprzednia strona', +'L_PAGINATION_PREVIOUS' => 'poprzednia', +'L_PAGINATION_NEXT_TITLE' => 'Następna strona', +'L_PAGINATION_NEXT' => 'następna', +'L_PAGINATION_LAST_TITLE' => 'Przejdź do ostatniej strony', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'strona %s z %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Prywatne adresy URL nie zostały zainicjowane w ustawieniach administracji!', +'L_FEED_COMMENTS' => 'Komentarze', +'L_FEED_ONLINE_COMMENTS' => 'Komentarze online', +'L_FEED_OFFLINE_COMMENTS' => 'Komentarze offline', +'L_FEED_WRITTEN_BY' => 'Napisał', + +); +?> \ No newline at end of file diff --git a/src/core/lang/pl/install.php b/src/core/lang/pl/install.php new file mode 100644 index 0000000..6839534 --- /dev/null +++ b/src/core/lang/pl/install.php @@ -0,0 +1,32 @@ + 'Instalacja', +'L_WRONG_PHP_VERSION' => 'PluXml wymaga PHP 5 lub nowszej', +'L_SELECT_LANG' => 'Wybierz język', +'L_INPUT_CHANGE' => 'Zmień', +'L_DEFAULT_CATEGORY_TITLE' => 'Kategoria 1', +'L_DEFAULT_CATEGORY_URL' => 'kategoria-1', +'L_DEFAULT_STATIC_TITLE' => 'Strona 1', +'L_DEFAULT_STATIC_URL' => 'strona-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Pierwszy artykuł', +'L_DEFAULT_ARTICLE_URL' => 'pierwszy-artykul', +'L_DEFAULT_COMMENT_CONTENT' => 'To jest pierwszy komentarz !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml jest już gotowy do użycia !', +'L_ERR_MISSING_USER' => 'Please fill in the contributor\'s field !', +'L_ERR_MISSING_LOGIN' => 'Pole login zostało pominięte !', +'L_ERR_MISSING_PASSWORD' => 'Please fill the password field !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Invalid password confirmation !', +'L_PLUXML_INSTALLATION' => 'PluXml installation', +'L_SITE_DESCRIPTION' => 'Blog or CMS, XML powered !', +'L_VERSION' => 'wersja', +'L_USERNAME' => 'Nazwa użytkownik', +'L_LOGIN' => 'Login Administratora', +'L_PASSWORD' => 'Hasło', +'L_PASSWORD_CONFIRMATION' => 'Potwierdź hasło', +'L_INPUT_INSTALL' => 'Instalacja', +'L_TIMEZONE' => 'Fuso horário', +); +?> \ No newline at end of file diff --git a/src/core/lang/pl/update.php b/src/core/lang/pl/update.php new file mode 100644 index 0000000..4d7e50a --- /dev/null +++ b/src/core/lang/pl/update.php @@ -0,0 +1,58 @@ + 'Data was successfully saved', +'L_UPDATE_TITLE' => 'Aktualizacja PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml wymaga PHP w wersji 5 lub nowszej.', + +'L_SELECT_LANG' => 'Wybierz język', +'L_INPUT_CHANGE' => 'Zmień', + +'L_UPDATE_UPTODATE' => 'Twój PluXml jest aktualny', +'L_UPDATE_NOT_AVAILABLE' => 'Brak dostępnych akutalizacji.', +'L_UPDATE_BACK' => 'Wróć do Strony głównej', +'L_UPDATE_WARNING1' => 'Twoja wersja PluXml nie jest aktualna', +'L_UPDATE_SELECT_VERSION' => 'Proszę o wybór wersji PluXml, która chcesz zaktualizować.', +'L_UPDATE_WARNING2' => 'Jeśli nie możesz odnaleźć swojej wersji PluXml na podanej liście, można oznaczać to, że posiadane przez Ciebie wydanie nie jest już wspierane. W tym wypadku automatyczna aktualizacja jest niemożliwa.
Zalecamy pobranie najnowszej wersji PluXml i rozpoczęcie nowej instalacji.', +'L_UPDATE_WARNING3' => 'Ostrzeżenie: nim rozpoczniesz aktualizacje, nie zapomnij zrobić kopii zapasowej folderu "data"', +'L_UPDATE_START' => 'Rozpocznij aktualizację', + +'L_UPDATE_ENDED' => 'Aktualizacja zakończona', +'L_UPDATE_INPROGRESS' => 'Stosowanie aktualizacji wersji', +'L_UPDATE_ERROR' => 'Wystąpił błąd podczas aktualizacji.', +'L_UPDATE_SUCCESSFUL' => 'Wszystkie aktualizacje zostały pomyślnie ukończone !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Aktualizacja pliku parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Tworzenie pliku tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Wystąpił błąd podczas tworzenia pliku tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Tworzenie plików skórek', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Wystąpił błąd podczas tworzenia pliku', +'L_UPDATE_ARTICLES_CONVERSION' => 'Konwersja artykułów', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Wystąpił błąd', +'L_UPDATE_STATICS_MIGRATION' => 'Migracja statycznych stron', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Wystąpił błąd podczas migracji statycznych stron', +'L_UPDATE_CREATE_USERS_FILE' => 'Tworzenie users\' file', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Wystąpił błąd podczas tworzenia pliku użytkowników', +'L_UPDATE_USERS_MIGRATION' => 'Migracja pliku użytkowników', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Wystąpił błąd podczas migracji użytkowników', +'L_UPDATE_ERR_NO_USERS' => 'Brak użytkowników', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Tworzenie pliku .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Wystąpił błąd podczas tworzenia pliku .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Zaktualizuj plik .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Błąd podczas aktualizacji pliku .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migracja pliku kategorii', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Wystąpił błąd podczas migracji kategorii', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Tworzenie pliku plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Wystąpił błąd podczas tworzea pliku plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Usuwanie core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Wystąpił błąd podczas usuwania core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Usuwanie folderu core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Wystąpił błąd podczas usuwania folderu core/plxtoolbar/', +'L_UPDATE_FILE' => 'Aktualizacja plików', +'L_UPDATE_ERR_FILE' => 'Błąd podczas pliku aktualizacji', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migracja plików od ustawień parametrów wtyczek w pliku konfiguracyjnym', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Aktualizacja pliku plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lang/pt/admin.php b/src/core/lang/pt/admin.php new file mode 100644 index 0000000..2eca38d --- /dev/null +++ b/src/core/lang/pt/admin.php @@ -0,0 +1,462 @@ + 'Erro desconhecido', +'L_CONFIRM_DELETE' => 'Confirme a eliminação ?', +'L_SAVE_FILE' => 'Salve o arquivo', +'L_SAVE_FILE_SUCCESSFULLY' => 'Arquivo salvo com sucesso', +'L_SAVE_FILE_ERROR' => 'Salvar o arquivo para o erro', +'L_SAVE_SUCCESSFUL' => 'Grabação dos dados efectuada com sucesso', +'L_SAVE_ERR' => 'Ocorreu um erro durante o processo de grabação dos dados', +'L_NO_ENTRY' => 'Acesso refusado', +'L_ERR_USER_EMPTY' => 'Queira dígitar um nome de utilizador', +'L_ERR_PASSWORD_EMPTY' => 'Queira dígitar uma senha', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'A confirmação da senha está errada', +'L_ERR_INVALID_EMAIL' => 'Enderêço e-mail inválido', +'L_ERR_INVALID_SITE' => 'Enderêço do web-site inválido', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Identificante do artigo inválido !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'nova-categoria', +'L_DEFAULT_NEW_STATIC_URL' => 'nova-página', +'L_DEFAULT_NEW_ARTICLE_URL' => 'novo-artigo', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Artigo criado com sucesso', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Artigo actualizado com sucesso', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Suppressão efectuada com sucesso', +'L_ARTICLE_SAVE_ERR' => 'Erro a salvaguarda do artigo', +'L_ARTICLE_DELETE_ERR' => 'Ocorreu um erro durante o processo de supressão do artigo', +'L_ERR_UNKNOWN_COMMENT' => 'O comentário ao qual faz refrência nunca existiu ou foi suprimido', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Comentário alterado com sucesso', +'L_COMMENT_UPDATE_ERR' => 'Ocorreu um erro durante o processo de alteração do comentário', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Supressão efectuada com sucesso', +'L_COMMENT_DELETE_ERR' => 'Ocorreu um erro durante o processo de supressão', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validatção efectuada com sucesso', +'L_COMMENT_VALIDATE_ERR' => 'Ocorreu um erro durante o processo de validação', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Moderação efectuada com sucesso', +'L_COMMENT_MODERATE_ERR' => 'Ocorreu um erro durante o processo de moderação', +'L_COMMENT_WRITTEN_BY' => 'Escrito por', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Impossivél de criar a pasta para os médias do utilizador conectado', +'L_PLXMEDIAS_ROOT' => 'raíz', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Impossivél de criar a pasta', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'pasta criada com sucesso', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'A pasta já existe', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Ocorreu um erro durante o processo de supressão da pasta', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'pasta suprimida com sucesso', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'O tipo de arquivo não é permitido', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'O tamanho do ficheiro é superior ao;', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Erro ao enviar um arquivo', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Arquivo enviada com sucesso!', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Erro ao carregar arquivos', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Arquivos enviada com sucesso!', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Removido com sucesso arquivos', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Erro ao excluir um arquivo', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Arquivo excluído com sucesso', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Erro ao apagar o arquivo', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Ficheiros movidos com sucesso', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Ficheiro movido com sucesso', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Ocorreu um erro durante o processo moção dos ficheiros', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Ocorreu um erro durante o processo moção do ficheiro', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Mover', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Erro ao criar a miniatura', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Erro na criação de miniaturas', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniatura criado com sucesso', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Miniaturas criado com sucesso', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Novo artigo', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Data de publicação inválida.', +'L_ERR_UNKNOWN_ARTICLE' => 'O artigo ao qual faz refrência nunca existiu ou foi suprimido!', +'L_ERR_FORBIDDEN_ARTICLE' => 'Voçê não tem os direitos necessários para visualizar este artigo!', +'L_BACK_TO_ARTICLES' => 'Voltar à lista dos artigos', +'L_ARTICLE_EDITING' => 'Modificação de um artigo', +'L_ARTICLE_TITLE' => 'Titúlo', +'L_ARTICLE_LIST_AUTHORS' => 'Autor', +'L_HEADLINE_FIELD' => 'Chapéu; (facultativo)', +'L_CONTENT_FIELD' => 'Conteúdo', +'L_LINK_FIELD' => 'Link para o artigo', +'L_LINK_ACCESS' => 'Ir para o artigo', +'L_LINK_VIEW' => 'ver', +'L_ARTICLE_STATUS' => 'Estado', +'L_DRAFT' => 'Brouillon', +'L_PUBLISHED' => 'Publicado', +'L_AWAITING' => 'Validação pendente', +'L_ARTICLE_DATE' => 'Data de publicação', +'L_NOW' => 'agora', +'L_ARTICLE_CATEGORIES' => 'Local', +'L_CATEGORY_HOME_PAGE' => 'Página de inicio', +'L_NEW_CATEGORY' => 'Nova categoria', +'L_ARTICLE_TAGS_FIELD' => 'Tags', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separe os tags com uma virgúla', +'L_ARTICLE_TOGGLER_TITLE' => 'Lista de tags', +'L_NO_TAG' => 'Nenhum tag', +'L_ALLOW_COMMENTS' => 'Autorizar os comentários', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'O URL se preenche automáticamente com o titúlo do seu artigo', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Gerir os comentários', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Gerir os comentários deste artigo', +'L_ARTICLE_NEW_COMMENT' => 'Digitar um comentário', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Digitar um comentário sobre este artigo', +'L_ARTICLE_DELETE_CONFIRM' => 'Suprimir este artigo ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Pré-vizualização', +'L_ARTICLE_DRAFT_BUTTON' => 'Grabar brouillon', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publicar', +'L_ARTICLE_MODERATE_BUTTON' => 'Submeter à aprovação', +'L_ARTICLE_OFFLINE_BUTTON' => 'Por offline', +'L_ARTICLE_UPDATE_BUTTON' => 'Grabar', +'L_CATEGORY_ADD_BUTTON' => 'Adicionar', +'L_ARTICLE_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" (opção)', +'L_ARTICLE_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" (opção)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Conteúdo da tag título (opcional)', +'L_ARTICLE_CHAPO_HIDE' => 'esconder', +'L_ARTICLE_CHAPO_DISPLAY' => 'mostrar', +'L_AUTH_PAGE_TITLE' => 'Página de identificação', +'L_LOGOUT_SUCCESSFUL' => 'Foi correctamente deconectado', +'L_LOGIN_PAGE' => 'Conexão á zona de administração ', +'L_AUTH_LOGIN_FIELD' => 'Login de conexão', +'L_AUTH_PASSWORD_FIELD' => 'Senha', +'L_SUBMIT_BUTTON' => 'Validar', +'L_ERR_WRONG_PASSWORD' => 'Login ou senha incorrecta', +'L_POWERED_BY' => 'Propulsado por: PluXml', +'L_CAT_TITLE' => 'Criação e edição das cetegorias', +'L_CAT_LIST_ID' => 'Nome interno', +'L_CAT_LIST_ACTIVE' => 'Activa', +'L_CAT_LIST_NAME' => 'Nome da categoria', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Classificação', +'L_CAT_LIST_BYPAGE' => 'Artigos/página', +'L_CAT_LIST_ORDER' => 'Ordem', +'L_CAT_LIST_MENU' => 'Menu', +'L_CATEGORY' => 'Categoria', +'L_DISPLAY' => 'Mostrar', +'L_HIDE' => 'Esconder', +'L_OPTIONS' => 'Opções', +'L_FOR_SELECTION' => 'Para a selecção...', +'L_DELETE' => 'Suprimir', +'L_CAT_APPLY_BUTTON' => 'Alterar a lista das categorias', +'L_CAT_UNKNOWN' => 'categoria desconhecida', +'L_EDITCAT_PAGE_TITLE' => 'Edição das opções da categoria', +'L_EDITCAT_DESCRIPTION' => 'Descrição', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Mostrar itens nesta categoria na página inicial', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Voltar á lista das categorias', +'L_EDITCAT_UPDATE' => 'Actualizar esta categoria', +'L_EDITCAT_TITLE_HTMLTAG' => 'Conteúdo da tag título (opcional)', +'L_EDITCAT_META_DESCRIPTION' => 'Conteúdo da baliza meta"description" para esta categoria (opção)', +'L_EDITCAT_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" para esta categoriae (opção)', +'L_COMMENT_ORPHAN' => 'nenhum artigo', +'L_COMMENT_ORPHAN_STATUS' => 'não visivél (aconselhamos a supressão deste comentário)', +'L_COMMENT_ARTICLE_LINKED' => 'Artigo', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Artigo ligado a este comentário', +'L_COMMENT_OFFLINE' => 'offline', +'L_COMMENT_ONLINE' => 'online', +'L_COMMENT_ONLINE_TITLE' => 'Lista dos comentários publicados', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Voltar à lista dos comentários deste artigo', +'L_BACK_TO_COMMENTS' => 'Voltar à lista dos comentários', +'L_COMMENT_EDITING' => 'Edição do comentário', +'L_COMMENT_AUTHOR_FIELD' => 'Autor', +'L_COMMENT_TYPE_FIELD' => 'Tipo comentário', +'L_COMMENT_DATE_FIELD' => 'Data e hora de publicação', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'web-site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Statuto', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Artigo ligado;', +'L_COMMENT_ARTICLE_FIELD' => 'Comentário', +'L_COMMENT_DELETE_CONFIRM' => 'Suprimir este comentário ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Validar a publicação', +'L_COMMENT_OFFLINE_BUTTON' => 'Por offline', +'L_COMMENT_ANSWER_BUTTON' => 'Responder a este comentário', +'L_COMMENT_UPDATE_BUTTON' => 'Actualizar', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'O comentário ao qual tenta responder nunca existiu ou foi suprimido !', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'O comentário está offline, impossivél de responder !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'O artigo ao quel faz referência não foi suprimido, impossivél de escrever um comentário !', +'L_ERR_CREATING_COMMENT' => 'Ocorreu um erro durante o processo de criação do comentário', +'L_CREATING_COMMENT_SUCCESSFUL' => 'O comentário foi criado com sucesso', +'L_CREATE_NEW_COMMENT' => 'Dígitar um comentário', +'L_COMMENT_SAVE_BUTTON' => 'Grabar', +'L_ARTICLE_COMMENTS_LIST' => 'Comentários deste artigo (do mais recente ao mais antigo)', +'L_COMMENT_ANSWER_TITLE' => 'Responder a este comentário', +'L_COMMENT_ANSWER' => 'Responder', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Dígitar um novo comentário para este artigo', +'L_COMMENT_NEW_COMMENT' => 'Dígitar um novo comentário', +'L_COMMENTS_ARTICLE_SCOPE' => 'artigo', +'L_COMMENTS_GLOBAL_SCOPE' => 'web-site inteiro', +'L_COMMENTS_OFFLINE_LIST' => 'Lista dos comentários á espera de validação ', +'L_COMMENTS_LIST_DATE' => 'Data', +'L_COMMENTS_LIST_AUTHOR' => 'Autor', +'L_COMMENTS_LIST_MESSAGE' => 'Mensagem', +'L_COMMENTS_LIST_ACTION' => 'Ação', +'L_COMMENT_EDIT' => 'Editar', +'L_COMMENT_EDIT_TITLE' => 'Editar este comentário', +'L_COMMENT_DELETE' => 'Suprimir', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'Fluxo rss dos comentários offline', +'L_COMMENT_OFFLINE_FEEDS' => 'Comentários offline', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Fluxo rss dos comentários online', +'L_COMMENT_ONLINE_FEEDS' => 'Comentários online', +'L_COMMENTS_PRIVATE_FEEDS' => 'Fluxo de sindicação privado', +'L_COMMENTS_ONLINE_LIST' => 'Lista de opiniões publicadas', +'L_COMMENTS_ALL_LIST' => 'Lista de comentários', +'L_COMMENT_SET_ONLINE' => 'Take Online', +'L_COMMENT_SET_OFFLINE' => 'Take Offline', +'L_ARTICLES_FILTER_BUTTON' => 'Filtrar', +'L_CATEGORIES_TABLE' => 'Categorias', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Locais específicos', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Todos os artigos', +'L_ARTICLES_LIST' => 'Lista dos artigos', +'L_ARTICLE_LIST_DATE' => 'Data', +'L_ARTICLE_LIST_TITLE' => 'Titúlo', +'L_ARTICLE_LIST_CATEGORIES' => 'Categoria', +'L_ARTICLE_LIST_NBCOMS' => 'Nro coms', +'L_ARTICLE_LIST_AUTHOR' => 'Autor', +'L_ARTICLE_LIST_ACTION' => 'Ação', +'L_CATEGORY_HOME' => 'Índice', +'L_CATEGORY_DRAFT' => 'Brouillon', +'L_ARTICLE_VIEW' => 'Visualizar', +'L_ARTICLE_VIEW_TITLE' => 'Visualizar este artigo no web-site', +'L_ARTICLE_EDIT' => 'Editar', +'L_ARTICLE_EDIT_TITLE' => 'Editar este artigo', +'L_NEW_COMMENTS_TITLE' => 'Comentários á espera de validação', +'L_VALIDATED_COMMENTS_TITLE' => 'Comentários publicados', +'L_NO_ARTICLE' => 'Nenhum artigo', +'L_ARTICLES_SEARCH_BUTTON' => 'Pesquisa', +'L_ARTICLES_ALL_CATEGORIES' => 'Todas as categorias ...', +'L_ALL' => 'Todos', +'L_ALL_PUBLISHED' => 'Publicação', +'L_ALL_DRAFTS' => 'Rascunhos', +'L_ALL_AWAITING_MODERATION' => 'Validação pendente', +'L_MEDIAS_DELETE_FOLDER' => 'Suprimir a pasta', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Suprimir a pasta e o seu conteúdo ?', +'L_MEDIAS_NO_FILE' => 'Nenhum ficheiro', +'L_MEDIAS_FILENAME' => 'Nome de ficheiro', +'L_MEDIAS_ADD_FILE' => 'Adicionar o ficheiro', +'L_MEDIAS_BACK' => 'Voltar', +'L_MEDIAS_TITLE' => 'Gestão dos médias', +'L_MEDIAS_IMAGES' => 'Imagens', +'L_MEDIAS_DOCUMENTS' => 'Documentos', +'L_MEDIAS_CREATE_FOLDER' => 'Criar uma pasta', +'L_MEDIAS_SUBMIT_FILE' => 'Enviar', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Tamanho máximo dos ficheiros', +'L_MEDIAS_DIRECTORY' => 'Localização', +'L_MEDIAS_FOLDER' => 'Arquivo', +'L_MEDIAS_NEW_FOLDER' => 'Nova Pasta', +'L_MEDIAS_FILESIZE' => 'Tamanho', +'L_MEDIAS_DATE' => 'Data', +'L_MEDIAS_DIMENSIONS' => 'Dimensões', +'L_MEDIAS_RESIZE' => 'Redimensionar Imagens', +'L_MEDIAS_RESIZE_NO' => 'Tamanho Original', +'L_MEDIAS_THUMBS' => 'Criar miniaturas', +'L_MEDIAS_THUMBS_NONE' => 'Não miniatura', +'L_MEDIAS_MODIFY' => 'Editar', +'L_MEDIAS_THUMB' => 'Miniatura', +'L_MEDIAS_EXTENSION' => 'Extensão', +'L_MEDIAS_ADD' => 'Adicionar', +'L_MEDIAS_ALIGNMENT' => 'Alinhamento', +'L_MEDIAS_ALIGN_NONE' => 'Não', +'L_MEDIAS_ALIGN_LEFT' => 'Esquerda', +'L_MEDIAS_ALIGN_CENTER' => 'Centro', +'L_MEDIAS_ALIGN_RIGHT' => 'Direito', +'L_MEDIAS_RECREATE_THUMB' => 'Recriar de miniaturas', +'L_SORT_ASCENDING_DATE' => 'data ascendente', +'L_SORT_DESCENDING_DATE' => 'data decrescente', +'L_SORT_ALPHABETICAL' => 'alfabético', +'L_OK' => 'Ok', +'L_YES' => 'Sim', +'L_NO' => 'Não', +'L_NONE1' => 'nenhum', +'L_NONE2' => 'nenhuma', +'L_CONFIG_VIEW_FIELD' => 'Opções de exibição', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Escolha do tema', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Editar os ficheiros do tema', +'L_CONFIG_VIEW_FILES_EDIT' => 'Editar os ficheiros do tema', +'L_CONFIG_VIEW_SORT' => 'Classificação dos artigos ', +'L_CONFIG_VIEW_BYPAGE' => 'Numero de artigos mostrados / página', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Numero de artigos mostrados / página nos arquivos', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Numero de artigos mostrados / página na administração', +'L_CONFIG_VIEW_SORT_COMS' => 'Classificação dos comentários', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Numero de comentários mostrados / página na administração', +'L_CONFIG_VIEW_IMAGES' => 'Tamanho da imagem (largura x altura)', +'L_CONFIG_VIEW_THUMBS' => 'Tamanhos das miniaturas (largura x altura)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Utilizar uma página stática como página de índice', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Atenção esta página está inactiva', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Descarregue outros temas em ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Numero de artigos/comentários exibidoss nops fluxos Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Mostrar sómente o chapéu dos artigos nos fluxos Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Se o chapéu estiver vazio o conteúdo será exibido', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Texto (assinatura) a inserir no fundo de cada fluxo Rss dos artigos', +'L_CONFIG_VIEW_UPDATE' => 'Alterar as opções de exibição', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Listar categorias sem artigo', +'L_CONFIG_HOMETEMPLATE' => 'Template da página inicial', +'L_CONFIG_ADVANCED_DESC' => 'Configuração avançada', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Activar a re-escritura dos URLS', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Atenção um .htaccess já está presente na raiz do seu PluXml. Ao permitir a reescrita de URL este arquivo será modificado', +'L_CONFIG_ADVANCED_GZIP' => 'Activar a compressão GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Permite de comprimir as páginas afim de economizar os dados transferidos entre o servidor e o seu computer, em consequência aumenta a carga do servidor ! Desactive se o sue web-site fôr muito visitado', +'L_CONFIG_ADVANCED_CAPCHA' => 'Activar o capcha anti-spam', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Chave de administração (URLS privadas)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Esvaziar o campo afim de regenerar a chave novamente', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Utilizar uma pasta imagens e documentos diferente para cada utilizador', +'L_HELP_SLASH_END' => 'Não esquecêr o flash "/" no fim', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Local das imagens (pasta)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Local das documentos (pasta)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Local dos artigos (pasta)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Local dos comentários (pasta)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Local das páginas státicas (pasta)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Localização de tópicos (pasta)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Localização dos plugins (pasta)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Localização dos arquivos de configuração (pasta)', +'L_CONFIG_ADVANCED_UPDATE' => 'Alterar a configura avançada', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configuração de base', +'L_CONFIG_BASE_SITE_TITLE' => 'Titúlo do web-site', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Sob-titúlo/descrição do web-site', +'L_CONFIG_BASE_URL_HELP' => 'Não esquecer o flash "/" do fim', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Idioma padrão do web-site', +'L_CONFIG_BASE_TIMEZONE' => 'Fuso horário', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Autorizar os comentários', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Moderar os comentários á criação', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Moderar os artigos para os perfis Editor e Editor', +'L_CONFIG_BASE_UPDATE' => 'Alterar a configuração de base', +'L_CONFIG_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" do web-site (opção)', +'L_CONFIG_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" do web-site (opção)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'O tema não existe !', +'L_CONFIG_EDITTPL_TITLE' => 'Edição do tema', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Ecolha do ficheiro a editar :', +'L_CONFIG_EDITTPL_LOAD' => 'Carregar', +'L_CONFIG_INFOS_TITLE' => 'Informações relativas ao PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Esta informações o informão sobre o funcionamento de PluXml e poder ser uteis em caso de disfuncionamento do sistema.', +'L_CONFIG_INFOS_NB_CATS' => 'Numero de categorias :', +'L_CONFIG_INFOS_NB_STATICS' => 'Numero de páginas státicas:', +'L_CONFIG_INFOS_WRITER' => 'Nome do redactor na sessão :', +'L_PLUXML_CHECK_VERSION' => 'Verificação do numero de versão no web-site oficial PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Impossivél verificar a exestência de novas actualizações, enquanto a função \'allow_url_fopen\' estiver desactivada neste sistema', +'L_PLUXML_UPDATE_ERR' => 'A verificação de novas actualizações abortou por razões desconhecidas', +'L_PLUXML_UPTODATE' => 'Está a utilizar a ultima versão de PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Uma nova versão de PluXml está disponivél ! pode descarregá-la em', +'L_CONFIG_USERS_TITLE' => 'Gestão dos utilizadores', +'L_CONFIG_USER' => 'Utilizador', +'L_CONFIG_USERS_ID' => 'Numero do utilizador', +'L_CONFIG_USERS_ACTIVE' => 'Activo', +'L_CONFIG_USERS_ACTION' => 'Ação', +'L_CONFIG_USERS_NEW' => 'Novo utilizador', +'L_CONFIG_USERS_UPDATE' => 'Alterar a lista dos utilizadores', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'ID de login já utilizados', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Nome de Usuário já está em uso', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Categoria nome já utilizado', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Como já foi utilizado', +'L_BACK_TO_PLUGINS' => 'Voltar á página dos plugins', +'L_NO_PLUGIN' => 'Nenhum plugin', +'L_PLUGIN_NO_CONFIG' => 'Plugin não configurado', +'L_PLUGINS_CSS' => 'Css', +'L_PLUGINS_CSS_TITLE' => 'Edite o código css do plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Site de conteúdo do arquivo Css', +'L_CONTENT_FIELD_BACKEND' => 'Css administrador de conteúdo de arquivo', +'L_PLUGINS_TITLE' => 'Gestão dos plugins', +'L_PLUGINS_VERSION' => 'Versão', +'L_PLUGINS_AUTHOR' => 'Autor', +'L_PLUGINS_ACTIVATE' => 'Activar', +'L_PLUGINS_DEACTIVATE' => 'Desactivar', +'L_PLUGINS_DELETE' => 'Suprimir', +'L_PLUGINS_DELETE_ERROR' => 'Ocoreu um erro durante a supressão', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Supressão efectuada com sucesso', +'L_PLUGINS_CONFIG' => 'Configuração', +'L_PLUGINS_CONFIG_TITLE' => 'Configuração do plugin', +'L_PLUGINS_HELP' => 'Ajuda', +'L_PLUGINS_HELP_TITLE' => 'Vêr a ajuda do plugin', +'L_PLUGINS_REQUIREMENTS' => 'Nacessário', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Lista dos plugins presentes e activos para activar este plugin', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Nenhum', +'L_PLUGINS_ALPHA_SORT' => 'Ordenar alfabeticamente plugins', +'L_PLUGINS_LOADING_SORT' => 'Carregando ordem', +'L_PLUGINS_ACTION' => 'Ação', +'L_PLUGINS_APPLY_BUTTON' => 'Alterar a lista de plugins', +'L_PLUGINS_ACTIVE_LIST' => 'Plugins ativos', +'L_PLUGINS_INACTIVE_LIST' => 'Plugins inativos', +'L_PROFIL_EDIT_TITLE' => 'Edição do seu perfil', +'L_PROFIL' => 'Perfil', +'L_PROFIL_LOGIN' => 'Login de conexão', +'L_PROFIL_USER' => 'Nome do utilizador', +'L_PROFIL_MAIL' => 'Enderêo e-mail', +'L_PROFIL_ADMIN_LANG' => 'Idioma do utilizador na administração', +'L_PROFIL_INFOS' => 'Informações', +'L_PROFIL_UPDATE' => 'Alterar o seu perfil', +'L_PROFIL_CHANGE_PASSWORD' => 'Alteração da senha', +'L_PROFIL_PASSWORD' => 'Senha', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirmação da senha', +'L_PROFIL_UPDATE_PASSWORD' => 'Alterar a sua senha', +'L_STATIC_BACK_TO_PAGE' => 'Voltar á lista das páginas státicas', +'L_STATIC_UNKNOWN_PAGE' => 'Esta página stática nunca existui ou foi suprimida !', +'L_STATIC_TITLE' => 'Edição página stática ', +'L_STATIC_VIEW_PAGE' => 'Visualizar a página', +'L_STATIC_ON_SITE' => 'directamente no web-site', +'L_STATIC_UPDATE' => 'Grabar esta página stática', +'L_STATIC_TITLE_HTMLTAG' => 'Conteúdo da tag título (opcional)', +'L_STATIC_META_DESCRIPTION' => 'Conteúdo da baliza meta "description" para esta página stática (opção)', +'L_STATIC_META_KEYWORDS' => 'Conteúdo da baliza meta "keywords" para esta página stática (opção)', +'L_STATICS_PAGE_TITLE' => 'Criação e edição das páginas státicas', +'L_STATICS_ID' => 'Identificante', +'L_STATICS_GROUP' => 'Groupo', +'L_STATICS_TITLE' => 'Titúlo', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Activa', +'L_STATICS_ORDER' => 'Ordem', +'L_STATICS_MENU' => 'Menu', +'L_STATICS_ACTION' => 'Ação', +'L_STATICS_TEMPLATE_FIELD' => 'Template', +'L_STATICS_PAGE_HOME' => 'Definir como página inicial', +'L_STATICS_HOME_PAGE' => 'Página
de inicio', +'L_PAGE' => 'Página', +'L_VIEW' => 'Vêr', +'L_STATICS_SRC_TITLE' => 'Editar o código fonte desta página', +'L_STATICS_SRC' => 'Editar', +'L_STATICS_NEW_PAGE' => 'Página nova', +'L_STATICS_UPDATE' => 'Alterar a lista das páginas státicas', +'L_PROFIL_ADMIN' => 'Administrador', +'L_PROFIL_MANAGER' => 'Gestionário', +'L_PROFIL_MODERATOR' => 'Moderador', +'L_PROFIL_EDITOR' => 'Editor', +'L_PROFIL_WRITER' => 'Redactor', +'L_ADMIN' => 'Administração', +'L_LOGIN' => 'Conectado como:', +'L_ADMIN_LOGOUT' => 'Deconectar', +'L_ADMIN_LOGOUT_TITLE' => 'Fechar a sessão de administração', +'L_BACK_TO_SITE' => 'Início', +'L_BACK_TO_SITE_TITLE' => 'Voltar ao início', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Voltar ao blog', +'L_MENU_ARTICLES' => 'Artigos', +'L_MENU_ARTICLES_TITLE' => 'Lista e modificação dos artigos', +'L_MENU_NEW_ARTICLES' => 'Novo artigo', +'L_MENU_NEW_ARTICLES_TITLE' => 'Novo artigo', +'L_MENU_STATICS_TITLE' => 'Lista e modificação das páginas státicas', +'L_MENU_STATICS' => 'Páginas státicas', +'L_MENU_COMMENTS_TITLE' => 'Lista e modificação dos comentários', +'L_MENU_COMMENTS' => 'Comentários', +'L_MENU_MEDIAS_TITLE' => 'Enviar e inserir um média', +'L_MENU_MEDIAS' => 'Médias', +'L_MENU_CATEGORIES_TITLE' => 'Criar, gerir ou editar as categorias', +'L_MENU_CATEGORIES' => 'Categorias', +'L_MENU_CONFIG_TITLE' => 'Configurar PluXml', +'L_MENU_CONFIG' => 'Parâmetros', +'L_MENU_PROFIL_TITLE' => 'Gerir o perfil do utilizador', +'L_MENU_PROFIL' => 'Perfil', +'L_WARNING_INSTALLATION_FILE' => '

O ficheiro install.php está presente na raíz de PluXml.
Por razões de segurança apague (delete) este ficheiro.

', +'L_USER_UNKNOWN' => 'Utilizador desconhecido', +'L_USER_LANG' => 'Idioma utilizado na administração', +'L_USER_MAIL' => 'Enderêco e-mail', +'L_USER_INFOS' => 'Informações', +'L_USER_UPDATE' => 'Actualizar este utilizador', +'L_USER_PAGE_TITLE' => 'Edição das opções do utilizador', +'L_USER_BACK_TO_PAGE' => 'Voltar á lista dos utilizadores', +'L_MENU_CONFIG_BASE_TITLE' => 'Alterar a configuração de base de PluXml', +'L_MENU_CONFIG_BASE' => 'Configuração de base', +'L_MENU_CONFIG_VIEW_TITLE' => 'Alterar as opções de exibição de Pluxml', +'L_MENU_CONFIG_VIEW' => 'Opções de exibição', +'L_MENU_CONFIG_USERS_TITLE' => 'Gerir as contas dos utilizadores', +'L_MENU_CONFIG_USERS' => 'Contas dos utilizadores', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Alterar a configuração avançada', +'L_MENU_CONFIG_ADVANCED' => 'Configuração avançada', +'L_MENU_CONFIG_INFOS_TITLE' => 'Ter informações sobre o seu PluXml', +'L_MENU_CONFIG_INFOS' => 'Informações', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Gerir os plugins', +'L_MENU_CONFIG_PLUGINS' => 'Plugins', +'L_ERR_URL_ALREADY_EXISTS' => 'Url já em uso. Por favor, altere o valor do campo \'Url\'', +); + +?> diff --git a/src/core/lang/pt/core.php b/src/core/lang/pt/core.php new file mode 100644 index 0000000..9e3bc2a --- /dev/null +++ b/src/core/lang/pt/core.php @@ -0,0 +1,136 @@ + 'Português', + +# common +'L_PLUXML_VERSION' => 'Versão de Pluxml', +'L_HOMEPAGE' => 'Índice', +'L_UNCLASSIFIED' => 'Não categorizado;', +'L_INFO_PHP_VERSION' => 'Versão de php', +'L_INFO_MAGIC_QUOTES' => 'Estado dos "magic quotes"', +'L_INFO_CHARSET' => 'codagem', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Tema principal PluXml não foi encontrado', +'L_ERR_FILE_NOTFOUND' => 'O ficheiro de destino PluXml não foi encontrado', +'L_ERR_PAGE_NOT_FOUND' => 'Página não encontrada', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'jan', +'L_SHORT_FEBRUARY' => 'fev', +'L_SHORT_MARCH' => 'março', +'L_SHORT_APRIL' => 'abril', +'L_SHORT_MAY' => 'maio', +'L_SHORT_JUNE' => 'junho', +'L_SHORT_JULY' => 'julho', +'L_SHORT_AUGUST' => 'agosto', +'L_SHORT_SEPTEMBER' => 'set', +'L_SHORT_OCTOBER' => 'out', +'L_SHORT_NOVEMBER' => 'nov', +'L_SHORT_DECEMBER' => 'dez', +'L_JANUARY' => 'Janeiro', +'L_FEBRUARY' => 'Fevereiro', +'L_MARCH' => 'Março', +'L_APRIL' => 'Avril', +'L_MAY' => 'Maio', +'L_JUNE' => 'Junho', +'L_JULY' => 'Julho', +'L_AUGUST' => 'Agosto', +'L_SEPTEMBER' => 'Setembro', +'L_OCTOBER' => 'Outubro', +'L_NOVEMBER' => 'Novembro', +'L_DECEMBER' => 'Dezembro', +'L_MONDAY' => 'Segunda-feira', +'L_TUESDAY' => 'Terça-feira', +'L_WEDNESDAY' => 'Quarta-feira', +'L_THURSDAY' => 'Quinta-feira', +'L_FRIDAY' => 'Sexta-feira', +'L_SATURDAY' => 'Sábado', +'L_SUNDAY' => 'Domingo', + +# class.plx.capcha.php +'L_LAST' => 'ultima', +'L_FIRST' => 'primeira', +'L_SECOND' => 'segunda', +'L_THIRD' => 'terceira', +'L_FOURTH' => 'quarta', +'L_FIFTH' => 'quinta', +'L_SIXTH' => 'sexta', +'L_SEVENTH' => 'sétima', +'L_EIGTH' => 'oitáva', +'L_NINTH' => 'nôna', +'L_TENTH' => 'décima', +'L_NTH' => 'èsima', +'L_CAPCHA_QUESTION' => 'Dígite a %s lêtra da palavra %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s é accessivél em escritura', +'L_WRITE_NOT_ACCESS' => '%s não é accessivél em escritura ou não existe', +'L_MODREWRITE_AVAILABLE' => 'Módulo apache de reescrever URLS "mod_rewrite" disponivél', +'L_MODREWRITE_NOT_AVAILABLE' => 'Módulo apache de reescrever URLS "mod_rewrite" indisponivél', +'L_LIBGD_INSTALLED' => 'Bibliotéca GD instalada', +'L_LIBGD_NOT_INSTALLED' => 'Bibliotéca GD não instalada', +'L_MAIL_AVAILABLE' => 'Função de envio de e-mail disponivél', +'L_MAIL_NOT_AVAILABLE' => 'Função de envio de e-mail indisponivél', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'O ficheiro"%sversion" é necessário ao funcionamento de PluXml', +'L_ARTICLE_NO_TAG' => 'Nenhum artigo correspondente a este tag; !', +'L_UNKNOWN_CATEGORY' => 'Esta categorai não existe !', +'L_NO_ARTICLE_PAGE' => 'Nenhum artigo correspondente a esta página !', +'L_UNKNOWN_ARTICLE' => 'Este artigo nunca existiu ou foi suprimido !', +'L_COM_IN_MODERATION' => 'O comentário em espera de moderação pelo administrador', +'L_UNKNOWN_STATIC' => 'Cette page n\'existe pas ou n\'existe plus !', +'L_DOCUMENT_NOT_FOUND' => 'O documentos especificado não foi encontrado', +'L_NEWCOMMENT_ERR' => 'Ocorreu um erro durante a publicação do comentário', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Queira por favor preenchêr todos os campos obrigatórios', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'A verificação anti-spam está incorrecta, tente novamente;', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compressão %s activada', +'L_PAGETITLE_ARCHIVES' => 'Arquivos', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'nenhuma categoria', +'L_CATEGORY' => 'categoria', +'L_CATEGORIES' => 'categorias', +'L_NO_ARTICLE' => 'nenhum artigo', +'L_ARTICLE' => 'artigo', +'L_ARTICLES' => 'artigos', +'L_ARTAUTHOR_UNKNOWN' => 'desconhecido', +'L_ARTTAGS_NONE' => 'sem tags', +'L_ARTCHAPO' => 'Lêr mais #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'Fluxo Rss dos artigos desta categoria', +'L_ARTFEED_RSS_TAG' => 'Fluxo Rss dos artigos deste tag', +'L_ARTFEED_RSS' => 'Fluxo Rss dos artigos', +'L_NO_COMMENT' => 'não comentários', +'L_COMMENT' => 'comentário', +'L_COMMENTS' => 'comentários', +'L_COMFEED_RSS_ARTICLE' => 'Fluxo Rss dos comentários deste artigo', +'L_COMFEED_RSS' => 'Fluxo Rss dos comentários', +'L_STATICCONTENT_INPROCESS' => 'Esta página está actualmente em curso de redacção', +'L_SAID' => 'escreveu', + +'L_PAGINATION_FIRST_TITLE' => 'Ir á primeira página', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Anterior', +'L_PAGINATION_PREVIOUS' => 'anterior', +'L_PAGINATION_NEXT_TITLE' => 'Seguinte', +'L_PAGINATION_NEXT' => 'seguinte', +'L_PAGINATION_LAST_TITLE' => 'Ir á ultima página', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'página %s de %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Os URLS privados não foram inicializados nos parâmetros de administração !', +'L_FEED_COMMENTS' => 'Comentários', +'L_FEED_ONLINE_COMMENTS' => 'Comentários online', +'L_FEED_OFFLINE_COMMENTS' => 'Comentários offline', +'L_FEED_WRITTEN_BY' => 'Escrito por', + +); +?> diff --git a/src/core/lang/pt/install.php b/src/core/lang/pt/install.php new file mode 100644 index 0000000..4185d3d --- /dev/null +++ b/src/core/lang/pt/install.php @@ -0,0 +1,32 @@ + 'Instalação', +'L_WRONG_PHP_VERSION' => 'PluXml exige a execução de PHP 5 ou superior para poder funcionar.', +'L_SELECT_LANG' => 'Seléccione o seu idioma', +'L_INPUT_CHANGE' => 'Alterar', +'L_DEFAULT_CATEGORY_TITLE' => 'Rubrica 1', +'L_DEFAULT_CATEGORY_URL' => 'rubrica-1', +'L_DEFAULT_STATIC_TITLE' => 'Stática 1', +'L_DEFAULT_STATIC_URL' => 'stática-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Primeiro artigo', +'L_DEFAULT_ARTICLE_URL' => 'primeiro-artigo', +'L_DEFAULT_COMMENT_CONTENT' => 'Este é o primeiro comentário !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml já está configurado !', +'L_ERR_MISSING_USER' => 'Por favor, indique o nome do redactor !', +'L_ERR_MISSING_LOGIN' => 'Por favor, indique o login de conexão !', +'L_ERR_MISSING_PASSWORD' => 'Por favor, indique a sua senha !', +'L_ERR_PASSWORD_CONFIRMATION' => 'Confirmação da senha incorrecta !', +'L_PLUXML_INSTALLATION' => 'Instalação de PluXml', +'L_SITE_DESCRIPTION' => 'Blog ou Cms á Xml !', +'L_VERSION' => 'versão', +'L_USERNAME' => 'Nome do administrador', +'L_LOGIN' => 'Login de conexão à administração', +'L_PASSWORD' => 'Senha', +'L_PASSWORD_CONFIRMATION' => 'Confirmação da senha', +'L_INPUT_INSTALL' => 'Instalar', +'L_TIMEZONE' => 'Fuso horário', +); +?> diff --git a/src/core/lang/pt/update.php b/src/core/lang/pt/update.php new file mode 100644 index 0000000..f175d39 --- /dev/null +++ b/src/core/lang/pt/update.php @@ -0,0 +1,58 @@ + 'Gabação dos dados efectuado com sucesso', +'L_UPDATE_TITLE' => 'Actualização de PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml exige a execução de PHP 5 ou superior para poder funcionar.', + +'L_SELECT_LANG' => 'Seléccione o seu idioma', +'L_INPUT_CHANGE' => 'Alterar', + +'L_UPDATE_UPTODATE' => 'Pluxml está actualizado.', +'L_UPDATE_NOT_AVAILABLE' => 'Nenhuma actualização disponivél.', +'L_UPDATE_BACK' => 'Voltar ao web-site', +'L_UPDATE_WARNING1' => 'Está prestes a actualizar a sua versão de Pluxml', +'L_UPDATE_SELECT_VERSION' => 'Seléccione na lista seguinte a sua antiga versão de Pluxml a actualizar.', +'L_UPDATE_WARNING2' => 'Se a sua antiga versão não se encontra na lista seguinte, e porque não existe processo de actualização automático, porque a sua versão é muito antiga.
Sugerimos que descarregue a nova versão de PluXml e que faça uma nova instalção.', +'L_UPDATE_WARNING3' => 'Atenção, antes de comoçar a actualização não se esquêça de fazer uma cópia dos seus dados, que se encontram na pasta "data"', +'L_UPDATE_START' => 'Come¸ar a actualização', + +'L_UPDATE_ENDED' => 'Actualização terminada.', +'L_UPDATE_INPROGRESS' => 'Aplicação das actualizações', +'L_UPDATE_ERROR' => 'Um erro ocorreu durante o processo de actualização.', +'L_UPDATE_SUCCESSFUL' => 'Todas a actualizaçõés foram aplicadas com sucesso !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Actualização do ficheiro... parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Criação do ficheiro... tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Ocorreu um erro durante o processo de criação do ficheiro tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Criação do ficheiro tema (template)', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Ocorreu um erro durante o processoa de criação do ficheiro', +'L_UPDATE_ARTICLES_CONVERSION' => 'Conversão dos artigos ao novo formato', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Ocorreu um erro durante o processo de tratamento do ficheiro', +'L_UPDATE_STATICS_MIGRATION' => 'Migração do ficheiro das páginas státicas', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Occoreu um erro durante o processo de migração do ficheiro das páginas státicas', +'L_UPDATE_CREATE_USERS_FILE' => 'Criação do ficheiro dos utilizadores', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Ocorreu um erro durante o processo de creção do ficheiro dos utilizadores', +'L_UPDATE_USERS_MIGRATION' => 'Migração do ficheiro dos utilizadores', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Ocorreu um erro durante o processo de migrção do ficheiro dos utilizadores', +'L_UPDATE_ERR_NO_USERS' => 'Nenhum utilizador presente no ficheiro', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Criação do ficheiro .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Ocorreu um erro durante o processo de criação do ficheiro .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Atualizar o arquivo .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Erro ao atualizar o arquivo .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migração do ficheiro das categorias', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Ocorreu um erro durante o processo de migração do ficheiro das categorias', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Criação do ficheiro... plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Ocorreu um erro durante o processo de criação do ficheiro... plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Supressão do ficheiro... core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Ocorreur um erro durante o processo de supressão do ficheiro... core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Supressão da pasta... core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Ocorreur um erro durante o processo de supressão da pasta... core/plxtoolbar/', +'L_UPDATE_FILE' => 'Atualize arquivo', +'L_UPDATE_ERR_FILE' => 'Erro durante o ficheiro de actualização', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migrando arquivos parâmetros no arquivo de configuração do plugin', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Actualização do ficheiro... plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ro/admin.php b/src/core/lang/ro/admin.php new file mode 100644 index 0000000..fc87362 --- /dev/null +++ b/src/core/lang/ro/admin.php @@ -0,0 +1,462 @@ + 'Eroare necunoscută', +'L_CONFIRM_DELETE' => 'Confirmați ștergerea ?', +'L_SAVE_FILE' => 'Salvați fișierul', +'L_SAVE_FILE_SUCCESSFULLY' => 'Fișier salvat cu succes', +'L_SAVE_FILE_ERROR' => 'Salvarea fișierului de eroare', +'L_SAVE_SUCCESSFUL' => 'Înregistrarea a fost efectuata cu succes', +'L_SAVE_ERR' => 'Eroare la înregistrare ', +'L_NO_ENTRY' => 'Acces refuzat', +'L_ERR_USER_EMPTY' => 'Vă rugăm să introduceţi un nume de utilizator', +'L_ERR_PASSWORD_EMPTY' => 'Vă rugăm să introduceţi o parolă', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Verificaţi veridicitatea parolei', +'L_ERR_INVALID_EMAIL' => 'Adresa de e-mail nevalidă', +'L_ERR_INVALID_SITE' => 'Adresa site gresita', +'L_ERR_INVALID_ARTICLE_IDENT' => 'ID articol gresit !', +'L_DEFAULT_NEW_CATEGORY_URL' => 'categorie-noua', +'L_DEFAULT_NEW_STATIC_URL' => 'pagina-noua', +'L_DEFAULT_NEW_ARTICLE_URL' => 'articol-nou', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Articol creat cu succes', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Articol actualizat cu succes', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Eliminarea a decurs cu succes', +'L_ARTICLE_SAVE_ERR' => 'Eroare la salvarea articolului', +'L_ARTICLE_DELETE_ERR' => 'A apărut o eroare în timpul eliminarii articolului', +'L_ERR_UNKNOWN_COMMENT' => 'Comentariul cerut nu exista, sau nu e accesibil', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Comentariu modificat cu succes', +'L_COMMENT_UPDATE_ERR' => 'Eroare la actualizarea comentariului', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Eliminarea a decurs cu succes', +'L_COMMENT_DELETE_ERR' => 'A apărut o eroare la ştergere', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Validarea a decurs cu succes', +'L_COMMENT_VALIDATE_ERR' => 'A apărut o eroare în timpul validării', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Moderarea a decurs cu succes', +'L_COMMENT_MODERATE_ERR' => 'A apărut o eroare la moderare', +'L_COMMENT_WRITTEN_BY' => 'Scris de', +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Imposibil de a crea un fişier media', +'L_PLXMEDIAS_ROOT' => 'radacina', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Nu poate fi creat directoriul', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Fişier creat cu succes', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Acest fişier există deja', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Eroare la ştergerea fişierului', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Fişier şters cu succes', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'tipul de fişier nu este permis', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'Dimensiunea fisierului espre prea mare ', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Eroare în timp ce trimiterea unui fişier', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Fişier trimis cu succes', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Eroare în timp ce încărcarea fişierelor', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'FFişierele trimise cu succes', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'eliminat cu succes fişiere', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Eroare la ştergerea unui fişier', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Fişier şters cu succes', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Eroare la ştergerea fişierului', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Fişiere mutate cu succes', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Fişier mutat cu succes', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Eroare în timpul mutarii fişierelor', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Eroare în timpul deplasarii fişierelor', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Mută', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Eroare în timp ce crearea miniatură', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Eroare la crearea miniatură', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Miniatură creat cu succes', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Thumbnails creat cu succes', +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Articol Nou', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Data publicării gresita.', +'L_ERR_UNKNOWN_ARTICLE' => 'Articolul solicitat nu exista sau a fost sters !', +'L_ERR_FORBIDDEN_ARTICLE' => 'Nu ai drepturile de acces la articolul dat !', +'L_BACK_TO_ARTICLES' => 'Înapoi la lista de articole', +'L_ARTICLE_EDITING' => 'Modificarea articolului', +'L_ARTICLE_TITLE' => 'Titlu', +'L_ARTICLE_LIST_AUTHORS' => 'Autor', +'L_HEADLINE_FIELD' => 'Headline (opţional)', +'L_CONTENT_FIELD' => 'Conţinut', +'L_LINK_FIELD' => 'Link la articol', +'L_LINK_ACCESS' => 'Du-te la articol', +'L_LINK_VIEW' => 'vedea', +'L_ARTICLE_STATUS' => 'Status', +'L_DRAFT' => 'Schiţă', +'L_PUBLISHED' => 'Publicat', +'L_AWAITING' => 'Până la validare', +'L_ARTICLE_DATE' => 'Data publicării', +'L_NOW' => 'acum', +'L_ARTICLE_CATEGORIES' => 'Categoriile articolului', +'L_CATEGORY_HOME_PAGE' => 'Home', +'L_NEW_CATEGORY' => 'Categorie nouă', +'L_ARTICLE_TAGS_FIELD' => 'Cuvinte cheie', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Separaţi cuvintele cheie prin virgulă', +'L_ARTICLE_TOGGLER_TITLE' => 'Listă de cuvinte cheie', +'L_NO_TAG' => 'Fara tag-uri', +'L_ALLOW_COMMENTS' => 'Permiteţi Comentarii', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'Article Url Field Title', +'L_ARTICLE_TEMPLATE_FIELD' => 'Template', +'L_ARTICLE_MANAGE_COMMENTS' => 'Administreaza Comentariile', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Gestionarea comentariilor din acest articol', +'L_ARTICLE_NEW_COMMENT' => 'Scrie un comentariu', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Scrie un comentariu la acest articol', +'L_ARTICLE_DELETE_CONFIRM' => 'Ştergeţi acest articol ?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Preview', +'L_ARTICLE_DRAFT_BUTTON' => 'Salvează schiţa', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Publică', +'L_ARTICLE_MODERATE_BUTTON' => 'Supune aprobării', +'L_ARTICLE_OFFLINE_BUTTON' => 'Offline', +'L_ARTICLE_UPDATE_BUTTON' => 'Salvează', +'L_CATEGORY_ADD_BUTTON' => 'Adaugă', +'L_ARTICLE_META_DESCRIPTION' => 'Meta tag-ul de conţinut "descriere" (opţional)', +'L_ARTICLE_META_KEYWORDS' => 'Meta tag-ul "Cuvinte cheie" (opţional)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Conţinutul tag-ul titlu (opţional)', +'L_ARTICLE_CHAPO_HIDE' => 'ascunde', +'L_ARTICLE_CHAPO_DISPLAY' => 'afişa', +'L_AUTH_PAGE_TITLE' => 'Pagina de autentificare', +'L_LOGOUT_SUCCESSFUL' => 'Vati deconectat cu succes', +'L_LOGIN_PAGE' => 'Conectare in zona de administrare ', +'L_AUTH_LOGIN_FIELD' => 'Username', +'L_AUTH_PASSWORD_FIELD' => 'Parola', +'L_SUBMIT_BUTTON' => 'OK', +'L_ERR_WRONG_PASSWORD' => 'Username sau parola incorecta', +'L_POWERED_BY' => 'Realizat de PluXml', +'L_CAT_TITLE' => 'Crearea şi editarea categoriei', +'L_CAT_LIST_ID' => 'Id', +'L_CAT_LIST_ACTIVE' => 'Activ', +'L_CAT_LIST_NAME' => 'Nume categorie', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Sortare articole', +'L_CAT_LIST_BYPAGE' => 'Categorii pe pagina', +'L_CAT_LIST_ORDER' => 'Pentru', +'L_CAT_LIST_MENU' => 'Meniu', +'L_CATEGORY' => 'Categorie', +'L_DISPLAY' => 'Afişează', +'L_HIDE' => 'Ascunde', +'L_OPTIONS' => 'Opţiuni', +'L_FOR_SELECTION' => 'Alegeţi obţiunea...', +'L_DELETE' => 'Şterge', +'L_CAT_APPLY_BUTTON' => 'Modifică lista de categorii', +'L_CAT_UNKNOWN' => 'Categorie necunoscuta', +'L_EDITCAT_PAGE_TITLE' => 'Editarea categoriei', +'L_EDITCAT_DESCRIPTION' => 'Descrierea', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Afișare articole în această categorie pe pagina de start', +'L_EDITCAT_TEMPLATE' => 'Template', +'L_EDITCAT_BACK_TO_PAGE' => 'Înapoi la lista de categorii', +'L_EDITCAT_UPDATE' => 'Actualizeaza această categorie', +'L_EDITCAT_TITLE_HTMLTAG' => 'Conţinutul tag-ul titlu (opţional)', +'L_EDITCAT_META_DESCRIPTION' => 'Conţinutul tag-ului meta "descriere" pentru această categorie (opţional)', +'L_EDITCAT_META_KEYWORDS' => 'Conţinutul tag-ului meta "cuvinte-cheie" pentru această categorie (opţional)', +'L_COMMENT_ORPHAN' => 'nici un articol', +'L_COMMENT_ORPHAN_STATUS' => 'nu sunt vizibile (vă recomandăm să ştergeţi acest comentariu)', +'L_COMMENT_ARTICLE_LINKED' => 'Articole', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Articolul anexat la acest comentariu', +'L_COMMENT_OFFLINE' => 'Offline', +'L_COMMENT_ONLINE' => 'Online', +'L_COMMENT_ONLINE_TITLE' => 'Lista de comentarii publicate', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Înapoi la lista de comentarii la acest articol', +'L_BACK_TO_COMMENTS' => 'Înapoi la lista de comentarii', +'L_COMMENT_EDITING' => 'Editare comentariu', +'L_COMMENT_AUTHOR_FIELD' => 'Autor', +'L_COMMENT_TYPE_FIELD' => 'Tipul comentariului', +'L_COMMENT_DATE_FIELD' => 'Data şi ora publicării', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Site', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Statut', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Articolul ataşat', +'L_COMMENT_ARTICLE_FIELD' => 'Comentariu', +'L_COMMENT_DELETE_CONFIRM' => 'Ştergeţi acest comentariu ?', +'L_COMMENT_PUBLISH_BUTTON' => 'Validarea publicarea', +'L_COMMENT_OFFLINE_BUTTON' => 'Ia Offline', +'L_COMMENT_ANSWER_BUTTON' => 'Răspundeţi la acest comentariu', +'L_COMMENT_UPDATE_BUTTON' => 'Update', +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'Comentariul va încerca să răspundă la nu există sau nu-i sunt mai !', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'comentariul este offline, nu răspunsul !', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'Articolul solicitat nu exista, sau nu puteti scrie comentarii la acest articol !', +'L_ERR_CREATING_COMMENT' => 'A apărut o eroare în timpul creării comentariu', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Comentariul a fost creat cu succes', +'L_CREATE_NEW_COMMENT' => 'Scrie un comentariu', +'L_COMMENT_SAVE_BUTTON' => 'Salva', +'L_ARTICLE_COMMENTS_LIST' => 'Comentarii la acest articol (mai nou de la vechi la cele mai)', +'L_COMMENT_ANSWER_TITLE' => 'Răspundeţi la acest comentariu', +'L_COMMENT_ANSWER' => 'Raspunde', +'L_COMMENT_NEW_COMMENT_TITLE' => 'Scrie un comentariu nou pentru acest articol', +'L_COMMENT_NEW_COMMENT' => 'Scrie un comentariu nou', +'L_COMMENTS_ARTICLE_SCOPE' => 'Articolul', +'L_COMMENTS_GLOBAL_SCOPE' => 'Întregul site-ului', +'L_COMMENTS_OFFLINE_LIST' => 'Lista de comentarii ce aşteaptă a fi aprobate ', +'L_COMMENTS_LIST_DATE' => 'Date', +'L_COMMENTS_LIST_AUTHOR' => 'Autor', +'L_COMMENTS_LIST_MESSAGE' => 'Mesaj', +'L_COMMENTS_LIST_ACTION' => 'Acţiune', +'L_COMMENT_EDIT' => 'Editare', +'L_COMMENT_EDIT_TITLE' => 'Editaţi acest comentariu', +'L_COMMENT_DELETE' => 'Şterge', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'RSS comentarii offline', +'L_COMMENT_OFFLINE_FEEDS' => 'Comentarii Offline', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'Comentarii RSS online', +'L_COMMENT_ONLINE_FEEDS' => 'Comentarii Online', +'L_COMMENTS_PRIVATE_FEEDS' => 'Feed privat de comentarii', +'L_COMMENTS_ONLINE_LIST' => 'Lista de comentarii publicate', +'L_COMMENTS_ALL_LIST' => 'Lista comentarii', +'L_COMMENT_SET_ONLINE' => 'Ia Online', +'L_COMMENT_SET_OFFLINE' => 'Ia Offline', +'L_ARTICLES_FILTER_BUTTON' => 'Caută', +'L_CATEGORIES_TABLE' => 'Categorii', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Locaţii specifice', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Toate elementele', +'L_ARTICLES_LIST' => 'Lista articolelor', +'L_ARTICLE_LIST_DATE' => 'Data', +'L_ARTICLE_LIST_TITLE' => 'Titlu', +'L_ARTICLE_LIST_CATEGORIES' => 'Categorii', +'L_ARTICLE_LIST_NBCOMS' => 'Statistici', +'L_ARTICLE_LIST_AUTHOR' => 'Autor', +'L_ARTICLE_LIST_ACTION' => 'Action', +'L_CATEGORY_HOME' => 'Home', +'L_CATEGORY_DRAFT' => 'Proiect de', +'L_ARTICLE_VIEW' => 'Vizualizează', +'L_ARTICLE_VIEW_TITLE' => 'Vezi acest articol pe site-ul', +'L_ARTICLE_EDIT' => 'Editează', +'L_ARTICLE_EDIT_TITLE' => 'Editează articolul dat', +'L_NEW_COMMENTS_TITLE' => 'Comentarii ce aşteaptă validarea', +'L_VALIDATED_COMMENTS_TITLE' => 'Comentarii postate', +'L_NO_ARTICLE' => 'Nu sunt articole', +'L_ARTICLES_SEARCH_BUTTON' => 'Căutare', +'L_ARTICLES_ALL_CATEGORIES' => 'Toate categoriile ...', +'L_ALL' => 'Toate', +'L_ALL_PUBLISHED' => 'Publicat', +'L_ALL_DRAFTS' => 'Schiţe', +'L_ALL_AWAITING_MODERATION' => 'Până la validare', +'L_MEDIAS_DELETE_FOLDER' => 'Ştergeţi Directoriu', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Sunteti sigur ca doriti sa stergeţi directoriul şi conţinutul lui ?', +'L_MEDIAS_NO_FILE' => 'Nici un fişier', +'L_MEDIAS_FILENAME' => 'Filename', +'L_MEDIAS_ADD_FILE' => 'Adăugaţi fişiere', +'L_MEDIAS_BACK' => 'Back', +'L_MEDIAS_TITLE' => 'Management Media', +'L_MEDIAS_IMAGES' => 'Images', +'L_MEDIAS_DOCUMENTS' => 'Documente', +'L_MEDIAS_CREATE_FOLDER' => 'Crearea unui directoriu', +'L_MEDIAS_SUBMIT_FILE' => 'Trimite', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Dimensiunea maximă de fişier', +'L_MEDIAS_DIRECTORY' => 'Locaţie', +'L_MEDIAS_FOLDER' => 'Fişier', +'L_MEDIAS_NEW_FOLDER' => 'New Folder', +'L_MEDIAS_FILESIZE' => 'Dimensiunea', +'L_MEDIAS_DATE' => 'Data', +'L_MEDIAS_DIMENSIONS' => 'Dimensiuni', +'L_MEDIAS_RESIZE' => 'Redimensionarea Imagini', +'L_MEDIAS_RESIZE_NO' => 'Dimensiune original', +'L_MEDIAS_THUMBS' => 'A crea thumbnails', +'L_MEDIAS_THUMBS_NONE' => 'Nu thumbnail', +'L_MEDIAS_MODIFY' => 'Editare', +'L_MEDIAS_THUMB' => 'Thumbnail', +'L_MEDIAS_EXTENSION' => 'Extensie', +'L_MEDIAS_ADD' => 'Adaugă', +'L_MEDIAS_ALIGNMENT' => 'Aliniere', +'L_MEDIAS_ALIGN_NONE' => 'Nu', +'L_MEDIAS_ALIGN_LEFT' => 'Stânga', +'L_MEDIAS_ALIGN_CENTER' => 'Centru', +'L_MEDIAS_ALIGN_RIGHT' => 'Dreapta', +'L_MEDIAS_RECREATE_THUMB' => 'Recreează miniatură', +'L_SORT_ASCENDING_DATE' => 'data crescator', +'L_SORT_DESCENDING_DATE' => 'descendentă Data', +'L_SORT_ALPHABETICAL' => 'alfabetic', +'L_OK' => 'Ok', +'L_YES' => 'Da', +'L_NO' => 'Nu', +'L_NONE1' => 'nu', +'L_NONE2' => 'nimic', +'L_CONFIG_VIEW_FIELD' => 'Optiuni de afisare', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Alege tema', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Editaţi fişierele tema', +'L_CONFIG_VIEW_FILES_EDIT' => 'Editaţi fişierele tema', +'L_CONFIG_VIEW_SORT' => 'Sortare articole', +'L_CONFIG_VIEW_BYPAGE' => 'Numărul de articole afisate pe pagina', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Numărul de elemente afişate pe pagină în arhivă', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Numărul de elemente afişate pe pagină în administraţie', +'L_CONFIG_VIEW_SORT_COMS' => 'Sortare comentarii', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Numărul de comentarii pe pagină în admin', +'L_CONFIG_VIEW_IMAGES' => 'Dimensiune imagine (latime x inaltime)', +'L_CONFIG_VIEW_THUMBS' => 'Thumbnail dimensiuni (latime x inaltime)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Utilizaţi o pagină statică ca Home-page', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Atenţie, această pagină este inactivă', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Descarcă alte teme ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'Numărul de articole şi comentarii postate pe fluxul Rss', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Vezi Headerul în articolele RSS', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Dacă headerul este gol, conţinutul este afişat', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Text se adaugă şi o semnătură în partea de jos a fiecare articole feed RSS', +'L_CONFIG_VIEW_UPDATE' => 'Editare Opţiuni afişare', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Afişarea categorii fără articolul', +'L_CONFIG_HOMETEMPLATE' => 'Format din pagina de start', +'L_CONFIG_ADVANCED_DESC' => 'Avansate de configurare', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Permite rescrierea url-uri', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Atenţie într-un fişier. Htaccess este deja prezent la rădăcina PluXml dumneavoastră. Prin activarea rescrierea dosarul \ url va fi modificat', +'L_CONFIG_ADVANCED_GZIP' => 'Activeaza compresia GZIP', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Comprimă paginile pentru a salva de lăţime de bandă, însă acest lucru poate creşte sarcina procesorului', +'L_CONFIG_ADVANCED_CAPCHA' => 'Activeaza capcha anti-spam', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Cheie de administrare (URL-uri private)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Clar acest domeniu pentru a regenera cheie', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Folosind imagini şi documente dosar pentru fiecare utilizator diferite', +'L_HELP_SLASH_END' => 'Nu uita slash de final', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Localizare imagini (dosar)', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Document locaţie (dosar)', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Locul de amplasare de elemente (dosar)', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Locul de amplasare Review (dosar)', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Locul de amplasare de pagini statice (dosar)', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Locul de amplasare de subiecte (dosar)', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Locul de amplasare a plugin-uri (dosar)', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Locul de fişiere de configurare (dosar)', +'L_CONFIG_ADVANCED_UPDATE' => 'Editare configuraţie avansată', +'L_CONFIG_BASE_CONFIG_TITLE' => 'Configurarea bazei', +'L_CONFIG_BASE_SITE_TITLE' => 'Denumirea sitului', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Descriere sitului', +'L_CONFIG_BASE_URL_HELP' => 'Nu uita slash de final', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Limba', +'L_CONFIG_BASE_TIMEZONE' => 'Time Zone', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Permiteţi comentariile', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Moderează comentariile', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Articole moderată pentru Editor profile şi Distribuitor', +'L_CONFIG_BASE_UPDATE' => 'Schimba configuraţia de bază', +'L_CONFIG_META_DESCRIPTION' => 'Conţinutul tag-ul meta "descriere" a site-ului (opţional)', +'L_CONFIG_META_KEYWORDS' => 'Conţinut de meta tags "cuvinte cheie" Site-ul (opţional)', +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Aceasta temă nu există!', +'L_CONFIG_EDITTPL_TITLE' => 'Editare Tematica', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Selectaţi fişierul pentru a edita :', +'L_CONFIG_EDITTPL_LOAD' => 'Sarcină', +'L_CONFIG_INFOS_TITLE' => 'Informaţii privind PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Informaţiile pe care le furniza informaţii cu privire la modul PluXml dumneavoastră şi poate dovedi util pentru depanare.', +'L_CONFIG_INFOS_NB_CATS' => 'Numărul de categorii :', +'L_CONFIG_INFOS_NB_STATICS' => 'Numărul de pagini statice :', +'L_CONFIG_INFOS_WRITER' => 'Editor-in Nume sesiune :', +'L_PLUXML_CHECK_VERSION' => 'Verificarea numărului de versiune pe site-ul oficial PluXml PluXml.org', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Imposibil de a verifica pentru updates ca allow_url_fopen este dezactivat pe acest sistem', +'L_PLUXML_UPDATE_ERR' => 'Audit actualizare a eşuat pentru un motiv necunoscut', +'L_PLUXML_UPTODATE' => 'Sunteţi online folosind cea mai recentă versiune a PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'O nouă versiune a PluXml este disponibilă! O puteţi descărca', +'L_CONFIG_USERS_TITLE' => 'Gestionarea utilizatorilor', +'L_CONFIG_USER' => 'Utilizator', +'L_CONFIG_USERS_ID' => 'Users Id', +'L_CONFIG_USERS_ACTIVE' => 'Activitate', +'L_CONFIG_USERS_ACTION' => 'Acţiune', +'L_CONFIG_USERS_NEW' => 'Utilizator nou', +'L_CONFIG_USERS_UPDATE' => 'Modifică lista de utilizatori', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Login ID deja utilizate', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Nume de utilizator deja în uz', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Categorie nume deja utilizate', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Aşa cum deja utilizate', +'L_BACK_TO_PLUGINS' => 'Back to Plugins', +'L_NO_PLUGIN' => 'Nr plugin', +'L_PLUGIN_NO_CONFIG' => 'Nu Plugin configurat', +'L_PLUGINS_CSS' => 'Css', +'L_PLUGINS_CSS_TITLE' => 'Edita codul CSS al plugin', +'L_CONTENT_FIELD_FRONTEND' => 'Site-ul de conținut fișier css', +'L_CONTENT_FIELD_BACKEND' => 'CSS administrator conținutul fișierului', +'L_PLUGINS_TITLE' => 'Gestiunea plugin-urilor', +'L_PLUGINS_VERSION' => 'Versiune', +'L_PLUGINS_AUTHOR' => 'Autor', +'L_PLUGINS_ACTIVATE' => 'Activează', +'L_PLUGINS_DEACTIVATE' => 'Dezactivaţi', +'L_PLUGINS_DELETE' => 'Şterge', +'L_PLUGINS_DELETE_ERROR' => 'O eroare a generat în timpul deplasării', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Ştergerea a decurs cu succes', +'L_PLUGINS_CONFIG' => 'Configurare', +'L_PLUGINS_CONFIG_TITLE' => 'Configurarea plugin-ului', +'L_PLUGINS_HELP' => 'Ajutor', +'L_PLUGINS_HELP_TITLE' => 'A vedea utilizarea plugin-ului', +'L_PLUGINS_REQUIREMENTS' => 'Cerinţe preliminare', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Lista de plugin-uri prezente şi active pentru activaţie', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Nu', +'L_PLUGINS_ALPHA_SORT' => 'Sortează în ordine alfabetică plugin-uri', +'L_PLUGINS_LOADING_SORT' => 'De încărcare pentru', +'L_PLUGINS_ACTION' => 'Acţiune', +'L_PLUGINS_APPLY_BUTTON' => 'Modificarea lista de plugin-uri', +'L_PLUGINS_ACTIVE_LIST' => 'Plugin-uri active', +'L_PLUGINS_INACTIVE_LIST' => 'Plugin-uri inactive', +'L_PROFIL_EDIT_TITLE' => 'Editează Profilul', +'L_PROFIL' => 'Profil', +'L_PROFIL_LOGIN' => 'Login', +'L_PROFIL_USER' => 'Username', +'L_PROFIL_MAIL' => 'Adresa de email', +'L_PROFIL_ADMIN_LANG' => 'Limba utilizată', +'L_PROFIL_INFOS' => 'Informaţii', +'L_PROFIL_UPDATE' => 'Editează-ţi profilul', +'L_PROFIL_CHANGE_PASSWORD' => 'Schimbarea parolei', +'L_PROFIL_PASSWORD' => 'Parola', +'L_PROFIL_CONFIRM_PASSWORD' => 'Confirmaţi parola', +'L_PROFIL_UPDATE_PASSWORD' => 'Schimbaţi parola', +'L_STATIC_BACK_TO_PAGE' => 'Înapoi la lista de pagini statice', +'L_STATIC_UNKNOWN_PAGE' => 'Această pagină statică nu există sau nu este accesibila !', +'L_STATIC_TITLE' => 'Editează codul sursă a paginei statice', +'L_STATIC_VIEW_PAGE' => 'Vizualizează pagina', +'L_STATIC_ON_SITE' => 'pe site', +'L_STATIC_UPDATE' => 'Salvaţi această pagină statică', +'L_STATIC_TITLE_HTMLTAG' => 'Conţinutul tag-ul titlu (opţional)', +'L_STATIC_META_DESCRIPTION' => 'Conţinutul tag-ul meta "descriere" pentru această pagină statică (opţional)', +'L_STATIC_META_KEYWORDS' => 'Conţinutul meta tag "keywords " la această pagină statică (opţional)', +'L_STATICS_PAGE_TITLE' => 'Crearea şi publicarea paginei statice', +'L_STATICS_ID' => 'Identificator', +'L_STATICS_GROUP' => 'Grupa', +'L_STATICS_TITLE' => 'Titlu', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Activ', +'L_STATICS_ORDER' => 'Ordinea', +'L_STATICS_MENU' => 'Meniu', +'L_STATICS_ACTION' => 'Acţiune', +'L_STATICS_TEMPLATE_FIELD' => 'Tema', +'L_STATICS_PAGE_HOME' => 'Setaţi ca pagina de start', +'L_STATICS_HOME_PAGE' => 'Home', +'L_PAGE' => 'Pagină', +'L_VIEW' => 'Vizualizează', +'L_STATICS_SRC_TITLE' => 'Editează codul sursă a acestei pagini', +'L_STATICS_SRC' => 'Editare', +'L_STATICS_NEW_PAGE' => 'Pagină nouă', +'L_STATICS_UPDATE' => 'Modifică lista paginilor statice', +'L_PROFIL_ADMIN' => 'Administrator', +'L_PROFIL_MANAGER' => 'Manager', +'L_PROFIL_MODERATOR' => 'Moderator', +'L_PROFIL_EDITOR' => 'Editor', +'L_PROFIL_WRITER' => 'Autor', +'L_ADMIN' => '- Administrare', +'L_LOGIN' => 'Logat ca', +'L_ADMIN_LOGOUT' => 'Deconectare', +'L_ADMIN_LOGOUT_TITLE' => 'Log Out Admin', +'L_BACK_TO_SITE' => 'Back to', +'L_BACK_TO_SITE_TITLE' => 'Go Back', +'L_BACK_TO_BLOG' => 'Blog', +'L_BACK_TO_BLOG_TITLE' => 'Inapoi la blog', +'L_MENU_ARTICLES' => 'Articole', +'L_MENU_ARTICLES_TITLE' => 'Listează şi schimbă articolele', +'L_MENU_NEW_ARTICLES' => 'Articol Nou', +'L_MENU_NEW_ARTICLES_TITLE' => 'Articol Nou', +'L_MENU_STATICS_TITLE' => 'Listează şi editează paginile statice', +'L_MENU_STATICS' => 'Pagini statice', +'L_MENU_COMMENTS_TITLE' => 'Listează şi editează comentariile', +'L_MENU_COMMENTS' => 'Comentarii', +'L_MENU_MEDIAS_TITLE' => 'Încărcaţi şi modificaţi imaginile', +'L_MENU_MEDIAS' => 'Imagini', +'L_MENU_CATEGORIES_TITLE' => 'Crează,gestionează,editează categoriile', +'L_MENU_CATEGORIES' => 'Categorii', +'L_MENU_CONFIG_TITLE' => 'Configurarează PluXml', +'L_MENU_CONFIG' => 'Setări', +'L_MENU_PROFIL_TITLE' => 'Gestionează profilul', +'L_MENU_PROFIL' => 'Profil', +'L_WARNING_INSTALLATION_FILE' => '

Fişierul install.php încă se află în rădăcina sit-ului
PluXml. Din motive de securitate, se recomandă să-l ştergeţi.

', +'L_USER_UNKNOWN' => 'Utilizator necunoscut', +'L_USER_LANG' => 'Limba utilizată ', +'L_USER_MAIL' => 'Adresa de email', +'L_USER_INFOS' => 'Informaţii', +'L_USER_UPDATE' => 'Actualizează acest utilizator', +'L_USER_PAGE_TITLE' => 'Opţiuni', +'L_USER_BACK_TO_PAGE' => 'Înapoi la lista de utilizatori', +'L_MENU_CONFIG_BASE_TITLE' => 'Schimbă configuraţia de bază', +'L_MENU_CONFIG_BASE' => 'Configuraţia de bază', +'L_MENU_CONFIG_VIEW_TITLE' => 'Editarea opţiunilor de afişare', +'L_MENU_CONFIG_VIEW' => 'Opţiuni \ Afişare', +'L_MENU_CONFIG_USERS_TITLE' => 'Gestionează conturile utilizatorilor', +'L_MENU_CONFIG_USERS' => 'Conturile utilizatorilor', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Editarea configuraţiei avansate', +'L_MENU_CONFIG_ADVANCED' => 'Configurarea Avansată', +'L_MENU_CONFIG_INFOS_TITLE' => 'Obţinerea de informaţii despre PluXml', +'L_MENU_CONFIG_INFOS' => 'Informaţii', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Administrează Plugin-uri', +'L_MENU_CONFIG_PLUGINS' => 'Plugin-uri', +'L_ERR_URL_ALREADY_EXISTS' => 'Url deja în uz. Vă rugăm să schimbați valoarea din câmpul \'Url\'', +); + +?> diff --git a/src/core/lang/ro/core.php b/src/core/lang/ro/core.php new file mode 100644 index 0000000..688d843 --- /dev/null +++ b/src/core/lang/ro/core.php @@ -0,0 +1,136 @@ + 'Română', + +# common +'L_PLUXML_VERSION' => 'Pluxml version', +'L_HOMEPAGE' => 'Home', +'L_UNCLASSIFIED' => 'Neclasificat', +'L_INFO_PHP_VERSION' => 'Versiune php', +'L_INFO_MAGIC_QUOTES' => 'Starea "magic quotes"', +'L_INFO_CHARSET' => 'encoding', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Tema principala este gasita', +'L_ERR_FILE_NOTFOUND' => 'Fisierul tinta nu este gasit ', +'L_ERR_PAGE_NOT_FOUND' => 'Pagina nu a fost gasit', + +# class.plx.date.php +'L_SHORT_JANUARY' => 'ian', +'L_SHORT_FEBRUARY' => 'feb', +'L_SHORT_MARCH' => 'mar', +'L_SHORT_APRIL' => 'apr', +'L_SHORT_MAY' => 'mai', +'L_SHORT_JUNE' => 'iunie', +'L_SHORT_JULY' => 'iulie', +'L_SHORT_AUGUST' => 'aug', +'L_SHORT_SEPTEMBER' => 'sept', +'L_SHORT_OCTOBER' => 'oct', +'L_SHORT_NOVEMBER' => 'noem', +'L_SHORT_DECEMBER' => 'dec', +'L_JANUARY' => 'ianuarie', +'L_FEBRUARY' => 'februarie', +'L_MARCH' => 'martie', +'L_APRIL' => 'aprilie', +'L_MAY' => 'mai', +'L_JUNE' => 'iunie', +'L_JULY' => 'iulie', +'L_AUGUST' => 'august', +'L_SEPTEMBER' => 'septembrie', +'L_OCTOBER' => 'octombrie', +'L_NOVEMBER' => 'noiembrie', +'L_DECEMBER' => 'decembrie', +'L_MONDAY' => 'luni', +'L_TUESDAY' => 'marti', +'L_WEDNESDAY' => 'miercuri', +'L_THURSDAY' => 'joi', +'L_FRIDAY' => 'vineri', +'L_SATURDAY' => 'sambata', +'L_SUNDAY' => 'duminica', + +# class.plx.capcha.php +'L_LAST' => 'ultima', +'L_FIRST' => 'prima', +'L_SECOND' => 'a doua', +'L_THIRD' => 'a treia', +'L_FOURTH' => 'a patra', +'L_FIFTH' => 'a cincia', +'L_SIXTH' => 'a şasea', +'L_SEVENTH' => 'a şaptea', +'L_EIGTH' => 'a opta', +'L_NINTH' => 'a noua', +'L_TENTH' => 'a zecea', +'L_NTH' => 'lea', +'L_CAPCHA_QUESTION' => 'Care este %s litera a cuvantului %s ?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s are acces de scriere', +'L_WRITE_NOT_ACCESS' => '%s nu are acces de scriere sau nu există', +'L_MODREWRITE_AVAILABLE' => 'Apache URL Rewriting module mod_rewrite este disponibil', +'L_MODREWRITE_NOT_AVAILABLE' => 'Apache URL Rewriting module mod_rewrite nu este disponibil', +'L_LIBGD_INSTALLED' => 'Biblioteca GD este instalată', +'L_LIBGD_NOT_INSTALLED' => 'Biblioteca GD nu este instalată', +'L_MAIL_AVAILABLE' => 'Functia de a trimite e-mail disponibilă', +'L_MAIL_NOT_AVAILABLE' => 'Functia de a trimite e-mail nu este disponibilă', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Fisierul "%sversion" este necesar pentru functionarea PluXml', +'L_ARTICLE_NO_TAG' => 'Nici un articol pentru acest cuvant cheie !', +'L_UNKNOWN_CATEGORY' => 'Aceasta categorie nu exista!', +'L_NO_ARTICLE_PAGE' => 'Nu exista articole pentru aceasta pagina !', +'L_UNKNOWN_ARTICLE' => 'Acest produs nu exista sau nu-i sunt mai !', +'L_COM_IN_MODERATION' => 'Comentariul este moderat de catre administratorul acestui site', +'L_UNKNOWN_STATIC' => 'Aceasta pagina nu exista sau nu-i sunt mai !', +'L_DOCUMENT_NOT_FOUND' => 'Documentul mentionat nu a fost gasit', +'L_NEWCOMMENT_ERR' => 'O eroare este intalnit in timp ce publicarea acestui comentariu', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Va multumim completati toate campurile obligatorii', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'SPAM de verificare a esuat', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Compresie %s activata', +'L_PAGETITLE_ARCHIVES' => 'Arhive', +'L_PAGETITLE_TAG' => 'Tag', +'L_NO_CATEGORY' => 'nicio categorie', +'L_CATEGORY' => 'categoria', +'L_CATEGORIES' => 'categorii', +'L_NO_ARTICLE' => 'nici un articol', +'L_ARTICLE' => 'articolul', +'L_ARTICLES' => 'articole', +'L_ARTAUTHOR_UNKNOWN' => 'necunoscut', +'L_ARTTAGS_NONE' => 'nimic', +'L_ARTCHAPO' => 'Continuati lectura #art_title', +'L_ARTFEED_RSS_CATEGORY' => 'RSS Feed Elementele din această categorie', +'L_ARTFEED_RSS_TAG' => 'RSS Feed Elementele din această etichetă', +'L_ARTFEED_RSS' => 'Articole RSS Feed', +'L_NO_COMMENT' => 'nici un comentariu', +'L_COMMENT' => 'comentariu', +'L_COMMENTS' => 'comentarii', +'L_COMFEED_RSS_ARTICLE' => 'RSS feed pentru comentarii pe acest articol', +'L_COMFEED_RSS' => 'Comentarii RSS feed', +'L_STATICCONTENT_INPROCESS' => 'Aceasta pagina este in curs de elaborare', +'L_SAID' => 'a spus', + +'L_PAGINATION_FIRST_TITLE' => 'Du-te la prima pagina', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Pagina anterioara', +'L_PAGINATION_PREVIOUS' => 'Anterioare', +'L_PAGINATION_NEXT_TITLE' => 'Pagina urmatoare', +'L_PAGINATION_NEXT' => 'Urmatorul', +'L_PAGINATION_LAST_TITLE' => 'Du-te la ultima pagina', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'pagina %s din %s', + +'L_PAGEBLOG_TITLE' => 'Blog', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'URL-uri private nu au fost initializate in parametrii dvs. de administrare !', +'L_FEED_COMMENTS' => 'Comentarii', +'L_FEED_ONLINE_COMMENTS' => 'Comentarii online', +'L_FEED_OFFLINE_COMMENTS' => 'Comentarii offline', +'L_FEED_WRITTEN_BY' => 'Scris de', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ro/install.php b/src/core/lang/ro/install.php new file mode 100644 index 0000000..aad496f --- /dev/null +++ b/src/core/lang/ro/install.php @@ -0,0 +1,32 @@ + 'Instalaţie', +'L_WRONG_PHP_VERSION' => 'PluXml necesită PHP 5 sau o versiune mai mare pentru a lucra.', +'L_SELECT_LANG' => 'Alegeţi limba dorită', +'L_INPUT_CHANGE' => 'Schimbă', +'L_DEFAULT_CATEGORY_TITLE' => 'Categoria 1', +'L_DEFAULT_CATEGORY_URL' => 'categoria-1', +'L_DEFAULT_STATIC_TITLE' => 'Pagina 1', +'L_DEFAULT_STATIC_URL' => 'pagina-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Primul Articol', +'L_DEFAULT_ARTICLE_URL' => 'primul-articol', +'L_DEFAULT_COMMENT_CONTENT' => 'Acesta este primul comentariu !', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml este deja instalat !', +'L_ERR_MISSING_USER' => 'Vă rugăm să introduceti corect numele !', +'L_ERR_MISSING_LOGIN' => 'Vă rugăm să introduceti corect username-ul !', +'L_ERR_MISSING_PASSWORD' => 'Vă rugăm să introduceti corect parola!', +'L_ERR_PASSWORD_CONFIRMATION' => 'Confirmarea parolă incorectă !', +'L_PLUXML_INSTALLATION' => 'Instalaţia PluXml', +'L_SITE_DESCRIPTION' => 'Site pe baza la Xml !', +'L_VERSION' => 'versiunea', +'L_USERNAME' => 'Numele Administratorului', +'L_LOGIN' => 'Username-ul Administratorului', +'L_PASSWORD' => 'Parola', +'L_PASSWORD_CONFIRMATION' => 'Confirmarea Parolei', +'L_INPUT_INSTALL' => 'Instalează', +'L_TIMEZONE' => 'Time Zone', +); +?> \ No newline at end of file diff --git a/src/core/lang/ro/update.php b/src/core/lang/ro/update.php new file mode 100644 index 0000000..12f05a5 --- /dev/null +++ b/src/core/lang/ro/update.php @@ -0,0 +1,58 @@ + 'Inregistrarea datelor a avut loc cu succes', +'L_UPDATE_TITLE' => 'Actualizare PluXml', +'L_WRONG_PHP_VERSION' => 'PluXml necesită PHP 5 sau o versiune mai mare pentru a lucra.', + +'L_SELECT_LANG' => 'Alegeţi limba dorită', +'L_INPUT_CHANGE' => 'Schimbă', + +'L_UPDATE_UPTODATE' => 'PluXml dvs. este deja actualizat.', +'L_UPDATE_NOT_AVAILABLE' => 'Nici o actualizare nu este disponibila.', +'L_UPDATE_BACK' => 'Go Back', +'L_UPDATE_WARNING1' => 'Acum se va actualiza versiunea dvs. veche de PluXml', +'L_UPDATE_SELECT_VERSION' => 'Va rugam sa selectati din lista de mai jos versiunea veche pentru actualizarea PluXml.', +'L_UPDATE_WARNING2' => 'In caz ca versiunea dvs. nu o gasiti printre cele enumerate in lista, atunci dvs. folositi o versiune fara pachet de actualizare.
Va sugeram sa descarcati cea mai recenta versiune a PluXml si de a face o instalare noua.', +'L_UPDATE_WARNING3' => 'Pentru orice eventualitate nu uita sa faci o copie de rezerva a datelor.', +'L_UPDATE_START' => 'Start actualizare', + +'L_UPDATE_ENDED' => 'Actualizarea versiunii, %s finalizate.', +'L_UPDATE_INPROGRESS' => 'Cerere versiune actualizari', +'L_UPDATE_ERROR' => 'O eroare a fost generata in timpul actualizarii.', +'L_UPDATE_SUCCESSFUL' => 'Toate actualizarile au fost aplicate cu succes !', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Fisierul de actualizare parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Crearea fisierului tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Eroare la crearea fisierului tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Crearea fisierului de stil', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Eroare la crearea fisierului', +'L_UPDATE_ARTICLES_CONVERSION' => 'Traducerea articolelor pentru noul format', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Eroare in timpul procesarii fisierului', +'L_UPDATE_STATICS_MIGRATION' => 'Migrarea de pagini statice Fisier', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Eroare in timpul migratiei de fisier de la pagini statice', +'L_UPDATE_CREATE_USERS_FILE' => 'Crearea de fisier utilizatori', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Eroare la crearea dosarului de utilizatori', +'L_UPDATE_USERS_MIGRATION' => 'Migratia fisierului utilizatori', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Eroare in timpul migratiei de utilizatori', +'L_UPDATE_ERR_NO_USERS' => 'Nici un utilizator gasit', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Crearea fisieruli .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Eroare la crearea fisierului .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Actualizaţi fişierul .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Eroare în timp ce actualizarea fişierul .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Migratia tipurilor de fisiere', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Eroare in timpul migratiei categorii fisier', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Crearea fisierului plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Eroare la crearea fisierului plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Stergeti fisierul core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Eroare la stergerea fisierului core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Stergeti dosarul core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Eroare la stergerea dosarului core/plxtoolbar/', +'L_UPDATE_FILE' => 'Fişierul de actualizare', +'L_UPDATE_ERR_FILE' => 'Eroare în timpul fişierul de actualizare', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Migrarea fişierelor de setări parametrii plugin fişierul de configurare', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Fisierul de actualizare plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ru/admin.php b/src/core/lang/ru/admin.php new file mode 100644 index 0000000..b9d2d97 --- /dev/null +++ b/src/core/lang/ru/admin.php @@ -0,0 +1,545 @@ + 'Неизвестная ошибка', +'L_CONFIRM_DELETE' => 'Подтвердите удаление ?', +'L_SAVE_FILE' => 'Сохраните файл', +'L_SAVE_FILE_SUCCESSFULLY' => 'Файл успешно сохранены', +'L_SAVE_FILE_ERROR' => 'Ошибка при сохранении файла', + +# class.plx.admin.php + +'L_SAVE_SUCCESSFUL' => 'Данные успешно сохранены', +'L_SAVE_ERR' => 'Ошибка при сохранении данных', +'L_NO_ENTRY' => 'Войти невозможно', +'L_ERR_USER_EMPTY' => 'Имя пользователя', +'L_ERR_PASSWORD_EMPTY' => 'Пароль', +'L_ERR_PASSWORD_EMPTY_CONFIRMATION' => 'Неправильное Имя или Пароль', +'L_ERR_INVALID_EMAIL' => 'Неправильный адрес электронной почты', +'L_ERR_INVALID_SITE' => 'Неправильный URL сайта', +'L_ERR_INVALID_ARTICLE_IDENT' => 'Неверный ID статьи', +'L_DEFAULT_NEW_CATEGORY_URL' => 'new-category', +'L_DEFAULT_NEW_STATIC_URL' => 'new-page', +'L_DEFAULT_NEW_ARTICLE_URL' => 'new-article', +'L_ARTICLE_SAVE_SUCCESSFUL' => 'Статья успешно создана', +'L_ARTICLE_MODIFY_SUCCESSFUL' => 'Статья успешно обновлена', +'L_ARTICLE_DELETE_SUCCESSFUL' => 'Статья было успешно удалена', +'L_ARTICLE_SAVE_ERR' => 'Статьи не могут быть сохранены', +'L_ARTICLE_DELETE_ERR' => 'Ошибка: статья не может быть удалена', +'L_ERR_UNKNOWN_COMMENT' => 'Выбранный комментарий не существует', +'L_COMMENT_SAVE_SUCCESSFUL' => 'Комментарий был успешно сохранен', +'L_COMMENT_UPDATE_ERR' => 'Ошибка во время обновления комментария', +'L_COMMENT_DELETE_SUCCESSFUL' => 'Комментарий был успешно удален', +'L_COMMENT_DELETE_ERR' => 'Ошибка в удалении комментария', +'L_COMMENT_VALIDATE_SUCCESSFUL' => 'Комментарий был успешно проверен', +'L_COMMENT_VALIDATE_ERR' => 'Ошибка при проверке', +'L_COMMENT_MODERATE_SUCCESSFUL' => 'Успешная модерация', +'L_COMMENT_MODERATE_ERR' => 'Ошибка при модерации', +'L_ERR_URL_ALREADY_EXISTS' => 'Адрес уже используется. Пожалуйста, измените значение поля \'Адрес\'', + +# class.plx.media.php + +'L_PLXMEDIAS_MEDIAS_FOLDER_ERR' => 'Невозможно создать медиа-папку для текущего пользователя', +'L_PLXMEDIAS_ROOT' => 'корневая папка', +'L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL' => 'Файлы успешно удалены', +'L_PLXMEDIAS_DELETE_FILES_ERR' => 'Ошибка при удалении файла', +'L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL' => 'Файл успешно удален', +'L_PLXMEDIAS_DELETE_FILE_ERR' => 'Ошибка при удалении файла', +'L_PLXMEDIAS_DEL_FOLDER_ERR' => 'Ошибка во время удаления папки', +'L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL' => 'Папка успешно удалена', +'L_PLXMEDIAS_NEW_FOLDER_ERR' => 'Не удается создать папку', +'L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL' => 'Папка успешно создана', +'L_PLXMEDIAS_NEW_FOLDER_EXISTS' => 'Это папка уже существует', +'L_PLXMEDIAS_WRONG_FILESIZE' => 'Размер файла больше, чем', +'L_PLXMEDIAS_WRONG_FILEFORMAT' => 'Недопустимый тип файла', +'L_PLXMEDIAS_UPLOAD_ERR' => 'Ошибка при загрузке файла', +'L_PLXMEDIAS_UPLOAD_SUCCESSFUL' => 'Файл успешно загружен', +'L_PLXMEDIAS_UPLOADS_ERR' => 'Ошибка при загрузке файлов', +'L_PLXMEDIAS_UPLOADS_SUCCESSFUL' => 'Файлы успешно загружены', +'L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL' => 'Файлы перемещены успешно', +'L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL' => 'Файл успешно перемещен', +'L_PLXMEDIAS_MOVE_FILES_ERR' => 'Ошибка при перемещении файлов', +'L_PLXMEDIAS_MOVE_FILE_ERR' => 'Ошибка при перемещении файла', +'L_PLXMEDIAS_MOVE_FOLDER' => 'Переместить', +'L_PLXMEDIAS_RECREATE_THUMB_ERR' => 'Ошибка при обновлении эскиза', +'L_PLXMEDIAS_RECREATE_THUMBS_ERR' => 'Ошибка при обновлении эскизов', +'L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL' => 'Эскиз успешно обновлен', +'L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL' => 'Эскизы успешно обновлены', + +# article.php + +'L_DEFAULT_NEW_ARTICLE_TITLE' => 'Заголовок статьи', +'L_ERR_INVALID_PUBLISHING_DATE' => 'Неверная дата публикации', +'L_ERR_UNKNOWN_ARTICLE' => 'Статья не существует', +'L_ERR_FORBIDDEN_ARTICLE' => 'Вы должны иметь необходимые права на доступ к этой статье!', +'L_BACK_TO_ARTICLES' => 'Вернуться к статьям', +'L_ARTICLE_EDITING' => 'Редактирование статьи', +'L_ARTICLE_TITLE' => 'Название', +'L_ARTICLE_LIST_AUTHORS' => 'Автор', +'L_HEADLINE_FIELD' => 'Заголовок (необязательно)', +'L_CONTENT_FIELD' => 'Содержание ', +'L_LINK_FIELD' => 'Ссылка на статью', +'L_LINK_ACCESS' => 'Перейти к статье', +'L_LINK_VIEW' => 'посмотреть', +'L_ARTICLE_STATUS' => 'Статус', +'L_DRAFT' => 'Черновик', +'L_PUBLISHED' => 'Опубликовано', +'L_AWAITING' => 'Ожидание модерации автором блога', +'L_ARTICLE_DATE' => 'Дата статьи', +'L_NOW' => 'сейчас', +'L_ARTICLE_CATEGORIES' => 'Категории', +'L_CATEGORY_HOME_PAGE' => 'Главная страница', +'L_NEW_CATEGORY' => 'Новая категория', +'L_ARTICLE_TAGS_FIELD' => 'Ключевые слова', +'L_ARTICLE_TAGS_FIELD_TITLE' => 'Разделяйте теги запятыми', +'L_ARTICLE_TOGGLER_TITLE' => 'Список тегов', +'L_NO_TAG' => 'Нет тегов', +'L_ALLOW_COMMENTS' => 'Разрешить комментарии', +'L_ARTICLE_URL_FIELD' => 'Url', +'L_ARTICLE_URL_FIELD_TITLE' => 'Поле URL заполнится автоматически после создания статьи', +'L_ARTICLE_TEMPLATE_FIELD' => 'Шаблон', +'L_ARTICLE_MANAGE_COMMENTS' => 'Управление комментариями', +'L_ARTICLE_MANAGE_COMMENTS_TITLE' => 'Управление комментариями к данной статье', +'L_ARTICLE_NEW_COMMENT' => 'Создать комментарий', +'L_ARTICLE_NEW_COMMENT_TITLE' => 'Создать комментарий к этой статье', +'L_ARTICLE_DELETE_CONFIRM' => 'Удалить эту статью?', +'L_ARTICLE_PREVIEW_BUTTON' => 'Предварительный просмотр', +'L_ARTICLE_DRAFT_BUTTON' => 'Сохранить как черновик', +'L_ARTICLE_PUBLISHING_BUTTON' => 'Опубликовать', +'L_ARTICLE_MODERATE_BUTTON' => 'Предоставить автору блога на модерацию', +'L_ARTICLE_OFFLINE_BUTTON' => 'Выключить (перевести в оффлайн)', +'L_ARTICLE_UPDATE_BUTTON' => 'Сохранить', +'L_CATEGORY_ADD_BUTTON' => 'Добавить', +'L_ARTICLE_META_DESCRIPTION' => 'Мета-тег описания "Description" (необязательно)', +'L_ARTICLE_META_KEYWORDS' => 'Мета-тег ключевых слов "Keywords" (необязательно)', +'L_ARTICLE_TITLE_HTMLTAG' => 'Мета-тег заголовка страницы "Title" (необязательно)', +'L_ARTICLE_CHAPO_HIDE' => 'скрыть', +'L_ARTICLE_CHAPO_DISPLAY' => 'показать', + +# auth.php + +'L_AUTH_PAGE_TITLE' => 'Страница авторизации', +'L_LOGOUT_SUCCESSFUL' => 'Успешный выход', +'L_LOGIN_PAGE' => 'Вход в Админпанель', +'L_AUTH_LOGIN_FIELD' => 'Логин', +'L_AUTH_PASSWORD_FIELD' => 'Пароль', +'L_SUBMIT_BUTTON' => 'Войти', +'L_ERR_WRONG_PASSWORD' => 'Неправильный логин или пароль', +'L_POWERED_BY' => 'Powered by PluXml', + +# + +'L_SORT_ASCENDING_DATE' => 'Дата по возрастанию', +'L_SORT_DESCENDING_DATE' => 'Дата по убыванию', +'L_SORT_ALPHABETICAL' => 'В алфавитном порядке', +'L_YES' => 'Да', +'L_NO' => 'Нет', +'L_OK' => 'Ok', +'L_NONE1' => 'нет', +'L_NONE2' => 'отсутствует', + +# categories.php + +'L_CAT_TITLE' => 'Управление категориями', +'L_CAT_LIST_ID' => 'ID', +'L_CAT_LIST_ACTIVE' => 'Активно', +'L_CAT_LIST_NAME' => 'Название категории', +'L_CAT_LIST_URL' => 'Url', +'L_CAT_LIST_SORT' => 'Сортировка статей', +'L_CAT_LIST_BYPAGE' => 'Статей/страниц', +'L_CAT_LIST_ORDER' => 'Позиция', +'L_CAT_LIST_MENU' => 'Меню', +'L_CATEGORY' => 'Категории', +'L_DISPLAY' => 'Показ', +'L_HIDE' => 'Скрыть', +'L_OPTIONS' => 'Настроить', +'L_NEW_CATEGORY' => 'Новая категория', +'L_FOR_SELECTION' => 'Выбрать...', +'L_DELETE' => 'Удалить', +'L_CAT_APPLY_BUTTON' => 'Изменить список категорий', +'L_CAT_UNKNOWN' => 'Неизвестная категория', + +# categorie.php + +'L_EDITCAT_PAGE_TITLE' => 'Редактирование категории', +'L_EDITCAT_DESCRIPTION' => 'Описание', +'L_EDITCAT_DISPLAY_HOMEPAGE' => 'Показать в этой категории на главной странице', +'L_EDITCAT_TEMPLATE' => 'Тема', +'L_EDITCAT_BACK_TO_PAGE' => 'Вернуться к категориям', +'L_EDITCAT_UPDATE' => 'Обновление этой категории', +'L_EDITCAT_TITLE_HTMLTAG' => 'Заголовок для тега "Title" (необязательно)', +'L_EDITCAT_META_DESCRIPTION' => 'Мета-тег описания "Description" (необязательно)', +'L_EDITCAT_META_KEYWORDS' => 'Мета-тег ключевых слов "Keywords" (необязательно)', + +# commentaire.php + +'L_COMMENT_ORPHAN' => 'нет статьи', +'L_COMMENT_ORPHAN_STATUS' => 'не отображается (мы советуем вам удалить этот комментарий', +'L_COMMENT_ARTICLE_LINKED' => 'Статья', +'L_COMMENT_ARTICLE_LINKED_TITLE' => 'Статьи, связанные с этим комментарием', +'L_COMMENT_OFFLINE' => 'выключенных', +'L_COMMENT_ONLINE' => 'включенных', +'L_COMMENT_ONLINE_TITLE' => 'Опубликованные комментарии', +'L_BACK_TO_ARTICLE_COMMENTS' => 'Вернуться к комментарию этой статьи', +'L_BACK_TO_COMMENTS' => 'Вернуться к комментарию', +'L_COMMENT_EDITING' => 'Редактирование комментария', +'L_COMMENT_AUTHOR_FIELD' => 'Автор', +'L_COMMENT_TYPE_FIELD' => 'Тип комментарий', +'L_COMMENT_DATE_FIELD' => 'Дата и время публикации', +'L_COMMENT_IP_FIELD' => 'Ip', +'L_COMMENT_SITE_FIELD' => 'Сайт', +'L_COMMENT_EMAIL_FIELD' => 'E-mail', +'L_COMMENT_STATUS_FIELD' => 'Статус', +'L_COMMENT_LINKED_ARTICLE_FIELD' => 'Связанные статьи', +'L_COMMENT_ARTICLE_FIELD' => 'Комментарии', +'L_COMMENT_DELETE_CONFIRM' => 'Удалить этот комментарий?', +'L_COMMENT_PUBLISH_BUTTON' => 'Подтверждение публикации', +'L_COMMENT_OFFLINE_BUTTON' => 'Не отображать', +'L_COMMENT_ANSWER_BUTTON' => 'Ответить на этот комментарий', +'L_COMMENT_UPDATE_BUTTON' => 'Обновить', +'L_COMMENT_WRITTEN_BY' => 'Автор', +'L_ERR_CATEGORY_ALREADY_EXISTS' => 'Название категории уже используется', + +# sous_navigation/commentaires.php + +'L_COMMENT_NEW_COMMENT_TITLE' => 'Создать новый комментарий к этой статье', +'L_COMMENT_NEW_COMMENT' => 'Создать новый комментарий', + +# commentaire_new.php + +'L_ERR_ANSWER_UNKNOWN_COMMENT' => 'Комментарий, на который Вы пытаетесь ответить, больше не существует!', +'L_ERR_ANSWER_OFFLINE_COMMENT' => 'Вы не можете ответить на этот комментарий!', +'L_ERR_COMMENT_UNKNOWN_ARTICLE' => 'Этой статьи не существует, вы не можете комментировать!', +'L_ERR_CREATING_COMMENT' => 'Произошла ошибка при создании комментария', +'L_CREATING_COMMENT_SUCCESSFUL' => 'Комментарий успешно создан', +'L_CREATE_NEW_COMMENT' => 'Написать комментарий', +'L_COMMENT_SAVE_BUTTON' => 'Сохранить', +'L_ARTICLE_COMMENTS_LIST' => 'Комментарии к статье (от новых к старым)', +'L_COMMENT_ANSWER_TITLE' => 'Ответить на этот комментарий', +'L_COMMENT_ANSWER' => 'Ответ', + +# comments.php + +'L_COMMENTS_ARTICLE_SCOPE' => 'статья', +'L_COMMENTS_GLOBAL_SCOPE' => 'весь сайт', + +'L_COMMENTS_LIST_DATE' => 'Дата', +'L_COMMENTS_LIST_AUTHOR' => 'Автор', +'L_COMMENTS_LIST_MESSAGE' => 'Сообщение', +'L_COMMENTS_LIST_ACTION' => 'Действие', +'L_COMMENT_EDIT' => 'Изменить', +'L_COMMENT_EDIT_TITLE' => 'Изменить этот комментарий', +'L_COMMENT_DELETE' => 'Удалить', +'L_COMMENT_OFFLINE_FEEDS_TITLE' => 'RSS-поток для выключенных комментариев', +'L_COMMENT_OFFLINE_FEEDS' => 'Выключенные комментарии', +'L_COMMENT_ONLINE_FEEDS_TITLE' => 'RSS-поток для включенных комментариев', +'L_COMMENT_ONLINE_FEEDS' => 'Включенные комментарии', +'L_COMMENTS_PRIVATE_FEEDS' => 'Приватный поток', + +'L_COMMENTS_ONLINE_LIST' => 'Список опубликованных комментариев', +'L_COMMENTS_OFFLINE_LIST' => 'Комментарии, ожидающие модерации', +'L_COMMENTS_ALL_LIST' => 'Список комментариев', + +'L_COMMENT_SET_ONLINE' => 'Включить', +'L_COMMENT_SET_OFFLINE' => 'Выключить', + +# index.php + +'L_ARTICLES_SEARCH_BUTTON' => 'Поиск', +'L_ARTICLES_ALL_CATEGORIES' => 'Все категории ...', +'L_ALL' => 'Всего', +'L_ALL_PUBLISHED' => 'Опубликованные', +'L_ALL_DRAFTS' => 'Черновики', +'L_ALL_AWAITING_MODERATION' => 'Ожидают модерации', +'L_ARTICLES_FILTER_BUTTON' => 'Фильтр', +'L_CATEGORIES_TABLE' => 'Категории', +'L_SPECIFIC_CATEGORIES_TABLE' => 'Особые категории', +'L_ALL_ARTICLES_CATEGORIES_TABLE' => 'Все статьи', +'L_ARTICLES_LIST' => 'Список статей', +'L_ARTICLE_LIST_DATE' => 'Дата', +'L_ARTICLE_LIST_TITLE' => 'Название', +'L_ARTICLE_LIST_CATEGORIES' => 'Категории', +'L_ARTICLE_LIST_NBCOMS' => 'Коммент.', +'L_ARTICLE_LIST_AUTHOR' => 'Автор', +'L_ARTICLE_LIST_ACTION' => 'Действие', +'L_CATEGORY_HOME' => 'Главная', +'L_CATEGORY_DRAFT' => 'Черновики', +'L_ARTICLE_VIEW' => 'Открыть', +'L_ARTICLE_VIEW_TITLE' => 'Открыть эту статью', +'L_ARTICLE_EDIT' => 'Изменить', +'L_ARTICLE_EDIT_TITLE' => 'Изменить эту статью', +'L_NEW_COMMENTS_TITLE' => 'Комментарии, ожидающие модерации', +'L_VALIDATED_COMMENTS_TITLE' => 'Опубликованные комментарии', +'L_NO_ARTICLE' => 'Нет статей', + +# medias.php + +'L_MEDIAS_FILENAME' => 'Имя файла', +'L_MEDIAS_TITLE' => 'Медиа', +'L_MEDIAS_DIRECTORY' => 'Расположение', +'L_MEDIAS_BACK' => 'Назад', +'L_MEDIAS_MAX_UPOLAD_FILE' => 'Максимальный размер файла', +'L_MEDIAS_SUBMIT_FILE' => 'Загрузить', +'L_MEDIAS_IMAGES' => 'Изображения', +'L_MEDIAS_DOCUMENTS' => 'Документы', +'L_MEDIAS_ADD_FILE' => 'Добавить файл', +'L_MEDIAS_DELETE_FOLDER' => 'Удалить папку', +'L_MEDIAS_DELETE_FOLDER_CONFIRM' => 'Удалить папку и ее содержимое?', +'L_MEDIAS_FOLDER' => 'Файл', +'L_MEDIAS_NEW_FOLDER' => 'Новая папка', +'L_MEDIAS_CREATE_FOLDER' => 'Создать папку', +'L_MEDIAS_FILESIZE' => 'Размер файла', +'L_MEDIAS_DATE' => 'Дата', +'L_MEDIAS_DIMENSIONS' => 'Разрешения', +'L_MEDIAS_NO_FILE' => 'Нет файлов', +'L_MEDIAS_RESIZE' => 'Изменение размера изображения', +'L_MEDIAS_RESIZE_NO' => 'Размер оригинала', +'L_MEDIAS_THUMBS' => 'Создание миниатюр', +'L_MEDIAS_THUMBS_NONE' => 'Без эскиза', +'L_MEDIAS_MODIFY' => 'Изменить', +'L_MEDIAS_THUMB' => 'Эскиз', +'L_MEDIAS_EXTENSION' => 'Расширение', +'L_MEDIAS_ADD' => 'Добавить', +'L_MEDIAS_ALIGNMENT' => 'Выравнивание', +'L_MEDIAS_ALIGN_NONE' => 'Нет', +'L_MEDIAS_ALIGN_LEFT' => 'Слева', +'L_MEDIAS_ALIGN_CENTER' => 'Центр', +'L_MEDIAS_ALIGN_RIGHT' => 'Право', +'L_MEDIAS_RECREATE_THUMB' => 'Обновить эскизы', + +# parametres_affichage.php + +'L_CONFIG_VIEW_FIELD' => 'Настройки', +'L_CONFIG_VIEW_SKIN_SELECT' => 'Тема', +'L_CONFIG_VIEW_FILES_EDIT_TITLE' => 'Редактирование файлов темы', +'L_CONFIG_VIEW_FILES_EDIT' => 'Редактирование файлов темы', +'L_CONFIG_VIEW_SORT' => 'Сортировка статей', +'L_CONFIG_VIEW_BYPAGE' => 'Статей на странице', +'L_CONFIG_VIEW_BYPAGE_ARCHIVES' => 'Статей на странице в архиве', +'L_CONFIG_VIEW_BYPAGE_ADMIN' => 'Статей на странице в Админке', +'L_CONFIG_VIEW_SORT_COMS' => 'Сортировка комментариев', +'L_CONFIG_VIEW_BYPAGE_ADMIN_COMS' => 'Комментариев на странице в админке', +'L_CONFIG_VIEW_IMAGES' => 'Размер изображения (Ширина х Высота)', +'L_CONFIG_VIEW_THUMBS' => 'Размер эскизов (Ширина х Высота)', +'L_CONFIG_VIEW_HOMESTATIC' => 'Использовать статическую страницу как Главную страницу', +'L_CONFIG_VIEW_HOMESTATIC_ACTIVE' => 'Внимание: Эта страница неактивна', +'L_CONFIG_VIEW_PLUXML_RESSOURCES' => 'Загрузка тем ressources.pluxml.org.', +'L_CONFIG_VIEW_BYPAGE_FEEDS' => 'N° статьи или комментария в RSS-потоке', +'L_CONFIG_VIEW_FEEDS_HEADLINE' => 'Отображать только заголовки статей в RSS-потоке', +'L_CONFIG_VIEW_FEEDS_HEADLINE_HELP' => 'Поле Заголовка пустое, вместо него отображается содержимое статьи', +'L_CONFIG_VIEW_FEEDS_FOOTER' => 'Подпись используется в конце каждой статьи в RSS-потоке', +'L_CONFIG_VIEW_UPDATE' => 'Сохранить параметры отображения', +'L_CONFIG_VIEW_DISPLAY_EMPTY_CAT' => 'Показать категории без статей', +'L_CONFIG_HOMETEMPLATE' => 'Шаблон главной страницы', + +# parametres_avances.php + +'L_CONFIG_ADVANCED_DESC' => 'Расширенные настройки (опытный пользователь)', +'L_CONFIG_ADVANCED_URL_REWRITE' => 'Включить URL rewrite', +'L_CONFIG_ADVANCED_URL_REWRITE_ALERT' => 'Внимание .htaccess файл уже присутствует в корневом каталоге вашего PluXml. При включении URL переписывания этот файл будет изменен', +'L_CONFIG_ADVANCED_GZIP' => 'Включить GZIP сжатие', +'L_CONFIG_ADVANCED_GZIP_HELP' => 'Это cделает возможным сжатие страниц для увеличения пропускной способности, но может увеличить использование процессора', +'L_CONFIG_ADVANCED_CAPCHA' => 'Включить анти-спам Capcha', +'L_CONFIG_ADVANCED_ADMIN_KEY' => 'Административный ключ (для приватных URL)', +'L_CONFIG_ADVANCED_KEY_HELP' => 'Оставьте это поле пустым, чтобы восстановить ключ', +'L_CONFIG_ADVANCED_USERFOLDERS' => 'Используйте отдельные изображения и документы папки для каждого пользователя', +'L_HELP_SLASH_END' => 'Не забудьте слеш / в конце', +'L_CONFIG_ADVANCED_PICS_FOLDER' => 'Папка для изображений', +'L_CONFIG_ADVANCED_DOCS_FOLDER' => 'Папка для документов', +'L_CONFIG_ADVANCED_ARTS_FOLDER' => 'Папка для статей', +'L_CONFIG_ADVANCED_COMS_FOLDER' => 'Папка для комментариев', +'L_CONFIG_ADVANCED_STATS_FOLDER' => 'Папка для статических страниц', +'L_CONFIG_ADVANCED_THEMES_FOLDER' => 'Папка с темами', +'L_CONFIG_ADVANCED_PLUGINS_FOLDER' => 'Папка с плагинами', +'L_CONFIG_ADVANCED_CONFIG_FOLDER' => 'Расположение файлов конфигурации (каталог)', +'L_CONFIG_ADVANCED_UPDATE' => 'Сохранить дополнительные настройки', + +# parametres_base.php + +'L_CONFIG_BASE_CONFIG_TITLE' => 'Основные настройки', +'L_CONFIG_BASE_SITE_TITLE' => 'Название сайта', +'L_CONFIG_BASE_SITE_SLOGAN' => 'Слоган сайта', +'L_CONFIG_BASE_URL_HELP' => 'Не забудьте слеш / в конце', +'L_CONFIG_BASE_DEFAULT_LANG' => 'Язык сайта по умолчанию', +'L_CONFIG_BASE_TIMEZONE' => 'Часовой пояс', +'L_CONFIG_BASE_ALLOW_COMMENTS' => 'Разрешить комментарии', +'L_CONFIG_BASE_MODERATE_COMMENTS' => 'Модерация комментариев', +'L_CONFIG_BASE_MODERATE_ARTICLES' => 'Модерация статей для профилей Редактор и Издатель', +'L_CONFIG_BASE_UPDATE' => 'Сохранить основные настройки', +'L_CONFIG_META_DESCRIPTION' => 'Мета-тег описания "Description" (необязательно)', +'L_CONFIG_META_KEYWORDS' => 'Мета-тег ключевых слов "Keywords" (необязательно)', + +# parametres_edittpl.php + +'L_CONFIG_EDITTPL_ERROR_NOTHEME' => 'Нет такой темы!', +'L_CONFIG_EDITTPL_TITLE' => 'Редактирование темы', +'L_CONFIG_EDITTPL_SELECT_FILE' => 'Выберите файл для редактирования:', +'L_CONFIG_EDITTPL_LOAD' => 'Загрузить', + +# parametres_infos.php + +'L_CONFIG_INFOS_TITLE' => 'Информация о PluXml', +'L_CONFIG_INFOS_DESCRIPTION' => 'Информацио о установленной PluXml, может быть полезна, при необходмости, для восстановления.', +'L_CONFIG_INFOS_NB_CATS' => 'N° категорий :', +'L_CONFIG_INFOS_NB_STATICS' => 'N° статических страниц :', +'L_CONFIG_INFOS_WRITER' => 'N° пользователей за сессию :', +'L_PLUXML_CHECK_VERSION' => 'Проверка номера версии PluXml на официальном сайте PluXml.org :', +'L_PLUXML_UPDATE_UNAVAILABLE' => 'Невозможно проверить обновление, так как адрес \'allow_url_fopen\' заблокирован на этом компьютере', +'L_PLUXML_UPDATE_ERR' => 'Проверка обновления окончилась неудачно по неизвестной причине', +'L_PLUXML_UPTODATE' => 'Вы используете последнюю версию PluXml', +'L_PLUXML_UPDATE_AVAILABLE' => 'Новая версия PluXml доступна! Вы может скачать ее с', + +# parametres_users.php + +'L_CONFIG_USERS_TITLE' => 'Пользователи', +'L_CONFIG_USER' => 'Пользователи', +'L_CONFIG_USERS_ID' => 'ID Пользователя', +'L_CONFIG_USERS_ACTIVE' => 'Активен', +'L_CONFIG_USERS_ACTION' => 'Настройки', +'L_CONFIG_USERS_NEW' => 'Новый пользователь', +'L_CONFIG_USERS_UPDATE' => 'Сохранить список пользователей', +'L_ERR_LOGIN_ALREADY_EXISTS' => 'Такой логин уже используется', +'L_ERR_USERNAME_ALREADY_EXISTS' => 'Такое имя пользователя уже используется', + +# parametre_plugins.php + +'L_BACK_TO_PLUGINS' => 'Вернуться на страницу плагинов', +'L_NO_PLUGIN' => 'Нет плагина', +'L_PLUGIN_NO_CONFIG' => 'Плагин не настроено', +'L_PLUGINS_CSS' => 'Css', +'L_PLUGINS_CSS_TITLE' => 'Редактирования кода CSS этого плагина', +'L_CONTENT_FIELD_FRONTEND' => 'Содержание веб-сайта CSS-файла', +'L_CONTENT_FIELD_BACKEND' => 'Css содержимое файла администратор', + +# parametres_plugins.php + +'L_PLUGINS_TITLE' => 'Плагины', +'L_PLUGINS_VERSION' => 'Версия', +'L_PLUGINS_AUTHOR' => 'Автор', +'L_PLUGINS_ACTIVATE' => 'Включить', +'L_PLUGINS_DEACTIVATE' => 'Выключить', +'L_PLUGINS_DELETE' => 'Удалить', +'L_PLUGINS_DELETE_ERROR' => 'Произошла ошибка во время удаления', +'L_PLUGINS_DELETE_SUCCESSFUL' => 'Удалено успешно', +'L_PLUGINS_CONFIG' => 'Конфигурация', +'L_PLUGINS_CONFIG_TITLE' => 'Конфигурация плагина', +'L_PLUGINS_HELP' => 'Помощь', +'L_PLUGINS_HELP_TITLE' => 'Смотрите помощь по плагинам', +'L_PLUGINS_REQUIREMENTS' => 'Системные требования', +'L_PLUGINS_REQUIREMENTS_HELP' => 'Доступные и активные плагины', +'L_PLUGINS_REQUIREMENTS_NONE' => 'Нет', +'L_PLUGINS_ALPHA_SORT' => 'Сортировка по алфавиту плагинов', +'L_PLUGINS_LOADING_SORT' => 'Погрузочный ордер', +'L_PLUGINS_ACTION' => 'действие', +'L_PLUGINS_APPLY_BUTTON' => 'Изменить список плагинов', +'L_PLUGINS_ACTIVE_LIST' => 'Активная плагины', +'L_PLUGINS_INACTIVE_LIST' => 'Неактивные плагины', + +# profil.php + +'L_PROFIL_EDIT_TITLE' => 'Редактирование профиля', +'L_PROFIL' => 'Профиль', +'L_PROFIL_LOGIN' => 'Логин', +'L_PROFIL_USER' => 'Имя, Фамилия', +'L_PROFIL_MAIL' => 'Email адрес', +'L_PROFIL_ADMIN_LANG' => 'Язык Административной панели', +'L_PROFIL_INFOS' => 'Информация о Вас (отображается под текстом статей)', +'L_PROFIL_UPDATE' => 'Изменить Ваш профиль', +'L_PROFIL_CHANGE_PASSWORD' => 'Изменение пароля', +'L_PROFIL_PASSWORD' => 'Пароль', +'L_PROFIL_CONFIRM_PASSWORD' => 'Повторить пароль', +'L_PROFIL_UPDATE_PASSWORD' => 'Изменить пароль', + +# statique.php + +'L_STATIC_BACK_TO_PAGE' => 'Вернуться к списку статических страниц', +'L_STATIC_UNKNOWN_PAGE' => 'Эта статическая страница не существует!', +'L_STATIC_TITLE' => 'Изменить исходный код статической страницы', +'L_STATIC_VIEW_PAGE' => 'Просмотр страницы', +'L_STATIC_ON_SITE' => 'на сайте', +'L_STATIC_UPDATE' => 'Сохранить эту страницу', +'L_STATIC_TITLE_HTMLTAG' => 'Заголовок для тега "Title" (необязательно)', +'L_STATIC_META_DESCRIPTION' => 'Мета-тег описания "Description" этой статической страницы (необязательно)', +'L_STATIC_META_KEYWORDS' => 'Мета-тег ключевых слов "Keywords" этой статической страницы (необязательно)', + +# statiques.php + +'L_STATICS_PAGE_TITLE' => 'Создание и редактирование статических страниц', +'L_STATICS_ID' => 'ID', +'L_STATICS_GROUP' => 'Группа', +'L_STATICS_TITLE' => 'Название', +'L_STATICS_URL' => 'Url', +'L_STATICS_ACTIVE' => 'Активно', +'L_STATICS_ORDER' => 'Позиция', +'L_STATICS_MENU' => 'Меню', +'L_STATICS_ACTION' => 'Действие', +'L_STATICS_TEMPLATE_FIELD' => 'Тема', +'L_STATICS_PAGE_HOME' => 'Сделать Главной страницей', +'L_STATICS_HOME_PAGE' => 'Главной
страница', +'L_PAGE' => 'Страница', +'L_VIEW' => 'Показать', +'L_STATICS_SRC_TITLE' => 'Изменение исходного кода этой страницы', +'L_STATICS_SRC' => 'Редактировать', +'L_STATICS_NEW_PAGE' => 'Новая страница', +'L_STATICS_UPDATE' => 'Сохранить список статических страниц', +'L_ERR_STATIC_ALREADY_EXISTS' => 'Такой заголовок страницы уже используется', + +# top.php +'L_PROFIL_ADMIN' => 'Администратор', +'L_PROFIL_MANAGER' => 'Менеджер', +'L_PROFIL_MODERATOR' => 'Модератор', +'L_PROFIL_EDITOR' => 'Редактор', +'L_PROFIL_WRITER' => 'Автор', +'L_ADMIN' => '- Администрирование', +'L_LOGIN' => 'Вы зашли как', +'L_ADMIN_LOGOUT' => 'Выйти', +'L_ADMIN_LOGOUT_TITLE' => 'Завершить администрирование', +'L_BACK_TO_SITE' => 'Главная', +'L_BACK_TO_SITE_TITLE' => 'Вернуться на главную страницу', +'L_BACK_TO_BLOG' => 'Блог', +'L_BACK_TO_BLOG_TITLE' => 'Вернуться к блогу', +'L_MENU_ARTICLES' => 'Статьи', +'L_MENU_ARTICLES_TITLE' => 'Список и редактирование статей', +'L_MENU_NEW_ARTICLES' => 'Новая статья', +'L_MENU_NEW_ARTICLES_TITLE' => 'Новая статья', +'L_MENU_STATICS_TITLE' => 'Список и редактирование статических страниц', +'L_MENU_STATICS' => 'Статические страницы', +'L_MENU_COMMENTS_TITLE' => 'Список и редактирование комментариев', +'L_MENU_COMMENTS' => 'Комментарии', +'L_MENU_MEDIAS_TITLE' => 'Загрузить и вставить изображение', +'L_MENU_MEDIAS' => 'Медиа', +'L_MENU_CATEGORIES_TITLE' => 'Создание, управление и редактирование категорий', +'L_MENU_CATEGORIES' => 'Категории', +'L_MENU_CONFIG_TITLE' => 'Конфигурация PluXml', +'L_MENU_CONFIG' => 'Настройки', +'L_MENU_PROFIL_TITLE' => 'Управление профилем пользователя', +'L_MENU_PROFIL' => 'Профиль', +'L_WARNING_INSTALLATION_FILE' => '

Внимание! Файл install.php все еще находится в корневой папке PluXml.
Из соображений безопасности настоятельно рекомендуем удалить его.

', + +# user.php +'L_USER_UNKNOWN' => 'Неизвестный пользователь', +'L_USER_LANG' => 'Язык, используемый в Администрировании', +'L_USER_MAIL' => 'Email адрес', +'L_USER_INFOS' => 'Информация', +'L_USER_UPDATE' => 'Обновление этого пользователя', +'L_USER_PAGE_TITLE' => 'Редактирование параметров пользователя', +'L_USER_BACK_TO_PAGE' => 'Вернуться к списку пользователей', + +# + +'L_MENU_CONFIG_BASE_TITLE' => 'Изменение конфигурации', +'L_MENU_CONFIG_BASE' => 'Конфигурация сайта --', +'L_MENU_CONFIG_VIEW_TITLE' => 'Настройки отображения сайта', +'L_MENU_CONFIG_VIEW' => 'Отображение сайта --', +'L_MENU_CONFIG_USERS_TITLE' => 'Управление учетными записями пользователей', +'L_MENU_CONFIG_USERS' => 'Пользователи --', +'L_MENU_CONFIG_ADVANCED_TITLE' => 'Дополнительные настройки', +'L_MENU_CONFIG_ADVANCED' => 'Дополнительные настройки --', +'L_MENU_CONFIG_INFOS_TITLE' => 'Информация о сайте', +'L_MENU_CONFIG_INFOS' => 'Информация --', +'L_MENU_CONFIG_PLUGINS_TITLE' => 'Плагины', +'L_MENU_CONFIG_PLUGINS' => 'Плагины --', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ru/core.php b/src/core/lang/ru/core.php new file mode 100644 index 0000000..42d2f89 --- /dev/null +++ b/src/core/lang/ru/core.php @@ -0,0 +1,136 @@ + 'Russian', + +# common +'L_PLUXML_VERSION' => 'PluXml версия', +'L_HOMEPAGE' => 'Главная', +'L_UNCLASSIFIED' => 'Без категории', +'L_INFO_PHP_VERSION' => 'PHP версия', +'L_INFO_MAGIC_QUOTES' => 'Состояние "magic quotes"', +'L_INFO_CHARSET' => 'кодировка', + +# index.php +'L_ERR_THEME_NOTFOUND' => 'Тема не найдена', +'L_ERR_FILE_NOTFOUND' => 'Файл не найден', +'L_ERR_PAGE_NOT_FOUND' => 'Страница не найдена', + +# class.plx.date.php +'L_SHORT_JANUARY' => '', +'L_SHORT_FEBRUARY' => '', +'L_SHORT_MARCH' => '', +'L_SHORT_APRIL' => '', +'L_SHORT_MAY' => '', +'L_SHORT_JUNE' => '', +'L_SHORT_JULY' => '', +'L_SHORT_AUGUST' => '', +'L_SHORT_SEPTEMBER' => '', +'L_SHORT_OCTOBER' => '', +'L_SHORT_NOVEMBER' => '', +'L_SHORT_DECEMBER' => '', +'L_JANUARY' => 'январь', +'L_FEBRUARY' => 'февраль', +'L_MARCH' => 'март', +'L_APRIL' => 'апрель', +'L_MAY' => 'май', +'L_JUNE' => 'июнь', +'L_JULY' => 'июль', +'L_AUGUST' => 'август', +'L_SEPTEMBER' => 'сентябрь', +'L_OCTOBER' => 'октябрь', +'L_NOVEMBER' => 'ноябрь', +'L_DECEMBER' => 'декабрь', +'L_MONDAY' => 'понедельник', +'L_TUESDAY' => 'вторник', +'L_WEDNESDAY' => 'среда', +'L_THURSDAY' => 'четверг', +'L_FRIDAY' => 'пятница', +'L_SATURDAY' => 'субота', +'L_SUNDAY' => 'воскресенье', + +# class.plx.capcha.php +'L_LAST' => 'последняя', +'L_FIRST' => 'первая', +'L_SECOND' => 'вторая', +'L_THIRD' => 'третья', +'L_FOURTH' => 'четвертая', +'L_FIFTH' => 'пятая', +'L_SIXTH' => 'шестая', +'L_SEVENTH' => 'седьмая', +'L_EIGTH' => 'восьмая', +'L_NINTH' => 'девятая', +'L_TENTH' => 'десятая', +'L_NTH' => 'и', +'L_CAPCHA_QUESTION' => 'Напечатйте, какая %s буква в этом тексте %s?', + +# class.plx.utils.php +'L_WRITE_ACCESS' => '%s имеет доступ на запись', +'L_WRITE_NOT_ACCESS' => '%s не имеет доступ на запись или не существует', +'L_MODREWRITE_AVAILABLE' => 'Apache URL модуля mod_rewrite доступны', +'L_MODREWRITE_NOT_AVAILABLE' => 'Apache URL модуля mod_rewrite недоступен', +'L_LIBGD_INSTALLED' => 'GD библиотека установлена', +'L_LIBGD_NOT_INSTALLED' => 'GD библиотека не установлена', +'L_MAIL_AVAILABLE' => 'функция отправки почты доступна', +'L_MAIL_NOT_AVAILABLE' => 'Функция отправки почты недоступна', + +# class.plx.motor.php +'L_FILE_VERSION_REQUIRED' => 'Файл "%sversion" требуется для PluXml', +'L_ARTICLE_NO_TAG' => 'Для этого тега нет статьи!', +'L_UNKNOWN_CATEGORY' => 'Эта категория не существует!', +'L_NO_ARTICLE_PAGE' => 'Нет статей в этой категории!', +'L_UNKNOWN_ARTICLE' => 'Эта статья не существует!', +'L_COM_IN_MODERATION' => 'Спасибо! Ваш комментарий появится после проверки', +'L_UNKNOWN_STATIC' => 'Эта страница не существует!', +'L_DOCUMENT_NOT_FOUND' => 'Документ не найден', +'L_NEWCOMMENT_ERR' => 'Произошла ошибка при публикации комментария', +'L_NEWCOMMENT_FIELDS_REQUIRED' => 'Пожалуйста, заполните все необходимые поля', +'L_NEWCOMMENT_ERR_ANTISPAM' => 'Ошибка проверки Антиспам', + +# class.plx.show.php + +'L_HTTPENCODING' => 'Сжатие %s активированно', +'L_PAGETITLE_ARCHIVES' => 'Архив', +'L_PAGETITLE_TAG' => 'Тэги', +'L_NO_CATEGORY' => 'без категории', +'L_CATEGORY' => 'категория', +'L_CATEGORIES' => 'категории', +'L_NO_ARTICLE' => 'нет статьи', +'L_ARTICLE' => 'статья', +'L_ARTICLES' => 'статей', +'L_ARTAUTHOR_UNKNOWN' => 'неизвестный', +'L_ARTTAGS_NONE' => 'нет', +'L_ARTCHAPO' => 'Читать далее', +'L_ARTFEED_RSS_CATEGORY' => 'RSS-поток категорий', +'L_ARTFEED_RSS_TAG' => 'RSS-поток статей в этом теге', +'L_ARTFEED_RSS' => 'RSS-поток статей', +'L_NO_COMMENT' => 'нет комментариев', +'L_COMMENT' => 'комментарий', +'L_COMMENTS' => 'комментария', +'L_COMFEED_RSS_ARTICLE' => 'RSS-поток комментариев статей', +'L_COMFEED_RSS' => 'RSS-поток комментариев', +'L_STATICCONTENT_INPROCESS' => 'Эта страница в настоящее время редактируется', +'L_SAID' => 'сказал', + +'L_PAGINATION_FIRST_TITLE' => 'Перейти на первую страницу', +'L_PAGINATION_FIRST' => '«', +'L_PAGINATION_PREVIOUS_TITLE' => 'Предыдущая страница', +'L_PAGINATION_PREVIOUS' => 'Назад', +'L_PAGINATION_NEXT_TITLE' => 'Следующая страница', +'L_PAGINATION_NEXT' => 'Далее', +'L_PAGINATION_LAST_TITLE' => 'Перейти к последней странице', +'L_PAGINATION_LAST' => '»', +'L_PAGINATION' => 'страниц %s из %s', + +'L_PAGEBLOG_TITLE' => 'Блог', + +# class.plx.feed.php +'L_FEED_NO_PRIVATE_URL' => 'Закрытые URL не был инициализированы в настройках Админпанели!', +'L_FEED_COMMENTS' => 'Комментарии', +'L_FEED_ONLINE_COMMENTS' => 'Комментарии онлайн', +'L_FEED_OFFLINE_COMMENTS' => 'Комментарии оффлайн', +'L_FEED_WRITTEN_BY' => 'Автор', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ru/install.php b/src/core/lang/ru/install.php new file mode 100644 index 0000000..47ac6e9 --- /dev/null +++ b/src/core/lang/ru/install.php @@ -0,0 +1,33 @@ + 'Инсталяция', +'L_WRONG_PHP_VERSION' => 'PluXml требует PHP версии 5 и выше', +'L_SELECT_LANG' => 'Выберите ваш язык', +'L_INPUT_CHANGE' => 'Изменить', +'L_DEFAULT_CATEGORY_TITLE' => 'Категория 1', +'L_DEFAULT_CATEGORY_URL' => 'caregory-1', +'L_DEFAULT_STATIC_TITLE' => 'Статическая 1', +'L_DEFAULT_STATIC_URL' => 'static-1', +'L_DEFAULT_ARTICLE_TITLE' => 'Первая статья', +'L_DEFAULT_ARTICLE_URL' => 'first-article', +'L_DEFAULT_COMMENT_CONTENT' => 'Это первый комментарий!', +'L_ERR_PLUXML_ALREADY_INSTALLED' => 'PluXml уже создана!', +'L_ERR_MISSING_USER' => 'Пожалуйста, заполните поля!', +'L_ERR_MISSING_LOGIN' => 'Пожалуйста, заполните поле Логин!', +'L_ERR_MISSING_PASSWORD' => 'Пожалуйста, заполните поле Пароль!', +'L_ERR_PASSWORD_CONFIRMATION' => 'Неверный пароль!', +'L_PLUXML_INSTALLATION' => 'Установка PluXml, ', +'L_SITE_DESCRIPTION' => 'Блог или CMS на XML!', +'L_VERSION' => 'версия', +'L_USERNAME' => 'Имя Администратора', +'L_LOGIN' => 'Логин Администратора', +'L_PASSWORD' => 'Пароль', +'L_PASSWORD_CONFIRMATION' => 'Подтвердить пароль', +'L_INPUT_INSTALL' => 'Установка', +'L_TIMEZONE' => 'Часовой пояс', + +); +?> \ No newline at end of file diff --git a/src/core/lang/ru/update.php b/src/core/lang/ru/update.php new file mode 100644 index 0000000..eae4815 --- /dev/null +++ b/src/core/lang/ru/update.php @@ -0,0 +1,59 @@ + 'Данные были успешно сохранены', +'L_UPDATE_TITLE' => 'Обновление PluXml', +'L_WRONG_PHP_VERSION' => 'Для PluXml необходим PHP версии 5 или выше.', + +'L_SELECT_LANG' => 'Выберите ваш язык', +'L_INPUT_CHANGE' => 'Изменить', + +'L_UPDATE_UPTODATE' => 'Ваша PluXml имеет актуальную версию.', +'L_UPDATE_NOT_AVAILABLE' => 'Нет доступных обновлений.', +'L_UPDATE_BACK' => 'Вернуться на Главную страницу', +'L_UPDATE_WARNING1' => 'Вы собираетесь обновить вашу старую версию PluXml', +'L_UPDATE_SELECT_VERSION' => 'Пожалуйста, выберите старую версию PluXml, которую вы желаете обновить.', +'L_UPDATE_WARNING2' => 'Если вы не можете найти старую версию PluXml в списке ниже, для нее нет автоматического обновления, так как ваша версия очень старая.
Мы советуем вам скачать последнюю версию PluXml и проделать новую установку.', +'L_UPDATE_WARNING3' => 'Внимание: перед тем, как начать обновление, не забудьте сделать копию вашего сайта, сохранив папку "data" в надежном месте', +'L_UPDATE_START' => 'Начать обновление', + +'L_UPDATE_ENDED' => 'Обновление завершено', +'L_UPDATE_INPROGRESS' => 'Происходит обновление', +'L_UPDATE_ERROR' => 'Во время обновления произошла ошибка.', +'L_UPDATE_SUCCESSFUL' => 'Обновление завершено успешно!', + +'L_UPDATE_UPDATE_PARAMETERS_FILE' => 'Обновление parametres.xml', +'L_UPDATE_CREATE_TAGS_FILE' => 'Создается tags.xml', +'L_UPDATE_ERR_CREATE_TAGS_FILE' => 'Произошла ошибка во время создания tags.xml', +'L_UPDATE_CREATE_THEME_FILE' => 'Создается файл темы', +'L_UPDATE_ERR_CREATE_THEME_FILE' => 'Произошла ошибка во время создания файла темы', +'L_UPDATE_ARTICLES_CONVERSION' => 'Преобразование статей в новый формат', +'L_UPDATE_ERR_FILE_PROCESSING' => 'Произошла ошибка в процессе обработки файла', +'L_UPDATE_STATICS_MIGRATION' => 'Миграция файла статических страниц', +'L_UPDATE_ERR_STATICS_MIGRATION' => 'Произошла ошибка во время миграции файла статических страниц', +'L_UPDATE_CREATE_USERS_FILE' => 'Создается файлы пользователя users\' ', +'L_UPDATE_ERR_CREATE_USERS_FILE' => 'Произошла ошибка во время создания файла пользователя', +'L_UPDATE_USERS_MIGRATION' => 'Миграция файла пользователя users\' ', +'L_UPDATE_ERR_USERS_MIGRATION' => 'Произошла ошибка во время миграции файла пользователя', +'L_UPDATE_ERR_NO_USERS' => 'В файле не найдены пользователи', +'L_UPDATE_CREATE_HTACCESS_FILE' => 'Создается файл .htaccess', +'L_UPDATE_ERR_CREATE_HTACCESS_FILE' => 'Произошла ошибка во время создания файла .htaccess', +'L_UPDATE_UPDATE_HTACCESS_FILE' => 'Обновление файла .htaccess', +'L_UPDATE_ERR_UPDATE_HTACCESS_FILE' => 'Произошла ошибка во время обновления файла .htaccess', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Миграция файла категорий', +'L_UPDATE_CATEGORIES_MIGRATION' => 'Миграция файла категорий', +'L_UPDATE_ERR_CATEGORIES_MIGRATION' => 'Произошла ошибка во время миграции файла категорий', +'L_UPDATE_CREATE_PLUGINS_FILE' => 'Создается plugins.xml', +'L_UPDATE_ERR_CREATE_PLUGINS_FILE' => 'Произошла ошибка во время создания plugins.xml', +'L_UPDATE_DELETE_FULLSCREEN_FILE' => 'Удаление core/admin/fullscreen.php', +'L_UPDATE_ERR_DELETE_FULLSCREEN_FILE'=> 'Произошла ошибка во время удаления core/admin/fullscreen.php', +'L_UPDATE_DELETE_PLXTOOLBAR_FOLDER' => 'Удаление папки core/plxtoolbar/', +'L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER' => 'Произошла ошибка во время удаления папки core/plxtoolbar/', +'L_UPDATE_FILE' => 'Обновление файла', +'L_UPDATE_ERR_FILE' => 'Ошибка при обновлении файла', +'L_UPDATE_PLUG_MOVEPARAMFILE' => 'Миграция файлов плагина параметров в файле конфигурации', +'L_UPDATE_UPDATE_PLUGINS_FILE' => 'Обновление plugins.xml', + +); +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.admin.php b/src/core/lib/class.plx.admin.php new file mode 100644 index 0000000..cce4a5a --- /dev/null +++ b/src/core/lib/class.plx.admin.php @@ -0,0 +1,1054 @@ +plxPlugins->callHook('plxAdminConstruct')); + } + + /** + * Méthode qui applique un motif de recherche + * + * @param motif motif de recherche à appliquer + * @return null + * @author Stéphane F + **/ + public function prechauffage($motif='') { + $this->mode='admin'; + $this->motif=$motif; + $this->bypage=$this->aConf['bypage_admin']; + } + + /** + * Méthode qui récupère le numéro de la page active + * + * @return null + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function getPage() { + + # Initialisation + $pageName = basename($_SERVER['PHP_SELF']); + $savePage = preg_match('/admin\/(index|comments).php/', $_SERVER['PHP_SELF']); + # On check pour avoir le numero de page + if(!empty($_GET['page']) AND is_numeric($_GET['page']) AND $_GET['page'] > 0) + $this->page = $_GET['page']; + elseif($savePage) { + if(!empty($_POST['sel_cat'])) + $this->page = 1; + else + $this->page = !empty($_SESSION['page'][$pageName])?intval($_SESSION['page'][$pageName]):1; + } + # On sauvegarde + if($savePage) $_SESSION['page'][$pageName] = $this->page; + } + + /** + * Méthode qui édite le fichier XML de configuration selon le tableau $global et $content + * + * @param global tableau contenant toute la configuration PluXml + * @param content tableau contenant la configuration à modifier + * @return string + * @author Florent MONTHEL + **/ + public function editConfiguration($global,$content) { + + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditConfiguration')); + + foreach($content as $k=>$v) { + if(!in_array($k,array('token','config_path'))) # parametres à ne pas mettre dans le fichier + $global[$k] = $v; + } + # On teste la clef + if(empty($global['clef'])) $global['clef'] = plxUtils::charAleatoire(15); + + # Début du fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($global as $k=>$v) { + if($k!='racine') { + if(is_numeric($v)) + $xml .= "\t".$v."\n"; + else + $xml .= "\t\n"; + } + } + $xml .= ""; + + # On réinitialise la pagination au cas où modif de bypage_admin + unset($_SESSION['page']); + + # Actions sur le fichier htaccess + if(isset($content['urlrewriting'])) + $this->htaccess($content['urlrewriting'], $global['racine']); + + + # Mise à jour du fichier parametres.xml + if(!plxUtils::write($xml,path('XMLFILE_PARAMETERS'))) + return plxMsg::Error(L_SAVE_ERR.' '.path('XMLFILE_PARAMETERS')); + + # Si nouvel emplacement du dossier de configuration + if(isset($content['config_path'])) { + $newpath=trim($content['config_path']); + if($newpath!=PLX_CONFIG_PATH) { + # relocalisation du dossier de configuration de PluXml + if(!rename(PLX_ROOT.PLX_CONFIG_PATH,PLX_ROOT.$newpath)) + return plxMsg::Error(sprintf(L_WRITE_NOT_ACCESS, $newpath)); + # mise à jour du fichier de configuration config.php + if(!plxUtils::write("", PLX_ROOT.'config.php')) + return plxMsg::Error(L_SAVE_ERR.' config.php'); + } + } + + # changement de la langue en session + $_SESSION['lang'] = $global['default_lang']; + + return plxMsg::Info(L_SAVE_SUCCESSFUL); + + } + + /** + * Méthode qui crée le fichier .htaccess en cas de réécriture d'urls + * + * @param action création (add) ou suppression (remove) + * @param url url du site + * @return null + * @author Stephane F, Amaury Graillat + **/ + public function htaccess($action, $url) { + + $base = parse_url($url); + +$plxhtaccess = ' +# BEGIN -- Pluxml +Options -Multiviews + +RewriteEngine on +RewriteBase '.$base['path'].' +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_FILENAME} !-l +# Réécriture des urls +RewriteRule ^(?!feed)(.*)$ index.php?$1 [L] +RewriteRule ^feed\/(.*)$ feed.php?$1 [L] + + + Order allow,deny + Deny from all + +# END -- Pluxml +'; + + $htaccess = ''; + if(is_file(PLX_ROOT.'.htaccess')) + $htaccess = file_get_contents(PLX_ROOT.'.htaccess'); + + switch($action) { + case '0': # désactivation + if(preg_match("/^(.*)(# BEGIN -- Pluxml.*# END -- Pluxml)(.*)$/ms", $htaccess, $capture)) + $htaccess = str_replace($capture[2], '', $htaccess); + break; + case '1': # activation + if(preg_match("/^(.*)(# BEGIN -- Pluxml.*# END -- Pluxml)(.*)$/ms", $htaccess, $capture)) + $htaccess = trim($capture[1]).$plxhtaccess.trim($capture[3]); + else + $htaccess .= $plxhtaccess; + break; + } + + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminHtaccess')); + # On écrit le fichier .htaccess à la racine de PluXml + $htaccess = trim($htaccess); + if($htaccess=='' AND is_file(PLX_ROOT.'.htaccess')) + unlink(PLX_ROOT.'.htaccess'); + else + plxUtils::write($htaccess, PLX_ROOT.'.htaccess'); + + } + + /** + * Méthode qui control l'accès à une page en fonction du profil de l'utilisateur connecté + * + * @param profil profil(s) autorisé(s) + * @param redirect si VRAI redirige sur la page index.php en cas de mauvais profil(s) + * @return null + * @author Stephane F + **/ + public function checkProfil($profil, $redirect=true) { + $args = func_get_args(); + if($redirect===true or $redirect===false) $args=$args[0]; + if($redirect) { + if(is_array($args)) { + if(!in_array($_SESSION['profil'], $args)) { + plxMsg::Error(L_NO_ENTRY); + header('Location: index.php'); + exit; + } + } else { + if($_SESSION['profil']!=$profil) { + plxMsg::Error(L_NO_ENTRY); + header('Location: index.php'); + exit; + } + } + } else { + if(is_array($args)) + return in_array($_SESSION['profil'], $args); + else + return $_SESSION['profil']==$profil; + } + } + + /** + * Méthode qui édite le profil d'un utilisateur + * + * @param content tableau contenant les informations sur l'utilisateur + * @return string + * @author Stéphane F + **/ + public function editProfil($content) { + + if(isset($content['profil']) AND trim($content['name'])=='') + return plxMsg::Error(L_ERR_USER_EMPTY); + + if(trim($content['email'])!='' AND !plxUtils::checkMail(trim($content['email']))) + return plxMsg::Error(L_ERR_INVALID_EMAIL); + + if(!in_array($content['lang'], plxUtils::getLangs())) + return plxMsg::Error(L_UNKNOWN_ERROR); + + $this->aUsers[$_SESSION['user']]['name'] = trim($content['name']); + $this->aUsers[$_SESSION['user']]['infos'] = trim($content['content']); + $this->aUsers[$_SESSION['user']]['email'] = trim($content['email']); + $this->aUsers[$_SESSION['user']]['lang'] = $content['lang']; + + $_SESSION['lang'] = $content['lang']; + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxAdminEditProfil'))) return; + return $this->editUsers(null, true); + } + + /** + * Méthode qui édite le mot de passe d'un utilisateur + * + * @param content tableau contenant le nouveau mot de passe de l'utilisateur + * @return string + * @author Stéphane F + **/ + public function editPassword($content) { + + if(trim($content['password1'])=='' OR trim($content['password1'])!=trim($content['password2'])) + return plxMsg::Error(L_ERR_PASSWORD_EMPTY_CONFIRMATION); + + $salt = $this->aUsers[$_SESSION['user']]['salt']; + $this->aUsers[$_SESSION['user']]['password'] = sha1($salt.md5($content['password1'])); + return $this->editUsers(null, true); + + } + + /** + * Méthode qui édite le fichier XML des utilisateurs + * + * @param content tableau les informations sur les utilisateurs + * @return string + * @author Stéphane F + **/ + public function editUsers($content, $action=false) { + + $save = $this->aUsers; + + # suppression + if(!empty($content['selection']) AND $content['selection']=='delete' AND isset($content['idUser'])) { + foreach($content['idUser'] as $user_id) { + if($content['selection']=='delete' AND $user_id!='001') { + $this->aUsers[$user_id]['delete']=1; + $action = true; + } + } + } + # mise à jour de la liste des utilisateurs + elseif(!empty($content['update'])) { + + foreach($content['userNum'] as $user_id) { + $username = trim($content[$user_id.'_name']); + if($username!='' AND trim($content[$user_id.'_login'])!='') { + + # control du mot de passe + $salt = plxUtils::charAleatoire(10); + if(trim($content[$user_id.'_password'])!='') + $password=sha1($salt.md5($content[$user_id.'_password'])); + elseif(isset($content[$user_id.'_newuser'])) { + $this->aUsers = $save; + return plxMsg::Error(L_ERR_PASSWORD_EMPTY.' ('.L_CONFIG_USER.' '.$username.')'); + } + else { + $salt = $this->aUsers[$user_id]['salt']; + $password = $this->aUsers[$user_id]['password']; + } + + $this->aUsers[$user_id]['login'] = trim($content[$user_id.'_login']); + $this->aUsers[$user_id]['name'] = trim($content[$user_id.'_name']); + $this->aUsers[$user_id]['active'] = ($_SESSION['user']==$user_id?$this->aUsers[$user_id]['active']:$content[$user_id.'_active']); + $this->aUsers[$user_id]['profil'] = ($_SESSION['user']==$user_id?$this->aUsers[$user_id]['profil']:$content[$user_id.'_profil']); + $this->aUsers[$user_id]['password'] = $password; + $this->aUsers[$user_id]['salt'] = $salt; + $this->aUsers[$user_id]['delete'] = (isset($this->aUsers[$user_id]['delete'])?$this->aUsers[$user_id]['delete']:0); + $this->aUsers[$user_id]['lang'] = (isset($this->aUsers[$user_id]['lang'])?$this->aUsers[$user_id]['lang']:$this->aConf['default_lang']); + $this->aUsers[$user_id]['email'] = (isset($this->aUsers[$user_id]['email'])?$this->aUsers[$user_id]['email']:''); + $this->aUsers[$user_id]['infos'] = (isset($this->aUsers[$user_id]['infos'])?$this->aUsers[$user_id]['infos']:''); + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditUsersUpdate')); + $action = true; + } + } + } + # sauvegarde + if($action) { + $users_name = array(); + $users_login = array(); + # On génére le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aUsers as $user_id => $user) { + + # control de l'unicité du nom de l'utilisateur + if(in_array($user['name'], $users_name)) { + $this->aUsers = $save; + return plxMsg::Error(L_ERR_USERNAME_ALREADY_EXISTS.' : '.plxUtils::strCheck($user['name'])); + } + else + $users_name[] = $user['name']; + + # control de l'unicité du login de l'utilisateur + if(in_array($user['login'], $users_login)) + return plxMsg::Error(L_ERR_LOGIN_ALREADY_EXISTS.' : '.plxUtils::strCheck($user['login'])); + else + $users_login[] = $user['login']; + + $xml .= "\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditUsersXml')); + $xml .= "\t\n"; + } + $xml .= ""; + + # On écrit le fichier + if(plxUtils::write($xml,path('XMLFILE_USERS'))) + return plxMsg::Info(L_SAVE_SUCCESSFUL); + else { + $this->aUsers = $save; + return plxMsg::Error(L_SAVE_ERR.' '.path('XMLFILE_USERS')); + } + } + } + + /** + * Méthode qui sauvegarde le contenu des options d'un utilisateur + * + * @param content données à sauvegarder + * @return string + * @author Stephane F. + **/ + public function editUser($content) { + + # control de l'adresse email + if(trim($content['email'])!='' AND !plxUtils::checkMail(trim($content['email']))) + return plxMsg::Error(L_ERR_INVALID_EMAIL); + + # control de la langue sélectionnée + if(!in_array($content['lang'], plxUtils::getLangs())) + return plxMsg::Error(L_UNKNOWN_ERROR); + + $this->aUsers[$content['id']]['email'] = $content['email']; + $this->aUsers[$content['id']]['infos'] = trim($content['content']); + $this->aUsers[$content['id']]['lang'] = $content['lang']; + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditUser')); + return $this->editUsers(null,true); + } + + /** + * Méthode qui retourne le prochain id d'une catégorie + * + * @return string id d'un nouvel article sous la forme 001 + * @author Stephane F. + **/ + public function nextIdCategory() { + if(is_array($this->aCats)) { + $idx = key(array_slice($this->aCats, -1, 1, true)); + return str_pad($idx+1,3, '0', STR_PAD_LEFT); + } else { + return '001'; + } + } + + /** + * Méthode qui édite le fichier XML des catégories selon le tableau $content + * + * @param content tableau multidimensionnel des catégories + * @param action permet de forcer la mise àjour du fichier + * @return string + * @author Stephane F + **/ + public function editCategories($content, $action=false) { + + $save = $this->aCats; + + # suppression + if(!empty($content['selection']) AND $content['selection']=='delete' AND isset($content['idCategory'])) { + foreach($content['idCategory'] as $cat_id) { + unset($this->aCats[$cat_id]); + $action = true; + } + } + # ajout nouvelle catégorie à partir de la page article + elseif(!empty($content['new_category'])) { + $cat_name = $content['new_catname']; + if($cat_name!='') { + $cat_id = $this->nextIdCategory(); + $this->aCats[$cat_id]['name'] = $cat_name; + $this->aCats[$cat_id]['url'] = plxUtils::title2url($cat_name); + $this->aCats[$cat_id]['tri'] = $this->aConf['tri']; + $this->aCats[$cat_id]['bypage'] = $this->aConf['bypage']; + $this->aCats[$cat_id]['menu'] = 'oui'; + $this->aCats[$cat_id]['active'] = 1; + $this->aCats[$cat_id]['homepage'] = 1; + $this->aCats[$cat_id]['description'] = ''; + $this->aCats[$cat_id]['template'] = 'categorie.php'; + $this->aCats[$cat_id]['title_htmltag'] = ''; + $this->aCats[$cat_id]['meta_description'] = ''; + $this->aCats[$cat_id]['meta_keywords'] = ''; + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditCategoriesNew')); + $action = true; + } + } + # mise à jour de la liste des catégories + elseif(!empty($content['update'])) { + foreach($content['catNum'] as $cat_id) { + $cat_name = $content[$cat_id.'_name']; + if($cat_name!='') { + $cat_url = (isset($content[$cat_id.'_url'])?trim($content[$cat_id.'_url']):''); + $cat_url = ($cat_url!='' ? plxUtils::title2url($cat_url) : plxUtils::title2url($cat_name)); + if($cat_url=='') $cat_url = L_DEFAULT_NEW_CATEGORY_URL; + $this->aCats[$cat_id]['name'] = $cat_name; + $this->aCats[$cat_id]['url'] = $cat_url; + $this->aCats[$cat_id]['tri'] = $content[$cat_id.'_tri']; + $this->aCats[$cat_id]['bypage'] = intval($content[$cat_id.'_bypage']); + $this->aCats[$cat_id]['menu'] = $content[$cat_id.'_menu']; + $this->aCats[$cat_id]['active'] = $content[$cat_id.'_active']; + $this->aCats[$cat_id]['ordre'] = intval($content[$cat_id.'_ordre']); + $this->aCats[$cat_id]['homepage'] = (isset($this->aCats[$cat_id]['homepage'])?$this->aCats[$cat_id]['homepage']:1); + $this->aCats[$cat_id]['description'] = (isset($this->aCats[$cat_id]['description'])?$this->aCats[$cat_id]['description']:''); + $this->aCats[$cat_id]['template'] = (isset($this->aCats[$cat_id]['template'])?$this->aCats[$cat_id]['template']:'categorie.php'); + $this->aCats[$cat_id]['title_htmltag'] = (isset($this->aCats[$cat_id]['title_htmltag'])?$this->aCats[$cat_id]['title_htmltag']:''); + $this->aCats[$cat_id]['meta_description'] = (isset($this->aCats[$cat_id]['meta_description'])?$this->aCats[$cat_id]['meta_description']:''); + $this->aCats[$cat_id]['meta_keywords'] = (isset($this->aCats[$cat_id]['meta_keywords'])?$this->aCats[$cat_id]['meta_keywords']:''); + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditCategoriesUpdate')); + $action = true; + } + } + # On va trier les clés selon l'ordre choisi + if(sizeof($this->aCats)>0) uasort($this->aCats, create_function('$a, $b', 'return $a["ordre"]>$b["ordre"];')); + } + # sauvegarde + if($action) { + $cats_name = array(); + $cats_url = array(); + # On génére le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aCats as $cat_id => $cat) { + + # control de l'unicité du nom de la categorie + if(in_array($cat['name'], $cats_name)) { + $this->aCats = $save; + return plxMsg::Error(L_ERR_CATEGORY_ALREADY_EXISTS.' : '.plxUtils::strCheck($cat['name'])); + } + else + $cats_name[] = $cat['name']; + + # control de l'unicité de l'url de la catégorie + if(in_array($cat['url'], $cats_url)) + return plxMsg::Error(L_ERR_URL_ALREADY_EXISTS.' : '.plxUtils::strCheck($cat['url'])); + else + $cats_url[] = $cat['url']; + + $xml .= "\t"; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + eval($this->plxPlugins->callHook('plxAdminEditCategoriesXml')); + $xml .= "\n"; + } + $xml .= ""; + # On écrit le fichier + if(plxUtils::write($xml,path('XMLFILE_CATEGORIES'))) + return plxMsg::Info(L_SAVE_SUCCESSFUL); + else { + $this->aCats = $save; + return plxMsg::Error(L_SAVE_ERR.' '.path('XMLFILE_CATEGORIES')); + } + } + } + + /** + * Méthode qui sauvegarde le contenu des options d'une catégorie + * + * @param content données à sauvegarder + * @return string + * @author Stephane F. + **/ + public function editCategorie($content) { + # Mise à jour du fichier categories.xml + $this->aCats[$content['id']]['homepage'] = intval($content['homepage']); + $this->aCats[$content['id']]['description'] = trim($content['content']); + $this->aCats[$content['id']]['template'] = $content['template']; + $this->aCats[$content['id']]['title_htmltag'] = trim($content['title_htmltag']); + $this->aCats[$content['id']]['meta_description'] = trim($content['meta_description']); + $this->aCats[$content['id']]['meta_keywords'] = trim($content['meta_keywords']); + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditCategorie')); + return $this->editCategories(null,true); + } + + /** + * Méthode qui édite le fichier XML des pages statiques selon le tableau $content + * + * @param content tableau multidimensionnel des pages statiques + * @param action permet de forcer la mise àjour du fichier + * @return string + * @author Stephane F. + **/ + public function editStatiques($content, $action=false) { + + $save = $this->aStats; + + # suppression + if(!empty($content['selection']) AND $content['selection']=='delete' AND isset($content['idStatic'])) { + foreach($content['idStatic'] as $static_id) { + $filename = PLX_ROOT.$this->aConf['racine_statiques'].$static_id.'.'.$this->aStats[$static_id]['url'].'.php'; + if(is_file($filename)) unlink($filename); + # si la page statique supprimée est la page d'accueil on met à jour le parametre + if($static_id==$this->aConf['homestatic']) { + $this->aConf['homestatic']=''; + $this->editConfiguration($this->aConf,$this->aConf); + } + unset($this->aStats[$static_id]); + $action = true; + } + } + # mise à jour de la liste des pages statiques + elseif(!empty($content['update'])) { + foreach($content['staticNum'] as $static_id) { + $stat_name = $content[$static_id.'_name']; + if($stat_name!='') { + $url = (isset($content[$static_id.'_url'])?trim($content[$static_id.'_url']):''); + $stat_url = ($url!=''?plxUtils::title2url($url):plxUtils::title2url($stat_name)); + if($stat_url=='') $stat_url = L_DEFAULT_NEW_STATIC_URL; + # On vérifie si on a besoin de renommer le fichier de la page statique + if(isset($this->aStats[$static_id]) AND $this->aStats[$static_id]['url']!=$stat_url) { + $oldfilename = PLX_ROOT.$this->aConf['racine_statiques'].$static_id.'.'.$this->aStats[$static_id]['url'].'.php'; + $newfilename = PLX_ROOT.$this->aConf['racine_statiques'].$static_id.'.'.$stat_url.'.php'; + if(is_file($oldfilename)) rename($oldfilename, $newfilename); + } + $this->aStats[$static_id]['group'] = trim($content[$static_id.'_group']); + $this->aStats[$static_id]['name'] = $stat_name; + $this->aStats[$static_id]['url'] = plxUtils::checkSite($url)?$url:$stat_url; + $this->aStats[$static_id]['active'] = $content[$static_id.'_active']; + $this->aStats[$static_id]['menu'] = $content[$static_id.'_menu']; + $this->aStats[$static_id]['ordre'] = intval($content[$static_id.'_ordre']); + $this->aStats[$static_id]['template'] = (isset($this->aStats[$static_id]['template'])?$this->aStats[$static_id]['template']:'static.php'); + $this->aStats[$static_id]['title_htmltag'] = (isset($this->aStats[$static_id]['title_htmltag'])?$this->aStats[$static_id]['title_htmltag']:''); + $this->aStats[$static_id]['meta_description'] = (isset($this->aStats[$static_id]['meta_description'])?$this->aStats[$static_id]['meta_description']:''); + $this->aStats[$static_id]['meta_keywords'] = (isset($this->aStats[$static_id]['meta_keywords'])?$this->aStats[$static_id]['meta_keywords']:''); + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditStatiquesUpdate')); + $action = true; + } + } + # On va trier les clés selon l'ordre choisi + if(sizeof($this->aStats)>0) uasort($this->aStats, create_function('$a, $b', 'return $a["ordre"]>$b["ordre"];')); + } + # sauvegarde + if($action) { + $statics_name = array(); + $statics_url = array(); + # On génére le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aStats as $static_id => $static) { + + # control de l'unicité du titre de la page + if(in_array($static['name'], $statics_name)) + return plxMsg::Error(L_ERR_STATIC_ALREADY_EXISTS.' : '.plxUtils::strCheck($static['name'])); + else + $statics_name[] = $static['name']; + + # control de l'unicité de l'url de la page + if(in_array($static['url'], $statics_url)) { + $this->aStats = $save; + return plxMsg::Error(L_ERR_URL_ALREADY_EXISTS.' : '.plxUtils::strCheck($static['url'])); + } + else + $statics_url[] = $static['url']; + + $xml .= "\t"; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditStatiquesXml')); + $xml .= "\n"; + } + $xml .= ""; + # On écrit le fichier si une action valide a été faite + if(plxUtils::write($xml,path('XMLFILE_STATICS'))) + return plxMsg::Info(L_SAVE_SUCCESSFUL); + else { + $this->aStats = $save; + return plxMsg::Error(L_SAVE_ERR.' '.path('XMLFILE_STATICS')); + } + } + } + + /** + * Méthode qui lit le fichier d'une page statique + * + * @param num numero du fichier de la page statique + * @return string contenu de la page + * @author Stephane F. + **/ + public function getFileStatique($num) { + + # Emplacement de la page + $filename = PLX_ROOT.$this->aConf['racine_statiques'].$num.'.'.$this->aStats[ $num ]['url'].'.php'; + if(file_exists($filename) AND filesize($filename) > 0) { + if($f = fopen($filename, 'r')) { + $content = fread($f, filesize($filename)); + fclose($f); + # On retourne le contenu + return $content; + } + } + return null; + } + + /** + * Méthode qui sauvegarde le contenu d'une page statique + * + * @param content données à sauvegarder + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function editStatique($content) { + + # Mise à jour du fichier statiques.xml + $this->aStats[$content['id']]['template'] = $content['template']; + $this->aStats[$content['id']]['title_htmltag'] = trim($content['title_htmltag']); + $this->aStats[$content['id']]['meta_description'] = trim($content['meta_description']); + $this->aStats[$content['id']]['meta_keywords'] = trim($content['meta_keywords']); + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditStatique')); + if($this->editStatiques(null,true)) { + # Génération du nom du fichier de la page statique + $filename = PLX_ROOT.$this->aConf['racine_statiques'].$content['id'].'.'.$this->aStats[ $content['id'] ]['url'].'.php'; + # On écrit le fichier + if(plxUtils::write($content['content'],$filename)) + return plxMsg::Info(L_SAVE_SUCCESSFUL); + else + return plxMsg::Error(L_SAVE_ERR.' '.$filename); + } + } + + /** + * Méthode qui retourne le prochain id d'un article + * + * @return string id d'un nouvel article sous la forme 0001 + * @author Stephane F. + **/ + public function nextIdArticle() { + + if($aKeys = array_keys($this->plxGlob_arts->aFiles)) { + rsort($aKeys); + return str_pad($aKeys['0']+1,4, '0', STR_PAD_LEFT); + } else { + return '0001'; + } + } + + /** + * Méthode qui effectue une création ou mise a jour d'un article + * + * @param content données saisies de l'article + * @param &id retourne le numero de l'article + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function editArticle($content, &$id) { + + # Détermine le numero de fichier si besoin est + if($id == '0000' OR $id == '') + $id = $this->nextIdArticle(); + + # Vérification de l'intégrité de l'identifiant + if(!preg_match('/^_?[0-9]{4}$/',$id)) { + $id=''; + return L_ERR_INVALID_ARTICLE_IDENT; + } + + # Génération de notre url d'article + if(trim($content['url']) == '') + $content['url'] = plxUtils::title2url($content['title']); + else + $content['url'] = plxUtils::title2url($content['url']); + # URL vide après le passage de la fonction ;) + if($content['url'] == '') $content['url'] = L_DEFAULT_NEW_ARTICLE_URL; + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxAdminEditArticle'))) return; + + # Génération du fichier XML + $xml = "\n"; + $xml .= "\n"; + $xml .= "\t".'<![CDATA['.plxUtils::cdataCheck(trim($content['title'])).']]>'."\n"; + $xml .= "\t".''.$content['allow_com'].''."\n"; + $xml .= "\t".''."\n"; + $xml .= "\t".''."\n"; + $xml .= "\t".''."\n"; + $xml .= "\t".''."\n"; + $meta_description = plxUtils::getValue($content['meta_description']); + $xml .= "\t".''."\n"; + $meta_keywords = plxUtils::getValue($content['meta_keywords']); + $xml .= "\t".''."\n"; + $title_htmltag = plxUtils::getValue($content['title_htmltag']); + $xml .= "\t".''."\n"; + + # Hook plugins + eval($this->plxPlugins->callHook('plxAdminEditArticleXml')); + $xml .= "\n"; + # Recherche du nom du fichier correspondant à l'id + $oldArt = $this->plxGlob_arts->query('/^'.$id.'.(.*).xml$/','','sort',0,1,'all'); + + # Si demande de modération de l'article + if(isset($content['moderate'])) + $id = '_'.str_replace('_','',$id); + # Si demande de publication + if(isset($content['publish']) OR isset($content['draft'])) + $id = str_replace('_','',$id); + + # On genère le nom de notre fichier + $time = $content['year'].$content['month'].$content['day'].substr(str_replace(':','',$content['time']),0,4); + if(!preg_match('/^[0-9]{12}$/',$time)) $time = date('YmdHi'); # Check de la date au cas ou... + if(empty($content['catId'])) $content['catId']=array('000'); # Catégorie non classée + $filename = PLX_ROOT.$this->aConf['racine_articles'].$id.'.'.implode(',', $content['catId']).'.'.trim($content['author']).'.'.$time.'.'.$content['url'].'.xml'; + # On va mettre à jour notre fichier + if(plxUtils::write($xml,$filename)) { + # suppression ancien fichier si nécessaire + if($oldArt) { + $oldfilename = PLX_ROOT.$this->aConf['racine_articles'].$oldArt['0']; + if($oldfilename!=$filename AND file_exists($oldfilename)) + unlink($oldfilename); + } + # mise à jour de la liste des tags + $this->aTags[$id] = array('tags'=>trim($content['tags']), 'date'=>$time, 'active'=>intval(!in_array('draft', $content['catId']))); + $this->editTags(); + if($content['artId'] == '0000' OR $content['artId'] == '') + return plxMsg::Info(L_ARTICLE_SAVE_SUCCESSFUL); + else + return plxMsg::Info(L_ARTICLE_MODIFY_SUCCESSFUL); + } else { + return plxMsg::Error(L_ARTICLE_SAVE_ERR); + } + } + + /** + * Méthode qui supprime un article et les commentaires associés + * + * @param id numero de l'article à supprimer + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function delArticle($id) { + + # Vérification de l'intégrité de l'identifiant + if(!preg_match('/^_?[0-9]{4}$/',$id)) + return L_ERR_INVALID_ARTICLE_IDENT; + # Variable d'état + $resDelArt = $resDelCom = true; + # Suppression de l'article + if($globArt = $this->plxGlob_arts->query('/^'.$id.'.(.*).xml$/')) { + unlink(PLX_ROOT.$this->aConf['racine_articles'].$globArt['0']); + $resDelArt = !file_exists(PLX_ROOT.$this->aConf['racine_articles'].$globArt['0']); + } + # Suppression des commentaires + if($globComs = $this->plxGlob_coms->query('/^_?'.str_replace('_','',$id).'.(.*).xml$/')) { + $nb_coms=sizeof($globComs); + for($i=0; $i<$nb_coms; $i++) { + unlink(PLX_ROOT.$this->aConf['racine_commentaires'].$globComs[$i]); + $resDelCom = (!file_exists(PLX_ROOT.$this->aConf['racine_commentaires'].$globComs[$i]) AND $resDelCom); + } + } + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxAdminDelArticle'))) return; + + # On renvoi le résultat + if($resDelArt AND $resDelCom) { + # mise à jour de la liste des tags + if(isset($this->aTags[$id])) { + unset($this->aTags[$id]); + $this->editTags(); + } + return plxMsg::Info(L_ARTICLE_DELETE_SUCCESSFUL); + } + else + return plxMsg::Error(L_ARTICLE_DELETE_ERR); + } + + /** + * Méthode qui crée un nouveau commentaire pour l'article $artId + * + * @param artId identifiant de l'article en question + * @param content string contenu du nouveau commentaire + * @return booléen + * @author Florent MONTHEL, Stéphane F + **/ + public function newCommentaire($artId,$content) { + + # On génère le contenu du commentaire + $comment=array(); + $comment['author'] = plxUtils::strCheck($this->aUsers[$_SESSION['user']]['name']); + $comment['content'] = strip_tags(trim($content),','); + $comment['site'] = $this->racine; + $comment['ip'] = plxUtils::getIp(); + $comment['type'] = 'admin'; + $comment['mail'] = $this->aUsers[$_SESSION['user']]['email']; + $time = time(); + # On genere le nom du fichier selon l'existence ou non d'un fichier du meme nom + $i = 0; + do { # On boucle en testant l'existence du fichier (cas de plusieurs commentaires/sec pour un article) + $i++; + $comment['filename'] = $artId.'.'.$time.'-'.$i.'.xml'; + } while(file_exists($comment['filename'])); + # On peut creer le commentaire + if($this->addCommentaire($comment)) # Commentaire OK + return true; + else + return false; + } + + /** + * Méthode qui effectue une mise a jour d'un commentaire + * + * @param content données du commentaire à mettre à jour + * @param id identifiant du commentaire + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function editCommentaire($content, &$id) { + + # Vérification de la validité de la date de publication + if(!plxDate::checkDate($content['day'],$content['month'],$content['year'],$content['time'])) + return plxMsg::Error(L_ERR_INVALID_PUBLISHING_DATE); + + $comment=array(); + # Génération du nom du fichier + $comment['filename'] = $id.'.xml'; + if(!file_exists(PLX_ROOT.$this->aConf['racine_commentaires'].$comment['filename'])) # Commentaire inexistant + return plxMsg::Error(L_ERR_UNKNOWN_COMMENT); + # Controle des saisies + if(trim($content['mail'])!='' AND !plxUtils::checkMail(trim($content['mail']))) + return plxMsg::Error(L_ERR_INVALID_EMAIL); + if(trim($content['site'])!='' AND !plxUtils::checkSite($content['site'])) + return plxMsg::Error(L_ERR_INVALID_SITE); + # On récupère les infos du commentaire + $com = $this->parseCommentaire(PLX_ROOT.$this->aConf['racine_commentaires'].$comment['filename']); + # Formatage des données + $comment['author'] = plxUtils::strCheck(trim($content['author'])); + $comment['site'] = plxUtils::strCheck(trim($content['site'])); + if($com['type'] != 'admin') + $comment['content'] = plxUtils::strCheck(trim($content['content'])); + else + $comment['content'] = strip_tags(trim($content['content']),','); + $comment['ip'] = $com['ip']; + $comment['type'] = $com['type']; + $comment['mail'] = $content['mail']; + $comment['site'] = $content['site']; + # Génération du nouveau nom du fichier + $time = explode(':', $content['time']); + $newtimestamp = mktime($time[0], $time[1], 0, $content['month'], $content['day'], $content['year']); + $com = $this->comInfoFromFilename($id.'.xml'); + $newid = $com['comStatus'].$com['artId'].'.'.$newtimestamp.'-'.$com['comIdx']; + $comment['filename'] = $newid.'.xml'; + # Suppression de l'ancien commentaire + $this->delCommentaire($id); + # Création du nouveau commentaire + $id = $newid; + if($this->addCommentaire($comment)) + return plxMsg::Info(L_COMMENT_SAVE_SUCCESSFUL); + else + return plxMsg::Error(L_COMMENT_UPDATE_ERR); + } + + /** + * Méthode qui supprime un commentaire + * + * @param id identifiant du commentaire à supprimer + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function delCommentaire($id) { + + # Génération du nom du fichier + $filename = PLX_ROOT.$this->aConf['racine_commentaires'].$id.'.xml'; + # Suppression du commentaire + if(file_exists($filename)) { + unlink($filename); + } + + if(!file_exists($filename)) + return plxMsg::Info(L_COMMENT_DELETE_SUCCESSFUL); + else + return plxMsg::Error(L_COMMENT_DELETE_ERR); + } + + /** + * Méthode qui permet de modérer ou valider un commentaire + * + * @param id identifiant du commentaire à traiter (que l'on retourne) + * @param mod type de moderation (online ou offline) + * @return string + * @author Stephane F. et Florent MONTHEL + **/ + public function modCommentaire(&$id, $mod) { + + # Génération du nom du fichier + $oldfilename = PLX_ROOT.$this->aConf['racine_commentaires'].$id.'.xml'; + if(!file_exists($oldfilename)) # Commentaire inexistant + return plxMsg::Error(L_ERR_UNKNOWN_COMMENT); + # Modérer ou valider ? + if(preg_match('/([[:punct:]]?)[0-9]{4}.[0-9]{10}-[0-9]+$/',$id,$capture)) { + $id=str_replace($capture[1],'',$id); + } + if($mod=='offline') + $id = '_'.$id; + # Génération du nouveau nom de fichier + $newfilename = PLX_ROOT.$this->aConf['racine_commentaires'].$id.'.xml'; + # On renomme le fichier + @rename($oldfilename,$newfilename); + # Contrôle + if(is_readable($newfilename)) { + if($type == 'online') + return plxMsg::Info(L_COMMENT_VALIDATE_SUCCESSFUL); + else + return plxMsg::Info(L_COMMENT_MODERATE_SUCCESSFUL); + } else { + if($type == 'online') + return plxMsg::Error(L_COMMENT_VALIDATE_ERR); + else + return plxMsg::Error(L_COMMENT_MODERATE_ERR); + } + } + + /** + * Méthode qui sauvegarde la liste des tags dans fichier XML + * selon le contenu de la variable de classe $aTags + * + * @param null + * @return null + * @author Stephane F + **/ + public function editTags() { + + # Génération du fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aTags as $id => $tag) { + $xml .= "\t".'
'."\n"; + } + $xml .= "
"; + + # On écrit le fichier + plxUtils::write($xml, path('XMLFILE_TAGS')); + + } + + /** + * Méthode qui vérifie sur le site de PluXml la dernière version et la compare avec celle en local + * + * @return string message contenant l'etat du control du numéro de version + * @author Florent MONTHEL, Amaury GRAILLAT et Stephane F + **/ + public function checkMaj() { + + # La fonction est active ? + if(!ini_get('allow_url_fopen')) return L_PLUXML_UPDATE_UNAVAILABLE; + $latest_version = ''; + + # Requete HTTP sur le site de PluXml + if($fp = @fopen('http://telechargements.pluxml.org/latest-version', 'r')) { + $latest_version = trim(fread($fp, 16)); + fclose($fp); + } + if($latest_version == '') + return L_PLUXML_UPDATE_ERR; + + # Comparaison + if(version_compare($this->version, $latest_version, ">=")) + return L_PLUXML_UPTODATE.' ('.$this->version.')'; + else + return L_PLUXML_UPDATE_AVAILABLE.'
PluXml.org'; + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.capcha.php b/src/core/lib/class.plx.capcha.php new file mode 100644 index 0000000..cc07614 --- /dev/null +++ b/src/core/lib/class.plx.capcha.php @@ -0,0 +1,117 @@ +word = $this->createWord(); + $this->num = $this->chooseNum(); + $this->numletter = $this->num2letter(); + } + + /** + * Méthode qui génère un mot + * + * @param min longueur mini du mot + * @param max longueur maxi du mot + * @return string mot composant le capcha + * @author Anthony GUÉRIN, Stephane F + **/ + public function createWord($min=4, $max=6) { + + # On genere une taille compris entre min et max + $size = mt_rand($min,$max); + # Definition de l'alphabet + $alphabet = 'abcdefghijklmnopqrstuvwxyz'; + $size_a = strlen($alphabet); + # On genere un tableau word + $word=''; + for($i = 0; $i < $size; $i++) + $word .= $alphabet[mt_rand(0,$size_a-1)]; + # On retourne la valeur + return $word; + } + + /** + * Méthode qui choisit un numéro de lettre dans le mot chois + * + * @return int + * @author Anthony GUÉRIN + **/ + public function chooseNum() { + + # On choisit un numero entre 1 et la taille du mot + return mt_rand(1,strlen($this->word)); + } + + /** + * Méthode qui convertit le numéro en chaîne de caractère + * + * @return int + * @author Anthony GUÉRIN + **/ + public function num2letter() { + + # Num = derniere lettre du mot + if($this->num == strlen($this->word)) + return L_LAST; + # On genere un tableau associatif + $array = array( + '1' => L_FIRST, + '2' => L_SECOND, + '3' => L_THIRD, + '4' => L_FOURTH, + '5' => L_FIFTH, + '6' => L_SIXTH, + '7' => L_SEVENTH, + '8' => L_EIGTH, + '9' => L_NINTH, + '10' => L_TENTH); + # La valeur existe dans le tableau + if(isset($array[ $this->num ])) + return $array[ $this->num ]; + else # Sinon on retourne une valeur generique + return $this->num.L_NTH; + } + + /** + * Méthode qui génère la question du capcha + * + * @return string + * @author Anthony GUÉRIN, Stéphane F + **/ + public function q() { + # Generation de la question capcha + $_SESSION['capcha'] = sha1($this->word[$this->num-1]); + return sprintf(L_CAPCHA_QUESTION,$this->numletter,$this->word); + } + + /** + * Méthode qui retourne la réponse du capcha (sha1) + * DEPRECATED + * + **/ + public function r() { + # Generation du hash de la reponse + return sha1($this->word[$this->num-1]); + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.date.php b/src/core/lib/class.plx.date.php new file mode 100644 index 0000000..b44a704 --- /dev/null +++ b/src/core/lib/class.plx.date.php @@ -0,0 +1,167 @@ + L_JANUARY, + '02' => L_FEBRUARY, + '03' => L_MARCH, + '04' => L_APRIL, + '05' => L_MAY, + '06' => L_JUNE, + '07' => L_JULY, + '08' => L_AUGUST, + '09' => L_SEPTEMBER, + '10' => L_OCTOBER, + '11' => L_NOVEMBER, + '12' => L_DECEMBER); + $aShortMonth = array( + '01' => L_SHORT_JANUARY, + '02' => L_SHORT_FEBRUARY, + '03' => L_SHORT_MARCH, + '04' => L_SHORT_APRIL, + '05' => L_SHORT_MAY, + '06' => L_SHORT_JUNE, + '07' => L_SHORT_JULY, + '08' => L_SHORT_AUGUST, + '09' => L_SHORT_SEPTEMBER, + '10' => L_SHORT_OCTOBER, + '11' => L_SHORT_NOVEMBER, + '12' => L_SHORT_DECEMBER); + $aDay = array( + '1' => L_MONDAY, + '2' => L_TUESDAY, + '3' => L_WEDNESDAY, + '4' => L_THURSDAY, + '5' => L_FRIDAY, + '6' => L_SATURDAY, + '0' => L_SUNDAY); + + switch ($key) { + case 'day': + $day = isset($aDay[$value]) ? $aDay[$value] : ''; + return $day; break; + case 'month': + $month = isset($aMonth[$value]) ? $aMonth[$value] : ''; + return $month; break; + case 'short_month': + $short_month = isset($aShortMonth[$value]) ? $aShortMonth[$value] : ''; + return $short_month; break; + } + } + + /** + * Méthode qui formate l'affichage d'une date + * + * @param date date/heure au format YYYYMMDDHHMM + * @param format format d'affichage + * @return string date/heure formatée + * @author Stephane F. + **/ + public static function formatDate($date, $format='#num_day/#num_month/#num_year(4)') { + + # On decoupe notre date + $year4 = substr($date, 0, 4); + $year2 = substr($date, 2, 2); + $month = substr($date, 4, 2); + $day = substr($date, 6, 2); + $day_num = date('w',mktime(0,0,0,$month,$day,$year4)); + $hour = substr($date,8,2); + $minute = substr($date,10,2); + + # On retourne notre date au format humain + $format = str_replace('#minute', $minute, $format); + $format = str_replace('#hour', $hour, $format); + $format = str_replace('#day', plxDate::getCalendar('day', $day_num), $format); + $format = str_replace('#short_month', plxDate::getCalendar('short_month', $month), $format); + $format = str_replace('#month', plxDate::getCalendar('month', $month), $format); + $format = str_replace('#num_day', $day, $format); + $format = str_replace('#num_month', $month, $format); + $format = str_replace('#num_year(2)', $year2 , $format); + $format = str_replace('#num_year(4)', $year4 , $format); + return $format; + } + + /** + * Méthode qui convertis un timestamp en date/time + * + * @param timestamp timstamp au format unix + * @return string date au format YYYYMMDDHHMM + * @author Stephane F. + **/ + public static function timestamp2Date($timestamp) { + + return date('YmdHi', $timestamp); + + } + + /** + * Méthode qui éclate une date au format YYYYMMDDHHMM dans un tableau + * + * @param date date au format YYYYMMDDHHMM + * @return array tableau contenant le détail de la date + * @author Stephane F. + **/ + public static function date2Array($date) { + + preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9:]{2})([0-9:]{2})/',$date,$capture); + return array ( + 'year' => $capture[1], + 'month' => $capture[2], + 'day' => $capture[3], + 'hour' => $capture[4], + 'minute'=> $capture[5], + 'time' => $capture[4].':'.$capture[5] + ); + } + + /** + * Méthode qui vérifie la validité de la date et de l'heure + * + * @param int mois + * @param int jour + * @param int année + * @param int heure:minute + * @return boolean vrai si la date est valide + * @author Amaury Graillat + **/ + public static function checkDate($day, $month, $year, $time) { + + return (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])[1-2][0-9]{3}([0-1][0-9]|2[0-3])\:[0-5][0-9]$/",$day.$month.$year.$time) + AND checkdate($month, $day, $year)); + + } + + /** + * Fonction de conversion de date ISO en format RFC822 + * + * @param date date à convertir + * @return string date au format iso. + * @author Amaury GRAILLAT + **/ + public static function dateIso2rfc822($date) { + + $tmpDate = plxDate::date2Array($date); + return date(DATE_RSS, mktime(substr($tmpDate['time'],0,2), substr($tmpDate['time'],3,2), 0, $tmpDate['month'], $tmpDate['day'], $tmpDate['year'])); + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.encrypt.php b/src/core/lib/class.plx.encrypt.php new file mode 100644 index 0000000..9d1ddef --- /dev/null +++ b/src/core/lib/class.plx.encrypt.php @@ -0,0 +1,55 @@ + \ No newline at end of file diff --git a/src/core/lib/class.plx.erreur.php b/src/core/lib/class.plx.erreur.php new file mode 100644 index 0000000..c82bd17 --- /dev/null +++ b/src/core/lib/class.plx.erreur.php @@ -0,0 +1,39 @@ +message = $erreur; + } + + /** + * Méthode qui retourne le message d'erreur + * + * @return string + * @author Florent MONTHEL + **/ + public function getMessage() { + + # On retourne le message d'erreur + return $this->message; + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.feed.php b/src/core/lib/class.plx.feed.php new file mode 100644 index 0000000..96b4652 --- /dev/null +++ b/src/core/lib/class.plx.feed.php @@ -0,0 +1,434 @@ +getConfiguration($filename); + # Chargement du fichier de langue + loadLang(PLX_CORE.'lang/'.$this->aConf['default_lang'].'/core.php'); + # Contrôle de la présence du fichier 'version' de PluXml + if(!is_readable(PLX_ROOT.'version')) { + header('Content-Type: text/plain charset=UTF-8'); + printf(utf8_decode(L_FILE_VERSION_REQUIRED), PLX_ROOT); + exit; + } + # chargement du n° de version de PluXml + $f = file(PLX_ROOT.'version'); + $this->version = $f['0']; + # récupération des paramèters dans l'url + $this->get = plxUtils::getGets(); + # gestion du timezone + date_default_timezone_set($this->aConf['timezone']); + # chargement des variables + $this->racine = $this->aConf['racine']; + $this->bypage = $this->aConf['bypage_feed']; + $this->tri = 'desc'; + $this->clef = (!empty($this->aConf['clef']))?$this->aConf['clef']:''; + # Traitement des plugins + $this->plxPlugins = new plxPlugins($this->aConf['default_lang']); + $this->plxPlugins->loadPlugins(); + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedConstructLoadPlugins')); + # Traitement sur les répertoires des articles et des commentaires + $this->plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->aConf['racine_articles'],false,true,'arts'); + $this->plxGlob_coms = plxGlob::getInstance(PLX_ROOT.$this->aConf['racine_commentaires']); + # Récupération des données dans les autres fichiers xml + $this->getCategories(path('XMLFILE_CATEGORIES')); + $this->getUsers(path('XMLFILE_USERS')); + $this->getTags(path('XMLFILE_TAGS')); + # Récuperation des articles appartenant aux catégories actives + $this->getActiveArts(); + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedConstruct')); + } + + /** + * Méthode qui effectue une analyse de la situation et détermine + * le mode à appliquer. Cette méthode alimente ensuite les variables + * de classe adéquates + * + * @return null + * @author Florent MONTHEL, Stéphane F + **/ + public function fprechauffage() { + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxFeedPreChauffageBegin'))) return; + + if($this->get AND preg_match('#^(?:atom/|rss/)?categorie([0-9]+)/?$#',$this->get,$capture)) { + $this->mode = 'article'; # Mode du flux + # On récupère la catégorie cible + $this->cible = str_pad($capture[1],3,'0',STR_PAD_LEFT); # On complete sur 3 caracteres + # On modifie le motif de recherche + $this->motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$this->cible.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } + elseif($this->get AND preg_match('#^(?:atom/|rss/)?commentaires/?$#',$this->get)) { + $this->mode = 'commentaire'; # Mode du flux + } + elseif($this->get AND preg_match('#^(?:atom/|rss/)?tag\/([a-z0-9-]+)/?$#',$this->get,$capture)) { + $this->mode = 'tag'; + $this->cible = $capture[1]; + $ids = array(); + $datetime = date('YmdHi'); + foreach($this->aTags as $idart => $tag) { + if($tag['date']<=$datetime) { + $tags = array_map("trim", explode(',', $tag['tags'])); + $tagUrls = array_map(array('plxUtils', 'title2url'), $tags); + if(in_array($this->cible, $tagUrls)) { + if(!isset($ids[$idart])) $ids[$idart] = $idart; + if(!isset($cibleName)) { + $key = array_search($this->cible, $tagUrls); + $cibleName=$tags[$key]; + } + } + } + } + if(sizeof($ids)>0) { + $this->motif = '/('.implode('|', $ids).').(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } else + $this->motif = ''; + + } + elseif($this->get AND preg_match('#^(?:atom/|rss/)?commentaires/article([0-9]+)/?$#',$this->get,$capture)) { + $this->mode = 'commentaire'; # Mode du flux + # On recupere l'article cible + $this->cible = str_pad($capture[1],4,'0',STR_PAD_LEFT); # On complete sur 4 caracteres + # On modifie le motif de recherche + $this->motif = '/^'.$this->cible.'.(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } + elseif($this->get AND preg_match('#^admin([a-zA-Z0-9]+)/commentaires/(hors|en)-ligne/?$#',$this->get,$capture)) { + $this->mode = 'admin'; # Mode du flux + $this->cible = '-'; # /!\: il ne faut pas initialiser à blanc sinon ça prend par défaut les commentaires en ligne (faille sécurité) + if ($capture[1] == $this->clef) { + if($capture[2] == 'hors') + $this->cible = '_'; + elseif($capture[2] == 'en') + $this->cible = ''; + } + } else { + $this->mode = 'article'; # Mode du flux + # On modifie le motif de recherche + $this->motif = '/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedPreChauffageEnd')); + + } + + /** + * Méthode qui effectue le traitement selon le mode du moteur + * + * @return null ou redirection si une erreur est détectée + * @author Florent MONTHEL, Stéphane F + **/ + public function fdemarrage() { + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxFeedDemarrageBegin'))) return; + + # Flux de commentaires d'un article precis + if($this->mode == 'commentaire' AND $this->cible) { + if(!$this->getArticles()) { # Aucun article, on redirige + $this->cible = $this->cible + 0; + header('Location: '.$this->urlRewrite('?article'.$this->cible.'/')); + exit; + } else { # On récupère les commentaires + $regex = '/^'.$this->cible.'.[0-9]{10}-[0-9]+.xml$/'; + $this->getCommentaires($regex,'rsort',0,$this->bypage); + } + } + # Flux de commentaires global + elseif($this->mode == 'commentaire') { + $regex = '/^[0-9]{4}.[0-9]{10}-[0-9]+.xml$/'; + $this->getCommentaires($regex,'rsort',0,$this->bypage); + } + # Flux admin + elseif($this->mode == 'admin') { + if(empty($this->clef)) { # Clef non initialisée + header('Content-Type: text/plain'); + echo L_FEED_NO_PRIVATE_URL; + exit; + } + # On récupère les commentaires + $this->getCommentaires('/^'.$this->cible.'[0-9]{4}.[0-9]{10}-[0-9]+.xml$/','rsort',0,$this->bypage,'all'); + } + # Flux d'articles pour un tag + elseif($this->mode == 'tag') { + if(empty($this->motif)) { + header('Location: '.$this->urlRewrite('?tag/'.$this->cible.'/')); + exit; + } else { + $this->getArticles(); # Recupération des articles (on les parse) + } + } + # Flux d'articles + else { + # Flux des articles d'une catégorie précise + if($this->cible) { + # On va tester la catégorie + if(empty($this->aCats[$this->cible]) OR !$this->aCats[$this->cible]['active']) { # Pas de catégorie, on redirige + $this->cible = $this->cible + 0; + header('Location: '.$this->urlRewrite('?categorie'.$this->cible.'/')); + exit; + } + } + $this->getArticles(); # Recupération des articles (on les parse) + } + + # Selon le mode, on appelle la méthode adéquate + switch($this->mode) { + case 'tag': + case 'article' : $this->getRssArticles(); break; + case 'commentaire' : $this->getRssComments(); break; + case 'admin' : $this->getAdminComments(); break; + default : break; + } + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedDemarrageEnd')); + + } + + /** + * Méthode qui affiche le flux rss des articles du site + * + * @return flux sur stdout + * @author Florent MONTHEL, Stephane F, Amaury GRAILLAT + **/ + public function getRssArticles() { + + # Initialisation + $last_updated = '197001010100'; + $entry_link = ''; + $entry = ''; + if($this->mode == 'tag') { + $title = $this->aConf['title'].' - '.L_PAGETITLE_TAG.' '.$this->cible; + $link = $this->urlRewrite('?tag/'.$this->cible); + } + elseif($this->cible) { # Articles d'une catégorie + $catId = $this->cible + 0; + $title = $this->aConf['title'].' - '.$this->aCats[ $this->cible ]['name']; + $link = $this->urlRewrite('?categorie'.$catId.'/'.$this->aCats[ $this->cible ]['url']); + } else { # Articles globaux + $title = $this->aConf['title']; + $link = $this->urlRewrite(); + } + # On va boucler sur les articles (si il y'en a) + if($this->plxRecord_arts) { + while($this->plxRecord_arts->loop()) { + # Traitement initial + if($this->aConf['feed_chapo']) { + $content = $this->plxRecord_arts->f('chapo'); + if(trim($content)=='') $content = $this->plxRecord_arts->f('content'); + } else { + $content = $this->plxRecord_arts->f('chapo').$this->plxRecord_arts->f('content'); + } + $content .= $this->aConf['feed_footer']; + $artId = $this->plxRecord_arts->f('numero') + 0; + $author = $this->aUsers[$this->plxRecord_arts->f('author')]['name']; + # On check la date de publication + if($this->plxRecord_arts->f('date') > $last_updated) + $last_updated = $this->plxRecord_arts->f('date'); + + # On affiche le flux dans un buffer + $entry .= "\t\n"; + $entry .= "\t\t".''.plxUtils::strCheck($this->plxRecord_arts->f('title')).' '."\n"; + $entry .= "\t\t".''.$this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url')).''."\n"; + $entry .= "\t\t".''.$this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url')).''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck(plxUtils::rel2abs($this->racine,$content)).''."\n"; + $entry .= "\t\t".''.plxDate::dateIso2rfc822($this->plxRecord_arts->f('date')).''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck($author).''."\n"; + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedRssArticlesXml')); + $entry .= "\t\n"; + } + } + + # On affiche le flux + header('Content-Type: text/xml; charset='.PLX_CHARSET); + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo "\t".''.plxUtils::strCheck($title).''."\n"; + echo "\t".''.$link.''."\n"; + echo "\t".'' . $this->aConf['default_lang'] . ''."\n"; + echo "\t".''.plxUtils::strCheck($this->aConf['description']).''."\n"; + echo ''."\n"; + $last_updated = plxDate::dateIso2rfc822($last_updated); + echo "\t".''.$last_updated.''."\n"; + echo "\t".'PluXml'."\n"; + echo $entry; + echo ''."\n"; + echo ''; + } + + /** + * Méthode qui affiche le flux rss des commentaires du site + * + * @return flux sur stdout + * @author Florent MONTHEL, Amaury GRAILLAT + **/ + public function getRssComments() { + + # Traitement initial + $last_updated = '197001010100'; + $entry_link = ''; + $entry = ''; + if($this->cible) { # Commentaires d'un article + $artId = $this->plxRecord_arts->f('numero') + 0; + $title = $this->aConf['title'].' - '.$this->plxRecord_arts->f('title').' - '.L_FEED_COMMENTS; + $link = $this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url')); + } else { # Commentaires globaux + $title = $this->aConf['title'].' - '.L_FEED_COMMENTS; + $link = $this->urlRewrite(); + } + + # On va boucler sur les commentaires (si il y'en a) + if($this->plxRecord_coms) { + while($this->plxRecord_coms->loop()) { + # Traitement initial + if(isset($this->activeArts[$this->plxRecord_coms->f('article')])) { + $artId = $this->plxRecord_coms->f('article') + 0; + if($this->cible) { # Commentaires d'un article + $title_com = $this->plxRecord_arts->f('title').' - '; + $title_com .= L_FEED_WRITTEN_BY.' '.$this->plxRecord_coms->f('author').' @ '; + $title_com .= plxDate::formatDate($this->plxRecord_coms->f('date'),'#day #num_day #month #num_year(4), #hour:#minute'); + $link_com = $this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url').'/#c'.$this->plxRecord_coms->f('numero')); + } else { # Commentaires globaux + $title_com = $this->plxRecord_coms->f('author').' @ '; + $title_com .= plxDate::formatDate($this->plxRecord_coms->f('date'),'#day #num_day #month #num_year(4), #hour:#minute'); + $artInfo = $this->artInfoFromFilename($this->plxGlob_arts->aFiles[$this->plxRecord_coms->f('article')]); + $link_com = $this->urlRewrite('?article'.$artId.'/'.$artInfo['artUrl'].'#c'.$this->plxRecord_coms->f('numero')); + } + # On check la date de publication + if($this->plxRecord_coms->f('date') > $last_updated) + $last_updated = $this->plxRecord_coms->f('date'); + + # On affiche le flux dans un buffer + $entry .= "\t\n"; + $entry .= "\t\t".''.strip_tags(html_entity_decode($title_com, ENT_QUOTES, PLX_CHARSET)).' '."\n"; + $entry .= "\t\t".''.$link_com.''."\n"; + $entry .= "\t\t".''.$link_com.''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck(strip_tags($this->plxRecord_coms->f('content'))).''."\n"; + $entry .= "\t\t".''.plxDate::dateIso2rfc822($this->plxRecord_coms->f('date')).''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck($this->plxRecord_coms->f('author')).''."\n"; + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedRssCommentsXml')); + $entry .= "\t\n"; + } + } + } + + # On affiche le flux + header('Content-Type: text/xml; charset='.PLX_CHARSET); + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + + $entry .= "\t\t".''.strip_tags(html_entity_decode($title, ENT_QUOTES, PLX_CHARSET)).' '."\n"; + echo "\t".''.$link.''."\n"; + echo "\t".'' . $this->aConf['default_lang'] . ''."\n"; + echo "\t".''.plxUtils::strCheck($this->aConf['description']).''."\n"; + + $last_updated = plxDate::dateIso2rfc822($last_updated); + echo "\t".''.$last_updated.''."\n"; + echo "\t".'PluXml'."\n"; + echo $entry; + echo ''."\n"; + echo ''; + } + + /** + * Méthode qui affiche le flux RSS des commentaires du site pour l'administration + * + * @return flux sur stdout + * @author Florent MONTHEL, Amaury GRAILLAT + **/ + public function getAdminComments() { + # Traitement initial + $last_updated = '197001010100'; + $entry = ''; + if($this->cible == '_') { # Commentaires hors ligne + $link = $this->racine.'core/admin/comments.php?sel=offline&page=1'; + $title = $this->aConf['title'].' - '.L_FEED_OFFLINE_COMMENTS; + $link_feed = $this->racine.'feed.php?admin'.$this->clef.'/commentaires/hors-ligne'; + } else { # Commentaires en ligne + $link = $this->racine.'core/admin/comments.php?sel=online&page=1'; + $title = $this->aConf['title'].' - '.L_FEED_ONLINE_COMMENTS; + $link_feed = $this->racine.'feed.php?admin'.$this->clef.'/commentaires/en-ligne'; + } + + # On va boucler sur les commentaires (si il y'en a) + if($this->plxRecord_coms) { + while($this->plxRecord_coms->loop()) { + $artId = $this->plxRecord_coms->f('article') + 0; + $comId = $this->cible.$this->plxRecord_coms->f('article').'.'.$this->plxRecord_coms->f('numero'); + $title_com = $this->plxRecord_coms->f('author').' @ '; + $title_com .= plxDate::formatDate($this->plxRecord_coms->f('date'),'#day #num_day #month #num_year(4), #hour:#minute'); + $link_com = $this->racine.'core/admin/comment.php?c='.$comId; + # On check la date de publication + if($this->plxRecord_coms->f('date') > $last_updated) + $last_updated = $this->plxRecord_coms->f('date'); + # On affiche le flux dans un buffer + $entry .= "\t\n"; + $entry .= "\t\t".''.strip_tags(html_entity_decode($title_com, ENT_QUOTES, PLX_CHARSET)).' '."\n"; + $entry .= "\t\t".''.$link_com.''."\n"; + $entry .= "\t\t".''.$link_com.''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck(strip_tags($this->plxRecord_coms->f('content'))).''."\n"; + $entry .= "\t\t".''.plxDate::dateIso2rfc822($this->plxRecord_coms->f('date')).''."\n"; + $entry .= "\t\t".''.plxUtils::strCheck($this->plxRecord_coms->f('author')).''."\n"; + # Hook plugins + eval($this->plxPlugins->callHook('plxFeedAdminCommentsXml')); + $entry .= "\t\n"; + } + } + + # On affiche le flux + header('Content-Type: text/xml; charset='.PLX_CHARSET); + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo "\t".''.plxUtils::strCheck($title).''."\n"; + echo "\t".''.plxUtils::strCheck($this->aConf['description']).''."\n"; + echo "\t".''.$link.''."\n"; + echo "\t".'' . $this->aConf['default_lang'] . ''."\n"; + echo ''."\n"; + $last_updated = plxDate::dateIso2rfc822($last_updated); + echo "\t".''.$last_updated.''."\n"; + echo "\t".'PluXml'."\n"; + echo $entry; + echo ''."\n"; + echo ''; + } +} +?> diff --git a/src/core/lib/class.plx.glob.php b/src/core/lib/class.plx.glob.php new file mode 100644 index 0000000..9e57786 --- /dev/null +++ b/src/core/lib/class.plx.glob.php @@ -0,0 +1,221 @@ +dir = $dir; + $this->rep = $rep; + $this->onlyfilename = $onlyfilename; + $this->initCache($type); + } + + /** + * Méthode qui se charger de créer le Singleton plxGlob + * + * @param dir répertoire à lire + * @param rep boolean pour ne prendre que les répertoires sans les fichiers + * @param onlyfilename boolean pour ne récupérer que le nom des fichiers sans le chemin + * @param type type de fichier lus (arts ou '') + * @return objet return une instance de la classe plxGlob + * @author Stephane F + **/ + public static function getInstance($dir,$rep=false,$onlyfilename=true,$type=''){ + $basename = str_replace(PLX_ROOT, '', $dir); + if (!isset(self::$instance[$basename])) + self::$instance[$basename] = new plxGlob($dir,$rep,$onlyfilename,$type); + return self::$instance[$basename]; + } + + /** + * Méthode qui se charger de mémoriser le contenu d'un dossier + * + * @param type type de fichier lus (arts ou '') + * @return null + * @author Amaury Graillat et Stephane F + **/ + private function initCache($type='') { + + if(is_dir($this->dir)) { + # On ouvre le repertoire + if($dh = opendir($this->dir)) { + # Récupération du dirname + if($this->onlyfilename) # On recupere uniquement le nom du fichier + $dirname = ''; + else # On concatene egalement le nom du repertoire + $dirname = $this->dir; + # Pour chaque entree du repertoire + while(false !== ($file = readdir($dh))) { + if($file[0]!='.') { + $dir = is_dir($this->dir.'/'.$file); + if($this->rep AND $dir) { + $this->aFiles[] = $dirname.$file; + } + elseif(!$this->rep AND !$dir) { + if($type=='arts') { + $index = str_replace('_','',substr($file, 0,strpos($file,'.'))); + if(is_numeric($index)) { + $this->aFiles[$index] = $file; + } + } else { + $this->aFiles[] = $file; + } + } + } + } + # On ferme la ressource sur le repertoire + closedir($dh); + } + } + } + + /** + * Méthode qui cherche les fichiers correspondants au motif $motif + * + * @param motif motif de recherche des fichiers sous forme d'expression réguliere + * @param type type de recherche: article ('art'), commentaire ('com') ou autre ('')) + * @param tri type de tri (sort, rsort, alpha) + * @param publi recherche des fichiers avant ou après la date du jour + * @return array ou false + * @author Anthony GUÉRIN, Florent MONTHEL et Stephane F + **/ + private function search($motif,$type,$tri,$publi) { + + $array=array(); + $this->count = 0; + + if($this->aFiles) { + + # Pour chaque entree du repertoire + foreach ($this->aFiles as $file) { + + if(preg_match($motif,$file)) { + + if($type === 'art') { # Tri selon les dates de publication (article) + # On decoupe le nom du fichier + $index = explode('.',$file); + # On cree un tableau associatif en choisissant bien nos cles et en verifiant la date de publication + $key = ($tri === 'alpha' ? $index[4].'~'.$index[0] : $index[3].$index[0]); + if($publi === 'before' AND $index[3] <= date('YmdHi')) + $array[$key] = $file; + elseif($publi === 'after' AND $index[3] >= date('YmdHi')) + $array[$key] = $file; + elseif($publi === 'all') + $array[$key] = $file; + # On verifie que l'index existe + if(isset($array[$key])) + $this->count++; # On incremente le compteur + } + elseif($type === 'com') { # Tri selon les dates de publications (commentaire) + # On decoupe le nom du fichier + $index = explode('.',$file); + # On cree un tableau associatif en choisissant bien nos cles et en verifiant la date de publication + if($publi === 'before' AND $index[1] <= time()) + $array[ $index[1].$index[0] ] = $file; + elseif($publi === 'after' AND $index[1] >= time()) + $array[ $index[1].$index[0] ] = $file; + elseif($publi === 'all') + $array[ $index[1].$index[0] ] = $file; + # On verifie que l'index existe + if(isset($array[ $index[1].$index[0] ])) + $this->count++; # On incremente le compteur + } + else { # Aucun tri + $array[] = $file; + # On incremente le compteur + $this->count++; + } + } + } + } + + # On retourne le tableau si celui-ci existe + if($this->count > 0) + return $array; + else + return false; + } + + /** + * Méthode qui retourne un tableau trié, des fichiers correspondants + * au motif $motif, respectant les différentes limites + * + * @param motif motif de recherche des fichiers sous forme d'expression réguliere + * @param type type de recherche: article ('art'), commentaire ('com') ou autre ('')) + * @param tri type de tri (sort, rsort, alpha) + * @param depart indice de départ de la sélection + * @param limite nombre d'éléments à sélectionner + * @param publi recherche des fichiers avant ou après la date du jour + * @return array ou false + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function query($motif,$type='',$tri='',$depart='0',$limite=false,$publi='all') { + + # Si on a des resultats + if($rs = $this->search($motif,$type,$tri,$publi)) { + + # Ordre de tri du tableau + if ($type != '') { + switch ($tri) { + case 'alpha': + case 'sort': + ksort($rs); + break; + case 'rsort': + default: + krsort($rs); + break; + } + } else { + switch ($tri) { + case 'alpha': + case 'sort': + sort($rs); + break; + case 'rsort': + default: + rsort($rs); + break; + } + } + + # On enleve les cles du tableau + $rs = array_values($rs); + # On a une limite, on coupe le tableau + if($limite) + $rs = array_slice($rs,$depart,$limite); + # On retourne le tableau + return $rs; + } + # On retourne une valeur négative + return false; + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.medias.php b/src/core/lib/class.plx.medias.php new file mode 100644 index 0000000..6e317e0 --- /dev/null +++ b/src/core/lib/class.plx.medias.php @@ -0,0 +1,463 @@ +path = $path; + $this->dir = $dir; + + # Création du dossier réservé à l'utilisateur connecté s'il n'existe pas + if(!is_dir($this->path)) { + if(!mkdir($this->path,0755)) + return plxMsg::Error(L_PLXMEDIAS_MEDIAS_FOLDER_ERR); + } + # Création du dossier réservé aux miniatures + if(!is_dir($this->path.'.thumbs/'.$this->dir)) { + mkdir($this->path.'.thumbs/'.$this->dir,0755,true); + } + + $this->aDirs = $this->_getAllDirs($this->path); + $this->aFiles = $this->_getDirFiles($this->dir); + + # Taille maxi pour l'upload de fichiers sur le serveur + $maxUpload = strtoupper(ini_get("upload_max_filesize")); + $this->maxUpload['display'] = str_replace('M', ' Mo', $maxUpload); + $this->maxUpload['display'] = str_replace('K', ' Ko', $this->maxUpload['display']); + if(substr_count($maxUpload, 'K')) $this->maxUpload['value'] = str_replace('K', '', $maxUpload) * 1024; + elseif(substr_count($maxUpload, 'M')) $this->maxUpload['value'] = str_replace('M', '', $maxUpload) * 1024 * 1024; + elseif(substr_count($maxUpload, 'G')) $this->maxUpload['value'] = str_replace('G', '', $maxUpload) * 1024 * 1024 * 1024; + else $this->maxUpload['value'] = 0; + } + + /** + * Méthode récursive qui retourne un tableau de tous les dossiers et sous dossiers dans un répertoire + * + * @param dir repertoire de lecture + * @param level profondeur du repertoire + * @return folders tableau contenant la liste de tous les dossiers et sous dossiers + * @author Stephane F + **/ + private function _getAllDirs($dir,$level=0) { + + # Initialisation + $folders = array(); + + $alldirs = scandir($dir); + natsort($alldirs); + + foreach($alldirs as $folder) { + if($folder[0] != '.') { + if(is_dir(($dir!=''?$dir.'/':$dir).$folder)) { + $dir = (substr($dir, -1)!='/' AND $dir!='') ? $dir.'/' : $dir; + $path = str_replace($this->path, '',$dir.$folder.'/'); + $folders[] = array( + 'level' => $level, + 'name' => $folder, + 'path' => $path + ); + + $folders = array_merge($folders, $this->_getAllDirs($dir.$folder, $level+1) ); + } + } + } + + return $folders; + } + + /** + * Méthode qui retourne la liste des des fichiers d'un répertoire + * + * @param dir répertoire de lecture + * @return files tableau contenant la liste de tous les fichiers d'un dossier + * @author Stephane F + **/ + private function _getDirFiles($dir) { + + # Initialisation + $files = array(); + # Ouverture et lecture du dossier demandé + if($handle = opendir($this->path.$dir)) { + while(FALSE !== ($file = readdir($handle))) { + $thumName = plxUtils::thumbName($file); + if($file[0] != '.' AND !preg_match('/index.htm/i', $file) AND !preg_match('/^(.*\.)tb.([^.]+)$/D', $file)) { + if(is_file($this->path.$dir.$file)) { + $ext = strtolower(strrchr($this->path.$dir.$file,'.')); + $_thumb1=file_exists($this->path.'.thumbs/'.$dir.$file); + if(!$_thumb1 AND in_array($ext, array('.gif', '.jpg', '.png'))) { + $_thumb1 = plxUtils::makeThumb($this->path.$dir.$file, $this->path.'.thumbs/'.$dir.$file, $this->thumbWidth, $this->thumbHeight, $this->thumbQuality); + } + $_thumb2=false; + if(is_file($this->path.$dir.$thumName)) { + $_thumb2 = array( + 'infos' => getimagesize($this->path.$dir.$thumName), + 'filesize' => filesize($this->path.$dir.$thumName) + ); + } + $files[$file] = array( + '.thumb' => $_thumb1 ? $this->path.'.thumbs/'.$dir.$file : PLX_CORE.'admin/theme/images/file.png', + 'name' => $file, + 'path' => $this->path.$dir.$file, + 'date' => filemtime($this->path.$dir.$file), + 'filesize' => filesize($this->path.$dir.$file), + 'extension' => $ext, + 'infos' => getimagesize($this->path.$dir.$file), + 'thumb' => $_thumb2 + ); + } + } + } + closedir($handle); + } + # On tri le contenu + ksort($files); + # On retourne le tableau + return $files; + } + + /** + * Méthode qui formate l'affichage de la liste déroulante des dossiers + * + * @return string chaine formatée à afficher + * @author Stephane F, Danielsan + **/ + public function contentFolder() { + + $str = "\n".''."\n"; + # On retourne la chaine + return $str; + } + + /** + * Méthode qui supprime un fichier (et sa vignette si elle existe dans le cas d'une image) + * + * @param files liste des fichier à supprimer + * @return boolean faux si erreur sinon vrai + * @author Stephane F + **/ + public function deleteFiles($files) { + + $count = 0; + foreach($files as $file) { + # protection pour ne pas supprimer un fichier en dehors de $this->path.$this->dir + $file=basename($file); + if(!unlink($this->path.$this->dir.$file)) { + $count++; + } else { + # Suppression de la vignette + if(is_file($this->path.'.thumbs/'.$this->dir.$file)) + unlink($this->path.'.thumbs/'.$this->dir.$file); + # Suppression de la miniature + $thumName = plxUtils::thumbName($file); + if(is_file($this->path.$this->dir.$thumName)) + unlink($this->path.$this->dir.$thumName); + } + } + + if(sizeof($files)==1) { + if($count==0) + return plxMsg::Info(L_PLXMEDIAS_DELETE_FILE_SUCCESSFUL); + else + return plxMsg::Error(L_PLXMEDIAS_DELETE_FILE_ERR); + } + else { + if($count==0) + return plxMsg::Info(L_PLXMEDIAS_DELETE_FILES_SUCCESSFUL); + else + return plxMsg::Error(L_PLXMEDIAS_DELETE_FILES_ERR); + } + } + + + /** + * Méthode récursive qui supprimes tous les dossiers et les fichiers d'un répertoire + * + * @param deldir répertoire de suppression + * @return boolean résultat de la suppression + * @author Stephane F + **/ + private function _deleteDir($deldir) { #fonction récursive + + if(is_dir($deldir) AND !is_link($deldir)) { + if($dh = opendir($deldir)) { + while(FALSE !== ($file = readdir($dh))) { + if($file != '.' AND $file != '..') { + $this->_deleteDir($deldir.'/'.$file); + } + } + closedir($dh); + } + return rmdir($deldir); + } + return unlink($deldir); + } + + /** + * Méthode qui supprime un dossier et son contenu + * + * @param deleteDir répertoire à supprimer + * @return boolean faux si erreur sinon vrai + * @author Stephane F + **/ + public function deleteDir($deldir) { + + # suppression du dossier des miniatures et de son contenu + $this->_deleteDir($this->path.'.thumbs/'.$deldir); + + # suppression du dossier des images et de son contenu + if($this->_deleteDir($this->path.$deldir)) + return plxMsg::Info(L_PLXMEDIAS_DEL_FOLDER_SUCCESSFUL); + else + return plxMsg::Error(L_PLXMEDIAS_DEL_FOLDER_ERR); + } + + /** + * Méthode qui crée un nouveau dossier + * + * @param newdir nom du répertoire à créer + * @return boolean faux si erreur sinon vrai + * @author Stephane F + **/ + public function newDir($newdir) { + + $newdir = $this->path.$this->dir.$newdir; + + if(!is_dir($newdir)) { # Si le dossier n'existe pas on le créer + if(!mkdir($newdir,0755)) + return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR); + else + return plxMsg::Info(L_PLXMEDIAS_NEW_FOLDER_SUCCESSFUL); + } else { + return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_EXISTS); + } + } + + /** + * Méthode qui envoi un fichier sur le serveur + * + * @param file fichier à uploader + * @param resize taille du fichier à redimensionner si renseigné + * @param thumb taille de la miniature à créer si renseigné + * @return msg message contenant le résultat de l'envoi du fichier + * @author Stephane F + **/ + private function _uploadFile($file, $resize, $thumb) { + + if($file['name'] == '') + return false; + + if($file['size'] > $this->maxUpload['value']) + return L_PLXMEDIAS_WRONG_FILESIZE; + + if(!preg_match($this->img_exts, $file['name']) AND !preg_match($this->doc_exts, $file['name'])) + return L_PLXMEDIAS_WRONG_FILEFORMAT; + + # On teste l'existence du fichier et on formate le nom du fichier pour éviter les doublons + $i = 1; + $upFile = $this->path.$this->dir.plxUtils::title2filename($file['name']); + $name = substr($upFile, 0, strrpos($upFile,'.')); + $ext = strrchr($upFile, '.'); + while(file_exists($upFile)) { + $upFile = $this->path.$this->dir.$name.'.'.$i++.$ext; + } + + if(!move_uploaded_file($file['tmp_name'],$upFile)) { # Erreur de copie + return L_PLXMEDIAS_UPLOAD_ERR; + } else { # Ok + if(preg_match($this->img_exts, $file['name'])) { + plxUtils::makeThumb($upFile, $this->path.'.thumbs/'.$this->dir.basename($upFile), $this->thumbWidth, $this->thumbHeight, $this->thumbQuality); + if($resize) + plxUtils::makeThumb($upFile, $upFile, $resize['width'], $resize['height'], 80); + if($thumb) + plxUtils::makeThumb($upFile, plxUtils::thumbName($upFile), $thumb['width'], $thumb['height'], 80); + } + } + return L_PLXMEDIAS_UPLOAD_SUCCESSFUL; + } + + /** + * Méthode qui envoi une liste de fichiers sur le serveur + * + * @param files fichiers à uploader + * @param post parametres + * @return msg resultat de l'envoi des fichiers + * @author Stephane F + **/ + public function uploadFiles($files, $post) { + $count=0; + foreach($files as $file) { + $resize = false; + $thumb = false; + if(!empty($post['resize'])) { + if($post['resize']=='user') { + $resize = array('width' => intval($post['user_w']), 'height' => intval($post['user_h'])); + } else { + list($width,$height) = explode('x', $post['resize']); + $resize = array('width' => $width, 'height' => $height); + } + } + if(!empty($post['thumb'])) { + if($post['thumb']=='user') { + $thumb = array('width' => intval($post['thumb_w']), 'height' => intval($post['thumb_h'])); + } else { + list($width,$height) = explode('x', $post['thumb']); + $thumb = array('width' => $width, 'height' => $height); + } + } + if($res=$this->_uploadFile($file, $resize, $thumb)) { + switch($res) { + case L_PLXMEDIAS_WRONG_FILESIZE: + return plxMsg::Error(L_PLXMEDIAS_WRONG_FILESIZE); + break; + case L_PLXMEDIAS_WRONG_FILEFORMAT: + return plxMsg::Error(L_PLXMEDIAS_WRONG_FILEFORMAT); + break; + case L_PLXMEDIAS_UPLOAD_ERR: + return plxMsg::Error(L_PLXMEDIAS_UPLOAD_ERR); + break; + case L_PLXMEDIAS_UPLOAD_SUCCESSFUL: + $count++; + break; + } + } + } + + if($count==1) + return plxMsg::Info(L_PLXMEDIAS_UPLOAD_SUCCESSFUL); + elseif($count>1) + return plxMsg::Info(L_PLXMEDIAS_UPLOADS_SUCCESSFUL); + } + + /** + * Méthode qui déplace une ou plusieurs fichiers + * + * @param files liste des fichier à déplacer + * @param src_dir répertoire source + * @param dst_dir répertoire destination + * @return boolean faux si erreur sinon vrai + * @author Stephane F + **/ + public function moveFiles($files, $src_dir, $dst_dir) { + + if($dst_dir=='.') $dst_dir=''; + + $count = 0; + foreach($files as $file) { + # protection pour ne pas déplacer un fichier en dehors de $this->path.$this->dir + $file=basename($file); + + # Déplacement du fichier + if(is_readable($this->path.$src_dir.$file)) { + $result = rename($this->path.$src_dir.$file, $this->path.$dst_dir.$file); + $count++; + } + # Déplacement de la miniature + $thumbName = plxUtils::thumbName($file); + if($result AND is_readable($this->path.$src_dir.$thumbName)) { + $result = rename($this->path.$src_dir.$thumbName, $this->path.$dst_dir.$thumbName); + } + # Déplacement de la vignette + if($result AND is_readable($this->path.'.thumbs/'.$src_dir.$file)) { + $result = rename($this->path.'.thumbs/'.$src_dir.$file, $this->path.'.thumbs/'.$dst_dir.$file); + } + } + + if(sizeof($files)==1) { + if($count==0) + return plxMsg::Error(L_PLXMEDIAS_MOVE_FILE_ERR); + else + return plxMsg::Info(L_PLXMEDIAS_MOVE_FILE_SUCCESSFUL); + } + else { + if($count==0) + return plxMsg::Error(L_PLXMEDIAS_MOVE_FILES_ERR); + else + return plxMsg::Info(L_PLXMEDIAS_MOVE_FILES_SUCCESSFUL); + } + + } + + /** + * Méthode qui recréer les miniatures + * + * @param files liste des fichier à déplacer + * @param width largeur des miniatures + * @param height hauteur des miniatures + * @return boolean faux si erreur sinon vrai + * @author Stephane F + **/ + public function makeThumbs($files, $width, $height) { + + $count = 0; + foreach($files as $file) { + $file=basename($file); + if(is_file($this->path.$this->dir.$file)) { + $thumName = plxUtils::thumbName($file); + $ext = strtolower(strrchr($this->path.$this->dir.$file,'.')); + if(in_array($ext, array('.gif', '.jpg', '.png'))) { + if(plxUtils::makeThumb($this->path.$this->dir.$file, $this->path.$this->dir.$thumName, $width, $height, 80)) + $count++; + } + } + } + + if(sizeof($files)==1) { + if($count==0) + return plxMsg::Error(L_PLXMEDIAS_RECREATE_THUMB_ERR); + else + return plxMsg::Info(L_PLXMEDIAS_RECREATE_THUMB_SUCCESSFUL); + } + else { + if($count==0) + return plxMsg::Error(L_PLXMEDIAS_RECREATE_THUMBS_ERR); + else + return plxMsg::Info(L_PLXMEDIAS_RECREATE_THUMBS_SUCCESSFUL); + } + + } +} +?> diff --git a/src/core/lib/class.plx.motor.php b/src/core/lib/class.plx.motor.php new file mode 100644 index 0000000..b937c00 --- /dev/null +++ b/src/core/lib/class.plx.motor.php @@ -0,0 +1,1038 @@ +getConfiguration($filename); + # Chargement du fichier de langue + $lang = isset($_SESSION['lang']) ? $_SESSION['lang'] : $this->aConf['default_lang']; + $this->aConf['default_lang'] = $lang; + loadLang(PLX_CORE.'lang/'.$lang.'/core.php'); + # Contrôle de la présence du fichier 'version' de PluXml + if(!is_readable(PLX_ROOT.'version')) { + header('Content-Type: text/plain charset=UTF-8'); + printf(utf8_decode(L_FILE_VERSION_REQUIRED), PLX_ROOT); + exit; + } + # chargement du n° de version de PluXml + $f = file(PLX_ROOT.'version'); + $this->version = $f['0']; + # récupération des paramèters dans l'url + $this->get = plxUtils::getGets(); + # gestion du timezone + date_default_timezone_set($this->aConf['timezone']); + # On vérifie s'il faut faire une mise à jour + if((!isset($this->aConf['version']) OR $this->version!=$this->aConf['version']) AND !defined('PLX_UPDATER')) { + header('Location: '.PLX_ROOT.'update/index.php'); + exit; + } + # Chargement des variables + $this->style = $this->aConf['style']; + $this->racine = $this->aConf['racine']; + $this->bypage = $this->aConf['bypage']; + $this->tri = $this->aConf['tri']; + $this->tri_coms = $this->aConf['tri_coms']; + # On récupère le chemin de l'url + $var = parse_url($this->racine); + $this->path_url = str_replace(ltrim($var['path'], '\/'), '', ltrim($_SERVER['REQUEST_URI'], '\/')); + # Traitement des plugins + $this->plxPlugins = new plxPlugins($lang); + $this->plxPlugins->loadPlugins(); + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorConstructLoadPlugins')); + # Traitement sur les répertoires des articles et des commentaires + $this->plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->aConf['racine_articles'],false,true,'arts'); + $this->plxGlob_coms = plxGlob::getInstance(PLX_ROOT.$this->aConf['racine_commentaires']); + # Récupération des données dans les autres fichiers xml + $this->getCategories(path('XMLFILE_CATEGORIES')); + $this->getStatiques(path('XMLFILE_STATICS')); + $this->getTags(path('XMLFILE_TAGS')); + $this->getUsers(path('XMLFILE_USERS')); + # Récuperation des articles appartenant aux catégories actives + $this->getActiveArts(); + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorConstruct')); + } + + /** + * Méthode qui effectue une analyse de la situation et détermine + * le mode à appliquer. Cette méthode alimente ensuite les variables + * de classe adéquates + * + * @return null + * @author Anthony GUÉRIN, Florent MONTHEL, Stéphane F + **/ + public function prechauffage() { + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxMotorPreChauffageBegin'))) return; + + if(!$this->get AND $this->aConf['homestatic']!='' AND isset($this->aStats[$this->aConf['homestatic']]) AND $this->aStats[$this->aConf['homestatic']]['active']) { + $this->mode = 'static'; # Mode static + $this->cible = $this->aConf['homestatic']; + $this->template = $this->aStats[ $this->cible ]['template']; + } + elseif(!$this->get OR preg_match('/^(blog|blog\/page[0-9]*|\/?page[0-9]*)$/',$this->get)) { + $this->mode = 'home'; + $this->template = $this->aConf['hometemplate']; + $this->bypage = $this->aConf['bypage']; # Nombre d'article par page + # On regarde si on a des articles en mode "home" + if($this->plxGlob_arts->query('/^[0-9]{4}.(home[0-9,]*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/')) { + $this->motif = '/^[0-9]{4}.(home[0-9,]*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } else { # Sinon on recupere tous les articles + $this->motif = '/^[0-9]{4}.(?:[0-9]|,)*(?:'.$this->homepageCats.')(?:[0-9]|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + } + } + elseif($this->get AND preg_match('/^article([0-9]+)\/?([a-z0-9-]+)?/',$this->get,$capture)) { + $this->mode = 'article'; # Mode article + $this->template = 'article.php'; + $this->cible = str_pad($capture[1],4,'0',STR_PAD_LEFT); # On complete sur 4 caracteres + $this->motif = '/^'.$this->cible.'.((?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; # Motif de recherche + if($this->getArticles()) { + # Redirection 301 + if($this->plxRecord_arts->f('url')!=$capture[2]) { + header('Status: 301 Moved Permanently', false, 301); + header('Location: '.$this->urlRewrite('?article'.intval($this->cible).'/'.$this->plxRecord_arts->f('url'))); + exit(); + } + } else { + $this->error404(L_UNKNOWN_ARTICLE); + } + } + elseif($this->get AND preg_match('/^static([0-9]+)\/?([a-z0-9-]+)?/',$this->get,$capture)) { + $this->cible = str_pad($capture[1],3,'0',STR_PAD_LEFT); # On complete sur 3 caracteres + if(!empty($this->aConf['homestatic']) AND $capture[1]){ + if($this->aConf['homestatic']==$this->cible){ + header('Status: 301 Moved Permanently', false, 301); + header('Location: '.$this->urlRewrite()); + exit(); + } + } + if(!empty($this->aStats[$this->cible]) AND $this->aStats[$this->cible]['active'] AND $this->aStats[$this->cible]['url']==$capture[2]) { + $this->mode = 'static'; # Mode static + $this->template = $this->aStats[$this->cible]['template']; + } + elseif(isset($this->aStats[$this->cible])) { # Redirection 301 + if($this->aStats[$this->cible]['url']!=$capture[2]) { + header('Status: 301 Moved Permanently', false, 301); + header('Location: '.$this->urlRewrite('?static'.intval($this->cible).'/'.$this->aStats[$this->cible]['url'])); + exit(); + } + } else { + $this->error404(L_UNKNOWN_STATIC); + } + } + elseif($this->get AND preg_match('/^categorie([0-9]+)\/?([a-z0-9-]+)?/',$this->get,$capture)) { + $this->cible = str_pad($capture[1],3,'0',STR_PAD_LEFT); # On complete sur 3 caracteres + if(!empty($this->aCats[$this->cible]) AND $this->aCats[$this->cible]['active'] AND $this->aCats[$this->cible]['url']==$capture[2]) { + $this->mode = 'categorie'; # Mode categorie + $this->motif = '/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$this->cible.')(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; # Motif de recherche + $this->template = $this->aCats[$this->cible]['template']; + $this->tri = $this->aCats[$this->cible]['tri']; # Recuperation du tri des articles + $this->bypage = $this->aCats[$this->cible]['bypage'] > 0 ? $this->aCats[$this->cible]['bypage'] : $this->bypage; + } + elseif(isset($this->aCats[$this->cible])) { # Redirection 301 + if($this->aCats[$this->cible]['url']!=$capture[2]) { + header('Status: 301 Moved Permanently', false, 301); + header('Location: '.$this->urlRewrite('?categorie'.intval($this->cible).'/'.$this->aCats[$this->cible]['url'])); + exit(); + } + } else { + $this->error404(L_UNKNOWN_CATEGORY); + } + } + elseif($this->get AND preg_match('/^archives\/([0-9]{4})[\/]?([0-9]{2})?[\/]?([0-9]{2})?/',$this->get,$capture)) { + $this->mode = 'archives'; + $this->template = 'archives.php'; + $this->bypage = $this->aConf['bypage_archives']; + $this->cible = $search = $capture[1]; + if(!empty($capture[2])) $this->cible = ($search .= $capture[2]); + else $search .= '[0-9]{2}'; + if(!empty($capture[3])) $search .= $capture[3]; + else $search .= '[0-9]{2}'; + $this->motif = '/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.'.$search.'[0-9]{4}.[a-z0-9-]+.xml$/'; + } + elseif($this->get AND preg_match('/^tag\/([a-z0-9-]+)/',$this->get,$capture)) { + $this->cible = $capture[1]; + $ids = array(); + $datetime = date('YmdHi'); + foreach($this->aTags as $idart => $tag) { + if($tag['date']<=$datetime) { + $tags = array_map("trim", explode(',', $tag['tags'])); + $tagUrls = array_map(array('plxUtils', 'title2url'), $tags); + if(in_array($this->cible, $tagUrls)) { + if(!isset($ids[$idart])) $ids[$idart] = $idart; + if(!isset($this->cibleName)) { + $key = array_search($this->cible, $tagUrls); + $this->cibleName=$tags[$key]; + } + } + } + } + if(sizeof($ids)>0) { + $this->mode = 'tags'; # Affichage en mode home + $this->template = 'tags.php'; + $this->motif = '/('.implode('|', $ids).').(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + $this->bypage = $this->aConf['bypage']; # Nombre d'article par page + } else { + $this->error404(L_ARTICLE_NO_TAG); + } + } + elseif($this->get AND preg_match('/^preview\/?/',$this->get) AND isset($_SESSION['preview'])) { + $this->mode = 'preview'; + } + elseif($this->get AND preg_match('/^(telechargement|download)\/(.+)$/',$this->get,$capture)) { + if($this->sendTelechargement($capture[2])) { + $this->mode = 'telechargement'; # Mode telechargement + $this->cible = $capture[2]; + } else { + $this->error404(L_DOCUMENT_NOT_FOUND); + } + } + else { + $this->error404(L_ERR_PAGE_NOT_FOUND); + } + + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorPreChauffageEnd')); + } + + /** + * Méthode qui retourne une erreur 404 Document non trouvé + * + * @return null + * @author Stephane F + **/ + public function error404($msg) { + header("Status: 404 Not Found"); + header("HTTP/1.0 404 Not Found"); + $this->plxErreur = new plxErreur($msg); + $this->mode = 'erreur'; + $this->template = 'erreur.php'; + } + + /** + * Méthode qui effectue le traitement selon le mode du moteur + * + * @return null + * @author Florent MONTHEL, Stephane F + **/ + public function demarrage() { + + # Hook plugins + if(eval($this->plxPlugins->callHook('plxMotorDemarrageBegin'))) return; + + if($this->mode == 'home' OR $this->mode == 'categorie' OR $this->mode == 'archives' OR $this->mode == 'tags') { + $this->getPage(); # Recuperation du numéro de la page courante + if(!$this->getArticles()) { # Si aucun article + $this->error404(L_NO_ARTICLE_PAGE); + } + } + elseif($this->mode == 'article') { + + # On a validé le formulaire commentaire + if(!empty($_POST) AND $this->plxRecord_arts->f('allow_com') AND $this->aConf['allow_com']) { + # On récupère le retour de la création + $retour = $this->newCommentaire($this->cible,plxUtils::unSlash($_POST)); + # Url de l'article + $url = $this->urlRewrite('?article'.intval($this->plxRecord_arts->f('numero')).'/'.$this->plxRecord_arts->f('url')); + eval($this->plxPlugins->callHook('plxMotorDemarrageNewCommentaire')); + if($retour[0] == 'c') { # Le commentaire a été publié + header('Location: '.$url.'#'.$retour); + } elseif($retour == 'mod') { # Le commentaire est en modération + $_SESSION['msgcom'] = L_COM_IN_MODERATION; + header('Location: '.$url.'#form'); + } else { + $_SESSION['msgcom'] = $retour; + $_SESSION['msg']['name'] = plxUtils::unSlash($_POST['name']); + $_SESSION['msg']['site'] = plxUtils::unSlash($_POST['site']); + $_SESSION['msg']['mail'] = plxUtils::unSlash($_POST['mail']); + $_SESSION['msg']['content'] = plxUtils::unSlash($_POST['content']); + eval($this->plxPlugins->callHook('plxMotorDemarrageCommentSessionMessage')); + header('Location: '.$url.'#form'); + } + exit; + } + # Récupération des commentaires + $this->getCommentaires('/^'.$this->cible.'.[0-9]{10}-[0-9]+.xml$/',$this->mapTri($this->tri_coms)); + $this->template=$this->plxRecord_arts->f('template'); + if($this->aConf['capcha']) $this->plxCapcha = new plxCapcha(); # Création objet captcha + } + elseif($this->mode == 'preview') { + $this->mode='article'; + $this->plxRecord_arts = new plxRecord($_SESSION['preview']); + $this->template=$this->plxRecord_arts->f('template'); + if($this->aConf['capcha']) $this->plxCapcha = new plxCapcha(); # Création objet captcha + } + + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorDemarrageEnd')); + } + + /** + * Méthode qui parse le fichier de configuration et alimente + * le tableau aConf + * + * @param filename emplacement du fichier XML de configuration + * @return null + * @author Anthony GUÉRIN, Florent MONTHEL, Stéphane F + **/ + public function getConfiguration($filename) { + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "parametre" + if(isset($iTags['parametre'])) { + # On compte le nombre de tags "parametre" + $nb = sizeof($iTags['parametre']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + if(isset($values[ $iTags['parametre'][$i] ]['value'])) # On a une valeur pour ce parametre + $this->aConf[ $values[ $iTags['parametre'][$i] ]['attributes']['name'] ] = $values[ $iTags['parametre'][$i] ]['value']; + else # On n'a pas de valeur + $this->aConf[ $values[ $iTags['parametre'][$i] ]['attributes']['name'] ] = ''; + } + } + # détermination automatique de la racine du site + $this->aConf['racine'] = plxUtils::getRacine(); + # On gère la non regression en cas d'ajout de paramètres sur une version de pluxml déjà installée + $this->aConf['bypage_admin'] = plxUtils::getValue($this->aConf['bypage_admin'],10); + $this->aConf['tri_coms'] = plxUtils::getValue($this->aConf['tri_coms'],$this->aConf['tri']); + $this->aConf['bypage_admin_coms'] = plxUtils::getValue($this->aConf['bypage_admin_coms'],10); + $this->aConf['bypage_archives'] = plxUtils::getValue($this->aConf['bypage_archives'],5); + $this->aConf['userfolders'] = plxUtils::getValue($this->aConf['userfolders'],0); + $this->aConf['meta_description'] = plxUtils::getValue($this->aConf['meta_description']); + $this->aConf['meta_keywords'] = plxUtils::getValue($this->aConf['meta_keywords']); + $this->aConf['default_lang'] = plxUtils::getValue($this->aConf['default_lang'],DEFAULT_LANG); + $this->aConf['racine_plugins'] = plxUtils::getValue($this->aConf['racine_plugins'], 'plugins/'); + $this->aConf['racine_themes'] = plxUtils::getValue($this->aConf['racine_themes'], 'themes/'); + $this->aConf['mod_art'] = plxUtils::getValue($this->aConf['mod_art'],0); + $this->aConf['display_empty_cat'] = plxUtils::getValue($this->aConf['display_empty_cat'],0); + $this->aConf['timezone'] = plxUtils::getValue($this->aConf['timezone'],@date_default_timezone_get()); + $this->aConf['thumbs'] = isset($this->aConf['thumbs']) ? $this->aConf['thumbs'] : 1; + $this->aConf['hometemplate'] = isset($this->aConf['hometemplate']) ? $this->aConf['hometemplate'] : 'home.php'; + if(!defined('PLX_PLUGINS')) define('PLX_PLUGINS', PLX_ROOT.$this->aConf['racine_plugins']); + + } + + /** + * Méthode qui parse le fichier des catégories et alimente + * le tableau aCats + * + * @param filename emplacement du fichier XML des catégories + * @return null + * @author Stéphane F + **/ + public function getCategories($filename) { + + if(!is_file($filename)) return; + + $activeCats = array(); + $homepageCats = array(); + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + if(isset($iTags['categorie']) AND isset($iTags['name'])) { + $nb = sizeof($iTags['name']); + $size=ceil(sizeof($iTags['categorie'])/$nb); + for($i=0;$i<$nb;$i++) { + $attributes = $values[$iTags['categorie'][$i*$size]]['attributes']; + $number = $attributes['number']; + # Recuperation du nom de la catégorie + $this->aCats[$number]['name']=plxUtils::getValue($values[$iTags['name'][$i]]['value']); + # Recuperation du nom de la description + $this->aCats[$number]['description']=plxUtils::getValue($values[$iTags['description'][$i]]['value']); + # Recuperation de la balise title + $title_htmltag = plxUtils::getValue($iTags['title_htmltag'][$i]); + $this->aCats[$number]['title_htmltag']=plxUtils::getValue($values[$title_htmltag]['value']); + # Recuperation du meta description + $meta_description = plxUtils::getValue($iTags['meta_description'][$i]); + $this->aCats[$number]['meta_description']=plxUtils::getValue($values[$meta_description]['value']); + # Recuperation du meta keywords + $meta_keywords = plxUtils::getValue($iTags['meta_keywords'][$i]); + $this->aCats[$number]['meta_keywords']=plxUtils::getValue($values[$meta_keywords]['value']); + # Recuperation de l'url de la categorie + $this->aCats[$number]['url']=strtolower($attributes['url']); + # Recuperation du tri de la categorie si besoin est + $this->aCats[$number]['tri']=isset($attributes['tri'])?$attributes['tri']:$this->aConf['tri']; + # Recuperation du nb d'articles par page de la categorie si besoin est + $this->aCats[$number]['bypage']=isset($attributes['bypage'])?$attributes['bypage']:$this->bypage; + # Recuperation du fichier template + $this->aCats[$number]['template']=isset($attributes['template'])?$attributes['template']:'categorie.php'; + # Récuperation état affichage de la catégorie dans le menu + $this->aCats[$number]['menu']=isset($attributes['menu'])?$attributes['menu']:'oui'; + # Récuperation état activation de la catégorie dans le menu + $this->aCats[$number]['active']=isset($attributes['active'])?$attributes['active']:'1'; + if($this->aCats[$number]['active']) $activeCats[]=$number; + # Recuperation affichage en page d'accueil + $this->aCats[$number]['homepage'] = isset($attributes['homepage']) ? $attributes['homepage'] : 1; + $this->aCats[$number]['homepage'] = in_array($this->aCats[$number]['homepage'],array('0','1')) ? $this->aCats[$number]['homepage'] : 1; + if($this->aCats[$number]['active'] AND $this->aCats[$number]['homepage']) $homepageCats[]=$number; + # Recuperation du nombre d'article de la categorie + $motif = '/^[0-9]{4}.[home,|0-9,]*'.$number.'[0-9,]*.[0-9]{3}.[0-9]{12}.[A-Za-z0-9-]+.xml$/'; + $arts = $this->plxGlob_arts->query($motif,'art','',0,false,'before'); + $this->aCats[$number]['articles'] = ($arts?sizeof($arts):0); + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorGetCategories')); + } + } + $homepageCats [] = '000'; # on rajoute la catégorie 'Non classée' + $activeCats[] = '000'; # on rajoute la catégorie 'Non classée' + $this->homepageCats = implode('|', $homepageCats); + $this->activeCats = implode('|', $activeCats); + } + + /** + * Méthode qui parse le fichier des pages statiques et alimente + * le tableau aStats + * + * @param filename emplacement du fichier XML des pages statiques + * @return null + * @author Stéphane F + **/ + public function getStatiques($filename) { + + if(!is_file($filename)) return; + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + if(isset($iTags['statique']) AND isset($iTags['name'])) { + $nb = sizeof($iTags['name']); + $size=ceil(sizeof($iTags['statique'])/$nb); + for($i=0;$i<$nb;$i++) { + $attributes = $values[$iTags['statique'][$i*$size]]['attributes']; + $number = $attributes['number']; + # Recuperation du nom de la page statique + $this->aStats[$number]['name']=plxUtils::getValue($values[$iTags['name'][$i]]['value']); + # Recuperation de la balise title + $title_htmltag = plxUtils::getValue($iTags['title_htmltag'][$i]); + $this->aStats[$number]['title_htmltag']=plxUtils::getValue($values[$title_htmltag]['value']); + # Recuperation du meta description + $meta_description = plxUtils::getValue($iTags['meta_description'][$i]); + $this->aStats[$number]['meta_description']=plxUtils::getValue($values[$meta_description]['value']); + # Recuperation du meta keywords + $meta_keywords = plxUtils::getValue($iTags['meta_keywords'][$i]); + $this->aStats[$number]['meta_keywords']=plxUtils::getValue($values[$meta_keywords]['value']); + # Recuperation du groupe de la page statique + $this->aStats[$number]['group']=plxUtils::getValue($values[$iTags['group'][$i]]['value']); + # Recuperation de l'url de la page statique + $this->aStats[$number]['url']=strtolower($attributes['url']); + # Recuperation de l'etat de la page + $this->aStats[$number]['active']=intval($attributes['active']); + # On affiche la page statique dans le menu ? + $this->aStats[$number]['menu']=isset($attributes['menu'])?$attributes['menu']:'oui'; + # recuperation du fichier template + $this->aStats[$number]['template']=isset($attributes['template'])?$attributes['template']:'static.php'; + # On verifie que la page statique existe bien + $file = PLX_ROOT.$this->aConf['racine_statiques'].$number.'.'.$attributes['url'].'.php'; + # On test si le fichier est lisible + $this->aStats[$number]['readable'] = (is_readable($file) ? 1 : 0); + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorGetStatiques')); + } + } + } + + /** + * Méthode qui parse le fichier des utilisateurs + * + * @param filename emplacement du fichier XML des passwd + * @return array tableau des utilisateurs + * @author Stephane F + **/ + public function getUsers($filename) { + + if(!is_file($filename)) return; + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + if(isset($iTags['user']) AND isset($iTags['login'])) { + $nb = sizeof($iTags['login']); + $size=ceil(sizeof($iTags['user'])/$nb); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $attributes = $values[$iTags['user'][$i*$size]]['attributes']; + $number = $attributes['number']; + $this->aUsers[$number]['active']=$attributes['active']; + $this->aUsers[$number]['delete']=$attributes['delete']; + $this->aUsers[$number]['profil']=$attributes['profil']; + $this->aUsers[$number]['login']=plxUtils::getValue($values[$iTags['login'][$i]]['value']); + $this->aUsers[$number]['name']=plxUtils::getValue($values[$iTags['name'][$i]]['value']); + $this->aUsers[$number]['password']=plxUtils::getValue($values[$iTags['password'][$i] ]['value']); + $salt = plxUtils::getValue($iTags['salt'][$i]); + $this->aUsers[$number]['salt']=plxUtils::getValue($values[$salt]['value']); + $this->aUsers[$number]['infos']=plxUtils::getValue($values[$iTags['infos'][$i]]['value']); + $email = plxUtils::getValue($iTags['email'][$i]); + $this->aUsers[$number]['email']=plxUtils::getValue($values[$email]['value']); + $lang = isset($iTags['lang'][$i]) ? $values[$iTags['lang'][$i]]['value']:''; + $this->aUsers[$number]['lang'] = $lang!='' ? $lang : $this->aConf['default_lang']; + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorGetUsers')); + } + } + } + + /** + * Méthode qui selon le paramètre tri retourne sort ou rsort (tri PHP) + * + * @param tri asc ou desc + * @return string + * @author Stéphane F. + **/ + protected function mapTri($tri) { + + if($tri=='desc') + return 'rsort'; + elseif($tri=='asc') + return 'sort'; + elseif($tri=='alpha') + return 'alpha'; + else + return 'rsort'; + + } + + /** + * Méthode qui récupère le numéro de la page active + * + * @return null + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + protected function getPage() { + + # On check pour avoir le numero de page + if(preg_match('/page([0-9]*)/',$this->get,$capture)) + $this->page = $capture[1]; + else + $this->page = 1; + } + + /** + * Méthode qui récupere la liste des articles + * + * @param publi before, after ou all => on récupère tous les fichiers (date) ? + * @return boolean vrai si articles trouvés, sinon faux + * @author Stéphane F + **/ + public function getArticles($publi='before') { + + # On fait notre traitement sur notre tri + $ordre = $this->mapTri($this->tri); + # On calcule la valeur start + $start = $this->bypage*($this->page-1); + # On recupere nos fichiers (tries) selon le motif, la pagination, la date de publication + if($aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,$start,$this->bypage,$publi)) { + # on mémorise le nombre total d'articles trouvés + foreach($aFiles as $k=>$v) # On parcourt tous les fichiers + $array[$k] = $this->parseArticle(PLX_ROOT.$this->aConf['racine_articles'].$v); + # On stocke les enregistrements dans un objet plxRecord + $this->plxRecord_arts = new plxRecord($array); + return true; + } + else return false; + } + + /** + * Méthode qui retourne les informations $output en analysant + * le nom du fichier de l'article $filename + * + * @param filename fichier de l'article à traiter + * @return array information à récupérer + * @author Stephane F + **/ + public function artInfoFromFilename($filename) { + + # On effectue notre capture d'informations + if(preg_match('/(_?[0-9]{4}).([0-9,|home|draft]*).([0-9]{3}).([0-9]{12}).([a-z0-9-]+).xml$/',$filename,$capture)) { + return array( + 'artId' => $capture[1], + 'catId' => $capture[2], + 'usrId' => $capture[3], + 'artDate' => $capture[4], + 'artUrl' => $capture[5] + ); + } + } + + /** + * Méthode qui parse l'article du fichier $filename + * + * @param filename fichier de l'article à parser + * @return array + * @author Anthony GUÉRIN, Florent MONTHEL, Stéphane F + **/ + public function parseArticle($filename) { + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # Recuperation des valeurs de nos champs XML + $art['title'] = plxUtils::getValue($values[$iTags['title'][0]]['value']); + $art['allow_com'] = plxUtils::getValue($values[$iTags['allow_com'][0]]['value']); + $art['template'] = plxUtils::getValue($values[$iTags['template'][0]]['value'],'article.php'); + $art['chapo'] = plxUtils::getValue($values[$iTags['chapo'][0]]['value']); + $art['content'] = plxUtils::getValue($values[$iTags['content'][0]]['value']); + $art['tags'] = plxUtils::getValue($values[ $iTags['tags'][0] ]['value']); + $meta_description = plxUtils::getValue($iTags['meta_description'][0]); + $art['meta_description'] = plxUtils::getValue($values[$meta_description]['value']); + $meta_keywords = plxUtils::getValue($iTags['meta_keywords'][0]); + $art['meta_keywords'] = plxUtils::getValue($values[$meta_keywords]['value']); + $art['title_htmltag'] = isset($iTags['title_htmltag']) ? plxUtils::getValue($values[$iTags['title_htmltag'][0]]['value']) : ''; + # Informations obtenues en analysant le nom du fichier + $art['filename'] = $filename; + $tmp = $this->artInfoFromFilename($filename); + $art['numero'] = $tmp['artId']; + $art['author'] = $tmp['usrId']; + $art['categorie'] = $tmp['catId']; + $art['url'] = $tmp['artUrl']; + $art['date'] = $tmp['artDate']; + $art['nb_com'] = $this->getNbCommentaires('/^'.$art['numero'].'.[0-9]{10}.[0-9]+.xml$/'); + + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorParseArticle')); + # On retourne le tableau + return $art; + } + + /** + * Méthode qui retourne le nombre de commentaires respectants le motif $motif et le paramètre $publi + * + * @param motif motif de recherche des commentaires + * @param publi before, after ou all => on récupère tous les fichiers (date) ? + * @return integer + * @author Florent MONTHEL + **/ + public function getNbCommentaires($motif,$publi='before') { + + if($coms = $this->plxGlob_coms->query($motif,'com','sort',0,false,$publi)) + return sizeof($coms); + else + return 0; + } + + /** + * Méthode qui retourne les informations $output en analysant + * le nom du fichier du commentaire $filename + * + * @param filename fichier du commentaire à traiter + * @return array information à récupérer + * @author Stephane F + **/ + public function comInfoFromFilename($filename) { + # On effectue notre capture d'informations + if(preg_match('/([[:punct:]]?)([0-9]{4}).([0-9]{10})-([0-9])+.xml$/',$filename,$capture)) { + return array( + 'comStatus' => $capture[1], + 'artId' => $capture[2], + 'comDate' => plxDate::timestamp2Date($capture[3]), + 'comId' => $capture[3].'-'.$capture[4], + 'comIdx' => $capture[4] + ); + } + } + + /** + * Méthode qui parse le commentaire du fichier $filename + * + * @param filename fichier du commentaire à parser + * @return array + * @author Florent MONTHEL + **/ + public function parseCommentaire($filename) { + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # Recuperation des valeurs de nos champs XML + $com['author'] = plxUtils::getValue($values[ $iTags['author'][0]]['value']); + if(isset($iTags['type'])) + $com['type'] = plxUtils::getValue($values[ $iTags['type'][0]]['value'],'normal'); + else + $com['type'] = 'normal'; + $com['ip'] = plxUtils::getValue($values[$iTags['ip'][0]]['value']); + $com['mail'] = plxUtils::getValue($values[$iTags['mail'][0]]['value']); + $com['site'] = plxUtils::getValue($values[$iTags['site'][0]]['value']); + $com['content'] = trim($values[ $iTags['content'][0] ]['value']); + # Informations obtenues en analysant le nom du fichier + $tmp = $this->comInfoFromFilename(basename($filename)); + $com['status'] = $tmp['comStatus']; + $com['numero'] = $tmp['comId']; + $com['article'] = $tmp['artId']; + $com['date'] = $tmp['comDate']; + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorParseCommentaire')); + # On retourne le tableau + return $com; + } + + /** + * Méthode qui enregistre dans un objet plxRecord tous les commentaires + * respectant le motif $motif et la limite $limite + * + * @param motif motif de recherche des commentaires + * @param ordre ordre du tri : sort ou rsort + * @param start commencement + * @param limite nombre de commentaires à retourner + * @param publi before, after ou all => on récupère tous les fichiers (date) ? + * @return null + * @author Florent MONTHEL + **/ + public function getCommentaires($motif,$ordre='sort',$start=0,$limite=false,$publi='before') { + + # On recupère les fichiers des commentaires + $aFiles = $this->plxGlob_coms->query($motif,'com',$ordre,$start,$limite,$publi); + if($aFiles) { # On a des fichiers + foreach($aFiles as $k=>$v) # On parcourt tous les fichiers + $array[ $k ] = $this->parseCommentaire(PLX_ROOT.$this->aConf['racine_commentaires'].$v); + # On stocke les enregistrements dans un objet plxRecord + $this->plxRecord_coms = new plxRecord($array); + return true; + } + else return false; + } + + /** + * Méthode qui crée un nouveau commentaire pour l'article $artId + * + * @param artId identifiant de l'article en question + * @param content tableau contenant les valeurs du nouveau commentaire + * @return string + * @author Florent MONTHEL, Stéphane F + **/ + public function newCommentaire($artId,$content) { + # Hook plugins + if(eval($this->plxPlugins->callHook('plxMotorNewCommentaire'))) return; + # On verifie que le capcha est correct + if($this->aConf['capcha'] == 0 OR $_SESSION['capcha'] == sha1($content['rep'])) { + if(!empty($content['name']) AND !empty($content['content'])) { # Les champs obligatoires sont remplis + $comment=array(); + $comment['type'] = 'normal'; + $comment['author'] = plxUtils::strCheck(trim($content['name'])); + $comment['content'] = plxUtils::strCheck(trim($content['content'])); + # On verifie le mail + $comment['mail'] = (plxUtils::checkMail(trim($content['mail'])))?trim($content['mail']):''; + # On verifie le site + $comment['site'] = (plxUtils::checkSite($content['site'])?$content['site']:''); + # On recupere l'adresse IP du posteur + $comment['ip'] = plxUtils::getIp(); + # On genere le nom du fichier selon l'existence ou non d'un fichier du meme nom + $time = time(); + $i = 0; + do { # On boucle en testant l'existence du fichier (cas de plusieurs commentaires/sec pour un article) + $i++; + if($this->aConf['mod_com']) # On modere le commentaire => underscore + $comment['filename'] = '_'.$artId.'.'.$time.'-'.$i.'.xml'; + else # On publie le commentaire directement + $comment['filename'] =$artId.'.'.$time.'-'.$i.'.xml'; + } while(file_exists(PLX_ROOT.$this->aConf['racine_commentaires'].$comment['filename'])); + # On peut creer le commentaire + if($this->addCommentaire($comment)) { # Commentaire OK + if($this->aConf['mod_com']) # En cours de moderation + return 'mod'; + else # Commentaire publie directement, on retourne son identifiant + return 'c'.$time.'-'.$i; + } else { # Erreur lors de la création du commentaire + return L_NEWCOMMENT_ERR; + } + } else { # Erreur de remplissage des champs obligatoires + return L_NEWCOMMENT_FIELDS_REQUIRED; + } + } else { # Erreur de verification capcha + return L_NEWCOMMENT_ERR_ANTISPAM; + } + } + + /** + * Méthode qui crée physiquement le fichier XML du commentaire + * + * @param comment array avec les données du commentaire à ajouter + * @return booléen + * @author Anthony GUÉRIN, Florent MONTHEL et Stéphane F + **/ + public function addCommentaire($content) { + # Hook plugins + if(eval($this->plxPlugins->callHook('plxMotorAddCommentaire'))) return; + # On genere le contenu de notre fichier XML + $xml = "\n"; + $xml .= "\n"; + $xml .= "\t\n"; + $xml .= "\t".$content['type']."\n"; + $xml .= "\t".$content['ip']."\n"; + $xml .= "\t\n"; + $xml .= "\t\n"; + $xml .= "\t\n"; + # Hook plugins + eval($this->plxPlugins->callHook('plxMotorAddCommentaireXml')); + $xml .= "\n"; + # On ecrit ce contenu dans notre fichier XML + return plxUtils::write($xml, PLX_ROOT.$this->aConf['racine_commentaires'].$content['filename']); + } + + /** + * Méthode qui parse le fichier des tags et alimente + * le tableau aTags + * + * @param filename emplacement du fichier XML contenant les tags + * @return null + * @author Stephane F. + **/ + public function getTags($filename) { + + if(!is_file($filename)) return; + + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + $array = array(); + # On verifie qu'il existe des tags "file" + if(isset($iTags['article'])) { + # On compte le nombre de tags "file" + $nb = sizeof($iTags['article']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + if(isset($values[ $iTags['article'][$i] ]['value'])) + $array[ $values[ $iTags['article'][$i] ]['attributes']['number'] ]['tags'] = trim($values[ $iTags['article'][$i] ]['value']); + else + $array[ $values[ $iTags['article'][$i] ]['attributes']['number'] ]['tags'] = ''; + $array[ $values[ $iTags['article'][$i] ]['attributes']['number'] ]['date'] = $values[ $iTags['article'][$i] ]['attributes']['date']; + $array[ $values[ $iTags['article'][$i] ]['attributes']['number'] ]['active'] = $values[ $iTags['article'][$i] ]['attributes']['active']; + } + } + # Mémorisation de la liste des tags + $this->aTags = $array; + } + + /** + * Méthode qui lance le téléchargement d'un document + * + * @param cible cible de téléchargement cryptée + * @return booleen + * @author Stephane F. et Florent MONTHEL + **/ + public function sendTelechargement($cible) { + + # On décrypte le nom du fichier + $file = PLX_ROOT.$this->aConf['documents'].plxEncrypt::decryptId($cible); + # Hook plugins + if(eval($this->plxPlugins->callHook('plxMotorSendDownload'))) return; + # On lance le téléchargement et on check le répertoire documents + if(file_exists($file) AND preg_match('#^'.str_replace('\\', '/', realpath(PLX_ROOT.$this->aConf['documents']).'#'), str_replace('\\', '/', realpath($file)))) { + header('Content-Description: File Transfer'); + header('Content-Type: application/download'); + header('Content-Disposition: attachment; filename='.basename($file)); + header('Content-Transfer-Encoding: binary'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: no-cache'); + header('Content-Length: '.filesize($file)); + readfile($file); + exit; + } else { # On retourne false + return false; + } + + } + + /** + * Méthode qui réécrit les urls pour supprimer le ? + * + * @param url url à réécrire + * @return string url réécrite + * @author Stéphane F + **/ + public function urlRewrite($url='') { + + if($url=='' OR $url=='?') return $this->racine; + + preg_match('/^([0-9a-z\_\-\.\/]+)?[\?]?([0-9a-z\_\-\.\/,&=%]+)?[\#]?(.*)$/i', $url, $args); + + if($this->aConf['urlrewriting']) { + $new_url = str_replace('index.php', '', $args[1]); + $new_url = str_replace('feed.php', 'feed/', $new_url); + $new_url .= !empty($args[2])?$args[2]:''; + if(empty($new_url)) $new_url = $this->path_url; + $new_url .= !empty($args[3])?'#'.$args[3]:''; + return str_replace('&', '&', $this->racine.$new_url); + } else { + if(empty($args[1]) AND !empty($args[2])) $args[1] = 'index.php'; + $new_url = !empty($args[1])?$args[1]:$this->path_url; + $new_url .= !empty($args[2])?'?'.$args[2]:''; + $new_url .= !empty($args[3])?'#'.$args[3]:''; + return str_replace('&', '&', $this->racine.$new_url); + } + } + + /** + * Méthode qui comptabilise le nombre d'articles du site. + * + * @param select critere de recherche: draft, published, all, n° categories séparés par un | + * @param userid filtre sur les articles d'un utilisateur donné + * @param mod filtre sur les articles en attente de validation + * @param publi selection en fonciton de la date du jour (all, before, after) + * @return integer nombre d'articles + * @scope global + * @author Stephane F + **/ + public function nbArticles($select='all', $userId='[0-9]{3}', $mod='_?', $publi='all') { + + $nb = 0; + if($select == 'all') + $motif = '[home|draft|0-9,]*'; + elseif($select=='published') + $motif = '[home|0-9,]*'; + elseif($select=='draft') + $motif = '[\w,]*[draft][\w,]*'; + else + $motif = $select; + + if($arts = $this->plxGlob_arts->query('/^'.$mod.'[0-9]{4}.('.$motif.').'.$userId.'.[0-9]{12}.[a-z0-9-]+.xml$/', 'art', 'sort', 0, false, $publi)) + $nb = sizeof($arts); + + return $nb; + } + + /** + * Méthode qui comptabilise le nombre de commentaires du site + * + * @param select critere de recherche des commentaires: all, online, offline + * @param publi type de sélection des commentaires: all, before, after + * @return integer nombre de commentaires + * @scope global + * @author Stephane F + **/ + public function nbComments($select='online', $publi='all') { + + $nb = 0; + if($select == 'all') + $motif = '/[^[:punct:]?][0-9]{4}.(.*).xml$/'; + elseif($select=='offline') + $motif = '/^_[0-9]{4}.(.*).xml$/'; + elseif($select=='online') + $motif = '/^[0-9]{4}.(.*).xml$/'; + else + $motif = $select; + + if($coms = $this->plxGlob_coms->query($motif,'com','sort',0,false,$publi)) + $nb = sizeof($coms); + + return $nb; + } + + /** + * Méthode qui recherche les articles appartenant aux catégories actives + * + * @return null + * @scope global + * @author Stéphane F. + **/ + public function getActiveArts() { + if($this->plxGlob_arts->aFiles) { + $datetime=date('YmdHi'); + foreach($this->plxGlob_arts->aFiles as $filename) { + if(preg_match('/^([0-9]{4}).(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.([0-9]{12}).[a-z0-9-]+.xml$/', $filename, $capture)) { + if($capture[2]<=$datetime) { # on ne prends que les articles publiés + $this->activeArts[$capture[1]]=1; + } + } + } + } + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.msg.php b/src/core/lib/class.plx.msg.php new file mode 100644 index 0000000..12bb77c --- /dev/null +++ b/src/core/lib/class.plx.msg.php @@ -0,0 +1,52 @@ +'.$_SESSION['error'].'

'; + elseif(isset($_SESSION['info']) AND !empty($_SESSION['info'])) + echo '

'.$_SESSION['info'].'

'; + unset($_SESSION['error']); + unset($_SESSION['info']); + } +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.plugins.php b/src/core/lib/class.plx.plugins.php new file mode 100644 index 0000000..3bb2ad6 --- /dev/null +++ b/src/core/lib/class.plx.plugins.php @@ -0,0 +1,585 @@ +default_lang=$default_lang; + } + + /** + * Méthode qui renvoit une instance d'un plugin + * + * @param plugName nom du plugin + * @return object object de type plxPlugin / false en cas d'erreur + * @return null + * @author Stephane F + **/ + public function getInstance($plugName) { + $filename = PLX_PLUGINS.$plugName.'/'.$plugName.'.php'; + if(is_file($filename)) { + include_once($filename); + if (class_exists($plugName)) { + return new $plugName($this->default_lang); + } + } + return false; + } + + /** + * Méthode qui charge le fichier plugins.xml + * + * @return null + * @author Stephane F + **/ + public function loadPlugins() { + + if(!is_file(path('XMLFILE_PLUGINS'))) return; + # Mise en place du parseur XML + $data = implode('',file(path('XMLFILE_PLUGINS'))); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "plugin" + if(isset($iTags['plugin'])) { + # On compte le nombre de tags "plugin" + $nb = sizeof($iTags['plugin']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $name = $values[$iTags['plugin'][$i] ]['attributes']['name']; + if($instance=$this->getInstance($name)) { + $this->aPlugins[$name] = $instance; + $this->aHooks = array_merge_recursive($this->aHooks, $instance->getHooks()); + } + } + } + } + + /** + * Méthode qui execute les hooks des plugins + * + * @param hookname nom du hook à appliquer + * @param parms parametre ou liste de paramètres sous forme de array + * @return null + * @author Stephane F + **/ + public function callHook($hookName, $parms=null) { + if(isset($this->aHooks[$hookName])) { + ob_start(); + foreach($this->aHooks[$hookName] as $callback) { + $return = $this->aPlugins[$callback['class']]->$callback['method']($parms); + } + if(isset($return)) + return array('?>'.ob_get_clean().''.ob_get_clean().'aPlugins as $plugName => $plugInstance) { + $plugInstance->getInfos(); + } + } + + /** + * Méthode qui renvoie la liste des plugins inactifs + * + * @return array liste des plugins inactifs + * @author Stephane F + **/ + public function getInactivePlugins() { + + $aPlugins = array(); + $dirs = plxGlob::getInstance(PLX_PLUGINS, true); + if(sizeof($dirs->aFiles)>0) { + foreach($dirs->aFiles as $plugName) { + if(!isset($this->aPlugins[$plugName]) AND $plugInstance=$this->getInstance($plugName)) { + $plugInstance->getInfos(); + $aPlugins[$plugName] = $plugInstance; + } + } + } + ksort($aPlugins); + return $aPlugins; + } + + /** + * Méthode qui sauvegarde le fichier plugins.xml et qui génère les fichiers admin.css et site.css des plugins + * + * @param content array content $_POST + * @return boolean resultat de la sauvegarde / TRUE = ok + * @author Stephane F + **/ + public function saveConfig($content) { + + # activation des plugins + if(isset($content['selection']) AND $content['selection']=='activate') { + foreach($content['chkAction'] as $idx => $plugName) { + if($plugInstance = $this->getInstance($plugName)) { + if(method_exists($plugName, 'OnActivate')) + $plugInstance->OnActivate(); + $this->aPlugins[$plugName] = $plugInstance; + } + } + } + # désactivation des plugins + elseif(isset($content['selection']) AND $content['selection']=='deactivate') { + foreach($content['chkAction'] as $idx => $plugName) { + if($plugInstance = $this->aPlugins[$plugName]) { + if(method_exists($plugName, 'OnDeActivate')) + $plugInstance->OnDeActivate(); + unset($this->aPlugins[$plugName]); + } + } + } + # suppression des plugins + elseif(isset($content['selection']) AND $content['selection']=='delete') { + foreach($content['chkAction'] as $idx => $plugName) { + if($this->deleteDir(realpath(PLX_PLUGINS.$plugName))) { + # suppression fichier de config du plugin + if(is_file(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.xml')) + unlink(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.xml'); + # suppression fichier site.css du plugin + if(is_file(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.site.css')) + unlink(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.site.css'); + # suppression fichier admin.css du plugin + if(is_file(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.admin.css')) + unlink(PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.admin.css'); + unset($this->aPlugins[$plugName]); + } + } + } + # tri des plugins par ordre de chargement + elseif(isset($content['update'])) { + $aPlugins = array(); + asort($content['plugOrdre']); + foreach($content['plugOrdre'] as $plugName => $idx) { + $aPlugins[$plugName] = $this->aPlugins[$plugName]; + } + $this->aPlugins = $aPlugins; + } + + # génération du cache css des plugins + $this->cssCache('site'); + $this->cssCache('admin'); + + # Début du fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aPlugins as $k=>$v) { + $xml .= "\t\n"; + } + $xml .= ""; + + # On écrit le fichier + if(plxUtils::write($xml,path('XMLFILE_PLUGINS'))) + return plxMsg::Info(L_SAVE_SUCCESSFUL); + else + return plxMsg::Error(L_SAVE_ERR.' '.path('XMLFILE_PLUGINS')); + + } + + /** + * Méthode récursive qui supprime tous les dossiers et les fichiers d'un répertoire + * + * @param deldir répertoire de suppression + * @return boolean résultat de la suppression + * @author Stephane F + **/ + public function deleteDir($deldir) { #fonction récursive + + if(is_dir($deldir) AND !is_link($deldir)) { + if($dh = opendir($deldir)) { + while(FALSE !== ($file = readdir($dh))) { + if($file != '.' AND $file != '..') { + $this->deleteDir(($deldir!='' ? $deldir.'/' : '').$file); + } + } + closedir($dh); + } + return rmdir($deldir); + } + return unlink($deldir); + } + + /** + * Méthode qui génère le fichier css admin.css ou site.css + * + * @param type type du fichier (admin|site) + * @return boolean vrai si cache généré + * @author Stephane F + **/ + public function cssCache($type) { + $cache = ''; + foreach($this->aPlugins as $plugName => $plugInstance) { + $filename = PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.'.$type.'.css'; + if(is_file($filename)) { + $cache .= trim(file_get_contents($filename)); + } else { + $filename = PLX_PLUGINS.$plugName.'/css/'.$type.'.css'; + if(is_file($filename)) { + $cache .= trim(file_get_contents($filename)); + } + } + } + if(is_file(PLX_PLUGINS.$type.'.css')) + unlink(PLX_PLUGINS.$type.'.css'); + if($cache!='') { + return plxUtils::write(plxUtils::minify($cache), PLX_PLUGINS.$type.'.css'); + } + return true; + } +} + +/** + * Classe plxPlugin destiné à créer un plugin + * + * @package PLX + * @author Stephane F + **/ +class plxPlugin { + + protected $aInfos=array(); # tableau des infos sur le plugins venant du fichier infos.xml + protected $aParams=array(); # tableau des paramètres sur le plugins venant du fichier parameters.xml + protected $aHooks=array(); # tableau des hooks du plugin + protected $aLang=array(); # tableau contenant les clés de traduction de la langue courante de PluXml + + protected $plug=array(); # tableau contenant des infos diverses pour le fonctionnement du plugin + protected $adminProfil=''; # profil(s) utilisateur(s) autorisé(s) à acceder à la page admin.php du plugin + protected $configProfil=''; # profil(s) utilisateur(s) autorisé(s) à acceder à la page config.php du plugin + + public $default_lang=DEFAULT_LANG; # langue par defaut de PluXml + public $adminMenu=false; # infos de customisation du menu pour accèder à la page admin.php du plugin + + /** + * Constructeur de la classe plxPlugin + * + * @param default_lang langue par défaut utilisée par PluXml + * @return null + * @author Stephane F + **/ + public function __construct($default_lang='') { + $this->default_lang = $default_lang; + $plugName= get_class($this); + $this->plug = array( + 'dir' => PLX_PLUGINS, + 'name' => $plugName, + 'filename' => PLX_PLUGINS.$plugName.'/'.$plugName.'.php', + 'parameters.xml'=> PLX_ROOT.PLX_CONFIG_PATH.'plugins/'.$plugName.'.xml', + 'infos.xml' => PLX_PLUGINS.$plugName.'/infos.xml' + ); + $this->aLang = $this->loadLang(PLX_PLUGINS.$plugName.'/lang/'.$this->default_lang.'.php'); + $this->loadParams(); + if(defined('PLX_ADMIN')) + $this->getInfos(); + } + + /** + * Méthode qui renvoit le(s) profil(s) utilisateur(s) autorisé(s) à acceder à la page admin.php du plugin + * + * @return string profil(s) utilisateur(s) + * @author Stephane F + **/ + public function getAdminProfil() { + return $this->adminProfil; + } + + /** + * Méthode qui mémorise le(s) profil(s) utilisateur(s) autorisé(s) à acceder à la page admin.php du plugin + * + * @param profil profil(s) (PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR, PROFIL_WRITER) + * @return null + * @author Stephane F + **/ + public function setAdminProfil($profil) { + $this->adminProfil=func_get_args(); + } + + /** + * Méthode qui permet de personnaliser le menu qui permet d'acceder à la page admin.php du plugin + * + * @param title titre du menu + * @param position position du menu dans la sidebar + * @param caption légende du menu (balise title du lien) + * @return null + * @author Stephane F + **/ + public function setAdminMenu($title='', $position='', $caption='') { + $this->adminMenu = array( + 'title'=>$title, + 'position'=>($position==''?false:$position), + 'caption'=>($caption==''?$title:$caption) + ); + } + + /** + * Méthode qui renvoit le(s) profil(s) utilisateur(s) autorisé(s) à accéder à la page config.php du plugin + * + * @return string profil(s) utilisateur(s) + * @author Stephane F + **/ + public function getConfigProfil() { + return $this->configProfil; + } + + /** + * Méthode qui mémorise le(s) profil(s) utilisateur(s) autorisé(s) à accéder à la page config.php du plugin + * + * @param profil profil(s) (PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR, PROFIL_WRITER) + * @return null + * @author Stephane F + **/ + public function setConfigProfil($profil) { + $this->configProfil=func_get_args(); + } + + /** + * Méthode qui retourne les hooks définis dans le plugin + * + * @return array tableau des hooks du plugin + * @author Stephane F + **/ + public function getHooks() { + return $this->aHooks; + } + + /** + * Méthode qui charge le fichier de langue par défaut du plugin + * + * @param filename fichier de langue à charger + * @return array tableau contenant les clés de traduction + * @author Stephane F + **/ + public function loadLang($filename) { + if(!is_file($filename)) return; + include($filename); + return $LANG; + } + + /** + * Méthode qui affiche une clé de traduction dans la langue par défaut de PluXml + * + * @param key clé de traduction à récuperer + * @return stdio + * @author Stephane F + **/ + public function lang($key='') { + if(isset($this->aLang[$key])) + echo $this->aLang[$key]; + else + echo $key; + } + + /** + * Méthode qui retourne une clé de traduction dans la langue par défaut de PluXml + * + * @param key clé de traduction à récuperer + * @return string clé de traduite + * @author Stephane F + **/ + public function getLang($key='') { + if(isset($this->aLang[$key])) + return $this->aLang[$key]; + else + return $key; + } + + /** + * Méthode qui charge le fichier des parametres du plugin parameters.xml + * + * @return null + * @author Stephane F + **/ + public function loadParams() { + + if(!is_file($this->plug['parameters.xml'])) return; + + # Mise en place du parseur XML + $data = implode('',file($this->plug['parameters.xml'])); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "parameter" + if(isset($iTags['parameter'])) { + # On compte le nombre de tags "parameter" + $nb = sizeof($iTags['parameter']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + if(isset($values[$iTags['parameter'][$i]]['attributes']['name'])) { + $name=$values[$iTags['parameter'][$i]]['attributes']['name']; + $type=isset($values[$iTags['parameter'][$i]]['attributes']['type'])?$values[$iTags['parameter'][$i]]['attributes']['type']:'numeric'; + $value=isset($values[$iTags['parameter'][$i]]['value'])?$value=$values[$iTags['parameter'][$i]]['value']:''; + $this->aParams[$name] = array( + 'type' => $type, + 'value' => $value + ); + } + } + } + } + + /** + * Méthode qui sauvegarde le fichier des parametres du plugin parameters.xml + * + * @return boolean resultat de la sauvegarde / TRUE = ok + * @author Stephane F + **/ + public function saveParams() { + + # Début du fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->aParams as $k=>$v) { + switch($v['type']) { + case 'numeric': + $xml .= "\t".intval($v['value'])."\n"; + break; + case 'string': + $xml .= "\t".plxUtils::cdataCheck(plxUtils::strCheck($v['value']))."\n"; + break; + case 'cdata': + $xml .= "\t\n"; + break; + } + } + $xml .= ""; + + # On écrit le fichier + if(plxUtils::write($xml,$this->plug['parameters.xml'])) { + # suppression ancien fichier parameters.xml s'il existe encore (5.1.7+) + if(file_exists($this->plug['dir'].$this->plug['name'].'/parameters.xml')) + unlink($this->plug['dir'].$this->plug['name'].'/parameters.xml'); + return plxMsg::Info(L_SAVE_SUCCESSFUL); + } + else + return plxMsg::Error(L_SAVE_ERR.' '.$this->plug['parameters.xml']); + } + + /** + * Méthode qui renvoie le tableau des paramètres + * + * @return array tableau aParams + * @author Stephane F + **/ + public function getParams() { + if(sizeof($this->aParams)>0) + return $this->aParams; + else + return false; + } + + /** + * Méthode qui renvoie la valeur d'un parametre du fichier parameters.xml + * + * @param param nom du parametre à recuperer + * @return string valeur du parametre + * @author Stephane F + **/ + public function getParam($param) { + return (isset($this->aParams[$param])? $this->aParams[$param]['value']:''); + } + + /** + * Méthode qui modifie la valeur d'un parametre du fichier parameters.xml + * + * @param param nom du parametre à recuperer + * @param value valeur du parametre + * @type type type du parametre (numeric, string, cdata) + * @return null + * @author Stephane F + **/ + public function setParam($param, $value,$type='') { + + if(in_array($type,array('numeric','string','cdata'))) + $this->aParams[$param]['type']=$type; + + if($this->aParams[$param]['type']=='numeric') + $this->aParams[$param]['value']=intval($value); + else + $this->aParams[$param]['value']=$value; + } + + /** + * Méthode qui recupere les données du fichier infos.xml + * + * @return null + * @author Stephane F + **/ + public function getInfos() { + + if(!is_file($this->plug['infos.xml'])) return; + + # Mise en place du parseur XML + $data = implode('',file($this->plug['infos.xml'])); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + $this->aInfos = array( + 'title' => (isset($iTags['title']) AND isset($values[$iTags['title'][0]]['value']))?$values[$iTags['title'][0]]['value']:'', + 'author' => (isset($iTags['author']) AND isset($values[$iTags['author'][0]]['value']))?$values[$iTags['author'][0]]['value']:'', + 'version' => (isset($iTags['version']) AND isset($values[$iTags['version'][0]]['value']))?$values[$iTags['version'][0]]['value']:'', + 'date' => (isset($iTags['date']) AND isset($values[$iTags['date'][0]]['value']))?$values[$iTags['date'][0]]['value']:'', + 'site' => (isset($iTags['site']) AND isset($values[$iTags['site'][0]]['value']))?$values[$iTags['site'][0]]['value']:'', + 'description' => (isset($iTags['description']) AND isset($values[$iTags['description'][0]]['value']))?$values[$iTags['description'][0]]['value']:'', + ); + + } + + /** + * Méthode qui renvoie la valeur d'un parametre du fichier infos.xml + * + * @param param nom du parametre à recuperer + * @return string valeur de l'info + * @author Stephane F + **/ + public function getInfo($param) { + return (isset($this->aInfos[$param])?$this->aInfos[$param]:''); + } + + /** + * Méthode qui ajoute un hook à executer + * + * @param hookname nom du hook + * @param userfunction nom de la fonction du plugin à executer + * @return null + * @author Stephane F + **/ + public function addHook($hookname, $userfunction) { + if(method_exists(get_class($this), $userfunction)) { + $this->aHooks[$hookname][]=array( + 'class' => get_class($this), + 'method' => $userfunction + ); + } + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.record.php b/src/core/lib/class.plx.record.php new file mode 100644 index 0000000..f3ca17c --- /dev/null +++ b/src/core/lib/class.plx.record.php @@ -0,0 +1,66 @@ +result = &$array; + $this->size = sizeof($this->result); + } + + /** + * Méthode qui incrémente judicieusement la variable $i + * + * @return booléen + * @author Anthony GUÉRIN + **/ + public function loop() { + + if($this->i < $this->size-1) { # Tant que l'on est pas en fin de tableau + $this->i++; + return true; + } + # On sort par une valeur negative + $this->i = -1; + return false; + } + + /** + * Méthode qui récupère la valeur du champ $field + * correspondant à la position courante + * + * @param field clef du tableau à retourner + * @return string ou false + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function f($field) { + + if($this->i === -1) # Compteur négatif + $this->i++; + # On controle que le champ demande existe bien + if(isset($this->result[ $this->i ][ $field ])) + return $this->result[ $this->i ][ $field ]; + else # Sinon on sort par une valeur negative + return false; + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.show.php b/src/core/lib/class.plx.show.php new file mode 100644 index 0000000..e802869 --- /dev/null +++ b/src/core/lib/class.plx.show.php @@ -0,0 +1,1715 @@ +plxMotor = plxMotor::getInstance(); + + # Chargement du fichier de lang du theme + $langfile = PLX_ROOT.$this->plxMotor->aConf['racine_themes'].$this->plxMotor->style.'/lang/'.$this->plxMotor->aConf['default_lang'].'.php'; + if(is_file($langfile)) { + include($langfile); + $this->lang = $LANG; + } + # Hook Plugins + eval($this->plxMotor->plxPlugins->callHook('plxShowConstruct')); + } + + /** + * Méthode qui affiche les urls réécrites + * + * @param url url à réécrire + * @return stdout + * @author Stéphane F + **/ + public function urlRewrite($url='') { + + echo $this->plxMotor->urlRewrite($url); + } + + /** + * Méthode qui affiche le type de compression http + * + * @return stdout + * @scope global + * @author Stephane F + **/ + public function httpEncoding() { + + $encoding = plxUtils::httpEncoding(); + if($this->plxMotor->aConf['gzip'] AND $encoding) + printf(L_HTTPENCODING, strtoupper($encoding)); + + } + + /** + * Méthode qui affiche l'URL du site + * + * @return stdout + * @scope global + * @author Florent MONTHEL + **/ + public function racine() { + + echo $this->plxMotor->racine; + } + + /** + * Méthode qui retourne le mode d'affichage + * + * @return string mode d'affichage (home, article, categorie, static ou erreur) + * @scope global + * @author Stephane F. + **/ + public function mode() { + + return $this->plxMotor->mode; + } + + /** + * Méthode qui affiche le charset selon la casse $casse + * + * @param casse casse min ou maj + * @return stdout + * @scope global + * @author Florent MONTHEL + **/ + public function charset($casse='min') { + + if($casse != 'min') # En majuscule + echo strtoupper(PLX_CHARSET); + else # En minuscule + echo strtolower(PLX_CHARSET); + } + + /** + * Méthode qui affiche la version de PluXml + * + * @return stdout + * @scope global + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function version() { + + echo $this->plxMotor->version; + } + + /** + * Méthode qui affiche ou renvoit la langue par défaut + * + * @param echo si à VRAI affichage à l'écran + * @return stdout/string + * @author Stéphane F + **/ + public function defaultLang($echo=true) { + if($echo) + echo $this->plxMotor->aConf['default_lang']; + else + return $this->plxMotor->aConf['default_lang']; + } + + + /** + * Méthode qui affiche la variable get de l'objet plxMotor (variable $_GET globale) + * + * @return stdout + * @scope global + * @author Florent MONTHEL + **/ + public function get() { + + echo $this->plxMotor->get; + } + + /** + * Méthode qui affiche le temps d'exécution de la page + * + * @return stdout + * @scope global + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function chrono() { + + echo round(getMicrotime()-PLX_MICROTIME,3).'s'; + } + + /** + * Méthode qui affiche le dossier de stockage du style actif + * + * @return stdout + * @scope global + * @author Stephane F + **/ + public function template() { + + echo $this->plxMotor->urlRewrite($this->plxMotor->aConf['racine_themes'].$this->plxMotor->style); + + } + + /** + * Méthode qui affiche le titre de la page selon le mode + * + * @return stdout + * @scope global + * @author Anthony GUÉRIN, Florent MONTHEL, Stéphane F + **/ + public function pageTitle() { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowPageTitle'))) return; + + if($this->plxMotor->mode == 'home') { + if(!empty($this->plxMotor->aConf['description'])) + echo plxUtils::strCheck($this->plxMotor->aConf['title'].' - '.$this->plxMotor->aConf['description']); + else + echo plxUtils::strCheck($this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'categorie') { + $title_htmltag = $this->plxMotor->aCats[$this->plxMotor->cible ]['title_htmltag']; + if($title_htmltag!='') + echo plxUtils::strCheck($title_htmltag.' - '.$this->plxMotor->aConf['title']); + else + echo plxUtils::strCheck($this->plxMotor->aCats[$this->plxMotor->cible ]['name'].' - '.$this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'article') { + $title_htmltag = trim($this->plxMotor->plxRecord_arts->f('title_htmltag')); + if($title_htmltag!='') + echo plxUtils::strCheck($title_htmltag.' - '.$this->plxMotor->aConf['title']); + else + echo plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title').' - '.$this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'static') { + $title_htmltag = $this->plxMotor->aStats[$this->plxMotor->cible ]['title_htmltag']; + if($title_htmltag!='') + echo plxUtils::strCheck($title_htmltag.' - '.$this->plxMotor->aConf['title']); + else + echo plxUtils::strCheck($this->plxMotor->aStats[$this->plxMotor->cible ]['name'].' - '.$this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'archives') { + preg_match('/^(\d{4})(\d{2})?(\d{2})?/',$this->plxMotor->cible, $capture); + $year = !empty($capture[1]) ? ' '.$capture[1] : ''; + $month = !empty($capture[2]) ? ' '.plxDate::getCalendar('month', $capture[2]) : ''; + $day = !empty($capture[3]) ? ' '.plxDate::getCalendar('day', $capture[3]) : ''; + echo plxUtils::strCheck(L_PAGETITLE_ARCHIVES.$day.$month.$year.' - '.$this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'tags') { + echo plxUtils::strCheck(L_PAGETITLE_TAG.' '.$this->plxMotor->cibleName.' - '.$this->plxMotor->aConf['title']); + return; + } + if($this->plxMotor->mode == 'erreur') { + echo plxUtils::strCheck($this->plxMotor->plxErreur->getMessage().' - '.$this->plxMotor->aConf['title']); + return; + } + } + + /** + * Méthode qui affiche le meta passé en paramètre + * + * @param meta nom du meta à afficher (description, keywords,author) + * @return stdout + * @scope global + * @author Stéphane F + **/ + public function meta($meta='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowMeta'))) return; + + if(!in_array($meta, array('description','keywords','author'))) + return; + + $meta=strtolower($meta); + + if($this->plxMotor->mode == 'home') { + if(!empty($this->plxMotor->aConf['meta_'.$meta])) + echo ''."\n"; + return; + } + if($this->plxMotor->mode == 'article') { + if($meta=='author') + echo ''."\n"; + else { + $meta_content=trim($this->plxMotor->plxRecord_arts->f('meta_'.$meta)); + if(!empty($meta_content)) + echo ''."\n"; + elseif(!empty($this->plxMotor->aConf['meta_'.$meta])) + echo ''."\n"; + } + return; + } + if($this->plxMotor->mode == 'static') { + if(!empty($this->plxMotor->aStats[ $this->plxMotor->cible ]['meta_'.$meta])) + echo ''."\n"; + elseif(!empty($this->plxMotor->aConf['meta_'.$meta])) + echo ''."\n"; + return; + } + if($this->plxMotor->mode == 'categorie') { + if(!empty($this->plxMotor->aCats[ $this->plxMotor->cible ]['meta_'.$meta])) + echo ''."\n"; + elseif(!empty($this->plxMotor->aConf['meta_'.$meta])) + echo ''."\n"; + return; + } + } + + /** + * Méthode qui affiche le titre du blog linké (variable $type='link') ou non + * + * @param type type d'affichage: texte ou sous forme de lien + * @return stdout + * @scope global + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function mainTitle($type='') { + + $title = plxUtils::strCheck($this->plxMotor->aConf['title']); + if($type == 'link') # Type lien + echo ''.$title.''; + else # Type normal + echo $title; + } + + /** + * Méthode qui affiche le sous-titre du blog + * + * @return stdout + * @scope global + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function subTitle() { + + echo plxUtils::strCheck($this->plxMotor->aConf['description']); + } + + /** + * Méthode qui affiche la liste des catégories actives. + * Si la variable $extra est renseignée, un lien vers la + * page d'accueil (nommé $extra) sera mis en place en première + * position. + * + * @param extra nom du lien vers la page d'accueil + * @param format format du texte pour chaque catégorie (variable : #cat_id, #cat_status, #cat_url, #cat_name, #art_nb) + * @param include liste des catégories à afficher séparées par le caractère | (exemple: 001|003) + * @param exclude liste des catégories à ne pas afficher séparées par le caractère | (exemple: 002|003) + * @return stdout + * @scope global + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function catList($extra='', $format='
  • #cat_name
  • ', $include='', $exclude='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastCatList'))) return; + + # Si on a la variable extra, on affiche un lien vers la page d'accueil (avec $extra comme nom) + if($extra != '') { + $name = str_replace('#cat_id','cat-home',$format); + $name = str_replace('#cat_url',$this->plxMotor->urlRewrite(),$name); + $name = str_replace('#cat_name',plxUtils::strCheck($extra),$name); + $name = str_replace('#cat_status',($this->catId()=='home'?'active':'noactive'), $name); + $name = str_replace('#art_nb','',$name); + echo $name; + } + # On verifie qu'il y a des categories + if($this->plxMotor->aCats) { + foreach($this->plxMotor->aCats as $k=>$v) { + $in = (empty($include) OR preg_match('/('.$include.')/', $k)); + $ex = (!empty($exclude) AND preg_match('/('.$exclude.')/', $k)); + if($in AND !$ex) { + if(($v['articles']>0 OR $this->plxMotor->aConf['display_empty_cat']) AND ($v['menu']=='oui') AND $v['active']) { # On a des articles + # On modifie nos motifs + $name = str_replace('#cat_id','cat-'.intval($k),$format); + $name = str_replace('#cat_url',$this->plxMotor->urlRewrite('?categorie'.intval($k).'/'.$v['url']),$name); + $name = str_replace('#cat_name',plxUtils::strCheck($v['name']),$name); + $name = str_replace('#cat_status',($this->catId()==intval($k)?'active':'noactive'), $name); + $name = str_replace('#art_nb',$v['articles'],$name); + echo $name; + } + } + } # Fin du while + } + } + + /** + * Méthode qui retourne l'id de la catégorie en question (sans les 0 supplémentaires) + * + * @return int ou string + * @scope home,categorie,article,tags,archives + * @author Florent MONTHEL + **/ + public function catId() { + + # On va verifier que la categorie existe en mode categorie + if($this->plxMotor->mode == 'categorie' AND isset($this->plxMotor->aCats[ $this->plxMotor->cible ])) + return intval($this->plxMotor->cible); + # On va verifier que la categorie existe en mode article + if($this->plxMotor->mode == 'article' AND isset($this->plxMotor->aCats[ $this->plxMotor->plxRecord_arts->f('categorie') ])) + return intval($this->plxMotor->plxRecord_arts->f('categorie')); + # On va vérifier si c'est la catégorie home + if($this->plxMotor->mode == 'categorie' OR $this->plxMotor->mode == 'home' OR $this->plxMotor->mode == 'article') + return 'home'; + } + + /** + * Méthode qui affiche le contenu de la description d'une catégorie + * + * @param format format du texte à afficher (variable: #cat_description) + * @return stdout + * @scope categorie + * @author Stephane F. + **/ + public function catDescription($format='
    #cat_description
    ') { + + $desc = plxUtils::getValue($this->plxMotor->aCats[$this->plxMotor->cible]['description']); + if($this->plxMotor->mode AND $desc) + echo str_replace('#cat_description',$desc, $format); + } + + /** + * Méthode qui retourne l'url d'une catégorie + * + * @param id id de la categorie sous la forme numérique ou formatée (ex: 1 ou 001) + * @return string + * @author Stephane F. + **/ + public function catUrl($id) { + + $id=str_pad($id,3,'0',STR_PAD_LEFT); + if(isset($this->plxMotor->aCats[$id])) { + return $this->plxMotor->urlRewrite('?categorie'.intval($id).'/'.$this->plxMotor->aCats[$id]['url']); + } + } + + /** + * Méthode qui affiche le nom de la catégorie active (linké ou non) + * + * @param type type d'affichage : link => sous forme de lien + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Florent MONTHEL, Stephane F + **/ + public function catName($type='') { + + # On va verifier que la categorie existe en mode categorie + if($this->plxMotor->mode == 'categorie' AND isset($this->plxMotor->aCats[$this->plxMotor->cible])) { + # On recupere les infos de la categorie + $id = $this->plxMotor->cible; + $name = plxUtils::strCheck($this->plxMotor->aCats[$id]['name']); + $url = $this->catUrl($id); + # On effectue l'affichage + if($type == 'link') + echo ''.$name.''; + else + echo $name; + } + # On va verifier que la categorie existe en mode article + elseif($this->plxMotor->mode == 'article' AND isset($this->plxMotor->aCats[$this->plxMotor->plxRecord_arts->f('categorie')])) { + # On recupere les infos de la categorie + $id = $this->plxMotor->plxRecord_arts->f('categorie'); + $name = plxUtils::strCheck($this->plxMotor->aCats[ $id ]['name']); + $url = $this->catUrl($id); + # On effectue l'affichage + if($type == 'link') + echo ''.$name.''; + else + echo $name; + } + # Mode home + elseif($this->plxMotor->mode == 'home') { + if($type == 'link') + echo ''.L_HOMEPAGE.''; + else + echo L_HOMEPAGE; + } else { + echo L_UNCLASSIFIED; + } + } + + /** + * Méthode qui retourne l'identifiant de l'article en question (sans les 0 supplémentaires) + * + * @return int + * @scope home,categorie,article,tags,archives + * @author Florent MONTHEL + **/ + public function artId() { + + return intval($this->plxMotor->plxRecord_arts->f('numero')); + } + + /** + * Méthode qui affiche l'url de l'article de type relatif ou absolu + * + * @param type (deprecated) type de lien : relatif ou absolu + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Florent MONTHEL, Stephane F + **/ + public function artUrl($type='') { + + # On affiche l'URL + $id = intval($this->plxMotor->plxRecord_arts->f('numero')); + $url = $this->plxMotor->plxRecord_arts->f('url'); + echo $this->plxMotor->urlRewrite('?article'.$id.'/'.$url); + } + + /** + * Méthode qui affiche le titre de l'article linké (variable $type='link') ou non + * + * @param type type d'affichage : link => sous forme de lien + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function artTitle($type='') { + + if($type == 'link') { # Type lien + $id = intval($this->plxMotor->plxRecord_arts->f('numero')); + $title = plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title')); + $url = $this->plxMotor->plxRecord_arts->f('url'); + # On effectue l'affichage + echo ''.$title.''; + } else { # Type normal + echo plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title')); + } + } + + /** + * Méthode qui affiche l'auteur de l'article + * + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Anthony GUÉRIN, Florent MONTHEL et Stephane F + **/ + public function artAuthor($echo=true) { + + if(isset($this->plxMotor->aUsers[$this->plxMotor->plxRecord_arts->f('author')]['name'])) + $author = plxUtils::strCheck($this->plxMotor->aUsers[$this->plxMotor->plxRecord_arts->f('author')]['name']); + else + $author = L_ARTAUTHOR_UNKNOWN; + if($echo) + echo $author; + else + return $author; + } + + /** + * Méthode qui affiche l'adresse email de l'auteur de l'article + * + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + public function artAuthorEmail() { + + if(isset($this->plxMotor->aUsers[$this->plxMotor->plxRecord_arts->f('author')]['email'])) + echo plxUtils::strCheck($this->plxMotor->aUsers[$this->plxMotor->plxRecord_arts->f('author')]['email']); + } + + /** + * Méthode qui affiche les informations sur l'auteur de l'article + * + * @param format format du texte à afficher (variable: #art_authorinfos, #art_author) + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + + public function artAuthorInfos($format='
    #art_authorinfos
    ') { + + $infos = plxUtils::getValue($this->plxMotor->aUsers[$this->plxMotor->plxRecord_arts->f('author')]['infos']); + if(trim($infos)!='') { + $txt = str_replace('#art_authorinfos', $infos, $format); + $txt = str_replace('#art_author', $this->artAuthor(false), $txt); + echo $txt; + } + } + + /** + * Méthode qui affiche la date de publication de l'article selon le format choisi + * + * @param format format du texte de la date (variable: #minute, #hour, #day, #month, #num_day, #num_month, #num_year(4), #num_year(2)) + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F. + **/ + public function artDate($format='#day #num_day #month #num_year(4)') { + + echo plxDate::formatDate($this->plxMotor->plxRecord_arts->f('date'),$format); + } + + /** + * Méthode qui retourne la liste des catégories de l'article séparées par des virgules + * + * @return string + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + public function artCatIds() { + + return $this->plxMotor->plxRecord_arts->f('categorie'); + } + + /** + * Méthode qui retourne un tableau contenant les numéros des catégories actives de l'article + * + * @return array + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + public function artActiveCatIds() { + + $artCatIds = explode(',', $this->plxMotor->plxRecord_arts->f('categorie')); + $activeCats = explode('|',$this->plxMotor->activeCats); + return array_intersect($artCatIds,$activeCats); + + } + + /** + * Méthode qui affiche la liste des catégories l'article sous forme de lien + * ou la chaîne de caractère 'Non classé' si la catégorie + * de l'article n'existe pas + * + * @param separator caractère de séparation entre les catégories affichées + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function artCat($separator=', ') { + + $cats = array(); + # Initialisation de notre variable interne + $catIds = $this->artActiveCatIds(); + foreach ($catIds as $idx => $catId) { + # On verifie que la categorie n'est pas "home" + if($catId != 'home') { + # On va verifier que la categorie existe + if(isset($this->plxMotor->aCats[ $catId ])) { + # On recupere les infos de la categorie + $name = plxUtils::strCheck($this->plxMotor->aCats[ $catId ]['name']); + $url = $this->plxMotor->aCats[ $catId ]['url']; + if(isset($this->plxMotor->aCats[ $this->plxMotor->cible ]['url'])) + $active = $this->plxMotor->aCats[ $this->plxMotor->cible ]['url']==$url?"active":"noactive"; + else + $active = "noactive"; + # On effectue l'affichage + $cats[] = ''.$name.''; + } else { # La categorie n'existe pas + $cats[] = L_UNCLASSIFIED; + } + } else { # Categorie "home" + $cats[] = ''.L_HOMEPAGE.''; + } + } + echo implode($separator, $cats); + } + + /** + * Méthode qui affiche la liste des tags l'article sous forme de lien + * + * @param format format du texte pour chaque tag (variable : #tag_status, #tag_url, #tag_name) + * @param separator caractère de séparation entre les tags affichées + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + public function artTags($format='#tag_name', $separator=',') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowArtTags'))) return; + + # Initialisation de notre variable interne + $taglist = $this->plxMotor->plxRecord_arts->f('tags'); + if(!empty($taglist)) { + $tags = array_map('trim', explode(',', $taglist)); + foreach($tags as $idx => $tag) { + $t = plxUtils::title2url($tag); + $name = str_replace('#tag_url',$this->plxMotor->urlRewrite('?tag/'.$t),$format); + $name = str_replace('#tag_name',plxUtils::strCheck($tag),$name); + $name = str_replace('#tag_status',(($this->plxMotor->mode=='tags' AND $this->plxMotor->cible==$t)?'active':'noactive'), $name); + echo $name; + if ($idx!=sizeof($tags)-1) echo $separator.' '; + } + } + else echo L_ARTTAGS_NONE; + } + + /** + * Méthode qui affiche le lien "Lire la suite" si le chapô de l'article est renseigné + * + * @param format format d'affichage du lien pour lire la suite de l'article (#art_url, #art_title) + * @return stdout + * @scope home,categorie,tags,archives + * @author Stephane F + **/ + public function artReadMore($format='') { + + # Affichage du lien "Lire la suite" si un chapo existe + if($this->plxMotor->plxRecord_arts->f('chapo') != '') { + $format = ($format=='' ? '

    '.L_ARTCHAPO.'

    ' : $format); + if($format) { + # On recupere les infos de l'article + $id = intval($this->plxMotor->plxRecord_arts->f('numero')); + $title = plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title')); + $url = $this->plxMotor->plxRecord_arts->f('url'); + # Formatage de l'affichage + $row = str_replace("#art_url", $this->plxMotor->urlRewrite('?article'.$id.'/'.$url), $format); + $row = str_replace("#art_title", $title, $row); + echo $row; + } + } + } + + /** + * Méthode qui affiche le châpo de l'article ainsi qu'un lien + * pour lire la suite de l'article. Si l'article n'a pas de chapô, + * le contenu de l'article est affiché (selon paramètres) + * + * @param format format d'affichage du lien pour lire la suite de l'article (#art_title) + * @param content affichage oui/non du contenu si le chapô est vide + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function artChapo($format=L_ARTCHAPO, $content=true) { + + # On verifie qu'un chapo existe + if($this->plxMotor->plxRecord_arts->f('chapo') != '') { + # On récupère les infos de l'article + $id = intval($this->plxMotor->plxRecord_arts->f('numero')); + $title = plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title')); + $url = $this->plxMotor->plxRecord_arts->f('url'); + # On effectue l'affichage + echo $this->plxMotor->plxRecord_arts->f('chapo')."\n"; + if($format) { + $title = str_replace("#art_title", $title, $format); + echo '

    '.$title.'

    '."\n"; + } + } else { # Pas de chapo, affichage du contenu + if($content === true) { + echo $this->plxMotor->plxRecord_arts->f('content')."\n"; + } + } + } + + /** + * Méthode qui affiche le chapô (selon paramètres) suivi du contenu de l'article + * + * @param chapo affichage oui/non du chapo + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Anthony GUÉRIN, Florent MONTHEL et Stephane F + **/ + public function artContent($chapo=true) { + + if($chapo === true) + echo $this->plxMotor->plxRecord_arts->f('chapo')."\n"; # Chapo + echo $this->plxMotor->plxRecord_arts->f('content')."\n"; + + } + + /** + * Méthode qui affiche un lien vers le fil Rss des articles + * d'une catégorie précise (si $categorie renseigné) ou du site tout entier + * + * @param type type de flux (obsolete) + * @param categorie identifiant (sans les 0) d'une catégorie + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Florent MONTHEL, Stephane F + **/ + public function artFeed($type='rss', $categorie='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowArtFeed'))) return; + + if($categorie != '' AND is_numeric($categorie)) # Fil Rss des articles d'une catégorie + echo ''.L_ARTFEED_RSS_CATEGORY.''; + else # Fil Rss des articles + echo ''.L_ARTFEED_RSS.''; + } + + /** + * Méthode qui affiche le nombre de commentaires (sous forme de lien ou non selon le mode) d'un article + * + * @param f1 format d'affichage si nombre de commentaire = 0 (#nb pour afficher le nombre de commentaire) + * @param f2 format d'affichage si nombre de commentaire = 1 (#nb pour afficher le nombre de commentaire) + * @param f3 format d'affichage si nombre de commentaire > 1 (#nb pour afficher le nombre de commentaire) + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + public function artNbCom($f1='L_NO_COMMENT',$f2='#nb L_COMMENT',$f3='#nb L_COMMENTS') { + + # A t'on besoin d'afficher le nb de commentaires ? + if(!$this->plxMotor->aConf['allow_com'] OR !$this->plxMotor->plxRecord_arts->f('allow_com')) + return; + + $nb = intval($this->plxMotor->plxRecord_arts->f('nb_com')); + $num = intval($this->plxMotor->plxRecord_arts->f('numero')); + $url = $this->plxMotor->plxRecord_arts->f('url'); + + if($nb==0) { + $txt = str_replace('L_NO_COMMENT', L_NO_COMMENT, $f1); + $title = $nb.' '.L_NO_COMMENT; + } + elseif($nb==1) { + $txt = str_replace('L_COMMENT', L_COMMENT, $f2); + $title = $nb.' '.L_COMMENT; + } + else { + $txt = str_replace('L_COMMENTS', L_COMMENTS, $f3); + $title = $nb.' '.L_COMMENTS; + } + $txt = str_replace('#nb',$nb,$txt); + + if($this->plxMotor->mode == 'article') + echo $txt; + else + echo ''.$txt.''; + + } + + /** + * Méthode qui affiche le nombre total d'articles publiés sur le site. + * + * @param f1 format d'affichage si nombre d'article = 0 (#nb pour afficher le nombre de commentaire) + * @param f2 format d'affichage si nombre d'article = 1 (#nb pour afficher le nombre de commentaire) + * @param f3 format d'affichage si nombre d'article > 1 (#nb pour afficher le nombre de commentaire) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function nbAllArt($f1='L_NO_ARTICLE',$f2='#nb L_ARTICLE',$f3='#nb L_ARTICLES') { + + $nb = $this->plxMotor->nbArticles('published', '[0-9]{3}', '', 'before'); + + if($nb==0) + $txt = str_replace('L_NO_ARTICLE', L_NO_ARTICLE, $f1); + elseif($nb==1) + $txt = str_replace('L_ARTICLE', L_ARTICLE, $f2); + else + $txt = str_replace('L_ARTICLES', L_ARTICLES, $f3); + + $txt = str_replace('#nb',$nb,$txt); + + echo $txt; + } + + /** + * Méthode qui affiche la liste des $max derniers articles. + * Si la variable $cat_id est renseignée, seulement les articles de cette catégorie seront retournés. + * On tient compte si la catégorie est active + * + * @param format format du texte pour chaque article (variable: #art_id, #art_url, #art_status, #art_author, #art_title, #art_chapo, #art_chapo(num), #art_content, #art_content(num), #art_date, #art_hour, #cat_list, #art_nbcoms) + * @param max nombre d'articles maximum + * @param cat_id ids des catégories cible + * @param ending texte à ajouter en fin de ligne + * @param sort tri de l'affichage des articles (sort|rsort|alpha) + * @return stdout + * @scope global + * @author Florent MONTHEL, Stephane F + **/ + public function lastArtList($format='
  • #art_title
  • ',$max=5,$cat_id='',$ending='', $sort='rsort') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastArtList'))) return; + # Génération de notre motif + if(empty($cat_id)) + $motif = '/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$this->plxMotor->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + else + $motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.str_pad($cat_id,3,'0',STR_PAD_LEFT).')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; + + # Nouvel objet plxGlob et récupération des fichiers + $plxGlob_arts = clone $this->plxMotor->plxGlob_arts; + if($aFiles = $plxGlob_arts->query($motif,'art',$sort,0,$max,'before')) { + foreach($aFiles as $v) { # On parcourt tous les fichiers + $art = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$v); + $num = intval($art['numero']); + $date = $art['date']; + if(($this->plxMotor->mode == 'article') AND ($art['numero'] == $this->plxMotor->cible)) + $status = 'active'; + else + $status = 'noactive'; + # Mise en forme de la liste des catégories + $catList = array(); + $catIds = explode(',', $art['categorie']); + foreach ($catIds as $idx => $catId) { + if(isset($this->plxMotor->aCats[$catId])) { # La catégorie existe + $catName = plxUtils::strCheck($this->plxMotor->aCats[$catId]['name']); + $catUrl = $this->plxMotor->aCats[$catId]['url']; + $catList[] = ''.$catName.''; + } else { + $catList[] = L_UNCLASSIFIED; + } + } + # On modifie nos motifs + $row = str_replace('#art_id',$num,$format); + $row = str_replace('#cat_list', implode(', ',$catList), $row); + $row = str_replace('#art_url',$this->plxMotor->urlRewrite('?article'.$num.'/'.$art['url']),$row); + $row = str_replace('#art_status',$status,$row); + $author = plxUtils::getValue($this->plxMotor->aUsers[$art['author']]['name']); + $row = str_replace('#art_author',plxUtils::strCheck($author),$row); + $row = str_replace('#art_title',plxUtils::strCheck($art['title']),$row); + $strlength = preg_match('/#art_chapo\(([0-9]+)\)/',$row,$capture) ? $capture[1] : '100'; + $chapo = plxUtils::truncate($art['chapo'],$strlength,$ending,true,true); + $row = str_replace('#art_chapo('.$strlength.')','#art_chapo', $row); + $row = str_replace('#art_chapo',$chapo,$row); + $strlength = preg_match('/#art_content\(([0-9]+)\)/',$row,$capture) ? $capture[1] : '100'; + $content = plxUtils::truncate($art['content'],$strlength,$ending,true,true); + $row = str_replace('#art_content('.$strlength.')','#art_content', $row); + $row = str_replace('#art_content',$content, $row); + $row = str_replace('#art_date',plxDate::formatDate($date,'#num_day/#num_month/#num_year(4)'),$row); + $row = str_replace('#art_hour',plxDate::formatDate($date,'#hour:#minute'),$row); + $row = str_replace('#art_nbcoms',$art['nb_com'], $row); + # On genère notre ligne + echo $row; + } + } + } + + /** + * Méthode qui affiche l'id du commentaire précédé de la lettre 'c' + * + * @return stdout + * @scope article + * @author Florent MONTHEL + **/ + public function comId() { + + echo 'c'.$this->plxMotor->plxRecord_coms->f('numero'); + } + + /** + * Méthode qui affiche l'url du commentaire de type relatif ou absolu + * + * @param type type de lien : relatif ou absolu (URL complète) DEPRECATED + * @return stdout + * @scope article + * @author Florent MONTHEL, Stephane F + **/ + public function comUrl($type='relatif') { + + # On affiche l'URL + $id = $this->plxMotor->plxRecord_coms->f('numero'); + $artId = $this->plxMotor->plxRecord_coms->f('article'); + $artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles[$artId]); + echo $this->urlRewrite('?article'.intval($artId).'/'.$artInfo['artUrl'].'#c'.$id); + } + + /** + * Méthode qui affiche le nombre total de commentaires publiés sur le site. + * + * @param f1 format d'affichage si nombre de commentaire = 0 (#nb pour afficher le nombre de commentaire) + * @param f2 format d'affichage si nombre de commentaire = 1 (#nb pour afficher le nombre de commentaire) + * @param f3 format d'affichage si nombre de commentaire > 1 (#nb pour afficher le nombre de commentaire) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function nbAllCom($f1='L_NO_COMMENT',$f2='#nb L_COMMENT',$f3='#nb L_COMMENTS') { + + $nb = $this->plxMotor->nbComments('online', 'before'); + + if($nb==0) + $txt = str_replace('L_NO_COMMENT', L_NO_COMMENT, $f1); + elseif($nb==1) + $txt = str_replace('L_COMMENT', L_COMMENT, $f2); + else + $txt = str_replace('L_COMMENTS', L_COMMENTS, $f3); + + $txt = str_replace('#nb',$nb,$txt); + + echo $txt; + } + + /** + * Méthode qui affiche l'auteur du commentaires linké ou non + * + * @param type type d'affichage : link => sous forme de lien + * @return stdout + * @scope article + * @author Anthony GUÉRIN et Florent MONTHEL + **/ + public function comAuthor($type='') { + + # Initialisation de nos variables interne + $author = $this->plxMotor->plxRecord_coms->f('author'); + $site = $this->plxMotor->plxRecord_coms->f('site'); + if($type == 'link' AND $site != '') # Type lien + echo ''.$author.''; + else # Type normal + echo $author; + } + + /** + * Méthode qui affiche le type du commentaire (admin ou normal) + * + * @return stdout + * @scope article + * @author Florent MONTHEL + **/ + public function comType() { + + echo $this->plxMotor->plxRecord_coms->f('type'); + } + + /** + * Méthode qui affiche la date de publication d'un commentaire delon le format choisi + * + * @param format format du texte de la date (variable: #minute, #hour, #day, #month, #num_day, #num_month, #num_year(2), #num_year(4)) + * @return stdout + * @scope article + * @author Florent MONTHEL et Stephane F + **/ + public function comDate($format='#day #num_day #month #num_year(4) à #hour:#minute') { + + echo plxDate::formatDate($this->plxMotor->plxRecord_coms->f('date'),$format); + } + + /** + * Méthode qui affiche le contenu d'un commentaire + * + * @return stdout + * @scope article + * @author Florent MONTHEL + **/ + public function comContent() { + + echo nl2br($this->plxMotor->plxRecord_coms->f('content')); + } + + /** + * Méthode qui affiche si besoin le message généré par le système + * suite à la création d'un commentaire + * @param format format du texte à afficher (variable: #com_message) + * @return stdout + * @scope article + * @author Stephane F. + **/ + public function comMessage($format='#com_message') { + + if(isset($_SESSION['msgcom']) AND !empty($_SESSION['msgcom'])) { + $row = str_replace('#com_message',$_SESSION['msgcom'],$format); + echo $row; + $_SESSION['msgcom']=''; + } + + } + + /** + * Méthode qui affiche si besoin la variable $_GET[$key] suite au dépôt d'un commentaire + * + * @param key clé du tableau GET + * @param defaut valeur par défaut si variable vide + * @return stdout + * @scope article + * @author Florent MONTHEL + **/ + public function comGet($key,$defaut='') { + + if(isset($_SESSION['msg'][$key]) AND !empty($_SESSION['msg'][$key])) { + echo plxUtils::strCheck($_SESSION['msg'][$key]); + $_SESSION['msg'][$key]=''; + } + else echo $defaut; + + } + + /** + * Méthode qui affiche un lien vers le fil Rss des commentaires + * d'un article précis (si $article renseigné) ou du site tout entier + * + * @param type type de flux (obsolete) + * @param article identifiant (sans les 0) d'un article + * @return stdout + * @scope global + * @author Anthony GUÉRIN, Florent MONTHEL, Stephane F + **/ + public function comFeed($type='rss', $article='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowComFeed'))) return; + + if($article != '' AND is_numeric($article)) # Fil Rss des commentaires d'un article + echo ''.L_COMFEED_RSS_ARTICLE.''; + else # Fil Rss des commentaires global + echo ''.L_COMFEED_RSS.''; + } + + /** + * Méthode qui affiche la liste des $max derniers commentaires. + * Si la variable $art_id est renseignée, seulement les commentaires de cet article seront retournés. + * + * @param format format du texte pour chaque commentaire (variable: #com_id, #com_url, #com_author, #com_content(num), #com_content, #com_date, #com_hour) + * @param max nombre de commentaires maximum + * @param art_id id de l'article cible (24,3) + * @param cat_ids liste des categories pour filtrer les derniers commentaires (sous la forme 001|002) + * @return stdout + * @scope global + * @author Florent MONTHEL, Stephane F + **/ + public function lastComList($format='
  • #com_author L_SAID :
    #com_content(50)
  • ',$max=5,$art_id='',$cat_ids='') { + + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastComList'))) return; + + # Génération de notre motif + if(empty($art_id)) + $motif = '/^[0-9]{4}.[0-9]{10}-[0-9]+.xml$/'; + else + $motif = '/^'.str_pad($art_id,4,'0',STR_PAD_LEFT).'.[0-9]{10}-[0-9]+.xml$/'; + + $count=1; + $datetime=date('YmdHi'); + # Nouvel objet plxGlob et récupération des fichiers + $plxGlob_coms = clone $this->plxMotor->plxGlob_coms; + if($aFiles = $plxGlob_coms->query($motif,'com','rsort',0,false,'before')) { + # On parcourt les fichiers des commentaires + foreach($aFiles as $v) { + # On filtre si le commentaire appartient à un article d'une catégorie inactive + if(isset($this->plxMotor->activeArts[substr($v,0,4)])) { + $com = $this->plxMotor->parseCommentaire(PLX_ROOT.$this->plxMotor->aConf['racine_commentaires'].$v); + $artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles[$com['article']]); + if($artInfo['artDate']<=$datetime) { # on ne prends que les commentaires pour les articles publiés + if(empty($cat_ids) OR preg_match('/('.$cat_ids.')/', $artInfo['catId'])) { + $url = '?article'.intval($com['article']).'/'.$artInfo['artUrl'].'#c'.$com['numero']; + $date = $com['date']; + $content = strip_tags($com['content']); + # On modifie nos motifs + $row = str_replace('L_SAID', L_SAID, $format); + $row = str_replace('#com_id',$com['numero'],$row); + $row = str_replace('#com_url',$this->plxMotor->urlRewrite($url),$row); + $row = str_replace('#com_author',$com['author'],$row); + while(preg_match('/#com_content\(([0-9]+)\)/',$row,$capture)) { + if($com['author'] == 'admin') + $row = str_replace('#com_content('.$capture[1].')',plxUtils::strCut($content,$capture[1]),$row); + else + $row = str_replace('#com_content('.$capture[1].')',plxUtils::strCheck(plxUtils::strCut(plxUtils::strRevCheck($content),$capture[1])),$row); + } + $row = str_replace('#com_content',$content,$row); + $row = str_replace('#com_date',plxDate::formatDate($date,'#num_day/#num_month/#num_year(4)'),$row); + $row = str_replace('#com_hour',plxDate::formatDate($date,'#hour:#minute'),$row); + # On genère notre ligne + echo $row; + $count++; + } + } + } + if($count>$max) break; + } + } + } + + /** + * Méthode qui affiche la liste des pages statiques. + * + * @param extra si renseigné: nom du lien vers la page d'accueil affiché en première position + * @param format format du texte pour chaque page (variable : #static_id, #static_status, #static_url, #static_name, #group_id, #group_class, #group_name) + * @param menublog position du menu Blog (si non renseigné le menu n'est pas affiché) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function staticList($extra='', $format='
  • #static_name
  • ', $format_group='#group_name', $menublog=false) { + + $menus = array(); + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowStaticListBegin'))) return; + $home = ((empty($this->plxMotor->get) OR preg_match('/^page[0-9]*/',$this->plxMotor->get)) AND basename($_SERVER['SCRIPT_NAME'])=="index.php"); + # Si on a la variable extra, on affiche un lien vers la page d'accueil (avec $extra comme nom) + if($extra != '') { + $stat = str_replace('#static_id','static-home',$format); + $stat = str_replace('#static_class','static-group',$stat); + $stat = str_replace('#static_url',$this->plxMotor->urlRewrite(),$stat); + $stat = str_replace('#static_name',plxUtils::strCheck($extra),$stat); + $stat = str_replace('#static_status',($home==true?"active":"noactive"), $stat); + $menus[][] = $stat; + } + if($this->plxMotor->aStats) { + foreach($this->plxMotor->aStats as $k=>$v) { + if($v['active'] == 1 AND $v['menu'] == 'oui') { # La page est bien active et dispo ds le menu + $stat = str_replace('#static_id','static-'.intval($k),$format); + $stat = str_replace('#static_class','static-menu',$stat); + if($v['url'][0]=='?') # url interne commençant par ? + $stat = str_replace('#static_url',$this->plxMotor->urlRewrite($v['url']),$stat); + elseif(plxUtils::checkSite($v['url'],false)) # url externe en http ou autre + $stat = str_replace('#static_url',$v['url'],$stat); + else # url page statique + $stat = str_replace('#static_url',$this->plxMotor->urlRewrite('?static'.intval($k).'/'.$v['url']),$stat); + $stat = str_replace('#static_name',plxUtils::strCheck($v['name']),$stat); + $stat = str_replace('#static_status',(($home===false AND $this->staticId()==intval($k))?'static active':'noactive'), $stat); + if($v['group']=='') + $menus[][] = $stat; + else + $menus[$v['group']][] = $stat; + } + } + } + if($menublog) { + if($this->plxMotor->aConf['homestatic']!='' AND isset($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']])) { + if($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']]['active']) { + $menu = str_replace('#static_id','page-blog',$format); + if ($this->plxMotor->get AND preg_match('/^(blog|categorie|archives|tag|article)/', $_SERVER['QUERY_STRING'])) { + $menu = str_replace('#static_status','active',$menu); + } else { + $menu = str_replace('#static_status','noactive',$menu); + } + $menu = str_replace('#static_url', $this->plxMotor->urlRewrite('?blog'),$menu); + $menu = str_replace('#static_name',L_PAGEBLOG_TITLE,$menu); + $menu = str_replace('#static_class','',$menu); + array_splice($menus, (intval($menublog)-1), 0, array($menu)); + } + } + } + + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowStaticListEnd'))) return; + + # Affichage des pages statiques + menu Accueil et Blog + if($menus) { + foreach($menus as $k=>$v) { + if(is_numeric($k)) { + echo "\n".(is_array($v) ? $v[0] : $v); + } + else { + $group = str_replace('#group_id','static-group-'.plxUtils::title2url($k),$format_group); + $group = str_replace('#group_class','static group',$group); + $group = str_replace('#group_name',plxUtils::strCheck($k),$group); + echo "\n
  • \n\t".$group."\n\t
      \t\t"; + foreach($v as $kk => $vv) { + echo "\n\t\t".$vv; + } + echo "\n\t
    \n
  • \n"; + } + } + echo "\n"; + } + + } + + /** + * Méthode qui retourne l'id de la page statique active + * + * @return int + * @scope static + * @author Florent MONTHEL + **/ + public function staticId() { + + # On va verifier que la categorie existe en mode categorie + if($this->plxMotor->mode == 'static' AND isset($this->plxMotor->aStats[ $this->plxMotor->cible ])) + return intval($this->plxMotor->cible); + } + + /** + * Méthode qui affiche l'url de la page statique de type relatif ou absolu + * + * @param type type de lien : relatif ou absolu (URL complète) + * @return stdout + * @scope static + * @author Florent MONTHEL, Stephane F + **/ + public function staticUrl($type='relatif') { + + # Recupération ID URL + $staticId = $this->staticId(); + $staticIdFill = str_pad($staticId,3,'0',STR_PAD_LEFT); + if(!empty($staticId) AND isset($this->plxMotor->aStats[ $staticIdFill ])) + echo $this->plxMotor->urlRewrite('?static'.$staticId.'/'.$this->plxMotor->aStats[ $staticIdFill ]['url']); + } + + /** + * Méthode qui affiche le titre de la page statique + * + * @return stdout + * @scope static + * @author Florent MONTHEL + **/ + public function staticTitle() { + + echo plxUtils::strCheck($this->plxMotor->aStats[ $this->plxMotor->cible ]['name']); + } + + /** + * Méthode qui affiche le groupe de la page statique + * + * @return stdout + * @scope static + * @author Stéphane F. + **/ + public function staticGroup() { + + echo plxUtils::strCheck($this->plxMotor->aStats[ $this->plxMotor->cible ]['group']); + } + + /** + * Méthode qui affiche la date de la dernière modification de la page statique selon le format choisi + * + * @param format format du texte de la date (variable: #minute, #hour, #day, #month, #num_day, #num_month, #num_year(4), #num_year(2)) + * @return stdout + * @scope static + * @author Anthony T. + **/ + public function staticDate($format='#day #num_day #month #num_year(4)') { + + # On genere le nom du fichier dont on veux récupérer la date + $file = PLX_ROOT.$this->plxMotor->aConf['racine_statiques'].$this->plxMotor->cible; + $file .= '.'.$this->plxMotor->aStats[ $this->plxMotor->cible ]['url'].'.php'; + # Test de l'existence du fichier + if(!file_exists($file)) return; + # On récupère la date de la dernière modification du fichier qu'on formate + echo plxDate::formatDate(date('YmdHi', filemtime($file)), $format); + } + + /** + * Méthode qui inclut le code source de la page statique + * + * @return stdout + * @scope static + * @author Florent MONTHEL, Stephane F + **/ + public function staticContent() { + + # On va verifier que la page a inclure est lisible + if($this->plxMotor->aStats[ $this->plxMotor->cible ]['readable'] == 1) { + # On genere le nom du fichier a inclure + $file = PLX_ROOT.$this->plxMotor->aConf['racine_statiques'].$this->plxMotor->cible; + $file .= '.'.$this->plxMotor->aStats[ $this->plxMotor->cible ]['url'].'.php'; + # Inclusion du fichier + ob_start(); + require $file; + $output = ob_get_clean(); + eval($this->plxMotor->plxPlugins->callHook('plxShowStaticContent')); + echo $output; + } else { + echo '

    '.L_STATICCONTENT_INPROCESS.'

    '; + } + + } + + /** + * Méthode qui affiche une page statique en lui passant son id (si cette page est active ou non) + * + * @param id id numérique de la page statique + * @return stdout + * @scope global + * @author Stéphane F + **/ + public function staticInclude($id) { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowStaticInclude'))) return ; + # On génère un nouvel objet plxGlob + $plxGlob_stats = plxGlob::getInstance(PLX_ROOT.$this->plxMotor->aConf['racine_statiques']); + if($files = $plxGlob_stats->query('/^'.str_pad($id,3,'0',STR_PAD_LEFT).'.[a-z0-9-]+.php$/')) { + include(PLX_ROOT.$this->plxMotor->aConf['racine_statiques'].$files[0]); + } + } + + /** + * Méthode qui affiche la pagination + * + * @return stdout + * @scope global + * @author Florent MONTHEL, Stephane F + **/ + public function pagination() { + + $plxGlob_arts = clone $this->plxMotor->plxGlob_arts; + $aFiles = $plxGlob_arts->query($this->plxMotor->motif,'art','',0,false,'before'); + + if($aFiles AND $this->plxMotor->bypage AND sizeof($aFiles)>$this->plxMotor->bypage) { + + # on supprime le n° de page courante dans l'url + $arg_url = $this->plxMotor->get; + if(preg_match('/(\/?page[0-9]+)$/',$arg_url,$capture)) { + $arg_url = str_replace($capture[1], '', $arg_url); + } + # Calcul des pages + $prev_page = $this->plxMotor->page - 1; + $next_page = $this->plxMotor->page + 1; + $last_page = ceil(sizeof($aFiles)/$this->plxMotor->bypage); + # Generation des URLs + $f_url = $this->plxMotor->urlRewrite('?'.$arg_url); # Premiere page + $arg = (!empty($arg_url) AND $prev_page>1) ? $arg_url.'/' : $arg_url; + $p_url = $this->plxMotor->urlRewrite('?'.$arg.($prev_page<=1?'':'page'.$prev_page)); # Page precedente + $arg = !empty($arg_url) ? $arg_url.'/' : $arg_url; + $n_url = $this->plxMotor->urlRewrite('?'.$arg.'page'.$next_page); # Page suivante + $l_url = $this->plxMotor->urlRewrite('?'.$arg.'page'.$last_page); # Derniere page + + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowPagination'))) return; + + # On effectue l'affichage + if($this->plxMotor->page > 2) # Si la page active > 2 on affiche un lien 1ere page + echo ''.L_PAGINATION_FIRST.' '; + if($this->plxMotor->page > 1) # Si la page active > 1 on affiche un lien page precedente + echo ''.L_PAGINATION_PREVIOUS.' '; + # Affichage de la page courante + printf(''.L_PAGINATION.'',$this->plxMotor->page,$last_page); + if($this->plxMotor->page < $last_page) # Si la page active < derniere page on affiche un lien page suivante + echo ' '.L_PAGINATION_NEXT.''; + if(($this->plxMotor->page + 1) < $last_page) # Si la page active++ < derniere page on affiche un lien derniere page + echo ' '.L_PAGINATION_LAST.''; + } + } + + /** + * Méthode qui affiche la question du capcha + * + * @return stdout + * @scope global + * @author Florent MONTHEL, Stephane F. + **/ + public function capchaQ() { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowCapchaQ'))) return; + echo $this->plxMotor->plxCapcha->q(); + } + + /** + * Méthode qui affiche la réponse du capcha cryptée en sha1 + * DEPRECATED + * + * @return stdout + * @scope global + * @author Florent MONTHEL, Stephane F. + **/ + public function capchaR() { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowCapchaR'))) return; + echo $this->plxMotor->plxCapcha->r(); + + } + + /** + * Méthode qui affiche le message d'erreur de l'objet plxErreur + * + * @return stdout + * @scope erreur + * @author Florent MONTHEL + **/ + public function erreurMessage() { + + echo $this->plxMotor->plxErreur->getMessage(); + } + + /** + * Méthode qui affiche le nom du tag (linké ou non) + * + * @param type type d'affichage : link => sous forme de lien + * @return stdout + * @scope tags + * @author Stephane F + **/ + public function tagName($type='') { + + if($this->plxMotor->mode == 'tags') { + $tag = plxUtils::strCheck($this->plxMotor->cible); + $tagName = plxUtils::strCheck($this->plxMotor->cibleName); + # On effectue l'affichage + if($type == 'link') + echo ''.$tagName.''; + else + echo $tagName; + } + } + + /** + * Méthode qui affiche un lien vers le fil Rss des articles d'un tag + * + * @param type type de flux (obsolete) + * @param tag nom du tag + * @return stdout + * @scope home,categorie,article,tags,archives + * @author Stephane F + **/ + + public function tagFeed($type='rss', $tag='') { + + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowTagFeed'))) return; + + if($tag=='' AND $this->plxMotor->mode == 'tags') + $tag = $this->plxMotor->cible; + + echo ''.L_ARTFEED_RSS_TAG.''; + + } + + /** + * Méthode qui affiche la liste de tous les tags. + * + * @param format format du texte pour chaque tag (variable : #tag_size #tag_status, #tag_url, #tag_name, #nb_art) + * @param max nombre maxi de tags à afficher + * @param order tri des tags (random, alpha, '') + * @return stdout + * @scope global + * @author Stephane F + **/ + public function tagList($format='
  • #tag_name
  • ', $max='', $order='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowTagList'))) return; + + $datetime = date('YmdHi'); + $array=array(); + $alphasort=array(); + # On verifie qu'il y a des tags + if($this->plxMotor->aTags) { + # On liste les tags sans créer de doublon + foreach($this->plxMotor->aTags as $idart => $tag) { + if(isset($this->plxMotor->activeArts[$idart]) AND $tag['date']<=$datetime AND $tag['active']) { + if($tags = array_map('trim', explode(',', $tag['tags']))) { + foreach($tags as $tag) { + if($tag!='') { + $t = plxUtils::title2url($tag); + if(!isset($array['_'.$tag])) { + $array['_'.$tag]=array('name'=>$tag,'url'=>$t,'count'=>1); + } + else + $array['_'.$tag]['count']++; + if(!in_array($t, $alphasort)) + $alphasort[] = $t; # pour le tri alpha + } + } + } + } + } + # limite sur le nombre de tags à afficher + if($max!='') $array=array_slice($array, 0, intval($max), true); + # tri des tags + switch($order) { + case 'alpha': + if($alphasort) array_multisort($alphasort, SORT_ASC, $array); + break; + case 'random': + $arr_elem = array(); + $keys = array_keys($array); + shuffle($keys); + foreach ($keys as $key) { + $arr_elem[$key] = $array[$key]; + } + $array = $arr_elem; + break; + } + } + # On affiche la liste + $size=0; + foreach($array as $tagname => $tag) { + $name = str_replace('#tag_id','tag-'.$size++,$format); + $name = str_replace('#tag_size','tag-size-'.($tag['count']>10?'max':$tag['count']),$name); + $name = str_replace('#tag_url',$this->plxMotor->urlRewrite('?tag/'.$tag['url']),$name); + $name = str_replace('#tag_name',plxUtils::strCheck($tag['name']),$name); + $name = str_replace('#nb_art',$tag['count'],$name); + $name = str_replace('#tag_status',(($this->plxMotor->mode=='tags' AND $this->plxMotor->cible==$tag['url'])?'active':'noactive'), $name); + echo $name; + } + } + + /** + * Méthode qui affiche la liste des archives + * + * @param format format du texte pour l'affichage (variable : #archives_id, #archives_status, #archives_nbart, #archives_url, #archives_name, #archives_month, #archives_year) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function archList($format='
  • #archives_name
  • '){ + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowArchList'))) return; + + $curYear=date('Y'); + $array = array(); + + $plxGlob_arts = clone $this->plxMotor->plxGlob_arts; + + if($files = $plxGlob_arts->query('/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$this->plxMotor->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort',0,false,'before')) { + foreach($files as $id => $filename){ + if(preg_match('/([0-9]{4}).((?:[0-9]|home|,)*(?:'.$this->plxMotor->activeCats.'|home)(?:[0-9]|home|,)*).[0-9]{3}.([0-9]{4})([0-9]{2})([0-9]{6}).([a-z0-9-]+).xml$/',$filename,$capture)){ + if($capture[3]==$curYear) { + if(!isset($array[$capture[3]][$capture[4]])) $array[$capture[3]][$capture[4]]=1; + else $array[$capture[3]][$capture[4]]++; + } else { + if(!isset($array[$capture[3]])) $array[$capture[3]]=1; + else $array[$capture[3]]++; + } + } + } + krsort($array); + # Affichage pour l'année en cours + if(isset($array[$curYear])) { + foreach($array[$curYear] as $month => $nbarts){ + $name = str_replace('#archives_id','archives-'.$curYear.$month,$format); + $name = str_replace('#archives_name',plxDate::getCalendar('month', $month).' '.$curYear,$name); + $name = str_replace('#archives_year',$curYear,$name); + $name = str_replace('#archives_month',plxDate::getCalendar('month', $month),$name); + $name = str_replace('#archives_url', $this->plxMotor->urlRewrite('?archives/'.$curYear.'/'.$month), $name); + $name = str_replace('#archives_nbart',$nbarts,$name); + $name = str_replace('#archives_status',(($this->plxMotor->mode=="archives" AND $this->plxMotor->cible==$curYear.$month)?'active':'noactive'), $name); + echo $name; + } + } + # Affichage pour les années précédentes + unset($array[$curYear]); + foreach($array as $year => $nbarts){ + $name = str_replace('#archives_id','archives-'.$year,$format); + $name = str_replace('#archives_name',$year,$name); + $name = str_replace('#archives_year',$year,$name); + $name = str_replace('#archives_month',$year,$name); + $name = str_replace('#archives_url', $this->plxMotor->urlRewrite('?archives/'.$year), $name); + $name = str_replace('#archives_nbart',$nbarts,$name); + $name = str_replace('#archives_status',(($this->plxMotor->mode=="archives" AND $this->plxMotor->cible==$year)?'active':'noactive'), $name); + echo $name; + } + } + } + + /** + * Méthode qui affiche un lien vers la page blog.php + * + * @param format format du texte pour l'affichage (variable : #page_id, #page_status, #page_url, #page_name) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function pageBlog($format='
  • #page_name
  • ') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowPageBlog'))) return; + + if($this->plxMotor->aConf['homestatic']!='' AND isset($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']])) { + if($this->plxMotor->aStats[$this->plxMotor->aConf['homestatic']]['active']) { + $name = str_replace('#page_id','page-blog',$format); + if ($this->plxMotor->get AND preg_match('/^(blog|categorie|archives|tag|article)/', $_SERVER['QUERY_STRING'])) { + $name = str_replace('#page_status','active',$name); + } else { + $name = str_replace('#page_status','noactive',$name); + } + $name = str_replace('#page_url', $this->plxMotor->urlRewrite('?blog'),$name); + $name = str_replace('#page_name',L_PAGEBLOG_TITLE,$name); + echo $name; + } + } + } + + /** + * Méthode qui ajoute, s'il existe, le fichier css associé à un template + * + * @param css_dir répertoire de stockage des fichiers css (avec un / à la fin) + * @return stdout + * @scope global + * @author Stephane F + **/ + public function templateCss($css_dir='') { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowTemplateCss'))) return; + + $theme = $this->plxMotor->aConf['racine_themes'].$this->plxMotor->style.'/'; + $css = str_replace('php','css',$this->plxMotor->template); + if(is_file($theme.$css_dir.$css)) + echo ''."\n"; + } + + /** + * Méthode qui ajoute, s'il existe, le fichier css associé aux plugins + * + * @return stdout + * @scope global + * @author Stephane F + **/ + public function pluginsCss() { + # Hook Plugins + if(eval($this->plxMotor->plxPlugins->callHook('plxShowPluginsCss'))) return; + + $filename = $this->plxMotor->aConf['racine_plugins'].'site.css'; + if(is_file(PLX_ROOT.$filename)) + echo ''."\n"; + } + + /** + * Méthode qui affiche une clé de traduction appelée à partir du thème + * + * @param $lang clé de traduction à afficher + * @return stdout + * @scope global + * @author Stephane F + **/ + public function lang($key='') { + if(isset($this->lang[$key])) + echo $this->lang[$key]; + else + echo $key; + } + + /** + * Méthode qui renvoit une clé de traduction appelée à partir du thème + * + * @param $lang clé de traduction à afficher + * @return stdout + * @scope global + * @author Stephane F + **/ + public function getLang($key='') { + if(isset($this->lang[$key])) + return $this->lang[$key]; + else + return $key; + } + + /** + * Méthode qui appel un hook à partir du thème + * + * @param hookName nom du hook + * @param parms parametre ou liste de paramètres sous forme de array + * @return stdout + * @scope global + * @author Stephane F + * + * Exemple: + * # sans return, passage d'un paramètre + * eval($plxShow->callHook('MyPluginFunction', 'AZERTY')); + * # avec return, passage de 2 paramètres à faire sous forme de tableau + * $b = $plxShow->callHook('MyPluginFunction', array('AZERTY', 'QWERTY')); + **/ + public function callHook($hookName, $parms=null) { + $return = $this->plxMotor->plxPlugins->callHook($hookName, $parms); + if(is_array($return)) { + ob_start(); + eval($return[0]); + echo ob_get_clean(); + return $return[1]; + } else { + return $return; + } + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.timezones.php b/src/core/lib/class.plx.timezones.php new file mode 100644 index 0000000..895897e --- /dev/null +++ b/src/core/lib/class.plx.timezones.php @@ -0,0 +1,140 @@ + "(GMT-11:00) Midway Island", + 'US/Samoa' => "(GMT-11:00) Samoa", + 'US/Hawaii' => "(GMT-10:00) Hawaii", + 'US/Alaska' => "(GMT-09:00) Alaska", + 'US/Pacific' => "(GMT-08:00) Pacific Time (US & Canada)", + 'America/Tijuana' => "(GMT-08:00) Tijuana", + 'US/Arizona' => "(GMT-07:00) Arizona", + 'US/Mountain' => "(GMT-07:00) Mountain Time (US & Canada)", + 'America/Chihuahua' => "(GMT-07:00) Chihuahua", + 'America/Mazatlan' => "(GMT-07:00) Mazatlan", + 'America/Mexico_City' => "(GMT-06:00) Mexico City", + 'America/Monterrey' => "(GMT-06:00) Monterrey", + 'Canada/Saskatchewan' => "(GMT-06:00) Saskatchewan", + 'US/Central' => "(GMT-06:00) Central Time (US & Canada)", + 'US/Eastern' => "(GMT-05:00) Eastern Time (US & Canada)", + 'US/East-Indiana' => "(GMT-05:00) Indiana (East)", + 'America/Bogota' => "(GMT-05:00) Bogota", + 'America/Lima' => "(GMT-05:00) Lima", + 'America/Caracas' => "(GMT-04:30) Caracas", + 'Canada/Atlantic' => "(GMT-04:00) Atlantic Time (Canada)", + 'America/La_Paz' => "(GMT-04:00) La Paz", + 'America/Santiago' => "(GMT-04:00) Santiago", + 'Canada/Newfoundland' => "(GMT-03:30) Newfoundland", + 'America/Buenos_Aires' => "(GMT-03:00) Buenos Aires", + 'Greenland' => "(GMT-03:00) Greenland", + 'Atlantic/Stanley' => "(GMT-02:00) Stanley", + 'Atlantic/Azores' => "(GMT-01:00) Azores", + 'Atlantic/Cape_Verde' => "(GMT-01:00) Cape Verde Is.", + 'Africa/Casablanca' => "(GMT) Casablanca", + 'Europe/Dublin' => "(GMT) Dublin", + 'Europe/Lisbon' => "(GMT) Lisbon", + 'Europe/London' => "(GMT) London", + 'Africa/Monrovia' => "(GMT) Monrovia", + 'Europe/Amsterdam' => "(GMT+01:00) Amsterdam", + 'Europe/Belgrade' => "(GMT+01:00) Belgrade", + 'Europe/Berlin' => "(GMT+01:00) Berlin", + 'Europe/Bratislava' => "(GMT+01:00) Bratislava", + 'Europe/Brussels' => "(GMT+01:00) Brussels", + 'Europe/Budapest' => "(GMT+01:00) Budapest", + 'Europe/Copenhagen' => "(GMT+01:00) Copenhagen", + 'Europe/Ljubljana' => "(GMT+01:00) Ljubljana", + 'Europe/Madrid' => "(GMT+01:00) Madrid", + 'Europe/Paris' => "(GMT+01:00) Paris", + 'Europe/Prague' => "(GMT+01:00) Prague", + 'Europe/Rome' => "(GMT+01:00) Rome", + 'Europe/Sarajevo' => "(GMT+01:00) Sarajevo", + 'Europe/Skopje' => "(GMT+01:00) Skopje", + 'Europe/Stockholm' => "(GMT+01:00) Stockholm", + 'Europe/Vienna' => "(GMT+01:00) Vienna", + 'Europe/Warsaw' => "(GMT+01:00) Warsaw", + 'Europe/Zagreb' => "(GMT+01:00) Zagreb", + 'Europe/Athens' => "(GMT+02:00) Athens", + 'Europe/Bucharest' => "(GMT+02:00) Bucharest", + 'Africa/Cairo' => "(GMT+02:00) Cairo", + 'Africa/Harare' => "(GMT+02:00) Harare", + 'Europe/Helsinki' => "(GMT+02:00) Helsinki", + 'Europe/Istanbul' => "(GMT+02:00) Istanbul", + 'Asia/Jerusalem' => "(GMT+02:00) Jerusalem", + 'Europe/Kiev' => "(GMT+02:00) Kyiv", + 'Europe/Minsk' => "(GMT+02:00) Minsk", + 'Europe/Riga' => "(GMT+02:00) Riga", + 'Europe/Sofia' => "(GMT+02:00) Sofia", + 'Europe/Tallinn' => "(GMT+02:00) Tallinn", + 'Europe/Vilnius' => "(GMT+02:00) Vilnius", + 'Asia/Baghdad' => "(GMT+03:00) Baghdad", + 'Asia/Kuwait' => "(GMT+03:00) Kuwait", + 'Europe/Moscow' => "(GMT+03:00) Moscow", + 'Africa/Nairobi' => "(GMT+03:00) Nairobi", + 'Asia/Riyadh' => "(GMT+03:00) Riyadh", + 'Europe/Volgograd' => "(GMT+03:00) Volgograd", + 'Asia/Tehran' => "(GMT+03:30) Tehran", + 'Asia/Baku' => "(GMT+04:00) Baku", + 'Asia/Muscat' => "(GMT+04:00) Muscat", + 'Asia/Tbilisi' => "(GMT+04:00) Tbilisi", + 'Asia/Yerevan' => "(GMT+04:00) Yerevan", + 'Asia/Kabul' => "(GMT+04:30) Kabul", + 'Asia/Yekaterinburg' => "(GMT+05:00) Ekaterinburg", + 'Asia/Karachi' => "(GMT+05:00) Karachi", + 'Asia/Tashkent' => "(GMT+05:00) Tashkent", + 'Asia/Kolkata' => "(GMT+05:30) Kolkata", + 'Asia/Kathmandu' => "(GMT+05:45) Kathmandu", + 'Asia/Almaty' => "(GMT+06:00) Almaty", + 'Asia/Dhaka' => "(GMT+06:00) Dhaka", + 'Asia/Novosibirsk' => "(GMT+06:00) Novosibirsk", + 'Asia/Bangkok' => "(GMT+07:00) Bangkok", + 'Asia/Jakarta' => "(GMT+07:00) Jakarta", + 'Asia/Krasnoyarsk' => "(GMT+07:00) Krasnoyarsk", + 'Asia/Chongqing' => "(GMT+08:00) Chongqing", + 'Asia/Hong_Kong' => "(GMT+08:00) Hong Kong", + 'Asia/Irkutsk' => "(GMT+08:00) Irkutsk", + 'Asia/Kuala_Lumpur' => "(GMT+08:00) Kuala Lumpur", + 'Australia/Perth' => "(GMT+08:00) Perth", + 'Asia/Singapore' => "(GMT+08:00) Singapore", + 'Asia/Taipei' => "(GMT+08:00) Taipei", + 'Asia/Ulaanbaatar' => "(GMT+08:00) Ulaan Bataar", + 'Asia/Urumqi' => "(GMT+08:00) Urumqi", + 'Asia/Seoul' => "(GMT+09:00) Seoul", + 'Asia/Tokyo' => "(GMT+09:00) Tokyo", + 'Asia/Yakutsk' => "(GMT+09:00) Yakutsk", + 'Australia/Adelaide' => "(GMT+09:30) Adelaide", + 'Australia/Darwin' => "(GMT+09:30) Darwin", + 'Australia/Brisbane' => "(GMT+10:00) Brisbane", + 'Australia/Canberra' => "(GMT+10:00) Canberra", + 'Pacific/Guam' => "(GMT+10:00) Guam", + 'Australia/Hobart' => "(GMT+10:00) Hobart", + 'Australia/Melbourne' => "(GMT+10:00) Melbourne", + 'Pacific/Port_Moresby' => "(GMT+10:00) Port Moresby", + 'Australia/Sydney' => "(GMT+10:00) Sydney", + 'Asia/Vladivostok' => "(GMT+10:00) Vladivostok", + 'Asia/Magadan' => "(GMT+11:00) Magadan", + 'Pacific/Auckland' => "(GMT+12:00) Auckland", + 'Pacific/Fiji' => "(GMT+12:00) Fiji", + 'Asia/Kamchatka' => "(GMT+12:00) Kamchatka" + ); + + /** + * Méthode qui retourne la liste des timezones + * + * @return array liste des timezones + * @author Stephane F. + **/ + public static function timezones() { + return plxTimezones::$_timezones; + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.token.php b/src/core/lib/class.plx.token.php new file mode 100644 index 0000000..fd0c634 --- /dev/null +++ b/src/core/lib/class.plx.token.php @@ -0,0 +1,45 @@ +'; + + } + + /** + * Méthode qui valide la durée de vide d'un token + * + * @parm $request (deprecated) + * @return stdio/null + * @author Stephane F + **/ + public static function validateFormToken($request='') { + + if($_SERVER['REQUEST_METHOD']=='POST' AND isset($_SESSION['formtoken'])) { + + if(empty($_POST['token']) OR plxUtils::getValue($_SESSION['formtoken'][$_POST['token']]) < time() - 3600) { # 3600 seconds + unset($_SESSION['formtoken']); + die('Security error : invalid or expired token'); + } + unset($_SESSION['formtoken'][$_POST['token']]); + } + + } + +} +?> \ No newline at end of file diff --git a/src/core/lib/class.plx.utils.php b/src/core/lib/class.plx.utils.php new file mode 100644 index 0000000..c9bad84 --- /dev/null +++ b/src/core/lib/class.plx.utils.php @@ -0,0 +1,910 @@ +$v) { # On parcourt le tableau + if(is_array($v)) { + foreach($v as $key=>$val) + $new_content[$k][$key] = stripslashes($val); + } else { + $new_content[ $k ] = stripslashes($v); + } + } + } else { # On traite une chaine + $new_content = stripslashes($content); + } + # On retourne le tableau modifie + return $new_content; + } else { + return $content; + } + } + + /** + * Méthode qui vérifie le bon formatage d'une adresse email + * + * @param mail adresse email à vérifier + * @return boolean vrai si adresse email bien formatée + **/ + public static function checkMail($mail) { + + if (strlen($mail) > 80) + return false; + return preg_match('/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|("[^"]+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/', $mail); + } + + /** + * Méthode qui vérifie si l'url passée en paramètre correspond à un format valide + * + * @param site url d'un site + * @return boolean vrai si l'url est bien formatée + **/ + public static function checkSite(&$site, $reset=true) { + + $site = preg_replace('#([\'"].*)#', '', $site); + + if(isset($site[0]) AND $site[0]=='?') return true; # url interne commençant par ? + # On vérifie le site via une expression régulière + # Méthode imme_emosol - http://mathiasbynens.be/demo/url-regex + # modifiée par Amaury Graillat pour prendre en compte les tirets dans les urls + if(preg_match('@(https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+([/?][^\s]*)?$@iS', $site)) + return true; + else { + if($reset) $site=''; + return false; + } + } + + /** + * Méthode qui vérifie le format d'une adresse ip + * + * @param ip adresse ip à vérifier + * @return boolean vrai si format valide + **/ + public static function isValidIp($ip) { + + $ipv4 = '/((^|\.)(2[0-5]{2}|[01][0-9]{2}|[0-9]{1,2})(?=\.|$)){4}/'; + $ipv6 = '/^:?([a-fA-F0-9]{1,4}(:|.)?){0,8}(:|::)?([a-fA-F0-9]{1,4}(:|.)?){0,8}$/'; + return (preg_match($ipv4, $ip) OR preg_match($ipv6, $ip)); + + } + + /** + * Méthode qui retourne l'adresse ip d'un visiteur + * + * @return string adresse ip d'un visiteur + **/ + public static function getIp() { + + if(!empty($_SERVER['HTTP_CLIENT_IP'])) # check ip from share internet + $ip=$_SERVER['HTTP_CLIENT_IP']; + elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) # to check ip is pass from proxy + $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; + else + $ip=$_SERVER['REMOTE_ADDR']; + + return plxUtils::isValidIp($ip) ? $ip : ''; + } + + /** + * Méthode qui affiche une liste de sélection + * + * @param name nom de la liste + * @param array valeurs de la liste sous forme de tableau (nom, valeur) + * @param selected valeur par défaut + * @param readonly vrai si la liste est en lecture seule (par défaut à faux) + * @param class class css à utiliser pour formater l'affichage + * @param id si vrai génère un id à partir du nom du champ, sinon génère l'id à partir du paramètre + * @return stdout + **/ + public static function printSelect($name, $array, $selected='', $readonly=false, $class='', $id=true) { + + if(!is_array($array)) $array=array(); + + if(is_bool($id)) + $id = ($id ? ' id="id_'.$name.'"' : ''); + else + $id = ($id!='' ? ' id="'.$id.'"' : ''); + + if($readonly) + echo ''."\n"; + else + echo ''."\n"; + foreach($array as $a => $b) { + if(is_array($b)) { + echo ''."\n"; + foreach($b as $c=>$d) { + if($c == $selected) + echo "\t".''."\n"; + else + echo "\t".''."\n"; + } + echo ''."\n"; + } else { + if($a == $selected) + echo "\t".''."\n"; + else + echo "\t".''."\n"; + } + } + echo ''."\n"; + } + + /** + * Méthode qui affiche un zone de saisie + * + * @param name nom de la zone de saisie + * @param value valeur contenue dans la zone de saisie + * @param type type du champ (text, password, hidden) + * @param size longueur du champ - nombre maximal de caractères pouvant être saisis (par défaut 50-255) + * @param readonly vrai si le champ est en lecture seule (par défaut à faux) + * @param class class css à utiliser pour formater l'affichage + * àparam placeholder valeur du placeholder du champ (html5) + * @return stdout + **/ + public static function printInput($name, $value='', $type='text', $size='50-255', $readonly=false, $class='', $placeholder='') { + + $size = explode('-',$size); + $placeholder = $placeholder!='' ? ' placeholder="'.$placeholder.'"' : ''; + if($readonly) + echo ''."\n"; + else + echo ''."\n"; + + } + + /** + * Méthode qui affiche une zone de texte + * + * @param name nom de la zone de texte + * @param value valeur contenue dans la zone de texte + * @param cols nombre de caractères affichés par colonne + * @params rows nombre de caractères affichés par ligne + * @param readonly vrai si le champ est en lecture seule (par défaut à faux) + * @param class class css à utiliser pour formater l'affichage + * @return stdout + **/ + public static function printArea($name, $value='', $cols='', $rows='', $readonly=false, $class='') { + + if($readonly) + echo ''."\n"; + else + echo ''."\n"; + } + + /** + * Méthode qui teste si un fichier est accessible en écriture + * + * @param file emplacement et nom du fichier à tester + * @param format format d'affichage + **/ + public static function testWrite($file, $format="
  • #symbol #message
  • \n") { + + if(is_writable($file)) { + $output = str_replace('#color', 'green', $format); + $output = str_replace('#symbol', '✔', $output); + $output = str_replace('#message', sprintf(L_WRITE_ACCESS, $file), $output); + echo $output; + } else { + $output = str_replace('#color', 'red', $format); + $output = str_replace('#symbol', '✗', $output); + $output = str_replace('#message', sprintf(L_WRITE_NOT_ACCESS, $file), $output); + echo $output; + } + } + + /** + * Méthode qui teste si le module apache mod_rewrite est disponible + * + * @param io affiche à l'écran le resultat du test si à VRAI + * @param format format d'affichage + * @return boolean retourne vrai si le module apache mod_rewrite est disponible + * @author Stephane F + **/ + public static function testModRewrite($io=true, $format="
  • #symbol #message
  • \n") { + + if(function_exists('apache_get_modules')) { + $test = in_array("mod_rewrite", apache_get_modules()); + if($io==true) { + if($test) { + $output = str_replace('#color', 'green', $format); + $output = str_replace('#symbol', '✔', $output); + $output = str_replace('#message', L_MODREWRITE_AVAILABLE, $output); + echo $output; + } else { + $output = str_replace('#color', 'red', $format); + $output = str_replace('#symbol', '✗', $output); + $output = str_replace('#message', L_MODREWRITE_NOT_AVAILABLE, $output); + echo $output; + } + } + return $test; + } + else return true; + } + + /** + * Méthode qui teste si la fonction php mail est disponible + * + * @param io affiche à l'écran le resultat du test si à VRAI + * @param format format d'affichage + * @return boolean retourne vrai si la fonction php mail est disponible + * @author Stephane F + **/ + public static function testMail($io=true, $format="
  • #symbol #message
  • \n") { + + if($return=function_exists('mail')) { + if($io==true) { + $output = str_replace('#color', 'green', $format); + $output = str_replace('#symbol', '✔', $output); + $output = str_replace('#message', L_MAIL_AVAILABLE, $output); + echo $output; + } + } else { + if($io==true) { + $output = str_replace('#color', 'red', $format); + $output = str_replace('#symbol', '✗', $output); + $output = str_replace('#message', L_MAIL_NOT_AVAILABLE, $output); + echo $output; + } + } + return $return; + } + + /** + * Méthode qui teste si la bibliothèque GD est installé + * + * @param format format d'affichage + * @author Stephane F + **/ + public static function testLibGD($format="
  • #symbol #message
  • \n") { + + if(function_exists('imagecreatetruecolor')) { + $output = str_replace('#color', 'green', $format); + $output = str_replace('#symbol', '✔', $output); + $output = str_replace('#message', L_LIBGD_INSTALLED, $output); + echo $output; + } else { + $output = str_replace('#color', 'red', $format); + $output = str_replace('#symbol', '✗', $output); + $output = str_replace('#message', L_LIBGD_NOT_INSTALLED, $output); + echo $output; + } + } + + /** + * Méthode qui formate une chaine de caractères en supprimant des caractères non valides + * + * @param str chaine de caracères à formater + * @param charset charset à utiliser dans le formatage de la chaine (par défaut utf-8) + * @return string chaine formatée + **/ + public static function removeAccents($str,$charset='utf-8') { + + $str = htmlentities($str, ENT_NOQUOTES, $charset); + $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml|uro)\;#', '\1', $str); + $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); # pour les ligatures e.g. 'œ' + $str = preg_replace('#\&[^;]+\;#', '', $str); # supprime les autres caractères + return $str; + } + + /** + * Méthode qui convertit une chaine de caractères au format valide pour une url + * + * @param str chaine de caractères à formater + * @return string nom d'url valide + **/ + public static function title2url($str) { + + $str = strtolower(plxUtils::removeAccents($str,PLX_CHARSET)); + $str = preg_replace('/[^[:alnum:]]+/',' ',$str); + return strtr(trim($str), ' ', '-'); + } + + /** + * Méthode qui convertit une chaine de caractères au format valide pour un nom de fichier + * + * @param str chaine de caractères à formater + * @return string nom de fichier valide + **/ + public static function title2filename($str) { + + $str = strtolower(plxUtils::removeAccents($str,PLX_CHARSET)); + $str = str_replace('|','',$str); + $str = preg_replace('/\.{2,}/', '.', $str); + $str = preg_replace('/[^[:alnum:]|.|_]+/',' ',$str); + return strtr(ltrim(trim($str),'.'), ' ', '-'); + } + + /** + * Méthode qui convertit un chiffre en chaine de caractères sur une longueur de n caractères, completée par des 0 à gauche + * + * @param num chiffre à convertire + * @param length longeur de la chaine à retourner + * @return string chaine formatée + **/ + public static function formatRelatif($num, $lenght) { + + $fnum = str_pad(abs($num), $lenght, '0', STR_PAD_LEFT); + if($num > -1) + return '+'.$fnum; + else + return '-'.$fnum; + } + + /** + * Méthode qui écrit dans un fichier + * Mode écriture seule; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer. + * + * @param xml contenu du fichier + * @param filename emplacement et nom du fichier + * @return boolean retourne vrai si l'écriture s'est bien déroulée + **/ + public static function write($xml, $filename) { + + if(file_exists($filename)) { + $f = fopen($filename.'.tmp', 'w'); # On ouvre le fichier temporaire + fwrite($f, trim($xml)); # On écrit + fclose($f); # On ferme + unlink($filename); + rename($filename.'.tmp', $filename); # On renomme le fichier temporaire avec le nom de l'ancien + } else { + $f = fopen($filename, 'w'); # On ouvre le fichier + fwrite($f, trim($xml)); # On écrit + fclose($f); # On ferme + } + # On place les bons droits + chmod($filename,0644); + # On vérifie le résultat + if(file_exists($filename) AND !file_exists($filename.'.tmp')) + return true; + else + return false; + } + + /** + * Méthode qui formate l'affichage de la taille d'un fichier + * + * @param filsize taille en octets d'un fichier + * @return string chaine d'affichage formatée + **/ + public static function formatFilesize($bytes) { + + if ($bytes < 1024) return $bytes.' B'; + elseif ($bytes < 1048576) return round($bytes / 1024, 2).' Kb'; + elseif ($bytes < 1073741824) return round($bytes / 1048576, 2).' Mb'; + + } + + /** + * Méthode qui crée la miniature d'une image + * + * @param filename emplacement et nom du fichier source + * @param filename_out emplacement et nom de la miniature créée + * @param width largeur de la miniature + * @param height hauteur de la miniature + * @param quality qualité de l'image + * @param ratio si vrai conserve le ratio largeur x hauteur + * @return boolean vrai si image créée + **/ + public static function makeThumb($filename, $filename_out, $width, $height, $quality) { + + if(!function_exists('imagecreatetruecolor')) return false; + + # Informations sur l'image + list($width_orig,$height_orig,$type) = getimagesize($filename); + + # Calcul du ratio + $ratio_w = $width / $width_orig; + $ratio_h = $height / $height_orig; + if($width == 0) + $width = $width_orig * $ratio_h; + elseif($height == 0) + $height = $height_orig * $ratio_w; + elseif($ratio_w < $ratio_h AND $ratio_w < 1) { + $width = $ratio_w * $width_orig; + $height = $ratio_w * $height_orig; + } elseif($ratio_h < 1) { + $width = $ratio_h * $width_orig; + $height = $ratio_h * $height_orig; + } else { + $width = $width_orig; + $height = $height_orig; + } + + # Création de l'image + $image_p = imagecreatetruecolor($width,$height); + + if($type == 1) { + $image = imagecreatefromgif($filename); + $color = imagecolortransparent($image_p, imagecolorallocatealpha($image_p, 0, 0, 0, 127)); + imagefill($image_p, 0, 0, $color); + imagesavealpha($image_p, true); + imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + imagegif($image_p, $filename_out); + } + elseif($type == 2) { + $image = imagecreatefromjpeg($filename); + imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + imagejpeg($image_p, $filename_out, $quality); + } + elseif($type == 3) { + $image = imagecreatefrompng($filename); + $color = imagecolortransparent($image_p, imagecolorallocatealpha($image_p, 0, 0, 0, 127)); + imagefill($image_p, 0, 0, $color); + imagesavealpha($image_p, true); + imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + imagepng($image_p, $filename_out); + } + + return is_file($filename_out); + } + + /** + * Méthode qui affiche un message + * + * @param msg message à afficher + * @param class class css à utiliser pour formater l'affichage du message + * @return stdout + **/ + public static function showMsg($msg, $class='') { + + if($class=='') echo '

    '.$msg.'

    '; + else echo '

    '.$msg.'

    '; + } + + /** + * Méthode qui retourne l'url de base du site + * + * @return string url de base du site + **/ + public static function getRacine() { + + $protocol = (!empty($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) == 'on') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) AND strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' )? 'https://' : "http://"; + $servername = $_SERVER['HTTP_HOST']; + $serverport = (preg_match('/:[0-9]+/', $servername) OR $_SERVER['SERVER_PORT'])=='80' ? '' : ':'.$_SERVER['SERVER_PORT']; + $dirname = preg_replace('/\/(core|plugins)\/(.*)/', '', dirname($_SERVER['SCRIPT_NAME'])); + $racine = rtrim($protocol.$servername.$serverport.$dirname, '/\\').'/'; + if(!plxUtils::checkSite($racine, false)) + die('Error: wrong or invalid url'); + return $racine; + } + + /** + * Méthode qui retourne une chaine de caractères au hasard + * + * @param taille nombre de caractère de la chaine à retourner (par défaut sur 10 caractères) + * @return string chaine de caractères au hasard + **/ + public static function charAleatoire($taille='10') { + + $string = ''; + $chaine = 'abcdefghijklmnpqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + mt_srand((float)microtime()*1000000); + for($i=0; $i<$taille; $i++) + $string .= $chaine[ mt_rand()%strlen($chaine) ]; + return $string; + } + + /** + * Méthode qui coupe une chaine de caractères sur n caractères ou sur n mots + * + * @param str chaine de caractères à couper + * @param length nombre de caractères ou nombre de mots à garder (par défaut 25) + * @param type à renseigner avec la valeur 'word' pour couper en nombre de mots. Par défaut la césure se fait en nombre de caractères + * @param add_text texte à ajouter après la chaine coupée (par défaut '...' est ajouté) + * @return string chaine de caractères coupée + **/ + public static function strCut($str='', $length=25, $type='', $add_text='...') { + if($type == 'word') { # On coupe la chaine en comptant le nombre de mots + $content = explode(' ',$str); + $length = sizeof($content) < $length ? sizeof($content) : $length; + return implode(' ',array_slice($content,0,$length)).$add_text; + } else { # On coupe la chaine en comptant le nombre de caractères + return strlen($str) > $length ? utf8_encode(substr(utf8_decode($str), 0, $length)).$add_text : $str; + } + } + + /** + * Méthode qui retourne une chaine de caractères formatée en fonction du charset + * + * @param str chaine de caractères + * @return string chaine de caractères tenant compte du charset + **/ + public static function strCheck($str) { + + return htmlspecialchars($str,ENT_QUOTES,PLX_CHARSET); + } + + /** + * Méthode qui retourne une chaine de caractères nettoyée des cdata + * + * @param str chaine de caractères à nettoyer + * @return string chaine de caractères nettoyée + * @author Stephane F + **/ + public static function cdataCheck($str) { + $str = str_ireplace('!CDATA', '!CDATA', $str); + return str_replace(']]>', ']]>', $str); + } + + /** + * Méthode qui retourne une chaine de caractères HTML en fonction du charset + * + * @param str chaine de caractères + * @return string chaine de caractères tenant compte du charset + **/ + public static function strRevCheck($str) { + + return html_entity_decode($str,ENT_QUOTES,PLX_CHARSET); + } + + /** + * Méthode qui retourne le type de compression disponible + * + * @return stout + * @author Stephane F., Amaury Graillat + **/ + public static function httpEncoding() { + if(headers_sent()){ + $encoding = false; + }elseif(isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false){ + $encoding = 'gzip'; + }else{ + $encoding = false; + } + return $encoding; + } + + /** + * Méthode qui converti les liens relatifs en liens absolus + * + * @param base url du site qui sera rajoutée devant les liens relatifs + * @param html chaine de caractères à convertir + * @return string chaine de caractères modifiée + * @author Stephane F., Amaury Graillat + **/ + public static function rel2abs($base, $html) { + + // url des plugins + $html = preg_replace('@\<([^>]*) (href|src)=(["\'])[\.]/plugins@i', '<$1 $2=$3'.$base.'plugins', $html); + // generate server-only replacement for root-relative URLs + $server = preg_replace('@^([^:]+)://([^/]+)(/|$).*@', '\1://\2/', $base); + // on repare les liens ne commençant que part # + $get = plxUtils::getGets(); + $html = preg_replace('@\<([^>]*) (href|src)=(["\'])#@i', '<\1 \2=\3'.$get.'#', $html); + // replace root-relative URLs + $html = preg_replace('@\<([^>]*) (href|src)=(["\']).?/@i', '<\1 \2=\3'.$server, $html); + // replace base-relative URLs + $html = preg_replace('@\<([^>]*) (href|src)=(["\'])([^:"]*|[^:"]*:[^/"][^"]*)(["\'])@i', '<\1 \2=\3'.$base.'\4\5', $html); + // unreplace fully qualified URLs with proto: that were wrongly added $base + $html = preg_replace('@\<([^>]*) (href|src)=(["\'])'.$base.'([a-zA-Z0-9]*):@i', '<\1 \2=\3\4:', $html); + return $html; + + } + + /** + * Méthode qui retourn la liste des langues disponibles dans un tableau + * + * @return string chaine de caractères modifiée + * @author Stephane F. + **/ + public static function getLangs() { + $array = array(); + $glob = plxGlob::getInstance(PLX_CORE.'lang', true); + if($aFolders = $glob->query("/[a-z]+/i")) { + foreach($aFolders as $folder) { + $array[$folder] = $folder; + } + } + ksort($array); + return $array; + } + + /** + * Méthode qui empeche de mettre en cache une page + * + * @return stdio + * @author Stephane F. + **/ + public static function cleanHeaders() { + @header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); + @header('Last-Modified: '.gmdate( 'D, d M Y H:i:s' ).' GMT'); + @header('Cache-Control: no-cache, must-revalidate, max-age=0'); + @header('Cache: no-cache'); + @header('Pragma: no-cache'); + @header('Content-Type: text/html; charset='.PLX_CHARSET); + } + + /** + * Méthode d'envoi de mail + * + * @param name string Nom de l'expéditeur + * @param from string Email de l'expéditeur + * @param to array/string Adresse(s) du(des) destinataires(s) + * @param subject string Objet du mail + * @param body string contenu du mail + * @return boolean renvoie FAUX en cas d'erreur d'envoi + * @author Amaury Graillat + **/ + public static function sendMail($name, $from, $to, $subject, $body, $contentType="text", $cc=false, $bcc=false) { + + if(is_array($to)) + $to = implode(', ', $to); + if(is_array($cc)) + $cc = implode(', ', $cc); + if(is_array($bcc)) + $bcc = implode(', ', $bcc); + + $headers = "From: ".$name." <".$from.">\r\n"; + $headers .= "Reply-To: ".$from."\r\n"; + $headers .= 'MIME-Version: 1.0'."\r\n"; + // Content-Type + if($contentType == 'html') + $headers .= 'Content-type: text/html; charset="'.PLX_CHARSET.'"'."\r\n"; + else + $headers .= 'Content-type: text/plain; charset="'.PLX_CHARSET.'"'."\r\n"; + + $headers .= 'Content-transfer-encoding: 8bit'."\r\n"; + $headers .= 'Date: '.date("D, j M Y G:i:s O")."\r\n"; // Sat, 7 Jun 2001 12:35:58 -0700 + + if($cc != "") + $headers .= 'Cc: '.$cc."\r\n"; + if($bcc != "") + $headers .= 'Bcc: '.$bcc."\r\n"; + + return mail($to, $subject, $body, $headers); + } + + /** + * Méthode qui formate un lien pour la barre des menus + * + * @param name string titre du menu + * @param href string lien du menu + * @param title string contenu de la balise title + * @param class string contenu de la balise class + * @param onclick string contenu de la balise onclick + * @param extra string extra texte à afficher + * @return string balise formatée + * @author Stephane F. + **/ + public static function formatMenu($name, $href, $title=false, $class=false, $onclick=false, $extra='', $highlight=true) { + $menu = ''; + $basename = explode('?', basename($href)); + $active = ($highlight AND ($basename[0] == basename($_SERVER['SCRIPT_NAME']))) ? ' active':''; + if($basename[0]=='plugin.php' AND isset($_GET['p']) AND $basename[1]!='p='.$_GET['p']) $active=''; + $title = $title ? ' title="'.$title.'"':''; + $class = $class ? ' '.$class:''; + $onclick = $onclick ? ' onclick="'.$onclick.'"':''; + $menu = ''; + return $menu; + } + + /** + * Truncates text. + * + * Cuts a string to the length of $length and replaces the last characters + * with the ending if the text is longer than length. + * + * @param string $text String to truncate. + * @param integer $length Length of returned string, including ellipsis. + * @param string $ending Ending to be appended to the trimmed string. + * @param boolean $exact If false, $text will not be cut mid-word + * @param boolean $considerHtml If true, HTML tags would be handled correctly + * @return string Trimmed string. + */ + public static function truncate($text, $length = 100, $ending = '...', $exact = true, $considerHtml = false) { + if ($considerHtml) { + // if the plain text is shorter than the maximum length, return the whole text + if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) { + return $text; + } + + // splits all html-tags to scanable lines + preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER); + + $total_length = strlen($ending); + $open_tags = array(); + $truncate = ''; + + foreach ($lines as $line_matchings) { + // if there is any html-tag in this line, handle it and add it (uncounted) to the output + if (!empty($line_matchings[1])) { + // if it's an "empty element" with or without xhtml-conform closing slash (f.e.
    ) + if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) { + // do nothing + // if tag is a closing tag (f.e. ) + } else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { + // delete tag from $open_tags list + $pos = array_search($tag_matchings[1], $open_tags); + if ($pos !== false) { + unset($open_tags[$pos]); + } + // if tag is an opening tag (f.e. ) + } else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) { + // add tag to the beginning of $open_tags list + array_unshift($open_tags, strtolower($tag_matchings[1])); + } + // add html-tag to $truncate'd text + $truncate .= $line_matchings[1]; + } + + // calculate the length of the plain text part of the line; handle entities as one character + $content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); + if ($total_length+$content_length> $length) { + // the number of characters which are left + $left = $length - $total_length; + $entities_length = 0; + // search for html entities + if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) { + // calculate the real length of all entities in the legal range + foreach ($entities[0] as $entity) { + if ($entity[1]+1-$entities_length <= $left) { + $left--; + $entities_length += strlen($entity[0]); + } else { + // no more characters left + break; + } + } + } + $truncate .= substr($line_matchings[2], 0, $left+$entities_length); + // maximum lenght is reached, so get off the loop + break; + } else { + $truncate .= $line_matchings[2]; + $total_length += $content_length; + } + + // if the maximum length is reached, get off the loop + if($total_length>= $length) { + break; + } + } + } else { + if (strlen($text) <= $length) { + return $text; + } else { + $truncate = substr($text, 0, $length - strlen($ending)); + } + } + + // if the words shouldn't be cut in the middle... + if (!$exact) { + // ...search the last occurance of a space... + $spacepos = strrpos($truncate, ' '); + if (isset($spacepos)) { + // ...and cut the text in this position + $truncate = substr($truncate, 0, $spacepos); + } + } + + // add the defined ending to the text + $truncate .= $ending; + /* + if($considerHtml) { + // close all unclosed html-tags + foreach ($open_tags as $tag) { + $truncate .= ''; + } + } + */ + return $truncate; + + } + + /** + * Protège une chaine contre un null byte + * + * @param string $text chaine à nettoyer + * @return string chaine nettoyée + */ + public static function nullbyteRemove($string) { + return str_replace("\0", '', $string); + } + + /** + * Controle le nom d'un fichier ou d'un dossier + * + * @param string nom d'un fichier + * @return boolean validité du nom du fichier ou du dossier + */ + public static function checkSource($src, $type='dir') { + + if (is_null($src) OR !strlen($src) OR substr($src,-1,1)=="." OR false!==strpos($src, "..")) { + return false; + } + + if($type=='dir') + $regex = ",(/\.)|[[:cntrl:]]|(//)|(\\\\)|([\\:\*\?\"\<\>\|]),"; + elseif($type=='file') + $regex = ",[[:cntrl:]]|[/\\:\*\?\"\<\>\|],"; + + if (preg_match($regex, $src)) { + return false; + } + return true; + } + + /** + * Formate le nom d'une miniature à partir d'un nom de fichier + * + * @param string nom d'un fichier + * @return string nmo de la miniature au format fichier.tb.ext + */ + public static function thumbName($filename) { + if(preg_match('/^(.*\.)([^.]+)$/D', $filename, $matches)) { + return $matches[1].'tb.'.$matches[2]; + } else { + return $filename; + } + } + + /** + * Méthode qui minifie un buffer + * + * @param string chaine de caractères à minifier + * @return string chaine de caractères minifiée + * @author Frédéric Kaplon + **/ + public static function minify($buffer) { + /* Suprimme les commentaires */ + $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); + /* Suprimme les tabs, espaces, saut de ligne, etc. */ + $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer); + return $buffer; + } + +/* + function arrayRemoveDuplicate($array, $field) { + foreach ($array as $element) + $cmp[] = $element[$field]; + $unique = array_unique($cmp); + foreach ($unique as $k => $v) + $new[] = $array[$k]; + return $new; + } +*/ +} +?> diff --git a/src/core/lib/config.php b/src/core/lib/config.php new file mode 100644 index 0000000..abb66b9 --- /dev/null +++ b/src/core/lib/config.php @@ -0,0 +1,74 @@ + PLX_ROOT.PLX_CONFIG_PATH.'parametres.xml', + 'XMLFILE_CATEGORIES' => PLX_ROOT.PLX_CONFIG_PATH.'categories.xml', + 'XMLFILE_STATICS' => PLX_ROOT.PLX_CONFIG_PATH.'statiques.xml', + 'XMLFILE_USERS' => PLX_ROOT.PLX_CONFIG_PATH.'users.xml', + 'XMLFILE_PLUGINS' => PLX_ROOT.PLX_CONFIG_PATH.'plugins.xml', + 'XMLFILE_TAGS' => PLX_ROOT.PLX_CONFIG_PATH.'tags.xml', +); + +# Définition de l'encodage => PLX_CHARSET : UTF-8 (conseillé) ou ISO-8859-1 +define('PLX_CHARSET', 'UTF-8'); + +# Langue par défaut +define('DEFAULT_LANG', 'fr'); + +# profils utilisateurs de pluxml +define('PROFIL_ADMIN', 0); +define('PROFIL_MANAGER', 1); +define('PROFIL_MODERATOR', 2); +define('PROFIL_EDITOR', 3); +define('PROFIL_WRITER', 4); + +# taille redimensionnement des images et miniatures +$img_redim = array('320x200', '500x380', '640x480'); +$img_thumb = array('50x50', '75x75', '100x100'); + +# On sécurise notre environnement si dans php.ini: register_globals = On +if (ini_get('register_globals')) { + $array = array('_REQUEST', '_SESSION', '_SERVER', '_ENV', '_FILES'); + foreach ($array as $value) { + if(isset($GLOBALS[$value])) { + foreach ($GLOBALS[$value] as $key => $var) { + if (isset($GLOBALS[$key]) AND $var === $GLOBALS[$key]) { + unset($GLOBALS[$key]); + } + } + } + } +} + +# fonction de chargement d'un fichier de langue +function loadLang($filename) { + if(file_exists($filename)) { + $LANG = array(); + include_once($filename); + foreach($LANG as $key => $value) { + if(!defined($key)) define($key,$value); + } + } +} + +# fonction qui retourne ou change le chemin des fichiers xml de configuration +function path($s, $newvalue='') { + global $CONSTS; + if(!empty($newvalue)) + $CONSTS[$s]=$newvalue; + if(isset($CONSTS[$s])) + return $CONSTS[$s]; +} +?> \ No newline at end of file diff --git a/src/core/lib/functions.js b/src/core/lib/functions.js new file mode 100644 index 0000000..c53dd11 --- /dev/null +++ b/src/core/lib/functions.js @@ -0,0 +1,90 @@ + \ No newline at end of file diff --git a/src/core/lib/html.article.txt b/src/core/lib/html.article.txt new file mode 100644 index 0000000..196dcc5 --- /dev/null +++ b/src/core/lib/html.article.txt @@ -0,0 +1,15 @@ +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.

    +----- +

    Procedente igitur mox tempore cum adventicium nihil inveniretur, relicta ora maritima in Lycaoniam adnexam Isauriae se contulerunt ibique densis intersaepientes itinera praetenturis provincialium et viatorum opibus pascebantur.

    +

    Quam quidem partem accusationis admiratus sum et moleste tuli potissimum esse Atratino datam. Neque enim decebat neque aetas illa postulabat neque, id quod animadvertere poteratis, pudor patiebatur optimi adulescentis in tali illum oratione versari. Vellem aliquis ex vobis robustioribus hunc male dicendi locum suscepisset; aliquanto liberius et fortius et magis more nostro refutaremus istam male dicendi licentiam. Tecum, Atratine, agam lenius, quod et pudor tuus moderatur orationi meae et meum erga te parentemque tuum beneficium tueri debeo.

    +
      +
    • Quod si rectum statuerimus vel concedere amicis,
    • +
    • Dum haec in oriente aguntur, Arelate hiemem agens
    • +
    • Quae dum ita struuntur, indicatum est apud Tyrum
    • +
    • Siquis enim militarium vel honoratorum aut nobilis
    • +
    • Post haec indumentum regale quaerebatur et
    • +
    +

    Ideoque fertur neminem aliquando ob haec vel similia poenae addictum oblato de more elogio revocari iussisse, quod inexorabiles quoque principes factitarunt. et exitiale hoc vitium, quod in aliis non numquam intepescit, in illo aetatis progressu effervescebat, obstinatum eius propositum accendente adulatorum cohorte.

    +

    Siquis enim militarium vel honoratorum aut nobilis inter suos rumore tenus esset insimulatus fovisse partes hostiles, iniecto onere catenarum in modum beluae trahebatur et inimico urgente vel nullo, quasi sufficiente hoc solo, quod nominatus esset aut delatus aut postulatus, capite vel multatione bonorum aut insulari solitudine damnabatur.

    +

    Isdem diebus Apollinaris Domitiani gener, paulo ante agens palatii Caesaris curam, ad Mesopotamiam missus a socero per militares numeros immodice scrutabatur, an quaedam altiora meditantis iam Galli secreta susceperint scripta, qui conpertis Antiochiae gestis per minorem Armeniam lapsus Constantinopolim petit exindeque per protectores retractus artissime tenebatur.

    \ No newline at end of file diff --git a/src/core/lib/html.static.txt b/src/core/lib/html.static.txt new file mode 100644 index 0000000..cd7ed05 --- /dev/null +++ b/src/core/lib/html.static.txt @@ -0,0 +1,88 @@ +

    Below is just about everything you’ll need to style in the theme. Check the source code to see the many embedded elements within paragraphs.

    +
    +

    Heading 1

    +

    Heading 2

    +

    Heading 3

    +

    Heading 4

    +
    Heading 5
    +
    Heading 6
    +
    +

    Lorem ipsum dolor sit amet, test link adipiscing elit. This is strong. Nullam dignissim convallis est. Quisque aliquam. This is emphasized. Donec faucibus. Nunc iaculis suscipit dui. 53 = 125. Water is H2O. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. The New York Times (That’s a citation). Underline. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.

    +

    HTML and CSS are our tools. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. To copy a file type COPY filename. Dinner’s at 5:00. Let’s make that 7. This text has been struck.

    +
    +

    List Types

    +

    Definition List

    +
    +
    Definition List Title
    +
    This is a definition list division.
    +
    Definition
    +
    An exact statement or description of the nature, scope, or meaning of something: our definition of what constitutes poetry.
    +
    +

    Ordered List

    +
      +
    1. List Item 1
    2. +
    3. List Item 2 +
        +
      1. Nested list item A
      2. +
      3. Nested list item B
      4. +
      +
    4. +
    5. List Item 3
    6. +
    +

    Unordered List

    +
      +
    • List Item 1
    • +
    • List Item 2 +
        +
      • Nested list item A
      • +
      • Nested list item B
      • +
      +
    • +
    • List Item 3
    • +
    +
    +

    Table

    + + + + + + + + + + + + + + + + + + + + + + + +
    Table Header 1Table Header 2Table Header 3
    Division 1Division 2Division 3
    Division 1Division 2Division 3
    Division 1Division 2Division 3
    +

    Preformatted Text

    +

    Typographically, preformatted text is not the same thing as code. Sometimes, a faithful execution of the text requires preformatted text that may not have anything to do with code. Most browsers use Courier and that’s a good default — with one slight adjustment, Courier 10 Pitch over regular Courier for Linux users. For example:

    +
    "Beware the Jabberwock, my son!
    +    The jaws that bite, the claws that catch!
    +Beware the Jubjub bird, and shun
    +    The frumious Bandersnatch!"
    +

    Code

    +

    Code can be presented inline, like <?php echo "This is my first static page"; ?>, or within a <pre> block. Because we have more specific typographic needs for code, we’ll specify Consolas and Monaco ahead of the browser-defined monospace font.

    +
    
    +#container {
    +	float: left;
    +	margin: 0 -240px 0 0;
    +	width: 100%;
    +}
    +
    +

    Blockquotes

    +

    Let’s keep it simple. Italics are good to help set it off from the body text (and italic Georgia is lovely at this size). Be sure to style the citation.

    +

    Good afternoon, gentlemen. I am a HAL 9000 computer. I became operational at the H.A.L. plant in Urbana, Illinois on the 12th of January 1992. My instructor was Mr. Langley, and he taught me to sing a song. If you’d like to hear it I can sing it for you.

    +

    HAL 9000

    +

    And here’s a bit of trailing text.

    \ No newline at end of file diff --git a/src/core/lib/index.html b/src/core/lib/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/core/lib/multifiles.js b/src/core/lib/multifiles.js new file mode 100644 index 0000000..115bb82 --- /dev/null +++ b/src/core/lib/multifiles.js @@ -0,0 +1,153 @@ +/** + * Convert a single file-input element into a 'multiple' input list + * Usage: + * 1. Create a file input element (no name) + * eg. + * 2. Create a DIV for the output to be written to + * eg.
    + * 3. Instantiate a MultiSelector object, passing in the DIV and an (optional) maximum number of files + * eg. var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 ); + * 4. Add the first element + * eg. multi_selector.addElement( document.getElementById( 'first_file_element' ) ); + * 5. That's it. + * You might (will) want to play around with the addListRow() method to make the output prettier. + * You might also want to change the line + * element.name = 'file_' + this.count; + * ...to a naming convention that makes more sense to you. + * Licence: + * Use this however/wherever you like, just don't blame me if it breaks anything. + * Credit: + * If you're nice, you'll leave this bit: + * Class by Stickman -- http://www.the-stickman.com + * with thanks to: + * [for Safari fixes] + * Luis Torrefranca -- http://www.law.pitt.edu + * and + * Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com + * [for duplicate name bug] + * 'neal' + */ +function MultiSelector( list_target, max, racine ){ + // racine du site + this.racine = racine; + // Where to write the list + this.list_target = list_target; + // How many elements? + this.count = 0; + // How many elements? + this.id = 0; + // Is there a maximum? + if( max ){ + this.max = max; + } else { + this.max = -1; + }; + + /** + * Add a new file input element + */ + this.addElement = function( element ){ + + // Make sure it's a file input element + if( element.tagName == 'INPUT' && element.type == 'file' ){ + + // Element name -- what number am I? + element.name = 'file_' + this.id++; + + // Add reference to this object + element.multi_selector = this; + + // What to do when a file is selected + element.onchange = function(){ + + // New file input + var new_element = document.createElement( 'input' ); + new_element.type = 'file'; + + // Add new element + this.parentNode.insertBefore( new_element, this ); + + // Apply 'update' to element + this.multi_selector.addElement( new_element ); + + // Update list + this.multi_selector.addListRow( this ); + + // Hide this: we can't use display:none because Safari doesn't like it + this.style.position = 'absolute'; + this.style.left = '-1000px'; + + }; + // If we've reached maximum number, disable input element + if( this.max != -1 && this.count >= this.max ){ + element.disabled = true; + }; + // File element counter + this.count++; + // Most recent element + this.current_element = element; + + } else { + // This can only be applied to file input elements! + alert( 'Error: not a file input element' ); + }; + + }; + + /** + * Add a new row to the list of files + */ + this.addListRow = function( element ){ + + // Row div + var new_row = document.createElement( 'div' ); + new_row.setAttribute("class","rowfile"); + new_row.setAttribute("className","rowfile"); /* Hack IE */ + // Delete link + var new_row_button = document.createElement('a'); + new_row_button.setAttribute('href', 'javascript:void(0)'); + new_row_button.innerHTML = ''; + new_row_button.setAttribute("class","btnDelete"); + new_row_button.setAttribute("className","btnDelete"); /* Hack IE */ + + // file title + var new_row_div = document.createElement('div'); + new_row_div.innerHTML = ' '+this.basename(element.value); + new_row_div.setAttribute("class","divtitle"); + new_row_div.setAttribute("className","divtitle"); /* Hack IE */ + + // References + new_row.element = element; + + // Delete function + new_row_button.onclick= function(){ + + // Remove element from form + this.parentNode.element.parentNode.removeChild( this.parentNode.element ); + + // Remove this row from the list + this.parentNode.parentNode.removeChild( this.parentNode ); + + // Decrement counter + this.parentNode.element.multi_selector.count--; + + // Re-enable input element (if it's disabled) + this.parentNode.element.multi_selector.current_element.disabled = false; + + // Appease Safari + // without it Safari wants to reload the browser window + // which nixes your already queued uploads + return false; + }; + // Add button + new_row.appendChild( new_row_button ); + // Add file title + new_row.appendChild( new_row_div ); + // Add it to the list + this.list_target.appendChild( new_row ); + }; + + this.basename = function(path) { + return path.replace(/\\/g,'/').replace( /.*\//, '' ); + }; +}; \ No newline at end of file diff --git a/src/core/lib/visual.js b/src/core/lib/visual.js new file mode 100644 index 0000000..ddff54e --- /dev/null +++ b/src/core/lib/visual.js @@ -0,0 +1,46 @@ + \ No newline at end of file diff --git a/src/data/.htaccess b/src/data/.htaccess new file mode 100644 index 0000000..ce7ca45 --- /dev/null +++ b/src/data/.htaccess @@ -0,0 +1 @@ +options -indexes \ No newline at end of file diff --git a/src/data/articles/.htaccess b/src/data/articles/.htaccess new file mode 100644 index 0000000..51d1a86 --- /dev/null +++ b/src/data/articles/.htaccess @@ -0,0 +1,4 @@ + + Order allow,deny + Deny from all + diff --git a/src/data/commentaires/.htaccess b/src/data/commentaires/.htaccess new file mode 100644 index 0000000..51d1a86 --- /dev/null +++ b/src/data/commentaires/.htaccess @@ -0,0 +1,4 @@ + + Order allow,deny + Deny from all + diff --git a/src/data/configuration/.htaccess b/src/data/configuration/.htaccess new file mode 100644 index 0000000..42b32a6 --- /dev/null +++ b/src/data/configuration/.htaccess @@ -0,0 +1,4 @@ + + Order allow,deny + Deny from all + \ No newline at end of file diff --git a/src/data/configuration/index.html b/src/data/configuration/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/data/index.html b/src/data/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/data/statiques/.htaccess b/src/data/statiques/.htaccess new file mode 100644 index 0000000..51d1a86 --- /dev/null +++ b/src/data/statiques/.htaccess @@ -0,0 +1,4 @@ + + Order allow,deny + Deny from all + diff --git a/src/feed.php b/src/feed.php new file mode 100644 index 0000000..03a1ac6 --- /dev/null +++ b/src/feed.php @@ -0,0 +1,55 @@ +plxPlugins->callHook('FeedBegin')); + +# On démarre la bufferisation +ob_start(); +ob_implicit_flush(0); + +$plxFeed->fprechauffage(); +$plxFeed->fdemarrage(); + +# Récuperation de la bufférisation +$output = ob_get_clean(); + +# Hook Plugins +eval($plxFeed->plxPlugins->callHook('FeedEnd')); + +# Restitution écran +echo $output; +exit; +?> \ No newline at end of file diff --git a/src/index.php b/src/index.php new file mode 100644 index 0000000..88619be --- /dev/null +++ b/src/index.php @@ -0,0 +1,103 @@ +plxPlugins->callHook('Index')); + +$plxMotor->prechauffage(); +$plxMotor->demarrage(); + +# Creation de l'objet d'affichage +$plxShow = plxShow::getInstance(); + +eval($plxMotor->plxPlugins->callHook('IndexBegin')); + +# On démarre la bufferisation +ob_start(); +ob_implicit_flush(0); + +# Traitements du thème +if($plxMotor->style == '' or !is_dir(PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style)) { + header('Content-Type: text/plain'); + echo L_ERR_THEME_NOTFOUND.' ('.PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style.') !'; +} elseif(file_exists(PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style.'/'.$plxMotor->template)) { + # On impose le charset + header('Content-Type: text/html; charset='.PLX_CHARSET); + # Insertion du template + include(PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style.'/'.$plxMotor->template); +} else { + header('Content-Type: text/plain'); + echo L_ERR_FILE_NOTFOUND.' ('.PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style.'/'.$plxMotor->template.') !'; +} + +# Récuperation de la bufférisation +$output = ob_get_clean(); + +# Hooks spécifiques au thème +ob_start(); +eval($plxMotor->plxPlugins->callHook('ThemeEndHead')); +$output = str_replace('', ob_get_clean().'', $output); +ob_start(); +eval($plxMotor->plxPlugins->callHook('ThemeEndBody')); +$output = str_replace('', ob_get_clean().'', $output); + +# Hook Plugins +eval($plxMotor->plxPlugins->callHook('IndexEnd')); + +# On applique la réécriture d'url si nécessaire +if($plxMotor->aConf['urlrewriting']) { + $output = plxUtils::rel2abs($plxMotor->aConf['racine'], $output); +} + +# On applique la compression gzip si nécessaire et disponible +if($plxMotor->aConf['gzip']) { + if($encoding=plxUtils::httpEncoding()) { + header('Content-Encoding: '.$encoding); + $output = gzencode($output,-1,FORCE_GZIP); + } +} + +# Restitution écran +echo $output; +exit; +?> \ No newline at end of file diff --git a/src/install.php b/src/install.php new file mode 100644 index 0000000..bdc2f41 --- /dev/null +++ b/src/install.php @@ -0,0 +1,311 @@ +'PluXml', + 'description'=>plxUtils::strRevCheck(L_SITE_DESCRIPTION), + 'meta_description'=>'', + 'meta_keywords'=>'', + 'timezone'=>$timezone, + 'allow_com'=>1, + 'mod_com'=>0, + 'mod_art'=>0, + 'capcha'=>1, + 'style'=>'defaut', + 'clef'=>plxUtils::charAleatoire(15), + 'bypage'=>5, + 'bypage_archives'=>5, + 'bypage_admin'=>10, + 'bypage_admin_coms'=>10, + 'bypage_feed'=>8, + 'tri'=>'desc', + 'tri_coms'=>'asc', + 'images_l'=>800, + 'images_h'=>600, + 'miniatures_l'=>200, + 'miniatures_h'=>100, + 'thumbs'=>1, + 'images'=>'data/images/', + 'documents'=>'data/documents/', + 'racine_articles'=>'data/articles/', + 'racine_commentaires'=>'data/commentaires/', + 'racine_statiques'=>'data/statiques/', + 'racine_themes'=>'themes/', + 'racine_plugins'=>'plugins/', + 'homestatic'=>'', + 'hometemplate'=>'home.php', + 'urlrewriting'=>0, + 'gzip'=>0, + 'feed_chapo'=>0, + 'feed_footer'=>'', + 'version'=>$version, + 'default_lang'=>$lang, + 'userfolders'=>0, + 'display_empty_cat'=>0 + ); + +function install($content, $config) { + + # gestion du timezone + date_default_timezone_set($config['timezone']); + + # Création du fichier de configuration + $xml = ''."\n"; + $xml .= ''."\n"; + foreach($config as $k=>$v) { + if(is_numeric($v)) + $xml .= "\t".$v."\n"; + else + $xml .= "\t\n"; + } + $xml .= ''; + plxUtils::write($xml,path('XMLFILE_PARAMETERS')); + + # Création du fichier des utilisateurs + $salt = plxUtils::charAleatoire(10); + $xml = ''."\n"; + $xml .= "\n"; + $xml .= "\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\n"; + $xml .= ""; + plxUtils::write($xml,path('XMLFILE_USERS')); + + # Création du fichier des categories + $xml = ''."\n"; + $xml .= ''."\n"; + $xml .= "\t".''."\n"; + $xml .= ''; + plxUtils::write($xml,path('XMLFILE_CATEGORIES')); + + # Création du fichier des pages statiques + $xml = ''."\n"; + $xml .= ''."\n"; + $xml .= "\t".''."\n"; + $xml .= ''; + plxUtils::write($xml,path('XMLFILE_STATICS')); + plxUtils::write(file_get_contents(PLX_CORE.'/lib/html.static.txt'),PLX_ROOT.$config['racine_statiques'].'001.'.L_DEFAULT_STATIC_URL.'.php'); + + # Création du premier article + $html = explode('-----', file_get_contents(PLX_CORE.'/lib/html.article.txt')); + $xml = ''."\n"; + $xml .= ' + <![CDATA['.plxUtils::strRevCheck(L_DEFAULT_ARTICLE_TITLE).']]> + 1 + + + + + + + + + + + + + + + + + + + +'; + plxUtils::write($xml,PLX_ROOT.$config['racine_articles'].'0001.001.001.'.date('YmdHi').'.'.L_DEFAULT_ARTICLE_URL.'.xml'); + + # Création du fichier des tags servant de cache + $xml = ''."\n"; + $xml .= ''."\n"; + $xml .= "\t".'
    '."\n"; + $xml .= '
    '; + plxUtils::write($xml,path('XMLFILE_TAGS')); + + # Création du fichier des plugins + $xml = ''."\n"; + $xml .= ''."\n"; + $xml .= ''; + plxUtils::write($xml,path('XMLFILE_PLUGINS')); + + # Création du premier commentaire + $xml = ''."\n"; + $xml .= ' + + normal + 127.0.0.1 + + + + '; + plxUtils::write($xml,PLX_ROOT.$config['racine_commentaires'].'0001.'.date('U').'-1.xml'); + +} + +$msg=''; +if(!empty($_POST['install'])) { + + if(trim($_POST['name']=='')) $msg = L_ERR_MISSING_USER; + elseif(trim($_POST['login']=='')) $msg = L_ERR_MISSING_LOGIN; + elseif(trim($_POST['pwd']=='')) $msg = L_ERR_MISSING_PASSWORD; + elseif($_POST['pwd']!=$_POST['pwd2']) $msg = L_ERR_PASSWORD_CONFIRMATION; + else { + install($_POST, $config); + header('Location: '.plxUtils::getRacine()); + exit; + } + $name=$_POST['name']; + $login=$_POST['login']; +} +else { + $name=''; + $login=''; +} +plxUtils::cleanHeaders(); +?> + + + + <?php echo L_PLUXML_INSTALLATION.' '.L_VERSION.' '.$version ?> + + + + + + + + + +
    +

    -

    + '.$msg.'

    '; ?> +
    +
    +

    +   + + +
    +
    +
    +
    +

    + +

    + +

    + +

    + +

    + +

    + + +
    +
    +
    +
      +
    • ( )
    • +
    • +
    • + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/src/plugins/.htaccess b/src/plugins/.htaccess new file mode 100644 index 0000000..45552cb --- /dev/null +++ b/src/plugins/.htaccess @@ -0,0 +1 @@ +Options -Indexes \ No newline at end of file diff --git a/src/plugins/index.html b/src/plugins/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/sitemap.php b/src/sitemap.php new file mode 100644 index 0000000..479b3f4 --- /dev/null +++ b/src/sitemap.php @@ -0,0 +1,122 @@ +plxPlugins->callHook('SitemapBegin'))) return; + +# On démarre la bufferisation +ob_start(); +ob_implicit_flush(0); + +$plxMotor->prechauffage(); +$plxMotor->demarrage(); + +# Entête XML +echo ''."\n"; +?> + + + urlRewrite() ?> + weekly + 1.0 + +aStats as $stat_num => $stat_info) { + if($stat_info['active']==1 AND $stat_num!=$plxMotor->aConf['homestatic']) { + echo "\n"; + echo "\t\n"; + echo "\t\t".$plxMotor->urlRewrite("?static".intval($stat_num)."/".$stat_info['url'])."\n"; + echo "\t\tmonthly\n"; + echo "\t\t0.8\n"; + echo "\t\n"; + } +} +eval($plxMotor->plxPlugins->callHook('SitemapStatics')); +# Les catégories +foreach($plxMotor->aCats as $cat_num => $cat_info) { + if($cat_info['active']==1 AND $cat_info['menu']=='oui' AND ($cat_info['articles']!=0 OR $plxMotor->aConf['display_empty_cat'])) { + echo "\n"; + echo "\t\n"; + echo "\t\t".$plxMotor->urlRewrite("?categorie".intval($cat_num)."/".$cat_info['url'])."\n"; + echo "\t\tweekly\n"; + echo "\t\t0.8\n"; + echo "\t\n"; + } +} +eval($plxMotor->plxPlugins->callHook('SitemapCategories')); +# Les articles +if($aFiles = $plxMotor->plxGlob_arts->query('/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort', 0, false, 'before')) { + $plxRecord_arts = false; + $array=array(); + foreach($aFiles as $k=>$v) { # On parcourt tous les fichiers + $array[ $k ] = $plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$v); + } + # On stocke les enregistrements dans un objet plxRecord + $plxRecord_arts = new plxRecord($array); + if($plxRecord_arts) { + # On boucle sur nos articles + while($plxRecord_arts->loop()) { + $num = intval($plxRecord_arts->f('numero')); + echo "\n"; + echo "\t\n"; + echo "\t\t".$plxMotor->urlRewrite("?article".$num."/".plxUtils::strCheck($plxRecord_arts->f('url')))."\n"; + echo "\t\t".plxDate::formatDate($plxRecord_arts->f('date'),'#num_year(4)-#num_month-#num_day')."\n"; + echo "\t\tmonthly\n"; + echo "\t\t0.5\n"; + echo "\t\n"; + } + } +} +eval($plxMotor->plxPlugins->callHook('SitemapArticles')); +?> + +plxPlugins->callHook('SitemapEnd')); + +# Restitution écran +echo $output; +exit; +?> \ No newline at end of file diff --git a/src/themes/.htaccess b/src/themes/.htaccess new file mode 100644 index 0000000..45552cb --- /dev/null +++ b/src/themes/.htaccess @@ -0,0 +1 @@ +Options -Indexes \ No newline at end of file diff --git a/src/themes/defaut/archives.php b/src/themes/defaut/archives.php new file mode 100644 index 0000000..c533259 --- /dev/null +++ b/src/themes/defaut/archives.php @@ -0,0 +1,59 @@ + + +
    + +
    + +
    + +

    + plxMotor->cible, $plxShow->lang('ARCHIVES').' #month #num_year(4)') ?> +

    + + plxMotor->plxRecord_arts->loop()): ?> + +
    + +
    +

    + artTitle('link'); ?> +

    +

    + lang('WRITTEN_BY') ?> artAuthor(); ?> - + - + artNbCom(); ?> +

    +
    + +
    + artChapo(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + + + + +
    + artFeed('rss',$plxShow->catId()); ?> +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/article-full-width.php b/src/themes/defaut/article-full-width.php new file mode 100644 index 0000000..1a417c7 --- /dev/null +++ b/src/themes/defaut/article-full-width.php @@ -0,0 +1,45 @@ + + +
    + +
    + +
    + +
    + +
    +

    + artTitle(''); ?> +

    +

    + lang('WRITTEN_BY') ?> artAuthor(); ?> - + - + artNbCom(); ?> +

    +
    + +
    + artContent(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + artAuthorInfos('
    #art_authorinfos
    '); ?> + + + +
    + +
    + +
    + + diff --git a/src/themes/defaut/article.php b/src/themes/defaut/article.php new file mode 100644 index 0000000..ff6254f --- /dev/null +++ b/src/themes/defaut/article.php @@ -0,0 +1,47 @@ + + +
    + +
    + +
    + +
    + +
    +

    + artTitle(''); ?> +

    +

    + lang('WRITTEN_BY') ?> artAuthor(); ?> - + - + artNbCom(); ?> +

    +
    + +
    + artContent(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + artAuthorInfos('
    #art_authorinfos
    '); ?> + + + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/categorie.php b/src/themes/defaut/categorie.php new file mode 100644 index 0000000..1ccc3cf --- /dev/null +++ b/src/themes/defaut/categorie.php @@ -0,0 +1,60 @@ + + +
    + +
    + +
    + +

    + catName(); ?> + catDescription(' : #cat_description'); ?> +

    + + plxMotor->plxRecord_arts->loop()): ?> + +
    + +
    +

    + artTitle('link'); ?> +

    +

    + lang('WRITTEN_BY') ?> artAuthor(); ?> - + - + artNbCom(); ?> +

    +
    + +
    + artChapo(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + + + + +
    + artFeed('rss',$plxShow->catId()); ?> +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/commentaires.php b/src/themes/defaut/commentaires.php new file mode 100644 index 0000000..3aed3b8 --- /dev/null +++ b/src/themes/defaut/commentaires.php @@ -0,0 +1,85 @@ + + + plxMotor->plxRecord_coms): ?> + +
    + +

    + artNbCom(); ?> +

    + + plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires ?> + +
    +
    +

    + #plxMotor->plxRecord_coms->i+1 ?> + + comAuthor('link'); ?> + lang('SAID'); ?> : +

    +

    comContent(); ?>

    +
    +
    + + + +
    + comFeed('rss',$plxShow->artId()); ?> +
    + +
    + + + + plxMotor->plxRecord_arts->f('allow_com') AND $plxShow->plxMotor->aConf['allow_com']): ?> + +
    + +

    + lang('WRITE_A_COMMENT') ?> +

    + +
    +
    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    + comMessage(); ?> +

    + plxMotor->aConf['capcha']): ?> +

    + + capchaQ(); ?> : + +

    + +

    + +

    +
    +
    + +
    + + + +

    + lang('COMMENTS_CLOSED') ?>. +

    + + diff --git a/src/themes/defaut/css/reset.css b/src/themes/defaut/css/reset.css new file mode 100644 index 0000000..62a446b --- /dev/null +++ b/src/themes/defaut/css/reset.css @@ -0,0 +1,210 @@ +/* ---------- BOX-SIZING ---------- */ + +* { + -moz-box-sizing : border-box; + -webkit-box-sizing : border-box; + box-sizing : border-box; +} + +/* ---------- HTML5 TAGS ---------- */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +/* ---------- GENERAL STYLES ---------- */ + +html { + font-size: 100%; +} + +body { + font-family: arial, helvetica, sans-serif; + line-height: 1.5; + margin: 0; +} + +h1 { + font-size: 2em; + margin: 20px 0; +} + +h2 { + font-size: 1.5em; +} + +h3 { + font-size: 1.2em; +} + +h4 { + font-size: 1em; +} + +h5 { + font-size: 0.8em; +} + +h6, +small { + font-size: 0.7em; +} + +ol, +ul { + padding-left: 0; +} + +dd, +li { + margin-left: 20px; +} + +mark { + background-color: yellow; + padding:0 5px; +} + +code, +pre, +samp, +kbd { + font-family: monospace, serif; + font-size: 1em; + padding: 5px 10px; +} + +pre { + background-color: #efefef; + border: 1px solid #ddd; + overflow: auto; +} + +sub, +sup { + position: relative; + vertical-align: baseline; +} + +sup { + top: -5px; +} + +sub { + bottom: -5px; +} + +abbr { + border-bottom: 1px solid; +} + +blockquote { + font-style: italic; + margin-left: 30px; +} + +hr { + height: 1px; + background-color: black; + border: 0; +} + +/* ---------- IMAGE ---------- */ + +img { + border: none; + height: auto; + max-width: 100%; +} + +figure { + margin: 0; +} + +/* ---------- FORM ---------- */ + +fieldset { + border: none; + margin: 0; + padding: 0; +} + +legend { + margin-bottom: 15px; +} + +label { + display: block; + margin-bottom: 5px; +} + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0 0 15px 0; + outline : none; + padding: 5px; +} + +textarea { + overflow: auto; +} + +select { + padding: 4px; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + padding: 6px 9px 5.75px 9px; + width: auto; +} + +input[type="checkbox"], +input[type="radio"] { + width: auto; +} + +input[type="file"] { + border: none; + padding: 0; + width: auto; +} + +/* ---------- TABLE ---------- */ + +table { + border-collapse: collapse; + border-spacing: 0; + margin: 15px 0; + width: 100%; +} + +caption, +th, +td { + padding: 5px; +} \ No newline at end of file diff --git a/src/themes/defaut/css/style.css b/src/themes/defaut/css/style.css new file mode 100644 index 0000000..4408179 --- /dev/null +++ b/src/themes/defaut/css/style.css @@ -0,0 +1,412 @@ +/* ---------- GENERAL STYLES ---------- */ + +body { + background-color: #444; + color: #555; +} + +h1, +h2, +h3 { + font-weight: normal; +} + +a { + color: #0082b0; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +ul li { + list-style-type: square; +} + +/* ---------- NAV ---------- */ + +nav { + background-color: #444; + font-size: 1.2em; + padding: 10px 50px 10px 60px; + +} + +nav ul { + margin: 0; +} + +nav li { + color: #ccc; + margin: 0 30px 0 0; + display: inline; + list-style-type: none; +} + +nav li a { + color: #ccc; +} + +nav li a:hover, nav li a.active { + color: #eee; + text-decoration: none; +} + +/* ---------- HEADER ---------- */ + +header { + background-color: #e5e5e5; + color: #555; + padding: 20px 50px; + text-align: center; +} + +body > header > h1 { + font-size: 2.3em; + line-height: 1; + margin: 0; +} + +header h1 a { + color: #555; +} + +header h1 a:hover { + text-decoration: none; +} + +header h2 { + font-size: 1em; + margin: 0; +} + +/* ---------- SECTION ---------- */ + +section { + background-color: #e5e5e5; + overflow: hidden; +} + +#container { + background-color: #fff; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 3px solid #ccc; + margin: 0 50px 50px; + overflow: hidden; + padding: 40px; +} + +.directory { + margin: 0 0 50px 0; +} + +.directory:first-letter{ + text-transform: uppercase; +} + +/* ---------- ARTICLE / PAGE ---------- */ + +.width-sidebar { + float: left; + width: 65%; +} + +.full-width { + width:100%; +} + +article header h1 { + color: #0082b0; + line-height: 1.1; + margin: 0; +} + +article header h1 a { + color: #0082b0; +} + +article header { + background-color: transparent; + color: inherit; + padding: 0; + text-align: left; +} + +article header p { + color: #777; + font-size: 0.9em; + font-style : italic; + margin-bottom: 0; +} + +article section { + background-color: inherit; + padding: 0; +} + +article img { + margin: 0 5px; +} + +article footer { + background-color: inherit; + color: #777; + font-size: 0.9em; + font-style : italic; + margin-bottom: 50px; + padding: 0; + text-align: left; +} + +article footer a, +article footer a:hover { + color: #0082b0; +} + +/* ---------- COMMENT ---------- */ + +#comments { + margin-bottom: 50px; +} + +.info_comment { + color: #777; + font-size: 0.9em; + font-style : italic; +} + +.comment { + background-image: url(../img/user.png); + background-repeat: no-repeat; + margin-bottom: 30px; + padding-left: 60px; +} + +.com-alert { + color: #db2020; + font-weight: bold; +} + +/* ---------- PAGINATION ---------- */ + +#pagination { + margin-bottom: 50px; + text-align: center; +} + +#pagination span, +#pagination a { + display: inline-block; + margin: 0; + padding: 5px; +} + +#pagination a { + background-color: #0082b0; + color: #eee; +} + +#pagination a:hover { + background-color: #444; + color: #eee; + text-decoration: none; +} + +#pagination span:first-letter, +#pagination a:first-letter { + text-transform: uppercase; +} + +/* ---------- SIDEBAR ---------- */ + +aside { + float: right; + width: 30%; +} + +aside h3 { + color: #0082b0; + font-size: 1.4em; + margin: 0 0 15px 0; +} + +aside a { + color: #555; +} + +aside ul { + margin: 0 0 50px 0; +} + +aside li:first-letter { + text-transform: uppercase; +} + +.rss { + background-image: url(../img/rss.png); + background-repeat: no-repeat; + line-height: 1; + margin: 10px 0; + padding-left: 20px; +} + +/* ---------- TAG ---------- */ + +.tag { + display: inline-block; + margin: 0; + padding-right: 10px; +} + +.tag-size-1 { + font-size: 1em; +} + +.tag-size-2 { + font-size: 1.1em; +} + +.tag-size-3 { + font-size: 1.2em; +} + +.tag-size-4 { + font-size: 1.3em; +} + +.tag-size-5 { + font-size: 1.4em; +} + +.tag-size-6 { + font-size: 1.5em; +} + +.tag-size-7 { + font-size: 1.6em; +} + +.tag-size-8 { + font-size: 1.7em; +} + +.tag-size-9 { + font-size: 1.8em +} + +.tag-size-10 { + font-size: 1.9em; +} + +.tag-size-max { + font-size: 2em; +} + +/* ---------- FOOTER ---------- */ + +footer { + background-color: #444; + clear: both; + color: #ccc; + padding: 50px; + text-align: center; +} + +footer p { + margin: 0; +} + +footer a { + color: #ccc; +} + +footer a:hover { + color: #eee; +} + +/* ---------- FORM ---------- */ + +#form h2 { + margin: 0; +} + +label { + display:block; +} + +input, +select, +textarea { + border: 1px solid #bbb; + color: #555; +} + +button, +input[type=submit], +input[type=reset] { + background-color: #0082b0; + border: 1px solid #0082b0; + color: #eee; +} + +button:hover, +input[type=submit]:hover, +input[type=reset]:hover { + background-color: #444; + border: 1px solid #444; +} + +.capcha-letter, +.capcha-word { + font-weight: bold; +} + +/* ---------- TABLE ---------- */ +table, th, td { + border: 1px solid #999 +} + +/* ---------- RESPONSIVE DESIGN ---------- */ + +@media screen and (max-width:800px) { + + nav { + padding: 5px 20px; + text-align: center; + } + + nav li { + display: block; + margin: 10px 0; + } + + header { + padding-left: 20px; + padding-right: 20px; + } + + #container { + margin: 0 20px 20px 20px; + padding: 20px; + } + + .width-sidebar, + aside { + width: 100%; + } + + button, + input, + select, + textarea { + max-width: 100%; +} + + aside { + margin-top: 50px; + } + +} \ No newline at end of file diff --git a/src/themes/defaut/erreur.php b/src/themes/defaut/erreur.php new file mode 100644 index 0000000..db69615 --- /dev/null +++ b/src/themes/defaut/erreur.php @@ -0,0 +1,33 @@ + + +
    + +
    + +
    + +
    + +
    +

    + lang('ERROR'); ?> +

    +
    + +
    +

    + erreurMessage(); ?> +

    +
    + +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/footer.php b/src/themes/defaut/footer.php new file mode 100644 index 0000000..5d5235d --- /dev/null +++ b/src/themes/defaut/footer.php @@ -0,0 +1,20 @@ + + + + + + + diff --git a/src/themes/defaut/header.php b/src/themes/defaut/header.php new file mode 100644 index 0000000..25b1d1a --- /dev/null +++ b/src/themes/defaut/header.php @@ -0,0 +1,44 @@ + + + + + + +<?php $plxShow->pageTitle(); ?> +meta('description') ?> +meta('keywords') ?> +meta('author') ?> + + + +templateCss() ?> +pluginsCss() ?> + + + + + + + + + +
    + +

    + mainTitle('link'); ?> +

    +

    + subTitle(); ?> +

    + +
    diff --git a/src/themes/defaut/home.php b/src/themes/defaut/home.php new file mode 100644 index 0000000..2c69143 --- /dev/null +++ b/src/themes/defaut/home.php @@ -0,0 +1,55 @@ + + +
    + +
    + +
    + + plxMotor->plxRecord_arts->loop()): ?> + +
    + +
    +

    + artTitle('link'); ?> +

    +

    + lang('WRITTEN_BY'); ?> artAuthor() ?> - + - + artNbCom(); ?> +

    +
    + +
    + artChapo(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + + + + +
    + artFeed('rss',$plxShow->catId()); ?> +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/img/favicon.png b/src/themes/defaut/img/favicon.png new file mode 100644 index 0000000..6516927 Binary files /dev/null and b/src/themes/defaut/img/favicon.png differ diff --git a/src/themes/defaut/img/index.html b/src/themes/defaut/img/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/themes/defaut/img/rss.png b/src/themes/defaut/img/rss.png new file mode 100644 index 0000000..315c4f4 Binary files /dev/null and b/src/themes/defaut/img/rss.png differ diff --git a/src/themes/defaut/img/user.png b/src/themes/defaut/img/user.png new file mode 100644 index 0000000..286b305 Binary files /dev/null and b/src/themes/defaut/img/user.png differ diff --git a/src/themes/defaut/index.html b/src/themes/defaut/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/themes/defaut/js/html5ie.js b/src/themes/defaut/js/html5ie.js new file mode 100644 index 0000000..7293987 --- /dev/null +++ b/src/themes/defaut/js/html5ie.js @@ -0,0 +1,7 @@ +document.createElement("header"); +document.createElement("footer"); +document.createElement("section"); +document.createElement("aside"); +document.createElement("nav"); +document.createElement("article"); +document.createElement("figure"); \ No newline at end of file diff --git a/src/themes/defaut/js/index.html b/src/themes/defaut/js/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/themes/defaut/js/respond.min.js b/src/themes/defaut/js/respond.min.js new file mode 100644 index 0000000..ffa08b0 --- /dev/null +++ b/src/themes/defaut/js/respond.min.js @@ -0,0 +1,6 @@ +/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ +/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ +window.matchMedia=window.matchMedia||(function(e,f){var c,a=e.documentElement,b=a.firstElementChild||a.firstChild,d=e.createElement("body"),g=e.createElement("div");g.id="mq-test-1";g.style.cssText="position:absolute;top:-100em";d.style.background="none";d.appendChild(g);return function(h){g.innerHTML='­';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document); + +/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ +(function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this); \ No newline at end of file diff --git a/src/themes/defaut/lang/de.php b/src/themes/defaut/lang/de.php new file mode 100644 index 0000000..839855f --- /dev/null +++ b/src/themes/defaut/lang/de.php @@ -0,0 +1,50 @@ + 'Startseite', +'GOTO_CONTENT' => 'Zum Inhalt', +'GOTO_MENU' => 'Zum Menü', +'COMMENTS_RSS_FEEDS' => 'Kommentare als Feed', +'COMMENTS' => 'Kommentare', +'ARTICLES_RSS_FEEDS' => 'Artikel-Feed (RSS)', +'ARTICLES' => 'Artikel', + +# sidebar.php +'CATEGORIES' => 'Kategorien', +'LATEST_ARTICLES' => 'Letzte Artikel', +'LATEST_COMMENTS' => 'Letzte Kommentare', +'ARCHIVES' => 'Archive', + +# footer.php +'POWERED_BY' => 'Powered by', +'PLUXML_DESCRIPTION' => 'Blog oder Cms ohne Datenbank', +'IN' => 'in', +'ADMINISTRATION' => 'Admin', +'GOTO_TOP' => 'Zum Seitenanfang', +'TOP' => 'Top', + +# erreur.php +'ERROR' => 'Ein Fehler ist erkannt geworden', +'BACKTO_HOME' => 'Zurück zur Homepage', + +# common +'WRITTEN_BY' => 'Geschrieben von', +'CLASSIFIED_IN' => 'Kategorisiert in', +'TAGS' => 'Schlüsselwörter', + +# commentaires.php +'SAID' => 'sagte', +'WRITE_A_COMMENT' => 'Schreiben einen Kommentar', +'NAME' => 'Name', +'WEBSITE' => 'Website (fakultativ)', +'EMAIL' => 'E-mail (fakultativ)', +'COMMENT' => 'Kommentar', +'CLEAR' => 'Löschen', +'SEND' => 'Versenden', +'COMMENTS_CLOSED' => 'Die Kommentare sind geschlossen', +'ANTISPAM_WARNING' => 'Anti-Spam', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/en.php b/src/themes/defaut/lang/en.php new file mode 100644 index 0000000..7437f0d --- /dev/null +++ b/src/themes/defaut/lang/en.php @@ -0,0 +1,50 @@ + 'Home', +'GOTO_CONTENT' => 'Goto content', +'GOTO_MENU' => 'Goto menu', +'COMMENTS_RSS_FEEDS' => 'Rss feeds comments', +'COMMENTS' => 'Comments', +'ARTICLES_RSS_FEEDS' => 'Rss feeds articles', +'ARTICLES' => 'Articles', + +# sidebar.php +'CATEGORIES' => 'Categories', +'LATEST_ARTICLES' => 'Latest articles', +'LATEST_COMMENTS' => 'Latest comments', +'ARCHIVES' => 'Archives', + +# footer.php +'POWERED_BY' => 'Powered by', +'PLUXML_DESCRIPTION' => 'Blog or Cms without database', +'IN' => 'in', +'ADMINISTRATION' => 'Administration', +'GOTO_TOP' => 'Goto top', +'TOP' => 'Top', + +# erreur.php +'ERROR' => 'Error found', +'BACKTO_HOME' => 'Goto home', + +# common +'WRITTEN_BY' => 'Written by', +'CLASSIFIED_IN' => 'Classified in', +'TAGS' => 'Tags', + +# commentaires.php +'SAID' => 'said', +'WRITE_A_COMMENT' => 'Write a comment', +'NAME' => 'Name', +'WEBSITE' => 'Site (optional)', +'EMAIL' => 'E-mail (optional)', +'COMMENT' => 'Comment', +'CLEAR' => 'Clear', +'SEND' => 'Send', +'COMMENTS_CLOSED' => 'Comments are closed', +'ANTISPAM_WARNING' => 'Anti-spam checking', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/es.php b/src/themes/defaut/lang/es.php new file mode 100644 index 0000000..dde1eca --- /dev/null +++ b/src/themes/defaut/lang/es.php @@ -0,0 +1,51 @@ + 'Inicio', +'GOTO_CONTENT' => 'Ir al contenido', +'GOTO_MENU' => 'Ir al menú', +'COMMENTS_ATOM_FEEDS' => 'Hilo Atom de los comentarios', +'COMMENTS_RSS_FEEDS' => 'Hilo Rss de los comentarios', +'COMMENTS' => 'Comentarios', +'ARTICLES_RSS_FEEDS' => 'Hilo Rss de los artículos', +'ARTICLES' => 'Artículos', + +# sidebar.php +'CATEGORIES' => 'Categorías', +'LATEST_ARTICLES' => 'Ultimos artículos', +'LATEST_COMMENTS' => 'Ultimos comentarios', +'ARCHIVES' => 'Archivos', + +# footer.php +'POWERED_BY' => 'Generado por', +'PLUXML_DESCRIPTION' => 'Blog o Cms sin bases de datos', +'IN' => 'en', +'ADMINISTRATION' => 'Administración', +'GOTO_TOP' => 'Volver Inicio de página', +'TOP' => 'Inicio de página', + +# erreur.php +'ERROR' => 'Se ha detectado un error', +'BACKTO_HOME' => 'Volver a la página de Inicio', + +# common +'WRITTEN_BY' => 'Escrito por', +'CLASSIFIED_IN' => 'Ordenado en', +'TAGS' => 'Palabras claves', + +# commentaires.php +'SAID' => 'ha dicho', +'WRITE_A_COMMENT' => 'Escribir un comentario', +'NAME' => 'Nombre', +'WEBSITE' => 'Sitio web (opcional)', +'EMAIL' => 'Email (opcional)', +'COMMENT' => 'Comentario', +'CLEAR' => 'Borrar', +'SEND' => 'Enviar', +'COMMENTS_CLOSED' => 'Comentarios cerrados', +'ANTISPAM_WARNING' => 'Chequeo anti-spam', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/fr.php b/src/themes/defaut/lang/fr.php new file mode 100644 index 0000000..ad974f6 --- /dev/null +++ b/src/themes/defaut/lang/fr.php @@ -0,0 +1,50 @@ + 'Accueil', +'GOTO_CONTENT' => 'Aller au contenu', +'GOTO_MENU' => 'Aller au menu', +'COMMENTS_RSS_FEEDS' => 'Fil Rss des commentaires', +'COMMENTS' => 'Fil des commentaires', +'ARTICLES_RSS_FEEDS' => 'Fil Rss des articles', +'ARTICLES' => 'Fil des articles', + +# sidebar.php +'CATEGORIES' => 'Catégories', +'LATEST_ARTICLES' => 'Derniers articles', +'LATEST_COMMENTS' => 'Derniers commentaires', +'ARCHIVES' => 'Archives', + +# footer.php +'POWERED_BY' => 'Généré par', +'PLUXML_DESCRIPTION' => 'Blog ou Cms sans base de données', +'IN' => 'en', +'ADMINISTRATION' => 'Administration', +'GOTO_TOP' => 'Remonter en haut de page', +'TOP' => 'Haut de page', + +# erreur.php +'ERROR' => 'La page que vous avez demandée n\'existe pas', +'BACKTO_HOME' => 'Retour à la page d\'accueil', + +# common +'WRITTEN_BY' => 'Rédigé par', +'CLASSIFIED_IN' => 'Classé dans', +'TAGS' => 'Mots clés', + +# commentaires.php +'SAID' => 'a dit', +'WRITE_A_COMMENT' => 'Écrire un commentaire', +'NAME' => 'Votre nom ou pseudo', +'WEBSITE' => 'Votre site Internet (facultatif)', +'EMAIL' => 'Votre adresse e-mail (facultatif)', +'COMMENT' => 'Contenu de votre message', +'CLEAR' => 'Effacer', +'SEND' => 'Envoyer votre commentaire', +'COMMENTS_CLOSED' => 'Les commentaires sont fermés', +'ANTISPAM_WARNING' => 'Vérification anti-spam', +); + +?> diff --git a/src/themes/defaut/lang/index.html b/src/themes/defaut/lang/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/themes/defaut/lang/it.php b/src/themes/defaut/lang/it.php new file mode 100644 index 0000000..569fa6c --- /dev/null +++ b/src/themes/defaut/lang/it.php @@ -0,0 +1,50 @@ + 'Home', +'GOTO_CONTENT' => 'Vai al contenuto', +'GOTO_MENU' => 'Vai al menu', +'COMMENTS_RSS_FEEDS' => 'Feed dei commenti', +'COMMENTS' => 'Commenti', +'ARTICLES_RSS_FEEDS' => 'Feed degli articoli', +'ARTICLES' => 'Articoli', + +# sidebar.php +'CATEGORIES' => 'Categorie', +'LATEST_ARTICLES' => 'Ultimi articoli', +'LATEST_COMMENTS' => 'Ultimi commenti', +'ARCHIVES' => 'Archivio', + +# footer.php +'POWERED_BY' => 'Powered by', +'PLUXML_DESCRIPTION' => 'Blog o Cms senza database', +'IN' => 'in', +'ADMINISTRATION' => 'Amministrazione', +'GOTO_TOP' => 'Ritorna in alto', +'TOP' => 'Inizio', + +# erreur.php +'ERROR' => 'Eè stato rilevato un errore', +'BACKTO_HOME' => 'Ritorna alla pagina principale', + +# common +'WRITTEN_BY' => 'Pubblicato da', +'CLASSIFIED_IN' => 'Categoria', +'TAGS' => 'Tag', + +# commentaires.php +'SAID' => 'ha detto', +'WRITE_A_COMMENT' => 'Scrivi', +'NAME' => 'Nome', +'WEBSITE' => 'Sito (facoltativo)', +'EMAIL' => 'Email (facoltativo)', +'COMMENT' => 'Commento', +'CLEAR' => 'Cancella', +'SEND' => 'Invia', +'COMMENTS_CLOSED' => 'Commenti bloccati', +'ANTISPAM_WARNING' => 'Verifica antispam', +); + +?> diff --git a/src/themes/defaut/lang/nl.php b/src/themes/defaut/lang/nl.php new file mode 100644 index 0000000..8fce1f9 --- /dev/null +++ b/src/themes/defaut/lang/nl.php @@ -0,0 +1,50 @@ + 'Home', +'GOTO_CONTENT' => 'Ga naar inhoud', +'GOTO_MENU' => 'Ga naar menu', +'COMMENTS_RSS_FEEDS' => 'RSS van de commentaren', +'COMMENTS' => 'Commentaren', +'ARTICLES_RSS_FEEDS' => 'RSS van de artikels', +'ARTICLES' => 'Artikels', + +# sidebar.php +'CATEGORIES' => 'Categorieën', +'LATEST_ARTICLES' => 'Laatste artikels', +'LATEST_COMMENTS' => 'Laatste commentaren', +'ARCHIVES' => 'Archief', + +# footer.php +'POWERED_BY' => 'Aangemaakt met', +'PLUXML_DESCRIPTION' => 'Blog of Cms zonder databank', +'IN' => 'in', +'ADMINISTRATION' => 'Administratie', +'GOTO_TOP' => 'Ga naar top pagina', +'TOP' => 'Top pagina', + +# erreur.php +'ERROR' => 'Er heeft zich een fout voorgedaan', +'BACKTO_HOME' => 'Terug naar onthaalpagina', + +# common +'WRITTEN_BY' => 'Geschreven door', +'CLASSIFIED_IN' => 'Geklasseerd in', +'TAGS' => 'Sleutelwoorden', + +# commentaires.php +'SAID' => 'zei', +'WRITE_A_COMMENT' => 'commentaar achterlaten', +'NAME' => 'Naam', +'WEBSITE' => 'Site (facultatief)', +'EMAIL' => 'E-mail (facultatief)', +'COMMENT' => 'Commentaar', +'CLEAR' => 'Wissen', +'SEND' => 'Verzenden', +'COMMENTS_CLOSED' => 'Commentaren zijn afgesloten', +'ANTISPAM_WARNING' => 'Anti-spam verificatie', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/pl.php b/src/themes/defaut/lang/pl.php new file mode 100644 index 0000000..7abac3d --- /dev/null +++ b/src/themes/defaut/lang/pl.php @@ -0,0 +1,50 @@ + 'Home', +'GOTO_CONTENT' => 'Do treści', +'GOTO_MENU' => 'Do menu', +'COMMENTS_RSS_FEEDS' => 'Komentarze kanału RSS', +'COMMENTS' => 'Komentarze', +'ARTICLES_RSS_FEEDS' => 'Artykuły kanału RSS', +'ARTICLES' => 'Artykuły', + +# sidebar.php +'CATEGORIES' => 'Artykuły', +'LATEST_ARTICLES' => 'Ostatnie artykuły', +'LATEST_COMMENTS' => 'Ostatnie komentarze', +'ARCHIVES' => 'Archiwa', + +# footer.php +'POWERED_BY' => 'Napędza', +'PLUXML_DESCRIPTION' => 'Blog lub cms nie wymagający bazy danych ', +'IN' => 'w czasie', +'ADMINISTRATION' => 'Administracja', +'GOTO_TOP' => 'Przejdź do góry', +'TOP' => 'Top', + +# erreur.php +'ERROR' => 'Błąd', +'BACKTO_HOME' => 'Przejdź do strony głównej', + +# common +'WRITTEN_BY' => 'Napisał', +'CLASSIFIED_IN' => 'Sklasyfikowane w', +'TAGS' => 'Tagi', + +# commentaires.php +'SAID' => 'rzekł', +'WRITE_A_COMMENT' => 'Napisz komentarz', +'NAME' => 'Imię', +'WEBSITE' => 'Strona (opcjonalne)', +'EMAIL' => 'E-mail (opcjonalne)', +'COMMENT' => 'Komentarz', +'CLEAR' => 'Wyczyść', +'SEND' => 'Wyślij', +'COMMENTS_CLOSED' => 'Komentarze zostały wyłączone', +'ANTISPAM_WARNING' => 'Kontrola anty-spam', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/pt.php b/src/themes/defaut/lang/pt.php new file mode 100644 index 0000000..bd5b013 --- /dev/null +++ b/src/themes/defaut/lang/pt.php @@ -0,0 +1,50 @@ + 'Início', +'GOTO_CONTENT' => 'Ir ao conteúdo', +'GOTO_MENU' => 'Ir ao menu', +'COMMENTS_RSS_FEEDS' => 'Fluxo RSS dos comentários', +'COMMENTS' => 'Comentários', +'ARTICLES_RSS_FEEDS' => 'Fluxo Rss dos artigos', +'ARTICLES' => 'Artigos', + +# sidebar.php +'CATEGORIES' => 'Categorias', +'LATEST_ARTICLES' => 'Ultimos artigos', +'LATEST_COMMENTS' => 'Ultimos comentários', +'ARCHIVES' => 'Arquivos', + +# footer.php +'POWERED_BY' => 'Propulsado por', +'PLUXML_DESCRIPTION' => 'Blog ou Cms sem banco de dados', +'IN' => 'em', +'ADMINISTRATION' => 'Administração', +'GOTO_TOP' => 'Subir', +'TOP' => 'Topo', + +# erreur.php +'ERROR' => 'Ocorreu um erro, pedimos desculpas pelo incómodo', +'BACKTO_HOME' => 'Voltar ao Índice', + +# common +'WRITTEN_BY' => 'Escrito por', +'CLASSIFIED_IN' => 'Categorizado em', +'TAGS' => 'Tags', + +# commentaires.php +'SAID' => 'escreveu', +'WRITE_A_COMMENT' => 'Escrever um comentário', +'NAME' => 'Nome', +'WEBSITE' => 'Web-site (facultativo)', +'EMAIL' => 'E-mail (facultativo)', +'COMMENT' => 'Commentário', +'CLEAR' => 'Apagar', +'SEND' => 'Enviar', +'COMMENTS_CLOSED' => 'Os comentários estão fechados', +'ANTISPAM_WARNING' => 'Verificação anti-spam', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/ro.php b/src/themes/defaut/lang/ro.php new file mode 100644 index 0000000..5cbac67 --- /dev/null +++ b/src/themes/defaut/lang/ro.php @@ -0,0 +1,50 @@ + 'Home', +'GOTO_CONTENT' => 'La conţinut', +'GOTO_MENU' => 'La meniu', +'COMMENTS_RSS_FEEDS' => 'Flux RSS Comentarii', +'COMMENTS' => 'Comentarii', +'ARTICLES_RSS_FEEDS' => 'Flux RSS Articole', +'ARTICLES' => 'Articole', + +# sidebar.php +'CATEGORIES' => 'Categorii', +'LATEST_ARTICLES' => 'Ultimile Articole', +'LATEST_COMMENTS' => 'Ultimile Comentarii', +'ARCHIVES' => 'Arhiva', + +# footer.php +'POWERED_BY' => 'Realizat de', +'PLUXML_DESCRIPTION' => 'Descriere', +'IN' => 'în', +'ADMINISTRATION' => 'Administraţia', +'GOTO_TOP' => 'Dute sus', +'TOP' => 'Sus', + +# erreur.php +'ERROR' => 'A survenit o eroare', +'BACKTO_HOME' => 'Înapoi la Pagina Principală', + +# common +'WRITTEN_BY' => 'Scris de', +'CLASSIFIED_IN' => 'Postat în', +'TAGS' => 'Etichete', + +# commentaires.php +'SAID' => 'a spus', +'WRITE_A_COMMENT' => 'Adaugă un comentariu', +'NAME' => 'Nume', +'WEBSITE' => 'Site (nu e obligatoriu)', +'EMAIL' => 'E-mail (nu e obligatoriu)', +'COMMENT' => 'Comentariul', +'CLEAR' => 'CurăŢă', +'SEND' => 'Trimite', +'COMMENTS_CLOSED' => 'Comentariile sunt închise', +'ANTISPAM_WARNING' => 'Verificare anti-spam', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/lang/ru.php b/src/themes/defaut/lang/ru.php new file mode 100644 index 0000000..2073410 --- /dev/null +++ b/src/themes/defaut/lang/ru.php @@ -0,0 +1,50 @@ + 'Главная', +'GOTO_CONTENT' => 'Перейти к содержанию', +'GOTO_MENU' => 'Перейти к меню', +'COMMENTS_RSS_FEEDS' => 'RSS-каналы комментариев', +'COMMENTS' => 'Комментарии', +'ARTICLES_RSS_FEEDS' => 'Rss-каналы статей', +'ARTICLES' => 'Статьи', + +# sidebar.php +'CATEGORIES' => 'Категории', +'LATEST_ARTICLES' => 'Последние статьи', +'LATEST_COMMENTS' => 'Последние комментарии', +'ARCHIVES' => 'Архив', + +# footer.php +'POWERED_BY' => 'Работает на', +'PLUXML_DESCRIPTION' => 'Блог и Cms без баз данных', +'IN' => 'в', +'ADMINISTRATION' => 'Администрация', +'GOTO_TOP' => 'Перейти в верх', +'TOP' => 'Вверх', + +# erreur.php +'ERROR' => 'Обнаружена ошибка', +'BACKTO_HOME' => 'Перейти на главную', + +# common +'WRITTEN_BY' => 'Автор', +'CLASSIFIED_IN' => 'Частные объявления на', +'TAGS' => 'Тэги', + +# commentaires.php +'SAID' => 'сказал', +'WRITE_A_COMMENT' => 'Создать комментарий', +'NAME' => 'Имя', +'WEBSITE' => 'сайта (необязательно)', +'EMAIL' => 'E-mail (необязательно)', +'COMMENT' => 'Комментарий', +'CLEAR' => 'Очистить', +'SEND' => 'Отправить', +'COMMENTS_CLOSED' => 'Комментарии запрещенны', +'ANTISPAM_WARNING' => 'Анти-спам проверка', +); + +?> \ No newline at end of file diff --git a/src/themes/defaut/sidebar.php b/src/themes/defaut/sidebar.php new file mode 100644 index 0000000..843be59 --- /dev/null +++ b/src/themes/defaut/sidebar.php @@ -0,0 +1,52 @@ + + + diff --git a/src/themes/defaut/static-full-width.php b/src/themes/defaut/static-full-width.php new file mode 100644 index 0000000..00b9de2 --- /dev/null +++ b/src/themes/defaut/static-full-width.php @@ -0,0 +1,29 @@ + + +
    + +
    + +
    + +
    + +
    +

    + staticTitle(); ?> +

    +
    + +
    + staticContent(); ?> +
    + +
    + +
    + +
    + +
    + + diff --git a/src/themes/defaut/static.php b/src/themes/defaut/static.php new file mode 100644 index 0000000..c16ece7 --- /dev/null +++ b/src/themes/defaut/static.php @@ -0,0 +1,31 @@ + + +
    + +
    + +
    + +
    + +
    +

    + staticTitle(); ?> +

    +
    + +
    + staticContent(); ?> +
    + +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/defaut/tags.php b/src/themes/defaut/tags.php new file mode 100644 index 0000000..d147ba2 --- /dev/null +++ b/src/themes/defaut/tags.php @@ -0,0 +1,59 @@ + + +
    + +
    + +
    + +

    + tagName(); ?> +

    + + plxMotor->plxRecord_arts->loop()): ?> + +
    + +
    +

    + artTitle('link'); ?> +

    +

    + lang('WRITTEN_BY'); ?> artAuthor() ?> - + - + artNbCom(); ?> +

    +
    + +
    + artChapo(); ?> +
    + +
    +

    + lang('CLASSIFIED_IN') ?> : artCat(); ?> - + lang('TAGS') ?> : artTags(); ?> +

    +
    + +
    + + + + + +
    + tagFeed() ?> +
    + +
    + + + +
    + +
    + + diff --git a/src/themes/index.html b/src/themes/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/update/class.plx.updater.php b/src/update/class.plx.updater.php new file mode 100644 index 0000000..f6b9a38 --- /dev/null +++ b/src/update/class.plx.updater.php @@ -0,0 +1,199 @@ +allVersions = $versions; + $this->plxAdmin = plxAdmin::getInstance(); + $this->getVersions(); + } + + /** + * Méthode chargée de démarrer les mises à jour + * + * @param version précédente version de pluxml à mettre à jour, sélectionner par l'utilisateur + * @return null + * @author Stéphane F + **/ + public function startUpdate($version='') { + + # suppression des versions qui ont déjà été mises à jour + $offset = array_search($version, array_keys($this->allVersions)); + if($offset!='') { + $this->allVersions = array_slice($this->allVersions, $offset+1, null, true); + } + + # démarrage des mises à jour + if($this->doUpdate()) + $this->updateVersion(); + } + + /** + * Méthode qui récupère l'ancien et le nouveau n° de version de pluxml + * + * @return null + * @author Stéphane F + **/ + public function getVersions() { + + # Récupère l'ancien n° de version de Pluxml + if(isset($this->plxAdmin->aConf['version'])) + $this->oldVersion = $this->plxAdmin->aConf['version']; + if(!isset($this->allVersions[$this->oldVersion])) + $this->oldVersion=''; + + # Récupère le nouveau n° de version de PluXml + if(is_readable(PLX_ROOT.'version')) { + $f = file(PLX_ROOT.'version'); + $this->newVersion = $f['0']; + } + } + + /** + * Méthode qui met à jour le n° de version dans le fichier parametres.xml + * + * @return null + * @author Stéphane F + **/ + public function updateVersion() { + + $new_params['version'] = $this->newVersion; + $this->plxAdmin->editConfiguration($this->plxAdmin->aConf, $new_params); + printf(L_UPDATE_ENDED.'
    ', $this->newVersion); + } + + /** + * Méthode qui execute les mises à jour étape par étape + * + * @return stdout + * @author Stéphane F + **/ + public function doUpdate() { + + $errors = false; + foreach($this->allVersions as $num_version => $upd_filename) { + + if($upd_filename!='') { + + echo '

    '.L_UPDATE_INPROGRESS.' '.$num_version.'

    '; + # inclusion du fichier de mise à jour + include(PLX_UPDATE.$upd_filename); + + # création d'un instance de l'objet de mise à jour + $class_name = 'update_'.str_replace('.', '_', $num_version); + $class_update = new $class_name(); + + # appel des différentes étapes de mise à jour + $next = true; + $step = 1; + while($next AND !$errors) { + $method_name = 'step'.$step; + if(method_exists($class_name, $method_name)) { + if(!$class_update->$method_name()) { + $errors = true; # erreur détectée + } else { + $step++; # étape suivante + } + } + else $next = false; + } + echo '
    '; + } + + } + echo '
    '; + + if($errors) + echo '

    '.L_UPDATE_ERROR.'

    '; + else + echo '

    '.L_UPDATE_SUCCESSFUL.'

    '; + + return !$errors; + } + +} + +/** + * Classe plxUpdate responsable d'executer des actions de mises à jour + * + * @package PLX + * @author Stephane F + **/ +class plxUpdate { + + protected $plxAdmin; # objet de type plxAdmin + + /** + * Constructeur qui initialise l'objet plxAdmin par référence + * + * @return null + * @author Stephane F + **/ + public function __construct() { + $this->plxAdmin = plxAdmin::getInstance(); + if(!isset($this->plxAdmin->aConf['plugins'])) + $this->plxAdmin->aConf['plugins']='data/configuration/plugins.xml'; + } + + /** + * Méthode qui met à jour le fichier parametre.xml en important les nouveaux paramètres + * + * @param new_params tableau contenant la liste des nouveaux paramètres avec leur valeur par défaut. + * @return stdio + * @author Stéphane F + **/ + public function updateParameters($new_params) { + + # enregistrement des nouveaux paramètres + $ret = $this->plxAdmin->editConfiguration($this->plxAdmin->aConf, $new_params); + # valeur de retour + return $ret.'
    '; + + } + + /** + * Méthode récursive qui supprimes tous les dossiers et les fichiers d'un répertoire + * + * @param deldir répertoire de suppression + * @return boolean résultat de la suppression + * @author Stephane F + **/ + public function deleteDir($deldir) { #fonction récursive + + if(is_dir($deldir) AND !is_link($deldir)) { + if($dh = opendir($deldir)) { + while(FALSE !== ($file = readdir($dh))) { + if($file != '.' AND $file != '..') { + $this->deleteDir(($deldir!='' ? $deldir.'/' : '').$file); + } + } + closedir($dh); + } + return rmdir($deldir); + } + return unlink($deldir); + } +} +?> \ No newline at end of file diff --git a/src/update/index.html b/src/update/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/update/index.php b/src/update/index.php new file mode 100644 index 0000000..48cca3e --- /dev/null +++ b/src/update/index.php @@ -0,0 +1,132 @@ + + + + + + + <?php echo L_UPDATE_TITLE.' '.plxUtils::strCheck($plxUpdater->newVersion) ?> + + + + + + + + + + +
    +

    newVersion) ?>

    + + oldVersion==$plxUpdater->newVersion) : ?> +
    +

    +

    +

    +
    + +
    +
    +

    +   + + +

    +
    +

    oldVersion ?>

    + oldVersion)) : ?> +

    +

    +

    + +

    +

    +
    +
    + + +
    + oldVersion; + $plxUpdater->startUpdate($version); + ?> +

    +
    + +
    +
    + + + \ No newline at end of file diff --git a/src/update/update_4.2.php b/src/update/update_4.2.php new file mode 100644 index 0000000..21e2ef7 --- /dev/null +++ b/src/update/update_4.2.php @@ -0,0 +1,26 @@ +"; + + $new_parameters = array( + 'clef' => null, + 'miniatures_l' => '200', + 'miniatures_h' => '100', + 'tri_coms' => 'asc', + 'style_mobile' => 'mobile.defaut' + ); + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.0.php b/src/update/update_5.0.php new file mode 100644 index 0000000..4f46e22 --- /dev/null +++ b/src/update/update_5.0.php @@ -0,0 +1,272 @@ +"; + $new_parameters = array( + 'urlrewriting' => 0, + 'gzip' => 0, + 'feed_chapo' => 0, + 'feed_footer' => '', + 'users' => 'data/configuration/users.xml', + 'tags' => 'data/configuration/tags.xml', + 'editor' => 'plxtoolbar', + 'homestatic' => '' + ); + $this->updateParameters($new_parameters); + $this->plxAdmin->getConfiguration(path('XMLFILE_PARAMETERS')); # on recharge le fichier de configuration + return true; # pas d'erreurs + } + + /* Création du fichier data/configuration/tags.xml */ + public function step2() { + echo L_UPDATE_CREATE_TAGS_FILE."
    "; + $xml = ''; + $xml .= ''."\n"; + $xml .= ''; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['tags'])) { + echo '

    '.L_UPDATE_ERR_CREATE_TAGS_FILE.'

    '; + return false; + } + return true; + } + + /* Création du fichier themes/style/tags.php */ + public function step3() { + $srcfile = PLX_ROOT.'themes/'.$this->plxAdmin->aConf['style'].'/home.php'; + $dstfile = PLX_ROOT.'themes/'.$this->plxAdmin->aConf['style'].'/tags.php'; + if(!is_file($dstfile)) { + echo L_UPDATE_CREATE_THEME_FILE.": themes/".$this->plxAdmin->aConf['style']."/tags.php
    "; + if(!copy($srcfile, $dstfile)) { + echo '

    '.L_UPDATE_ERR_CREATE_THEME_FILE.' themes/style/tags.php

    '; + return false; + } + } + return true; + } + + /* Création du fichier themes/style/archives.php */ + public function step4() { + $srcfile = PLX_ROOT.'themes/'.$this->plxAdmin->aConf['style'].'/home.php'; + $dstfile = PLX_ROOT.'themes/'.$this->plxAdmin->aConf['style'].'/archives.php'; + if(!is_file($dstfile)) { + echo L_UPDATE_CREATE_THEME_FILE.": themes/".$this->plxAdmin->aConf['style']."/archives.php
    "; + if(!copy($srcfile, $dstfile)) { + echo '

    '.L_UPDATE_ERR_CREATE_THEME_FILE.' themes/style/archives.php

    '; + return false; + } + } + return true; + } + + /* Migration des articles: formatage xml + renommage des fichiers */ + public function step5() { + echo L_UPDATE_ARTICLES_CONVERSION."
    "; + $plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->plxAdmin->aConf['racine_articles']); + if($files = $plxGlob_arts->query('/^[0-9]{4}.([0-9]{3}|home|draft).[0-9]{12}.[a-z0-9-]+.xml$/','art')) { + foreach($files as $id => $filename){ + $art = $this->parseArticle(PLX_ROOT.$this->plxAdmin->aConf['racine_articles'].$filename); + if(!$this->plxAdmin->editArticle($art, $art['numero'])) { + echo '

    '.L_UPDATE_ERR_FILE_PROCESSING.' : '.$filename.'

    '; + return false; + } + } + } + return true; + } + + /* Migration du fichier des pages statiques */ + public function step6() { + echo L_UPDATE_STATICS_MIGRATION."
    "; + if($statics = $this->getStatiques(PLX_ROOT.$this->plxAdmin->aConf['statiques'])) { + # On génère le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($statics as $static_id => $static) { + $xml .= "\t\n"; + } + $xml .= ""; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['statiques'])) { + echo '

    '.L_UPDATE_ERR_STATICS_MIGRATION.' (data/configuration/statiques.xml)

    '; + return false; + } + } + return true; + } + + /* Création du fichier des utilisateurs */ + public function step7() { + echo L_UPDATE_CREATE_USERS_FILE."
    "; + if($users = $this->getUsers(PLX_ROOT.$this->plxAdmin->aConf['passwords'])) { + $xml = ''."\n"; + $xml .= ''."\n"; + $num_user = 1; + foreach($users as $login => $password) { + $xml .= "\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\n"; + } + $xml .= ''; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['users'])) { + echo '

    '.L_UPDATE_ERR_CREATE_USERS_FILE.' (data/configuration/users.xml)

    '; + return false; + } + } + else { + echo '

    '.L_UPDATE_ERR_NO_USERS.' data/configuration/passwords.xml

    '; + return false; + } + return true; + } + + /* Suppression des données obsolètes */ + public function step8() { + # suppression du fichier data/configuration/passwords.xml + unlink(PLX_ROOT.$this->plxAdmin->aConf['passwords']); + # suppression du fichier d'installation + unlink(PLX_ROOT.'install.php'); + # suppression des clés obsolètes dans le fichier data/configuration/parametres.xml + unset($this->plxAdmin->aConf['password']); + $this->plxAdmin->editConfiguration($this->plxAdmin->aConf, $this->plxAdmin->aConf); + return true; + } + + # Création du fichier .htaccess + public function step9() { + if(!is_file(PLX_ROOT.'.htaccess')) { + echo L_UPDATE_CREATE_HTACCESS_FILE."
    "; + $txt = ' + Order allow,deny + Deny from all +'; + if(!plxUtils::write($txt,PLX_ROOT.'.htaccess')) { + echo '

    '.L_UPDATE_ERR_CREATE_HTACCESS_FILE.'

    '; + return false; + } + } + return true; + } + + /*=====*/ + + private function artInfoFromFilename($filename) { + + # On effectue notre capture d'informations + preg_match('/([0-9]{4}).([0-9]{3}|home|draft).([0-9]{12}).([a-z0-9-]+).xml$/',$filename,$capture); + return array('artId'=>$capture[1],'catId'=>$capture[2],'artDate'=>$capture[3],'artUrl'=>$capture[4]); + } + + private function parseArticle($filename) { + $art = array(); + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # Recuperation des valeurs de nos champs XML + $art['title'] = trim($values[ $iTags['title'][0] ]['value']); + $art['author'] = '001'; + $art['allow_com'] = trim($values[ $iTags['allow_com'][0] ]['value']); + $art['chapo'] = (isset($values[ $iTags['chapo'][0] ]['value']))?trim($values[ $iTags['chapo'][0] ]['value']):''; + $art['content'] = (isset($values[ $iTags['content'][0] ]['value']))?trim($values[ $iTags['content'][0] ]['value']):''; + # Informations obtenues en analysant le nom du fichier + $art['filename'] = $filename; + $tmp = $this->artInfoFromFilename($filename); + $art['numero'] = $tmp['artId']; + $art['artId'] = $art['numero']; + $art['catId'] = array($tmp['catId']); + $art['url'] = $tmp['artUrl']; + preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{4})/',$tmp['artDate'],$capture); + $art['date'] = array ('year' => $capture[1],'month' => $capture[2],'day' => $capture[3],'time' => $capture[4]); + $art['day'] = $art['date']['day']; + $art['month'] =$art['date']['month']; + $art['year'] = $art['date']['year']; + $art['time'] = $art['date']['time']; + #nouveau champs + $art['template'] = 'article.php'; + $art['tags'] = ''; + # On retourne le tableau + return $art; + } + + private function getUsers($filename) { + $users = array(); + if(is_file($filename)) { + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "user" + if(isset($iTags['user'])) { + # On compte le nombre de tags "user" + $nb = sizeof($iTags['user']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $users[ $values[ $iTags['user'][$i] ]['attributes']['login'] ] = $values[ $iTags['user'][$i] ]['value']; + } + } + } + # On retourne le tableau + return $users; + } + + private function getStatiques($filename) { + $aStats = array(); + if(is_file($filename)) { + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "statique" + if(isset($iTags['statique'])) { + # On compte le nombre de tags "statique" + $nb = sizeof($iTags['statique']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + # Recuperation du nom de la page statique + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['name'] + = $values[ $iTags['statique'][$i] ]['value']; + # Recuperation de l'url de la page statique + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['url'] + = strtolower($values[ $iTags['statique'][$i] ]['attributes']['url']); + # Recuperation de l'etat de la page + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['active'] + = intval($values[ $iTags['statique'][$i] ]['attributes']['active']); + # On affiche la page statique dans le menu ? + if(isset($values[ $iTags['statique'][$i] ]['attributes']['menu'])) + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['menu'] + = $values[ $iTags['statique'][$i] ]['attributes']['menu']; + else + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['menu'] = 'oui'; + # On verifie que la page statique existe bien + $file = PLX_ROOT.$this->plxAdmin->aConf['racine_statiques'].$values[ $iTags['statique'][$i] ]['attributes']['number']; + $file .= '.'.$values[ $iTags['statique'][$i] ]['attributes']['url'].'.php'; + if(is_readable($file)) # Le fichier existe + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['readable'] = 1; + else # Le fichier est illisible + $aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['readable'] = 0; + } + } + } + return $aStats; + } +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.1.php b/src/update/update_5.1.1.php new file mode 100644 index 0000000..844a0ed --- /dev/null +++ b/src/update/update_5.1.1.php @@ -0,0 +1,42 @@ +"; + + # On génère le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($this->plxAdmin->aUsers as $user_id => $user) { + $salt = plxUtils::charAleatoire(10); + $password = sha1($salt.$user['password']); + $xml .= "\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\n"; + } + $xml .= ""; + + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['users'])) { + echo '

    '.L_UPDATE_ERR_USERS_MIGRATION.' ('.$this->plxAdmin->aConf['users'].')

    '; + return false; + } + + return true; + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.3.php b/src/update/update_5.1.3.php new file mode 100644 index 0000000..d3eb5d5 --- /dev/null +++ b/src/update/update_5.1.3.php @@ -0,0 +1,24 @@ +"; + # nouveaux parametres + $new_parameters = array( + 'images_l' => 800, + 'images_h' => 600, + ); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.4.php b/src/update/update_5.1.4.php new file mode 100644 index 0000000..8ead0d2 --- /dev/null +++ b/src/update/update_5.1.4.php @@ -0,0 +1,55 @@ +"; + # nouveaux parametres + $new_parameters = array( + 'mod_art' => 0, + 'racine_themes' => 'themes/', + 'racine_plugins' => 'plugins/', + ); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + + # Migration des articles: ajout nouveau champ title_htmltag + public function step2() { + echo L_UPDATE_ARTICLES_CONVERSION."
    "; + $plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->plxAdmin->aConf['racine_articles']); + if($files = $plxGlob_arts->query('/(.*).xml$/','art')) { + foreach($files as $filename){ + if(is_readable($filename)) { + $data = file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['racine_articles'].$filename); + if(!preg_match('/\]\]<\/title_htmltag>/', $data)) { + $data = preg_replace("/<\/document>$/", "\t\n\t\t\n\t\n", $data); + } + if(!plxUtils::write($data, PLX_ROOT.$this->plxAdmin->aConf['racine_articles'].$filename)) { + echo '

    '.L_UPDATE_ERR_FILE_PROCESSING.' : '.$filename.'

    '; + return false; + } + } + } + } + return true; + } + + # Suppression des fichiers obsoletes + public function step3() { + @unlink(PLX_ROOT.$this->plxAdmin->aConf['racine_articles'].'index.html'); + @unlink(PLX_ROOT.$this->plxAdmin->aConf['racine_commentaires'].'index.html'); + @unlink(PLX_ROOT.$this->plxAdmin->aConf['racine_statiques'].'index.html'); + @unlink(PLX_ROOT.'blog.php'); + return true; + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.6.php b/src/update/update_5.1.6.php new file mode 100644 index 0000000..3b5ddb2 --- /dev/null +++ b/src/update/update_5.1.6.php @@ -0,0 +1,82 @@ +"; + # nouveaux parametres + $new_parameters = array( + 'display_empty_cat' => 0, + 'timezone' => date_default_timezone_get(), + ); + # on supprime les parametres obsoletes + unset($this->plxAdmin->aConf['delta']); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + + # mise à jour fichier .htaccess + public function step2() { + + if(file_exists(PLX_ROOT.'.htaccess')) { + echo L_UPDATE_UPDATE_HTACCESS_FILE."
    "; + # lecture du fichier .htaccess + $htaccess = file_get_contents(PLX_ROOT.'.htaccess'); + $old = 'RewriteRule ^([^feed\/].*)$ index.php?$1 [L]'; + $new = 'RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]'; + $htaccess = str_replace($old, $new, $htaccess); + if(!plxUtils::write($htaccess,PLX_ROOT.'.htaccess')) { + echo '

    '.L_UPDATE_ERR_UPDATE_HTACCESS_FILE.'

    '; + return false; + } + } + return true; # pas d'erreurs + + } + # Mise à jour des pages statiques: ajout nouveau champ title_htmltag + public function step3() { + echo L_UPDATE_FILE." (".$this->plxAdmin->aConf['statiques'].")
    "; + $data = file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['statiques']); + $tag = 'statique'; + if(preg_match_all('{<'.$tag.'[^>]*>(.*?)}', $data, $matches, PREG_PATTERN_ORDER)) { + foreach($matches[0] as $match) { + if(!preg_match('//', $match)) { + $str = str_replace('', '', $match); + $data = str_replace($match, $str, $data); + } + } + if(!plxUtils::write($data, PLX_ROOT.$this->plxAdmin->aConf['statiques'])) { + echo '

    '.L_UPDATE_ERR_FILE.'

    '; + return false; + } + } + return true; + } + # Mise à jour des categories: ajout nouveau champ title_htmltag + public function step4() { + echo L_UPDATE_FILE." (".$this->plxAdmin->aConf['categories'].")
    "; + $data = file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['categories']); + $tag = 'categorie'; + if(preg_match_all('{<'.$tag.'[^>]*>(.*?)}', $data, $matches, PREG_PATTERN_ORDER)) { + foreach($matches[0] as $match) { + if(!preg_match('//', $match)) { + $str = str_replace('', '', $match); + $data = str_replace($match, $str, $data); + } + } + if(!plxUtils::write($data, PLX_ROOT.$this->plxAdmin->aConf['categories'])) { + echo '

    '.L_UPDATE_ERR_FILE.'

    '; + return false; + } + } + return true; + } +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.7.php b/src/update/update_5.1.7.php new file mode 100644 index 0000000..a4408e5 --- /dev/null +++ b/src/update/update_5.1.7.php @@ -0,0 +1,105 @@ +\n\tOrder allow,deny\n\tDeny from all\n", PLX_ROOT.PLX_CONFIG_PATH.".htaccess"); + plxUtils::write("", PLX_ROOT.PLX_CONFIG_PATH."index.html"); + # Relocalisation des fichiers de configuration si besoin + if(!plxUtils::write(file_get_contents(PLX_CONF), path('XMLFILE_PARAMETERS'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_PARAMETERS').'

    '; + return false; + } + if(!plxUtils::write(file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['statiques']), path('XMLFILE_STATICS'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_STATICS').'

    '; + return false; + } + if(!plxUtils::write(file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['categories']), path('XMLFILE_CATEGORIES'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_CATEGORIES').'

    '; + return false; + } + if(!plxUtils::write(file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['users']), path('XMLFILE_USERS'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_USERS').'

    '; + return false; + } + if(!plxUtils::write(file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['tags']), path('XMLFILE_TAGS'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_TAGS').'

    '; + return false; + } + if(!plxUtils::write(file_get_contents(PLX_ROOT.$this->plxAdmin->aConf['plugins']), path('XMLFILE_PLUGINS'))) { + echo '

    '.L_UPDATE_ERR_FILE.' : '.path('XMLFILE_PLUGINS').'

    '; + return false; + } + + return true; # pas d'erreurs + } + + # mise à jour fichier parametres.xml + public function step2() { + + echo L_UPDATE_UPDATE_PARAMETERS_FILE."
    "; + $new_parameters['config_path'] = PLX_CONFIG_PATH; + $new_parameters['thumbs'] = 1; + # on supprime les parametres obsoletes + unset($this->plxAdmin->aConf['statiques']); + unset($this->plxAdmin->aConf['categories']); + unset($this->plxAdmin->aConf['users']); + unset($this->plxAdmin->aConf['tags']); + unset($this->plxAdmin->aConf['plugins']); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + + return true; # pas d'erreurs + } + + # déplacement et renommage des fichiers parametres des plugins + public function step3() { + + # Récupère le nouveau n° de version de PluXml + if(is_readable(PLX_ROOT.'version')) { + $f = file(PLX_ROOT.'version'); + $newVersion = $f['0']; + } + + echo L_UPDATE_PLUG_MOVEPARAMFILE."
    "; + foreach($this->plxAdmin->plxPlugins->aPlugins as $plugName=>$plugAttrs) { + $plugParamFile = PLX_PLUGINS.$plugName.'/parameters.xml'; + if(is_file($plugParamFile)) { + if (version_compare($newVersion, '5.1.7') > 0) + $title = $plugAttrs->getInfo('title'); + else + $title = $plugAttrs['title']; + if(plxUtils::write(file_get_contents($plugParamFile), PLX_ROOT.PLX_CONFIG_PATH.'/plugins/'.$plugName.'.xml')) { + echo '✔ '.$title.'
    '; + unlink($plugParamFile); + } + else + echo '✗ '.$title.'
    '; + } + } + return true; # pas d'erreurs + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.1.php b/src/update/update_5.1.php new file mode 100644 index 0000000..e666929 --- /dev/null +++ b/src/update/update_5.1.php @@ -0,0 +1,280 @@ +"; + # nouveaux parametres + $new_parameters = array( + 'bypage_archives' => 5, + 'userfolders' => 1, + 'meta_description'=>'', + 'meta_keywords'=>'', + 'plugins'=>'data/configuration/plugins.xml', + 'default_lang'=>(isset($_POST['default_lang'])?$_POST['default_lang']:DEFAULT_LANG), + ); + # on supprime les parametres obsoletes + unset($this->plxAdmin->aConf['editor']); + unset($this->plxAdmin->aConf['style_mobile']); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + + # création d'un fichier .htacces dans le dossier data pour eviter de lister les dossiers + public function step2() { + echo L_UPDATE_CREATE_HTACCESS_FILE.' '.PLX_ROOT.'data/.htaccess
    '; + if(!plxUtils::write('options -indexes', PLX_ROOT.'data/.htaccess')) { + echo '

    '.L_UPDATE_CREATE_HTACCESS_FILE.' '.PLX_ROOT.'data/.htaccess

    '; + return false; + } + return true; # pas d'erreurs + } + + # Migration du fichier des categories + public function step3() { + echo L_UPDATE_CATEGORIES_MIGRATION."
    "; + if($categories = $this->_getCategories(PLX_ROOT.$this->plxAdmin->aConf['categories'])) { + # On génère le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($categories as $cat_id => $cat) { + $xml .= "\t"; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= "\n"; + } + $xml .= ""; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['categories'])) { + echo '

    '.L_UPDATE_ERR_CATEGORIES_MIGRATION.' ('.$this->plxAdmin->aConf['categories'].')

    '; + return false; + } + } + return true; + } + + + # Migration du fichier des page statiques + public function step4() { + echo L_UPDATE_STATICS_MIGRATION."
    "; + if($statics = $this->_getStatiques(PLX_ROOT.$this->plxAdmin->aConf['statiques'])) { + # On génère le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($statics as $static_id => $static) { + $xml .= "\t"; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= ""; + $xml .= "\n"; + } + $xml .= ""; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['statiques'])) { + echo '

    '.L_UPDATE_ERR_STATICS_MIGRATION.' ('.$this->plxAdmin->aConf['statiques'].')

    '; + return false; + } + } + return true; + } + + # Migration du fichier des utilisateurs + public function step5() { + echo L_UPDATE_USERS_MIGRATION."
    "; + if($users = $this->_getUsers(PLX_ROOT.$this->plxAdmin->aConf['users'])) { + # On génère le fichier XML + $xml = "\n"; + $xml .= "\n"; + foreach($users as $user_id => $user) { + if(intval($user['profil']=='2')) $user['profil']='4'; + $xml .= "\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\t".''."\n"; + $xml .= "\t\n"; + } + $xml .= ""; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['users'])) { + echo '

    '.L_UPDATE_ERR_USERS_MIGRATION.' ('.$this->plxAdmin->aConf['users'].')

    '; + return false; + } + } + return true; + } + + # Création du fichier data/configuration/plugins.xml + public function step6() { + echo L_UPDATE_CREATE_PLUGINS_FILE."
    "; + $xml = ''."\n"; + $xml .= ''."\n"; + $xml .= ''; + if(!plxUtils::write($xml,PLX_ROOT.$this->plxAdmin->aConf['plugins'])) { + echo '

    '.L_UPDATE_ERR_CREATE_PLUGINS_FILE.'

    '; + return false; + } + return true; + } + + # suppression du fichier core/admin/fullscreen.php + public function step7() { + if(file_exists(PLX_ROOT.'core/admin/fullscreen.php')) { + echo L_UPDATE_DELETE_FULLSCREEN_FILE."
    "; + if(!unlink(PLX_ROOT.'core/admin/fullscreen.php')) { + echo '

    '.L_UPDATE_ERR_DELETE_FULLSCREEN_FILE.'

    '; + } + } + return true; + } + + # suppression du dossier de la plxtoolar + public function step8() { + if(is_dir(PLX_ROOT.'core/plxtoolbar')) { + echo L_UPDATE_DELETE_PLXTOOLBAR_FOLDER."
    "; + if(!$this->deleteDir(PLX_ROOT.'core/plxtoolbar/')) { + echo '

    '.L_UPDATE_ERR_DELETE_PLXTOOLBAR_FOLDER.'

    '; + } + } + return true; + } + + /***************/ + + private function _getCategories($filename) { + $aCats=array(); + if(is_file($filename)) { + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "categorie" + if(isset($iTags['categorie'])) { + # On compte le nombre de tags "categorie" + $nb = sizeof($iTags['categorie']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + # Recuperation du nom de la categorie + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['name'] + = $values[ $iTags['categorie'][$i] ]['value']; + # Recuperation de l'url de la categorie + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['url'] + = strtolower($values[ $iTags['categorie'][$i] ]['attributes']['url']); + # Recuperation du tri de la categorie si besoin est + if(isset($values[ $iTags['categorie'][$i] ]['attributes']['tri'])) + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['tri'] + = $values[ $iTags['categorie'][$i] ]['attributes']['tri']; + else # Tri par defaut + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['tri'] + = $this->aConf['tri']; + # Recuperation du nb d'articles par page de la categorie si besoin est + if(isset($values[ $iTags['categorie'][$i] ]['attributes']['bypage'])) + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['bypage'] + = $values[ $iTags['categorie'][$i] ]['attributes']['bypage']; + else # Nb d'articles par page par defaut + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['bypage'] + = $this->bypage; + # recuperation du fichier template + if(isset($values[ $iTags['categorie'][$i] ]['attributes']['template'])) + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['template'] + = $values[ $iTags['categorie'][$i] ]['attributes']['template']; + else + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['template'] = 'categorie.php'; + # On affiche la categorie dans le menu ? + if(isset($values[ $iTags['categorie'][$i] ]['attributes']['menu'])) + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['menu'] + = $values[ $iTags['categorie'][$i] ]['attributes']['menu']; + else + $aCats[ $values[ $iTags['categorie'][$i] ]['attributes']['number'] ]['menu'] = 'oui'; + + } + } + } + return $aCats; + } + + private function _getStatiques($filename) { + $aStats=array(); + if(is_file($filename)) { + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "statique" + if(isset($iTags['statique']) AND isset($iTags['name'])) { + # On compte le nombre de tags "statique" + $nb = sizeof($iTags['name']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $number = $values[ $iTags['statique'][$i*2] ]['attributes']['number']; + # Recuperation du groupe de la page statique + $aStats[$number]['group'] = isset($values[ $iTags['statique'][$i] ])?$values[ $iTags['group'][$i] ]['value']:''; + # Recuperation du nom de la page statique + $aStats[$number]['name'] = isset($values[ $iTags['statique'][$i] ])?$values[ $iTags['name'][$i] ]['value']:''; + # Recuperation de l'url de la page statique + $aStats[$number]['url'] = strtolower($values[ $iTags['statique'][$i*2] ]['attributes']['url']); + # Recuperation de l'etat de la page + $aStats[$number]['active'] = intval($values[ $iTags['statique'][$i*2] ]['attributes']['active']); + # On affiche la page statique dans le menu ? + if(isset($values[ $iTags['statique'][$i*2] ]['attributes']['menu'])) + $aStats[$number]['menu'] = $values[ $iTags['statique'][$i*2] ]['attributes']['menu']; + else + $aStats[$number]['menu'] = 'oui'; + # recuperation du fichier template + if(isset($values[ $iTags['statique'][$i*2] ]['attributes']['template'])) + $aStats[$number]['template'] = $values[ $iTags['statique'][$i*2] ]['attributes']['template']; + else + $aStats[$number]['template'] = 'static.php'; + } + } + } + return $aStats; + } + + private function _getUsers($filename) { + $aUsers=array(); + if(is_file($filename)) { + # Mise en place du parseur XML + $data = implode('',file($filename)); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "user" + if(isset($iTags['user']) AND isset($iTags['login'])) { + # On compte le nombre d'utilisateur + $nb = sizeof($iTags['login']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $number = $values[$iTags['user'][$i*6] ]['attributes']['number']; + $aUsers[$number]['active'] = $values[ $iTags['user'][$i*6] ]['attributes']['active']; + $aUsers[$number]['delete'] = $values[ $iTags['user'][$i*6] ]['attributes']['delete']; + $aUsers[$number]['profil'] = $values[ $iTags['user'][$i*6] ]['attributes']['profil']; + $aUsers[$number]['login'] = isset($values[ $iTags['login'][$i] ])?$values[ $iTags['login'][$i] ]['value']:''; + $aUsers[$number]['name'] = isset($values[ $iTags['name'][$i] ])?$values[ $iTags['name'][$i] ]['value']:''; + $aUsers[$number]['password'] = isset($values[ $iTags['password'][$i] ])?$values[ $iTags['password'][$i] ]['value']:''; + $aUsers[$number]['infos'] = isset($values[ $iTags['infos'][$i] ])?$values[ $iTags['infos'][$i] ]['value']:''; + } + } + } + # On retourne le tableau + return $aUsers; + } + +} +?> \ No newline at end of file diff --git a/src/update/update_5.2.php b/src/update/update_5.2.php new file mode 100644 index 0000000..c138bb6 --- /dev/null +++ b/src/update/update_5.2.php @@ -0,0 +1,83 @@ +"; + # nouveaux parametres + $new_parameters = array(); + $new_parameters['hometemplate'] = 'home.php'; + # on supprime les parametres obsoletes + unset($this->plxAdmin->aConf['racine']); + # mise à jour du fichier des parametres + $this->updateParameters($new_parameters); + return true; # pas d'erreurs + } + + # mise à jour fichier parametres.xml + public function step2() { + echo L_UPDATE_UPDATE_PLUGINS_FILE."
    "; + # récupération de la liste des plugins + $aPlugins = $this->loadConfig(); + # Migration du format du fichier plugins.xml + $xml = "\n"; + $xml .= "\n"; + foreach($aPlugins as $k=>$v) { + if(isset($v['activate']) AND $v['activate']!='0') + $xml .= "\t\n"; + } + $xml .= ""; + if(!plxUtils::write($xml,path('XMLFILE_PLUGINS'))) { + echo '

    '.L_UPDATE_ERR_FILE_PROCESSING.'

    '; + return false; + } + return true; + } + + /*=====*/ + + /** + * Méthode qui charge le fichier plugins.xml (ancien format) + * + * @return null + * @author Stephane F + **/ + public function loadConfig() { + + $aPlugins = array(); + + if(!is_file(path('XMLFILE_PLUGINS'))) return false; + # Mise en place du parseur XML + $data = implode('',file(path('XMLFILE_PLUGINS'))); + $parser = xml_parser_create(PLX_CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_parse_into_struct($parser,$data,$values,$iTags); + xml_parser_free($parser); + # On verifie qu'il existe des tags "plugin" + if(isset($iTags['plugin'])) { + # On compte le nombre de tags "plugin" + $nb = sizeof($iTags['plugin']); + # On boucle sur $nb + for($i = 0; $i < $nb; $i++) { + $name = $values[$iTags['plugin'][$i] ]['attributes']['name']; + $activate = $values[$iTags['plugin'][$i] ]['attributes']['activate']; + $value = isset($values[$iTags['plugin'][$i]]['value']) ? $values[$iTags['plugin'][$i]]['value'] : ''; + $aPlugins[$name] = array( + 'activate' => $activate, + 'title' => $value, + 'instance' => null, + ); + } + } + return $aPlugins; + } + + +} \ No newline at end of file diff --git a/src/update/versions.php b/src/update/versions.php new file mode 100644 index 0000000..e0dbf09 --- /dev/null +++ b/src/update/versions.php @@ -0,0 +1,29 @@ + 'update_4.2.php', + '4.3' => '', + '4.3.1' => '', + '4.3.2' => '', + '5.0' => 'update_5.0.php', + '5.0.1' => '', + '5.0.2' => '', + '5.1' => 'update_5.1.php', + '5.1.1' => 'update_5.1.1.php', + '5.1.2' => '', + '5.1.3' => 'update_5.1.3.php', + '5.1.4' => 'update_5.1.4.php', + '5.1.5' => '', + '5.1.6' => 'update_5.1.6.php', + '5.1.7' => 'update_5.1.7.php', + '5.2' => 'update_5.2.php', + '5.3' => '', + '5.3.1' => '', +); +?> \ No newline at end of file diff --git a/src/version b/src/version new file mode 100644 index 0000000..7d3cdbf --- /dev/null +++ b/src/version @@ -0,0 +1 @@ +5.3.1 \ No newline at end of file