Browse Source

Création, édition et suppressinon de projets.

nicolas 8 years ago
parent
commit
f2f8f9157d
10 changed files with 300 additions and 102 deletions
  1. 28 0
      editer.php
  2. 2 9
      index.php
  3. 119 32
      lib/db.php
  4. 10 0
      projects.php
  5. 56 0
      templates/tpl-create-edit.php
  6. 20 44
      templates/tpl-index.php
  7. 8 0
      templates/tpl-main-bottom.php
  8. 18 17
      templates/tpl-main.php
  9. 27 0
      templates/tpl-view.php
  10. 12 0
      voir.php

+ 28 - 0
editer.php

@@ -0,0 +1,28 @@
+<?php
+
+require_once 'projects.php';
+
+
+if (isset($_POST['action']))
+	switch ($_POST['action']) {
+		case 'create-edit':
+			$ret = $db->CreateOrEditProjet($_POST);
+			if (!$ret)
+				echo "<pre>erreur</pre>";
+			else {
+				header("Location: editer.php?id=$ret");
+				die();
+			}
+			break;
+		
+		case 'delete':
+			$db->DeleteProject($_POST['id']);
+			header('Location: index.php');
+			die();
+	}
+
+$p = isset($_GET['id']) ? $projects[$_GET['id']] : $db->GetEmptyProject();
+
+include_once 'templates/tpl-create-edit.php';
+
+

+ 2 - 9
index.php

@@ -1,15 +1,8 @@
 <?php
 
-require_once 'lib/db.php';
+require_once 'projects.php';
 
-//ini_set('display_errors', 1);
-//ini_set('display_startup_errors', 1);
-//error_reporting(E_ALL);
 
-//phpinfo();
-//die();
+include_once 'templates/tpl-index.php';
 
-$db = new DB();
-$db->GetProjects();
 
-require_once('templates/tpl-index.php');

+ 119 - 32
lib/db.php

@@ -2,51 +2,138 @@
 
 class DB extends SQLite3 {
 	
-	private $db = null;
+	private $open = false;
+	
+	public function __construct () {}
 	
-	public function __construct () {
-		
-	}
 	
 	private function ensure_connection () {
-		if (!is_null($this->db))
-			return;
 		
-		$this->open('db.sqlite');
+		if (!$this->open) {
+			$this->open('db.sqlite');
+			$this->open = true;
+		} else {
+			$this->close();
+			$this->open('db.sqlite');
+		}
 		
-		if (!$this->ensure_tables()) {
-			echo "error";
-			return;
+		$table_exists = @$this->query('SELECT * FROM projects LIMIT 1');
+		if (!$table_exists) {
+			$res = $this->query('
+				CREATE TABLE projects (
+					name varchar(128),
+					slugname varchar(128),
+					dossier varchar(128),
+					cloud_link varchar(1024),
+					wiki_link varchar(1024),
+					last_edit_date datetime
+				)
+			');
+			if ($res)
+				echo "<pre>created projects table</pre>";
+			else
+				echo "<pre>error creating projects table: ".$this->lastErrorMsg()."</pre>";
 		}
+		return true;
+	}
+	
+	
+	public function GetProjects () {
+		$this->ensure_connection();
+		
+		$results = $this->query('SELECT rowid, * FROM projects');
+		$projects = [];
+		
+		while ($project = $results->fetchArray(SQLITE3_ASSOC))
+			$projects[$project['rowid']] = $project;
+		
+		return $projects;
+	}
+	
+	
+	public function GetEmptyProject () {
+		return [
+			'rowid'=>'',
+			'name'=>'',
+			'slugname'=>'',
+			'dossier'=>'',
+			'cloud_link'=>'',
+			'wiki_link'=>'',
+			'last_edit_date'=>'',
+		];
 	}
 	
-	private function ensure_tables () {
-		try {
-			$this->query('SELECT * FROM projects LIMIT 1');
-			return true;
-		} catch (Exception $e) {
-			try {
-				$this->query('
-					CREATE TABLE projects (
-						name varchar(128),
-						slugname varchar(128),
-						dossier varchar(128),
-						cloud_link varchar(1024),
-						wiki_link varchar(1024),
-						last_edit_date datetime
-					)
-				');
-			} catch (Exception $e) {
-				var_dump($e);
-			}
-			return false;
+	
+	public function CreateOrEditProjet ($params) {
+		$this->ensure_connection();
+		
+		// EDITION
+		if (isset($params['rowid']) && $params['rowid']) {
+			
+			$q = $this->prepare("
+				UPDATE projects
+				SET
+					name = :name,
+					dossier = :dossier,
+					cloud_link = :cloud_link,
+					wiki_link = :wiki_link,
+					last_edit_date = datetime('now')
+				WHERE
+					rowid = :rowid
+			");
+			
+			$q->bindValue(':name', $params['name'], SQLITE3_TEXT);
+			$q->bindValue(':dossier', $params['dossier'], SQLITE3_TEXT);
+			$q->bindValue(':cloud_link', $params['cloud_link'], SQLITE3_TEXT);
+			$q->bindValue(':wiki_link', $params['wiki_link'], SQLITE3_TEXT);
+			$q->bindValue(':rowid', $params['rowid'], SQLITE3_INTEGER);
+			
+			$result = $q->execute();
+			
+			if (!$result)
+				echo "<pre>Erreur à l'édition: ".$this->lastErrorMsg()."</pre>";
+			else
+				return $params['rowid'];
+		}
+		
+		// CREATION
+		else {
+			$slug = preg_replace('_\W+_','-',strtolower($params['name']));
+			$slug = preg_replace('_^-|-$_','',$slug);
+			
+			$q = $this->prepare("
+				INSERT INTO projects
+					(name, slugname, dossier, cloud_link, wiki_link, last_edit_date)
+				VALUES
+					(:name, :slugname, :dossier, :cloud_link, :wiki_link, datetime('now'))
+			");
+			
+			$q->bindValue(':name', $params['name'], SQLITE3_TEXT);
+			$q->bindValue(':slugname', $slug, SQLITE3_TEXT);
+			$q->bindValue(':dossier', $params['dossier'], SQLITE3_TEXT);
+			$q->bindValue(':cloud_link', $params['cloud_link'], SQLITE3_TEXT);
+			$q->bindValue(':wiki_link', $params['wiki_link'], SQLITE3_TEXT);
+			
+			$result = $q->execute();
+			
+			if ($result)
+				return $this->lastInsertRowID();
 		}
+		
+		return false;
 	}
 	
-	public function GetProjects () {
+	
+	public function test () {
+		
+	}
+	
+	public function DeleteProject ($id) {
 		$this->ensure_connection();
 		
-		return [];
+		$q = $this->prepare("DELETE FROM projects WHERE rowid = :rowid");
+		$q->bindValue(':rowid', $id, SQLITE3_INTEGER);
+		$q->execute();
 	}
 	
 }

+ 10 - 0
projects.php

@@ -0,0 +1,10 @@
+<?php
+
+require_once 'lib/db.php';
+
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+error_reporting(E_ALL);
+
+$db = new DB();
+$projects = $db->GetProjects();

+ 56 - 0
templates/tpl-create-edit.php

@@ -0,0 +1,56 @@
+<?php
+include_once 'templates/tpl-main-top.php';
+?>
+
+<h1><?php echo $p['rowid'] ? "Éditer « {$p['name']} »" : 'Créer un projet'; ?></h1>
+
+<div class="éditer">
+	<form method="post">
+		
+		<input type="hidden" name="action" value="create-edit" />
+		<input type="hidden" name="rowid" value="<?php echo $p['rowid']; ?>" />
+		
+		<div class="form-group">
+			<label>Nom du projet :</label>
+			<input type="text" class="form-control" name="name" value="<?php echo $p['name']; ?>" placeholder="Projet de mémoire">
+		</div>
+		<div class="form-group">
+			<label>Dossier :</label>
+			<input type="text" class="form-control" name="dossier" value="<?php echo $p['dossier']; ?>" placeholder="Le dossier de rattachement">
+<!--			<select name="dossier" id="dossiers" multiple="" class="form-control input-lg select2 select2-offscreen" tabindex="-1">
+				<option value="intveld">In 't Veld</option>
+				<option value="abroretention">Abrogation de la rétention des données</option>
+				<option value="tes">Fichier TES</option>
+				<option value="orangefail">#OrangeFail</option>
+				<option value="prishield">Privacy Shield</option>
+			</select>-->
+		</div>
+		<div class="form-group">
+			<label>Lien cloud :</label>
+			<input type="text" class="form-control" name="cloud_link" value="<?php echo $p['cloud_link']; ?>" placeholder="Lien vers le nuage">
+		</div>
+		<div class="form-group">
+			<label>Lien wiki :</label>
+			<input type="text" class="form-control" name="wiki_link" value="<?php echo $p['wiki_link']; ?>" placeholder="Lien vers le wiki">
+		</div>
+		<div class="actions">
+			<button type="submit" class="bouton">
+				<?php echo $p['rowid'] ? 'Enregistrer': 'Créer'; ?>
+			</button>
+		</div>
+	</form>
+	<div class="actions">
+		<form method="post">
+			<input type="hidden" name="action" value="delete" />
+			<input type="hidden" name="id" value="<?php echo $p['rowid']; ?> />" />
+			<button type="submit" class="bouton" style="font-size: 80%;">
+				Supprimer
+			</button>
+		</form>
+	</div>
+</div>
+
+
+<?php
+include_once 'templates/tpl-main-bottom.php';
+?>

+ 20 - 44
templates/tpl-index.php

@@ -1,54 +1,30 @@
 <?php
-
-function content () {
+include_once 'templates/tpl-main-top.php';
 ?>
 
+
 <h1>Presse à Citron</h1>
 
-<p class="bievenue">
-	Choisis un projet ou bien <a href="#ajouter">ajoute un nouveau projet</a> !
+<p class="bienvenue">
+	Choisis un projet ou bien <a href="editer.php">ajoute un nouveau projet</a> !
 </p>
 
-<div class="éditer" id="ajouter">
-	<form>
-		<div class="form-group">
-			<label for="projetNom">Nom du projet:</label>
-			<input type="text" class="form-control" id="projetNom" name="projetNom" placeholder="Projet de mémoire">
-		</div>
-		<div class="form-group">
-			<label for="projetId">Identifiant:</label>
-			<input type="text" class="form-control" id="projetId" name="projetId" placeholder="(automatiquement suggéré en fonction du nom)">
-		</div>
-		<div class="form-group">
-			<label for="projetDossier">Dossier: <a href="ajout-dossier.html">(Nouveau dossier ?)</a></label>
-			<select name="dossier" id="dossiers" multiple="" class="form-control input-lg select2 select2-offscreen" tabindex="-1">
-				<option value="intveld">In 't Veld</option>
-				<option value="abroretention">Abrogation de la rétention des données</option>
-				<option value="tes">Fichier TES</option>
-				<option value="orangefail">#OrangeFail</option>
-				<option value="prishield">Privacy Shield</option>
-			</select>
-		</div>
-		<div class="actions"> 
-			<button type="submit" class="bouton">Ajouter</button>
-		</div>
-	</form>
-</div>
 
-<nav class="dossiers">
-	<h2>Liste des dossiers</h2>
-	<a href="/intveld/">In 't Veld</a>
-	<a href="/abroretention/">Abrogation de la rétention des données</a>
-</nav>
-
-<nav class="projets">
-	<span class="heading">Projets</span>
-	<a href="/replique-premierministre-csi.html">Réplique Premier Ministre CSI</a>
-	<a href="/abro-tele2.html">MA Abrogation Tele2</a>
-</nav>
+<ul class='projects'>
+	<?php
+	foreach ($projects as $p) {
+		echo "
+			<li>
+				<a href='voir.php?id={$p['rowid']}'>{$p['name']}</a>
+				-
+				<i><span>{$p['dossier']}</span></i>
+			</div>
+		";
+	}
+	?>
+</ul>
+	
 
 <?php
-}
-
-require_once('templates/tpl-main.php');
-main();
+include_once 'templates/tpl-main-bottom.php';
+?>

+ 8 - 0
templates/tpl-main-bottom.php

@@ -0,0 +1,8 @@
+		
+		<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+    <!-- Include all compiled plugins (below), or include individual files as needed -->
+    <script src="bootstrap3/js/bootstrap.min.js"></script>
+		
+	</body>
+</html>

+ 18 - 17
templates/tpl-main.php

@@ -1,9 +1,3 @@
-<?php
-
-
-function main () {
-?>
-
 <!DOCTYPE html>
 <html lang="fr-fr">
   <head>
@@ -25,15 +19,22 @@ function main () {
   </head>
   <body id="index">
 		
-		<?php content(); ?>
-		
-		 <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
-    <!-- Include all compiled plugins (below), or include individual files as needed -->
-    <script src="bootstrap3/js/bootstrap.min.js"></script>
-		
-	</body>
-</html>
+<!--		<nav class="dossiers">
+			<h2>Liste des dossiers</h2>
+			<a href="/intveld/">In 't Veld</a>
+			<a href="/abroretention/">Abrogation de la rétention des données</a>
+		</nav>-->
 
-<?php
-} // end function main
+		<nav class="projets">
+			<a href="index.php" class="heading">Projets</a>
+			<?php
+			foreach ($projects as $main_p) {
+				echo "
+					<a href='voir.php?id={$main_p['rowid']}'>{$main_p['name']}</a>
+				";
+			}
+			?>
+<!--			<a href="/replique-premierministre-csi.html">Réplique Premier Ministre CSI</a>
+			<a href="/abro-tele2.html">MA Abrogation Tele2</a>-->
+			<a href="editer.php"><i>Créer</i></a>
+		</nav>

+ 27 - 0
templates/tpl-view.php

@@ -0,0 +1,27 @@
+<?php
+include_once 'templates/tpl-main-top.php';
+?>
+
+<h1 class="app titre"><?php echo $p['name']; ?></h1>
+
+<div class="métadonnées">
+	<span class="dossier">Dossier: <?php echo $p['dossier']; ?></a>
+</div>
+
+<div class="métadonnées">
+	<span class="heading">Liens</span>
+	<a href="<?php echo $p['cloud_link']; ?>" class="nuage">Nuage</a>
+	<a href="<?php echo $p['wiki_link']; ?>" class="wiki">Wiki</a>
+</div>
+
+<div class="actions">
+	<a href="editer.php?id=<?php echo $p['rowid']; ?>" type="submit" class="bouton">
+		Éditer
+	</a>
+</div>
+
+
+
+<?php
+include_once 'templates/tpl-main-bottom.php';
+?>

+ 12 - 0
voir.php

@@ -0,0 +1,12 @@
+<?php
+
+require_once 'projects.php';
+
+if (!isset($_GET['id'])) {
+	header('Location: index.php');
+	die();
+}
+
+$p = $projects[$_GET['id']];
+
+include_once 'templates/tpl-view.php';