commit 998d011cd308d2d959ccab1e5b8ea92cc732616f Author: Némunaire Date: Wed Oct 9 15:40:23 2013 +0200 Initial commit diff --git a/db/fic2014.sql b/db/fic2014.sql new file mode 100644 index 00000000..38d9e326 --- /dev/null +++ b/db/fic2014.sql @@ -0,0 +1,100 @@ +-- phpMyAdmin SQL Dump +-- version 3.5.1 +-- http://www.phpmyadmin.net +-- +-- Host: localhost +-- Generation Time: Oct 09, 2013 at 03:38 PM +-- Server version: 5.5.32-log +-- PHP Version: 5.4.9--pl0-gentoo + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + +-- +-- Database: `fic2014` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `exercices` +-- + +CREATE TABLE IF NOT EXISTS `exercices` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `id_theme` int(10) unsigned NOT NULL, + `name` varchar(255) COLLATE utf16_unicode_ci NOT NULL, + `difficulty` tinyint(3) unsigned NOT NULL, + `points` smallint(6) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `exercice_dependancies` +-- + +CREATE TABLE IF NOT EXISTS `exercice_dependancies` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `id_exercice` int(10) unsigned NOT NULL, + `id_dependence` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sessions` +-- + +CREATE TABLE IF NOT EXISTS `sessions` ( + `session` binary(32) NOT NULL, + `uid` binary(16) NOT NULL, + `time` int(11) NOT NULL, + `ip` varbinary(16) NOT NULL, + `var` varchar(9999) COLLATE utf8_unicode_ci NOT NULL, + `level` tinyint(2) NOT NULL, + `active` enum('1','0') COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`session`) +) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `solved` +-- + +CREATE TABLE IF NOT EXISTS `solved` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `id_user` int(10) unsigned NOT NULL, + `id_exercice` int(10) unsigned NOT NULL, + `time` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `themes` +-- + +CREATE TABLE IF NOT EXISTS `themes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf16_unicode_ci NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(255) COLLATE utf16_unicode_ci NOT NULL, + `password` binary(64) NOT NULL, + `auth_level` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=1 ; diff --git a/htdocs/.onyx b/htdocs/.onyx new file mode 100644 index 00000000..9e6e10a7 --- /dev/null +++ b/htdocs/.onyx @@ -0,0 +1 @@ +../onyx/load.php diff --git a/htdocs/index.php b/htdocs/index.php new file mode 100644 index 00000000..ebe38cc3 --- /dev/null +++ b/htdocs/index.php @@ -0,0 +1,174 @@ +level > 0) +{ + if ($SESS->level&1) + { + switch($p) + { + case "adm_users": + include("admin/users.php"); + break; + } + } + + if ($SESS->level&2) + { + switch($p) + { + case "articles": + include("articles/articles.php"); + break; + + case "articles_prod": + include("articles/production.php"); + break; + } + } + + if ($SESS->level&4) + { + switch($p) + { + case "palettes": + include("articles/palettes.php"); + break; + + case "palettes_besoins": + include("articles/needs.php"); + break; + + case "prod_couts": + include("production/costs.php"); + break; + + case "stocks_besoins": + include("materials/needs.php"); + break; + + case "stocks_etat": + include("materials/etat.php"); + break; + + case "transport": + include("materials/transport.php"); + break; + } + } + + if ($SESS->level&16) + { + switch($p) + { + case "commandes": + include("materials/commandes.php"); + break; + + case "stocks_besoins": + include("materials/needs.php"); + break; + + case "transport": + include("materials/transport.php"); + break; + } + } + + if ($SESS->level&8) + { + switch($p) + { + case "prod_resume": + include("articles/needs.php"); + break; + + case "prod_entry": + include("production/entry.php"); + break; + } + } + + switch($p) + { + case "": + $_GET["p"] = ""; + case "accueil": + include("users/accueil.php"); + break; + + case "disconnect": + include("public/login.php"); + break; + } +} + +if (empty($page)) // Public pages +{ + switch($p) + { + case "": + $_GET["p"] = ""; + case "login": + include("public/login.php"); + break; + + case "forgotpasswd": + include("public/forgotpasswd.php"); + break; + + case "403": + $template->assign("err", 403); + $page = "404"; + break; + case "404": + $template->assign("err", 404); + $page = "404"; + break; + case "5mail": + include("mail.php"); + exit; + case "500": + $template->assign("err", 500); + $page = "404"; + break; + } +} + +if (empty($page)) +{ + $template->assign("err", 404); + $template->display("404.tpl"); +} +else +{ + $ALERTS = array(); + $nbAlert = @count($SESS->values["alerts"]); + if ($nbAlert > 0) + { + for ($i = 0; $i < $nbAlert; $i++) + { + if ($SESS->values["alerts"][$i]->page == $page) + { + $ALERTS[] = $SESS->values["alerts"][$i]; + unset($SESS->values["alerts"][$i]); + $i--; $nbAlert--; + $SESS->values["alerts"] = array_values($SESS->values["alerts"]); + } + } + $SESS->put(); + } + $template->assign("ALERTS", $ALERTS); + + $template->display($page.".tpl"); +} diff --git a/onyx/ban.list b/onyx/ban.list new file mode 100644 index 00000000..e69de29b diff --git a/onyx/cache/templates/cache/cache b/onyx/cache/templates/cache/cache new file mode 100644 index 00000000..e69de29b diff --git a/onyx/cache/templates/compile/compile b/onyx/cache/templates/compile/compile new file mode 100644 index 00000000..e69de29b diff --git a/onyx/config/sample.root.xml b/onyx/config/sample.root.xml new file mode 100644 index 00000000..61d79f2e --- /dev/null +++ b/onyx/config/sample.root.xml @@ -0,0 +1,60 @@ + + + + ]]> + + + 0 + 1 + 6143 + Europe/Paris + + text/html;charset=utf-8 + + + 0 + 0 + 1 + 1 + 0 + 0 + 64M + 1 + + 1 + + fr_FR.UTF8 + fr.UTF8 + fr_FR.UTF-8 + fr.UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onyx/db/sample.profile.php b/onyx/db/sample.profile.php new file mode 100644 index 00000000..1ad73643 --- /dev/null +++ b/onyx/db/sample.profile.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/onyx/include/common.php b/onyx/include/common.php new file mode 100644 index 00000000..05d87757 --- /dev/null +++ b/onyx/include/common.php @@ -0,0 +1,28 @@ +values["connected"]) && !defined("xCSRF")) + define("xCSRF", true); + +require_once("functions.php"); //Inclusion des principales fonctions + +//On charge la session +$SESS = new Session(); + +$template = new Template(); + +$template->assign("ERRmessage", false); +$template->assign("auth_lvl", $SESS->level); +$template->assign("SESS", $SESS->values); + +if (!empty($LANG)) + $template->assign("LANG", $LANG); + +//Evite les attaques CSRF +if ($SESS->level > 2 && !empty($_SERVER["HTTP_REFERER"]) && !(preg_match('#^http://'.$_SERVER['HTTP_HOST'].'#', $_SERVER["HTTP_REFERER"]) && defined("xCSRF"))) +{ + elog("Possibilité d'attaque CSRF\n".var_export($_REQUEST, TRUE), 2); + unset($_POST, $_GET); + $_GET = $_POST = array(); +} +?> \ No newline at end of file diff --git a/onyx/include/functions.php b/onyx/include/functions.php new file mode 100644 index 00000000..dfdd80f4 --- /dev/null +++ b/onyx/include/functions.php @@ -0,0 +1,96 @@ +AddAddress($to); + $mail->Subject = $subject; + $mail->Body = $body; + + return $mail->Send(); +} + +function erreur($message, $color = "error") +{ + global $template; + + $template->assign('ERRmessage', $message); + $template->assign('ERRcolor', $color); +} + +function format_url($string) +{ + $string = trim($string); + + if ( ctype_digit($string) ) + { + return $string; + } + else + { + // replace accented chars + $accents = '/&([A-Za-z]{1,2})(grave|acute|circ|cedil|uml|lig);/'; + $string_encoded = htmlentities($string,ENT_NOQUOTES,'UTF-8'); + + $string = preg_replace($accents,'$1',$string_encoded); + + // clean out the rest + $replace = array('([\40\'/])','([^a-zA-Z0-9-])','(-{2,})'); + $with = array('-','','-'); + $string = preg_replace($replace,$with,$string); + } + + return strtolower($string); +} + +function pagination($nbPages, $page, $link = "documents-recents-") +{ + $nbPages++; + $cntPages = array(); + if ($nbPages < 10) + { + for ($i = 1 ; $i <= $nbPages ; $i++) + $cntPages[] = $i; + } + else + { + for ($i = 1 ; $i <= 4 ; $i++) + $cntPages[] = $i; + if (6 != max(6, $page)) + $cntPages[] = "..."; + for ($i = max(6, $page) - 1 ; $i < min(max(6, $page) + 3, $nbPages - 2) ; $i++) + $cntPages[] = $i; + if ($nbPages - 2 != max(6, $page) + 3 && $nbPages - 2 != $i) + $cntPages[] = "..."; + for ($i = $nbPages - 2 ; $i <= $nbPages ; $i++) + $cntPages[] = $i; + } + + $out = ""; + foreach($cntPages as $p) + { + if ($p == "...") + $out .= " ... "; + else + $out .= ' '.$p.' '; + } + + return '<<'.$out.'>>'; +} + +function eregmenu($pattern, $string) +{ + return preg_match("#".$pattern."#ui", $string); +} + +?> \ No newline at end of file diff --git a/onyx/lang/en.xml b/onyx/lang/en.xml new file mode 100644 index 00000000..6f95bc53 --- /dev/null +++ b/onyx/lang/en.xml @@ -0,0 +1,5 @@ + + + Hello + Good bye + \ No newline at end of file diff --git a/onyx/lang/fr/contact.json b/onyx/lang/fr/contact.json new file mode 100644 index 00000000..6ee3fe78 --- /dev/null +++ b/onyx/lang/fr/contact.json @@ -0,0 +1 @@ +{"title":"Nous contacter","1":{"reponses":{"2":"Je suis acheteur","3":"Je suis vendeur","4":"Je suis annonceur","5":"Je souhaite signaler une faute d'orthographe ou un bug pr\u00e9sent sur le site"}},"2":{"intitule":"Raison de votre contact","reponses":{"2.1":"Je n'ai pas b\u00e9n\u00e9fici\u00e9 de mon document gratuit apr\u00e8s cinq achats","2.2":"Je n'ai pas re\u00e7u mon document apr\u00e8s paiement","2.3":"Je ne parviens pas \u00e0 me connecter \u00e0 mon compte","form2.4":"Je me suis fais voler mon compte","2.5":"Je n'arrive pas \u00e0 lire le document que j'ai achet\u00e9","2.6":"Autre"}},"2.1":{"intitule":"Si vous avez achet\u00e9 cinq documents sur Discis, nous vous offrons un document d'une valeur de 1,80 euros. Seuls les documents de cette valeur vous seront accessibles gratuitements apr\u00e8s l'achat de cinq documents.
\nPour b\u00e9n\u00e9ficier de cette offre, connectez-vous \u00e0 votre compte puis allez sur la page du document que vous souhaitez acqu\u00e9rir, celui-ci sera disponible gratuitement !\nNous ne faisons pas de remise sur les documents sup\u00e9rieurs \u00e0 1,80euros.","reponses":{"0":"Retourner \u00e0 l'accueil","2.1.1":"Apr\u00e8s avoir effectu\u00e9 les manipulations d\u00e9crites ci-dessus, je n'ai toujours pas obtenu mon document gratuit"}},"2.1.1":{"intitule":"Pour comptabiliser vos diff\u00e9rents achats, il est n\u00e9cessaire que vous poss\u00e9diez un compte et que vous y soyez connect\u00e9s lors de l'achat des documents.
Nous ne pouvons rien faire dans le cas contraire.
Si vous ne poss\u00e8dez pas de compte, vous ne pouvez malheuresement pas b\u00e9n\u00e9ficier de notre programme de fid\u00e9lit\u00e9.","reponses":{"0":"Retourner \u00e0 l'acceuil","form2.1.1.1":"Je poss\u00e8de un compte Discis et j'\u00e9tais connect\u00e9 lors de l'achat de mes documents"}},"2.3":{"intitule":"Si vous ne parvenez pas \u00e0 vous connecter \u00e0 votre compte, v\u00e9rifiez tout d'abord que ce probl\u00e8me n'est pas d'ordre g\u00e9n\u00e9ral en consultant notre blog des d\u00e9veloppeurs dans la rubrique probl\u00e8mes techniques.","reponses":{"0":"Retourner \u00e0 l'accueil","2.3.1":"Aucun probl\u00e8me n'est signal\u00e9 concernant les connections aux comptes utilisateurs sur le blog des d\u00e9veloppeurs"}},"2.3.1":{"intitule":"Vous pouvez r\u00e9cup\u00e9rer votre mot de pass en cliquant sur le lien \"mot de pass oubli\u00e9\" en dessous du formulaire de connection du compte. Un mail vous sera alors envoy\u00e9 sur l'adresse que vous nous avez fourni lors de votre inscription.","reponses":{"0":"Retourner \u00e0 l'accueil","2.5.1":"Je n'arrive pas \u00e0 utiliser 7-zip","form2.5.2":"Le fichier est illisibe et semble corrompu"}},"form2.4":["test","test2"],"3":{"intitule":"Raison de votre contacte","reponses":{"3.1":"Un de mes documents a \u00e9t\u00e9 plagi\u00e9","3.2":"Mes documents ne sont toujours pas publi\u00e9s","3.3":"Je n'ai toujours pas re\u00e7u mon paiement","3.4":"Je souhaite supprimer un document","3.5":"Je ne parviens pas \u00e0 me connecter \u00e0 mon compte","3.6":"Autre"}},"3.1":{"intitule":"Si vous vous \u00eates rendu compte que certains de vos documents ont \u00e9t\u00e9 plagi\u00e9s sur un site internet tiers, vous pouvez en g\u00e9n\u00e9ral contacter les webmasters du dit site via un formulaire de contact.\n Voici un mod\u00e8le de lettre que vous pouvez soumettre pour faire valoir vos droits :

\n

\nBonjour,

\nJe vous informe que le document [ins\u00e9rez le titre du document] disponible sur votre site internet \u00e0 cette adresse [ins\u00e9rez l'adresse du plagiat] est un document dont je suis l'auteur que j'ai publi\u00e9 sur le site internet discis.fr le [ins\u00e9rer la date de publication de votre document] \u00e0 l'adresse suivante : [ins\u00e9rer l'adresse discis de votre document]. Je vous demande de bien vouloir supprimer ce document plagi\u00e9 de votre base de donn\u00e9e.

\nCordialement<\/p>\nSi vous ne recevez aucune r\u00e9ponse d'ici deux semaines, cliquez sur le bouton ci-dessous.","reponses":{"0":"Retourner \u00e0 l'accueil","form3.1.1":"Le site internet du document plagi\u00e9 n'a pas r\u00e9pondu \u00e0 mon mail"}},"3.2":{"intitule":"Le temps de traitement de vos documents d\u00e9pend du nombre de documents que nous recevons. De plus, afin de garantir la vente de documents de qualit\u00e9s, nous prenons un certain temps \u00e0 lire un \u00e0 un chaque document re\u00e7u et \u00e0 le soumettre \u00e0 notre logiciel anti-plagiat.
Tout ceci prend beaucoup de temps et nous nous excusons par avance pour les d\u00e9lais qui peuvent \u00eatre longs dans certains cas.
Cependant, si votre document a \u00e9t\u00e9 envoy\u00e9 il y a plus d'un mois, il a sans doute \u00e9t\u00e9 \"oubli\u00e9\" par notre comit\u00e9 de lecture.","reponses":{"0":"Retourner \u00e0 l'accueil","form3.2.1":"Aucun probl\u00e8me n'est signal\u00e9 convernant des retards de paiement ce mois-ci sur le blog des d\u00e9veloppeurs"}}} \ No newline at end of file diff --git a/onyx/lang/fr/erreurs.json b/onyx/lang/fr/erreurs.json new file mode 100644 index 00000000..b975bbc0 --- /dev/null +++ b/onyx/lang/fr/erreurs.json @@ -0,0 +1 @@ +{"403":{"title":"Erreur 403","subtitle":"Accès réglementé","content":"Vous n'\u00eates pas autoris\u00e9 \u00e0 acc\u00e9der \u00e0 cette page."},"404":{"title":"Erreur 404","subtitle":"Page introuvable","content":"La page à laquelle vous tentez d'accéder n'existe pas ou l'adresse que vous avez tapée est incorrecte."},"500":{"title":"Erreur 500","subtitle":"Serveur indisponible","content":"Le serveur est actuellement dans l'incapacit\u00e9 de repondre \u00e0 votre requ\u00eate.

Veuillez recommencer plus tard."}} diff --git a/onyx/lang/fr/global.json b/onyx/lang/fr/global.json new file mode 100644 index 00000000..c8a47985 --- /dev/null +++ b/onyx/lang/fr/global.json @@ -0,0 +1 @@ +{"date":"d\/m\/Y \u00e0 H:i","rssfeed":"Flux Atom des nouvelles","forgotpsw":"Mot de passe oubli\u00e9 ...","continue":"Continuer","send":"Envoyer","login":{"connect":"Ok","disconnect":"D\u00e9connexion"},"menu":{"0":{"accueil":"Accueil","publier":"Publier","inscription":"S'inscrire","contact":"Contact"},"1":{"conditions-generales":"Conditions g\u00e9n\u00e9rales"},"2":{"accueil":"Accueil","mon-compte":"Mon compte","statistiques":"Statistiques","":"


","publier":"Publier","mes-documents-publies":"Mes documents publi\u00e9s","mes-documents-en-attente":"Mes documents en attente %s"," ":"
","contact":"Contact"},"4":{"kor-docs-en-correction":"Documents en correction %s","kor-docs-en-attente":"Documents en attente %s"},"6":{"adm-controldocs":"Documents \u00e0 controler %s","kor-docs-en-correction":"Documents en correction %s","kor-docs-en-attente":"Documents en attente %s","":"
","adm-prise-de-controle":"Prendre le controle d'un compte","adm-pubs":"Modifier les publicit\u00e9s","adm-news":"Modifier les news"," ":"
","tickets":"Tickets %s"}},"footer":{"annonceurs":"Annonceurs","conditions-generales":"Conditions g\u00e9n\u00e9rales","plan":"Plan du site"}} \ No newline at end of file diff --git a/onyx/lang/fr/publication.json b/onyx/lang/fr/publication.json new file mode 100644 index 00000000..7251a212 --- /dev/null +++ b/onyx/lang/fr/publication.json @@ -0,0 +1 @@ +{"titre0":"Publication de documents","mails":{"pubOk":{"subject":"[Discis] Publication de votre document","body":"Bonjour,\n\nNous avons le plaisir de vous informer que votre document %s, soumis \u00e0 notre \u00e9quipe le %s, vient d\u2019\u00eatre publi\u00e9 sur Discis.\nVotre document est propos\u00e9 \u00e0 la vente pour %s ; il est disponible \u00e0 cette adresse : http:\/\/www.discis.fr\/document-%s. Si vous d\u00e9sirez apporter des modifications \u00e0 votre document, connectez-vous dans votre espace personnel dans la rubrique \"Mes documents publi\u00e9s\" (http:\/\/www.discis.fr\/mes-documents-publies).\n\nCordialement,"},"pubMod":{"subject":"[Discis] Publication de votre document","body":"Bonjour,\n\nVotre document %s soumis le %s a retenu notre intention. Cependant, nous ne l\u2019avons pas encore publi\u00e9 pour la raison suivante\u00a0:\n\n%s\n\nPour effectuer les modifications n\u00e9cessaires, connectez-vous \u00e0 votre compte \u00e0 la rubrique \"Mes documents en attente\" (http:\/\/www.discis.fr\/mes-documents-en-attente).\n\nCordialement,"},"pubNo":{"subject":"[Discis] Publication de votre document","body":"Bonjour,\n\nNous sommes d\u00e9sol\u00e9 de vous informer que votre document %s soumis le %s ne sera pas publi\u00e9 sur Discis. Le motif est le suivant\u00a0: %s.\n\nNous vous encourageons \u00e0 modifier ce document pour le soumettre \u00e0 nouveau \u00e0 notre \u00e9quipe.\n\nCordialement,"}}} \ No newline at end of file diff --git a/onyx/lang/fr/register.json b/onyx/lang/fr/register.json new file mode 100644 index 00000000..bfa03627 --- /dev/null +++ b/onyx/lang/fr/register.json @@ -0,0 +1 @@ +{"title":"Inscription","helpCaptcha":"Si vous ne parvennez pas \u00e0 voir cette image, contactez un administrateur.","msgOk":"Votre inscription a \u00e9t\u00e9 r\u00e9alis\u00e9e avec succ\u00e8s.
Bienvenue sur Discis !","chPswd":"Votre mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9 avec succ\u00e8s.","button":"S'inscrire","err0":"Le nom d'utilisateur comporte des catact\u00e8res invalides ou est trop court ou trop long !","err1":"Veuillez compl\u00e9ter tous les champs","err2":"Le texte que vous avez recopi\u00e9 ne correspond pas au contenu de l'image !","err3":"Le mot de passe et sa conformation sont diff\u00e9rents !","err4":"Le mot de passe est trop court ! Il doit contenir au moins 8 caract\u00e8res.","err5":"L'adresse \u00e9lectronique indiqu\u00e9e ne semble pas valide.","err6":"Le nom d'utilisateur que vous avez choisit existe d\u00e9j\u00e0 ou votre adresse \u00e9lectronique est d\u00e9j\u00e0 associ\u00e9e avec un autre compte.","mail":{"subject":"[Discis] Validation de votre inscription","body":"Soyez le bienvenu sur Discis !\n\nNous vous souhaitons beaucoup de succ\u00e8s avec la vente de vos documents ou la gestion de vos achats. Nous tenons \u00e0 vous informer que nous sommes \u00e0 disposition si vous avez besoin d'aide. Ainsi, vous pouvez nous contacter \u00e0 tout moment via la page contact du site.\n\nMerci de vous \u00eatre enregistr\u00e9,"},"tip":[{"title":"Bienvenue sur Discis !","content":"Votre compte Discis vous permettra de :\n