From 1608d3f17d49a0c846ad3c3726b497fc02d2f74e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Dudonn=C3=A9?= Date: Sun, 5 Nov 2023 22:21:25 +0100 Subject: [PATCH] insertion image fonctionnelle --- .gitignore | 476 +++++++++++++++++++ php/public/index.php | 1 + php/src/config/config.php | 4 +- php/src/controleur/UtilisateurControleur.php | 43 +- php/src/gateway/ImageGateway.php | 122 +++++ php/src/modele/Image.php | 54 +++ php/src/modele/UtilisateurModele.php | 4 +- php/templates/CreerOffre.html | 144 ++++++ php/templates/accueil.html | 2 +- php/templates/erreur.html | 1 + php/templates/testImage.html | 21 + 11 files changed, 866 insertions(+), 6 deletions(-) create mode 100644 php/src/gateway/ImageGateway.php create mode 100644 php/src/modele/Image.php create mode 100644 php/templates/CreerOffre.html create mode 100644 php/templates/testImage.html diff --git a/.gitignore b/.gitignore index e69de29..2608b43 100755 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,476 @@ +##### Windows +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +##### Linux +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +##### MacOS +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +##### Backup +*.bak +*.gho +*.ori +*.orig +*.tmp + +##### GPG +secring.* + +##### Dropbox +# Dropbox settings and caches +.dropbox +.dropbox.attr +.dropbox.cache + +##### SynopsysVCS +# Waveform formats +*.vcd +*.vpd +*.evcd +*.fsdb + +# Default name of the simulation executable. A different name can be +# specified with this switch (the associated daidir database name is +# also taken from here): -o / +simv + +# Generated for Verilog and VHDL top configs +simv.daidir/ +simv.db.dir/ + +# Infrastructure necessary to co-simulate SystemC models with +# Verilog/VHDL models. An alternate directory may be specified with this +# switch: -Mdir= +csrc/ + +# Log file - the following switch allows to specify the file that will be +# used to write all messages from simulation: -l +*.log + +# Coverage results (generated with urg) and database location. The +# following switch can also be used: urg -dir .vdb +simv.vdb/ +urgReport/ + +# DVE and UCLI related files. +DVEfiles/ +ucli.key + +# When the design is elaborated for DirectC, the following file is created +# with declarations for C/C++ functions. +vc_hdrs.h + +##### SVN +.svn/ + +##### Mercurial +.hg/ +.hgignore +.hgsigs +.hgsub +.hgsubstate +.hgtags + +##### Bazaar +.bzr/ +.bzrignore + +##### CVS +/CVS/* +**/CVS/* +.cvsignore +*/.cvsignore + +##### TortoiseGit +# Project-level settings +/.tgitconfig + +##### PuTTY +# Private key +*.ppk + +##### Vim +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +##### Emacs +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + +##### SublimeText +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json +sftp-config-alt*.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + +##### Notepad++ +# Notepad++ backups # +*.bak + +##### TextMate +*.tmproj +*.tmproject +tmtags + +##### VisualStudioCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +##### NetBeans +**/nbproject/private/ +**/nbproject/Makefile-*.mk +**/nbproject/Package-*.bash +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +##### JetBrains +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +##### Eclipse +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +##### Dreamweaver +# DW Dreamweaver added files +_notes +_compareTemp +configs/ +dwsync.xml +dw_php_codehinting.config +*.mno + +##### CodeKit +# General CodeKit files to ignore +config.codekit +config.codekit3 +/min + +##### Gradle +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Composer +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +composer.lock + +##### PHP CodeSniffer +# gitignore for the PHP Codesniffer framework +# website: https://github.com/squizlabs/PHP_CodeSniffer +# +# Recommended template: PHP.gitignore + +/wpcs/* + +##### SASS +.sass-cache/ +*.css.map +*.sass.map +*.scss.map + +php/.idea/ diff --git a/php/public/index.php b/php/public/index.php index 8a015ce..ae81394 100755 --- a/php/public/index.php +++ b/php/public/index.php @@ -13,4 +13,5 @@ $twig = new \Twig\Environment($loader, [ 'debug' => true ]); + $cont = new \App\controleur\FrontControleur(); \ No newline at end of file diff --git a/php/src/config/config.php b/php/src/config/config.php index 0a66244..5b6e343 100755 --- a/php/src/config/config.php +++ b/php/src/config/config.php @@ -8,5 +8,5 @@ $dConfig['includes']= array('controleur/Validation.php'); //BD $base = 'mysql:host=localhost;dbname=dbAlica'; -$login = 'root'; -$mdp = ''; +$login = 'test'; +$mdp = 'test'; diff --git a/php/src/controleur/UtilisateurControleur.php b/php/src/controleur/UtilisateurControleur.php index 7ac47ec..c646767 100755 --- a/php/src/controleur/UtilisateurControleur.php +++ b/php/src/controleur/UtilisateurControleur.php @@ -2,16 +2,23 @@ namespace App\controleur; +use App\gateway\Connection; +use App\gateway\ImageGateway; +use App\modele\Image; + class UtilisateurControleur { public function __construct() { global $twig; if (!isset($_REQUEST["action"])) { - $action = NULL; + //$action = NULL; + $action = "CreerOffre"; } else { $action = \App\config\Validation::nettoyerString($_REQUEST["action"]); } + + switch ($action) { case NULL: case "accueil": @@ -26,6 +33,13 @@ class UtilisateurControleur case "consulterProfilLimite": $this->consulterProfilLimite(); break; + case "CreerOffre": + //echo "test"; + $this->creerOffre(); + break; + case "publierOffre": + $this->publierOffre(); + break; default: $dVueErreur[] ="Action inconnue ou non autorisée"; echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]); @@ -84,4 +98,31 @@ class UtilisateurControleur //TODO } + protected function creerOffre() + { + global $twig; + echo $twig->render('testImage.html', []); + + } + + protected function publierOffre() + { + + if(isset($_POST["submit"])) + $img = new Image($_FILES["image"]["name"], + $_FILES["image"]["size"],$_FILES["image"]["type"],file_get_contents($_FILES["image"]["tmp_name"])); + else { + echo "

Image non inserée

"; + return; + } + + $con = new Connection("mysql:host=localhost;dbname=dbAlida",'test','test'); + + $imgGw = new ImageGateway($con); + + $imgGw->insertImage($img); + echo "

Image inserée

"; + } + + } \ No newline at end of file diff --git a/php/src/gateway/ImageGateway.php b/php/src/gateway/ImageGateway.php new file mode 100644 index 0000000..09a7ae0 --- /dev/null +++ b/php/src/gateway/ImageGateway.php @@ -0,0 +1,122 @@ +con = $con; + } + + + public function insertImage(Image $img) + { + $query = "INSERT INTO Image (`nom`, `taille`, `type`, `desc`, `blob`) VALUES ( :n, :t, :ty, :d, :b)"; + $this->con->executeQuery($query, array( + ':n' => array($img->getName(), PDO::PARAM_STR), + ':t' => array($img->getTaille(), PDO::PARAM_STR), + ':ty' => array($img->getType(), PDO::PARAM_STR), + ':d' => array("desc", PDO::PARAM_STR), + ':b' => array($img->getBlob(), PDO::PARAM_STR) + )); + } + + public function insert(int $id,string $name, string $desc, string $taille, string $type, string $blob) + { + $query = 'INSERT INTO Image (nom, taille, type, desc, blob) VALUES (:i, :n, :t, :ty, :d, :b)'; + $this->con->executeQuery($query, array( + ':i' => array($id,PDO::PARAM_INT), + ':n' => array($name, PDO::PARAM_STR), + ':t' => array($taille, PDO::PARAM_STR), + ':ty' => array($type, PDO::PARAM_STR), + ':d' => array($desc, PDO::PARAM_STR), + ':b' => array($blob, PDO::PARAM_STR) + )); + } + + public function updateName(int $id, string $newName) + { + $query = 'UPDATE Image SET nom=:new WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT), + ':new' => array($newName, PDO::PARAM_STR) + )); + } + + public function updateDesc(int $id, string $newDesc) + { + $query = 'UPDATE Image SET desc=:new WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT), + ':new' => array($newDesc, PDO::PARAM_STR) + )); + } + + public function updateTaille(int $id, string $newTaille) + { + $query = 'UPDATE Image SET taille=:new WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT), + ':new' => array($newTaille, PDO::PARAM_STR) + )); + } + + public function updateType(int $id, string $newType) + { + $query = 'UPDATE Image SET type=:new WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT), + ':new' => array($newType, PDO::PARAM_STR) + )); + } + + public function updateBlob(int $id, string $newBlob) + { + $query = 'UPDATE Image SET blob=:new WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT), + ':new' => array($newBlob, PDO::PARAM_STR) + )); + } + + public function delete(int $id) + { + $query = 'DELETE FROM Image WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT) + )); + } + + public function findById(int $id) + { + $query = 'SELECT * FROM Image WHERE id=:i'; + $this->con->executeQuery($query, array( + ':i' => array($id, PDO::PARAM_INT) + )); + $res = $this->con->getResults(); + return new Image($res[0]['nom'], $res[0]['desc'], $res[0]['taille'], $res[0]['type'], $res[0]['blob']); + } + + public function getAll() + { + $query = 'SELECT * FROM Image'; + $this->con->executeQuery($query); + $res = $this->con->getResults(); + $array = []; + foreach ($res as $r) { + $array[] = new Image($r['nom'], $r['desc'], $r['taille'], $r['type'], $r['blob']); + + } + return $array; + } +} + +?> \ No newline at end of file diff --git a/php/src/modele/Image.php b/php/src/modele/Image.php new file mode 100644 index 0000000..3860291 --- /dev/null +++ b/php/src/modele/Image.php @@ -0,0 +1,54 @@ +id = $id; + $this->name = $name; + $this->taille = $taille; + $this->type = $type; + $this->blob = $blob; + } + + public function getName(): string + { + return $this->name; + } + + + public function getTaille(): string + { + return $this->taille; + } + + public function getType(): string + { + return $this->type; + } + + public function getBlob(): string + { + return $this->blob; + } + + +} \ No newline at end of file diff --git a/php/src/modele/UtilisateurModele.php b/php/src/modele/UtilisateurModele.php index c10944c..b051b31 100755 --- a/php/src/modele/UtilisateurModele.php +++ b/php/src/modele/UtilisateurModele.php @@ -34,8 +34,8 @@ class UtilisateurModele public function inscription(string $email, string $hashpassword): \App\modele\Alumni { $dsn = "mysql:host=localhost;dbname=dbAlica"; - $username = "Dev"; - $password = "Dev"; + $username = "test"; + $password = "test"; $role = "Utilisateur"; $con = new \App\gateway\Connection($dsn, $username, $password); diff --git a/php/templates/CreerOffre.html b/php/templates/CreerOffre.html new file mode 100644 index 0000000..afb5aa6 --- /dev/null +++ b/php/templates/CreerOffre.html @@ -0,0 +1,144 @@ + + + + + Publier une Offre + + + + + +
+ +
+ +
+

Publier Une Offre

+ +
+
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+ + +
+ + + + + + + + + + diff --git a/php/templates/accueil.html b/php/templates/accueil.html index 1438392..995ec5d 100755 --- a/php/templates/accueil.html +++ b/php/templates/accueil.html @@ -3,7 +3,7 @@ - + Alica - Accueil diff --git a/php/templates/erreur.html b/php/templates/erreur.html index 740cace..ce427ee 100755 --- a/php/templates/erreur.html +++ b/php/templates/erreur.html @@ -14,6 +14,7 @@

{{value}}

{% endfor %} {% endif %} +
diff --git a/php/templates/testImage.html b/php/templates/testImage.html new file mode 100644 index 0000000..1214b7e --- /dev/null +++ b/php/templates/testImage.html @@ -0,0 +1,21 @@ + + + + + Test Img + + + +
+ + + + + + +
+ + + + + \ No newline at end of file