Compare commits
97 Commits
Author | SHA1 | Date |
---|---|---|
Thomas MUZARD | c60f579a25 | 1 year ago |
Clément Verdoire | 776993ce23 | 1 year ago |
Baptiste D | 4c3e3571a9 | 1 year ago |
Baptiste D | 1d3486d9ba | 1 year ago |
Baptiste D | 02048befd8 | 1 year ago |
thomas muzard | 13eb6be744 | 1 year ago |
Baptiste D | e6f5518ebc | 1 year ago |
Baptiste D | 03371c34ad | 1 year ago |
Clément Verdoire | 941296e44c | 1 year ago |
Clément Verdoire | 60dff089bb | 1 year ago |
Baptiste D | ef2ff36190 | 1 year ago |
Baptiste D | 132d41e1db | 1 year ago |
Clément Verdoire | 9176e6cb03 | 1 year ago |
Clément Verdoire | 14479cf2a3 | 1 year ago |
Clément Verdoire | 39bae853c9 | 1 year ago |
Baptiste D | 9271f53d47 | 1 year ago |
Clément Verdoire | 4031f71acb | 1 year ago |
Baptiste D | 406cde7784 | 1 year ago |
Baptiste D | cebb1aac3a | 1 year ago |
Baptiste D | 6aa6dabb26 | 1 year ago |
Leo TUAILLON | 3d0267bb61 | 1 year ago |
Leo TUAILLON | 849663f143 | 1 year ago |
Clément Verdoire | 1e4aaf41b8 | 1 year ago |
Leo TUAILLON | a2f805cba2 | 1 year ago |
Leo TUAILLON | ce5fb022b9 | 1 year ago |
Leo TUAILLON | b5d91b5ac3 | 1 year ago |
Baptiste D | a32a224099 | 1 year ago |
Baptiste D | 090bb42cbd | 1 year ago |
Clément Verdoire | 7f85096c7b | 1 year ago |
Baptiste D | 43729cfd59 | 1 year ago |
Leo TUAILLON | ed00c99894 | 1 year ago |
Leo TUAILLON | bc1f77c054 | 1 year ago |
Leo TUAILLON | 4ee484b938 | 1 year ago |
Leo TUAILLON | f2cea0d18d | 1 year ago |
Leo Tuaillon | a1a1ae6ecb | 1 year ago |
Leo Tuaillon | e208694186 | 1 year ago |
Baptiste DUDONNE | 1ab3ffebf1 | 1 year ago |
Baptiste D | 6d5cc2e436 | 1 year ago |
Baptiste D | 5bd82f523a | 1 year ago |
Leo Tuaillon | 8a26f49de3 | 1 year ago |
Alexis Feron | b6e103465a | 1 year ago |
Baltazouu | e2b6319438 | 1 year ago |
Baltazouu | 9a151f87de | 1 year ago |
Baltazouu | 44414d4a95 | 1 year ago |
Baltazouu | f001193e66 | 1 year ago |
Baltazouu | 06799359ba | 1 year ago |
Baltazouu | 7d5ece1532 | 1 year ago |
Baltazouu | b7a820f49d | 1 year ago |
Leo Tuaillon | a92e9d4f1d | 1 year ago |
Baptiste D | 8e3e130f93 | 1 year ago |
Leo Tuaillon | be622c2be6 | 1 year ago |
Leo TUAILLON | a0a4f139e4 | 1 year ago |
Clément Verdoire | 28c2d704c8 | 1 year ago |
Clément Verdoire | a2a4f2006e | 1 year ago |
Baptiste D | ec76db2afc | 1 year ago |
Clément Verdoire | f1b6110bd5 | 1 year ago |
Alexis FERON | 7f7af15d51 | 1 year ago |
Alexis FERON | e71d839e33 | 1 year ago |
Baptiste D | 803f898499 | 1 year ago |
Baptiste D | 297c59b5ff | 1 year ago |
Leo Tuaillon | e9afe5fbb0 | 1 year ago |
Leo Tuaillon | d9ea1e83b7 | 1 year ago |
Baptiste D | fe8fcca368 | 1 year ago |
Baptiste D | fd7bdac0ae | 1 year ago |
Baptiste D | 44416aebce | 1 year ago |
Baptiste D | 5bf45c24b4 | 1 year ago |
Baptiste D | 2f2b7b7ed7 | 1 year ago |
Baptiste D | 265d12d88f | 1 year ago |
Baptiste D | e32653bace | 1 year ago |
Baptiste D | 3e12d5be53 | 1 year ago |
Baltazouu | b27f5f5e98 | 1 year ago |
Baltazouu | 4bbdc49669 | 1 year ago |
Baptiste D | 1dace622eb | 1 year ago |
Baptiste D | 04cfe69e03 | 1 year ago |
Baptiste D | 078be2a262 | 1 year ago |
Baptiste D | 51d4223a09 | 1 year ago |
Baptiste D | 4bc8b49b31 | 1 year ago |
Baptiste D | ec5c68db48 | 1 year ago |
Baptiste D | ce81b7af42 | 1 year ago |
Baptiste Dudonné | 1608d3f17d | 1 year ago |
Clément Verdoire | 1b0f96ac9e | 1 year ago |
Clément Verdoire | ceede5dfde | 1 year ago |
Leo Tuaillon | 206e3ef580 | 1 year ago |
Clément VERDOIRE | 39f89f0b4e | 1 year ago |
Clément VERDOIRE | 80ca88b7ea | 1 year ago |
Clément Verdoire | 58b4a8b01c | 1 year ago |
Clément Verdoire | adaed2b23a | 1 year ago |
Clément VERDOIRE | 02f75caa55 | 1 year ago |
Clément VERDOIRE | cf50341780 | 1 year ago |
Clément Verdoire | f555b307f8 | 1 year ago |
Clément VERDOIRE | 32b92c325c | 1 year ago |
Clément Verdoire | 2be9ba66f2 | 1 year ago |
Leo Tuaillon | a9afecf68a | 1 year ago |
Leo Tuaillon | 959b9cf0d0 | 1 year ago |
Leo TUAILLON | f6ef3626c1 | 1 year ago |
Leo Tuaillon | 7772e9da45 | 1 year ago |
Leo Tuaillon | ca79f102cf | 1 year ago |
@ -0,0 +1,441 @@
|
||||
##### Windows
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# 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.*
|
||||
|
||||
##### 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 <path>/<filename>
|
||||
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=<directory_path>
|
||||
csrc/
|
||||
|
||||
# Log file - the following switch allows to specify the file that will be
|
||||
# used to write all messages from simulation: -l <filename>
|
||||
*.log
|
||||
|
||||
# Coverage results (generated with urg) and database location. The
|
||||
# following switch can also be used: urg -dir <coverage_directory>.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~
|
||||
|
||||
# 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
|
||||
|
||||
##### 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/
|
||||
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
|
||||
php/.idea/**/workspace.xml
|
||||
php/.idea/**/tasks.xml
|
||||
php/.idea/**/usage.statistics.xml
|
||||
php/.idea/**/dictionaries
|
||||
php/.idea/**/shelf
|
||||
|
||||
# Generated files
|
||||
php/.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
php/.idea/**/dataSources/
|
||||
php/.idea/**/dataSources.ids
|
||||
php/.idea/**/dataSources.local.xml
|
||||
php/.idea/**/sqlDataSources.xml
|
||||
php/.idea/**/dynamic.xml
|
||||
php/.idea/**/uiDesigner.xml
|
||||
php/.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
php/.idea/**/gradle.xml
|
||||
php/.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
|
||||
php/.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
|
||||
php/.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
|
||||
php/.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
php/.idea/caches/build_file_checksums.ser
|
||||
|
||||
##### Eclipse
|
||||
.metadata
|
||||
bin/
|
||||
tmp/
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.settings/
|
||||
.loadpath
|
||||
.recommenders
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
# Locally stored "Eclipse launch configurations"
|
||||
*.launch
|
||||
|
||||
# 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/
|
||||
|
||||
# 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
|
||||
php/composer.phar
|
||||
php/composer
|
||||
php/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
|
||||
php/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/
|
||||
|
||||
##### Images :
|
||||
###php/public/uploads/
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="SqlDialectMappings">
|
||||
<file url="file://$PROJECT_DIR$/php/src/gateway/AlumniGateway.php" dialect="GenericSQL" />
|
||||
</component>
|
||||
</project>
|
After Width: | Height: | Size: 100 KiB |
@ -0,0 +1,11 @@
|
||||
#RewriteEngine On
|
||||
#
|
||||
#RewriteCond %{REQUEST_FILENAME} !-f
|
||||
#RewriteCond %{REQUEST_FILENAME} !-d
|
||||
#RewriteRule ^(.*)$ index.php/$1 [L]
|
||||
|
||||
|
||||
RewriteEngine on
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule . index.php [L]
|
||||
|
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/php.iml" filepath="$PROJECT_DIR$/.idea/php.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="App\" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="MessDetectorOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCSFixerOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||
<option name="highlightLevel" value="WARNING" />
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpIncludePathManager">
|
||||
<include_path>
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<path value="$PROJECT_DIR$/vendor/composer" />
|
||||
<path value="$PROJECT_DIR$/vendor/twig/twig" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.1">
|
||||
<option name="suggestChangeDefaultLanguageLevel" value="false" />
|
||||
</component>
|
||||
<component name="PhpStanOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PsalmOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -1,12 +1,13 @@
|
||||
{
|
||||
"require": {
|
||||
"twig/twig": "^3.0"
|
||||
"twig/twig": "^3.0",
|
||||
"twig/extensions": "^1.5",
|
||||
"ext-pdo": "*",
|
||||
"ext-fileinfo": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"controleur\\": "controleur/",
|
||||
"config\\": "config/",
|
||||
"modeles\\": "modeles/"
|
||||
"App\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
namespace config;
|
||||
|
||||
class Validation
|
||||
{
|
||||
public static function val_action($action)
|
||||
{
|
||||
if (!isset($action)) {
|
||||
throw new \Exception('pas d\'action');
|
||||
//on pourrait aussi utiliser
|
||||
//$action = $_GET['action'] ?? 'no';
|
||||
// This is equivalent to:
|
||||
//$action = if (isset($_GET['action'])) $action=$_GET['action'] else $action='no';
|
||||
}
|
||||
}
|
||||
|
||||
public static function val_form(string &$nom, string &$age, &$dVueEreur)
|
||||
{
|
||||
if (!isset($nom) || $nom == '') {
|
||||
$dVueEreur[] = 'pas de nom';
|
||||
$nom = '';
|
||||
}
|
||||
|
||||
if (strlen(htmlspecialchars($nom, ENT_QUOTES) === 0)) {
|
||||
$dVueEreur[] = "testative d'injection de code (attaque sécurité)";
|
||||
$nom = '';
|
||||
}
|
||||
|
||||
if (!isset($age) || $age == '' || !filter_var($age, FILTER_VALIDATE_INT)) {
|
||||
$dVueEreur[] = "pas d'age ";
|
||||
$age = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction qui nettoie une chaine de caractères
|
||||
* @param string $str
|
||||
* @return string Chaine valide
|
||||
*/
|
||||
public static function nettoyerString(string $str) : string{
|
||||
$newstr = preg_replace('/\x00|<[^>]*>?/', '', $str);
|
||||
return str_replace(["'", '"'], [''', '"'], $newstr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction qui valide si un entier est positif
|
||||
* @param $int
|
||||
* @return bool
|
||||
*/
|
||||
public static function validerIntPossitif($int){
|
||||
return filter_var($int, FILTER_VALIDATE_INT, array("min_range"=>1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction qui verifie si un email est correct
|
||||
* @param string $str
|
||||
* @return bool
|
||||
*/
|
||||
public function verifierEmail(string $str):bool{
|
||||
return filter_var($str, FILTER_VALIDATE_EMAIL);
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
//gen
|
||||
$rep = __DIR__ . '/../';
|
||||
|
||||
// liste des modules à inclure
|
||||
$dConfig['includes']= array('controleur/Validation.php');
|
||||
|
||||
//BD
|
||||
$base = 'mysql:host=localhost;dbname=sae_test';
|
||||
$login = 'root';
|
||||
$mdp = '';
|
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace controleur;
|
||||
|
||||
use config\Validation;
|
||||
|
||||
class AdminControleur extends ModerateurControleur
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
global $twig;
|
||||
if (!isset($_REQUEST["action"])) {
|
||||
$action = NULL;
|
||||
} else {
|
||||
$action = Validation::nettoyerString($_REQUEST["action"]);
|
||||
}
|
||||
switch ($action) {
|
||||
case "supprimerCompte":
|
||||
$this->supprimerCompte();
|
||||
break;
|
||||
case "consulterSignalement":
|
||||
$this->consulterSignalement();
|
||||
break;
|
||||
case "creerEvenement":
|
||||
$this->creerEvenement();
|
||||
break;
|
||||
case "supprimerEvenement":
|
||||
$this->supprimerEvenement();
|
||||
break;
|
||||
case "supprimerOffre":
|
||||
$this->supprimerOffre();
|
||||
break;
|
||||
default:
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
||||
protected function supprimerCompte()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function consulterSignalement()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function creerEvenement()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function supprimerEvenement()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function supprimerOffre()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace controleur;
|
||||
|
||||
|
||||
|
||||
use config\Validation;
|
||||
|
||||
|
||||
class FrontControleur
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
global $twig;
|
||||
session_start();
|
||||
$dVueErreur = [];
|
||||
$actions = array(
|
||||
"Admin" => [
|
||||
"supprimerCompte", "consulterSignalement", "creerEvenement", "supprimerEvenement","supprimerOffre"
|
||||
],
|
||||
"Moderateur" => [
|
||||
//TODO
|
||||
],
|
||||
"Membre" => [
|
||||
"deconnexion","proposerOffre","consulterProfil","modifierProfil","signaler"
|
||||
],
|
||||
"Utilisateur" => [
|
||||
"connection", "inscription", "accueil","consulterProfilLimite"
|
||||
]
|
||||
);
|
||||
|
||||
include 'modeles/TestGateway.php';
|
||||
|
||||
|
||||
$action = Validation::nettoyerString($_GET["action"] ?? "");
|
||||
if(in_array($action,$actions['Admin'])) {
|
||||
if (!isset($_SESSION["role"]) || $_SESSION["role"]!="admin") {
|
||||
$dVueErreur[] = 'Veuillez vous connecter';
|
||||
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
|
||||
} else{
|
||||
new AdminControleur();
|
||||
}
|
||||
}
|
||||
else if(in_array($action,$actions['Moderateur'])) {
|
||||
if (!isset($_SESSION["role"]) || ($_SESSION["role"]!="moderateur" && $_SESSION["role"]!="admin")) {
|
||||
$dVueErreur[] = 'Veuillez vous connecter';
|
||||
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
|
||||
} else{
|
||||
new ModerateurControleur();
|
||||
}
|
||||
}
|
||||
else if(in_array($action,$actions['Membre'])) {
|
||||
if (!isset($_SESSION["login"])) {
|
||||
$dVueErreur[] = 'Veuillez vous connecter';
|
||||
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
|
||||
} else{
|
||||
new MembreControleur();
|
||||
}
|
||||
}else{
|
||||
new UtilisateurControleur();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace controleur;
|
||||
|
||||
use config\Validation;
|
||||
|
||||
class MembreControleur extends UtilisateurControleur
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
global $twig;
|
||||
if (!isset($_REQUEST["action"])) {
|
||||
$action = NULL;
|
||||
} else {
|
||||
$action = Validation::nettoyerString($_REQUEST["action"]);
|
||||
}
|
||||
switch ($action) {
|
||||
case "deconnexion":
|
||||
$this->deconnexion();
|
||||
break;
|
||||
case "proposerOffre":
|
||||
$this->proposerOffre();
|
||||
break;
|
||||
case "consulterProfil":
|
||||
$this->consulterProfil();
|
||||
break;
|
||||
case "modifierProfil":
|
||||
$this->modifierProfil();
|
||||
break;
|
||||
case "signaler":
|
||||
$this->signaler();
|
||||
break;
|
||||
default:
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
||||
protected function deconnexion()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function proposerOffre()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function consulterProfil()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function modifierProfil()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
protected function signaler()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace controleur;
|
||||
|
||||
use config\Validation;
|
||||
|
||||
class UtilisateurControleur
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
global $twig;
|
||||
if (!isset($_REQUEST["action"])) {
|
||||
$action = NULL;
|
||||
} else {
|
||||
$action = Validation::nettoyerString($_REQUEST["action"]);
|
||||
}
|
||||
switch ($action) {
|
||||
case NULL:
|
||||
case "accueil":
|
||||
$this->accueil();
|
||||
break;
|
||||
case "connection":
|
||||
$this->connection();
|
||||
break;
|
||||
case "inscription":
|
||||
$this->inscription();
|
||||
break;
|
||||
case "consulterProfilLimite":
|
||||
$this->consulterProfilLimite();
|
||||
break;
|
||||
default:
|
||||
$dVueErreur[] ="Action inconnue ou non autorisée";
|
||||
echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected function connection()
|
||||
{
|
||||
global $twig;
|
||||
echo $twig->render('connexion.html', []);
|
||||
}
|
||||
|
||||
protected function inscription()
|
||||
{
|
||||
global $twig;
|
||||
echo $twig->render('inscription.html', []);
|
||||
}
|
||||
|
||||
protected function accueil()
|
||||
{
|
||||
global $twig;
|
||||
echo $twig->render('accueil.html', []);
|
||||
}
|
||||
|
||||
protected function consulterProfilLimite()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
}
|
@ -1,140 +0,0 @@
|
||||
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Share+Tech+Mono&display=swap);
|
||||
*{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
a{
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
body{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
background: #2f363e;
|
||||
}
|
||||
|
||||
.container{
|
||||
position: relative;
|
||||
width: 350px;
|
||||
min-height: 500px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #2f363e;
|
||||
box-shadow: 25px 25px 75px rgba(0,0,0,0.25),
|
||||
10px 10px 70px rgba(0,0,0,0.25),
|
||||
inset 5px 5px 10px rgba(0, 0, 0, 0.5),
|
||||
inset 5px 5px 10px rgba(255, 255, 255, 0.2),
|
||||
inset -5px -5px 15px rgba(0, 0, 0, 0.75);
|
||||
border-radius: 30px;
|
||||
padding: 50px;
|
||||
}
|
||||
form{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
.container h3{
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
font-size: 2em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.container a:link {
|
||||
color: #fff;
|
||||
}
|
||||
.container a:visited {
|
||||
color: #fff;
|
||||
}
|
||||
.container a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.container a:active {
|
||||
color: #fff;
|
||||
}
|
||||
.CadreInput
|
||||
{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.CadreInput span{
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
margin-bottom: 10px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.75em;
|
||||
border-left: 4px solid #fff;
|
||||
padding-left: 4px;
|
||||
line-height: 1em;
|
||||
}
|
||||
.CadreInput .box{
|
||||
display: flex;
|
||||
}
|
||||
.CadreInput .box .icon{
|
||||
position: relative;
|
||||
min-width: 40px;
|
||||
height: 40px;
|
||||
background-color: #a50b12;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
color: #fff;
|
||||
font-size: 1.15em;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.CadreInput .box input{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
border: none;
|
||||
outline: none;
|
||||
padding: 10px 20px;
|
||||
border-radius: 30px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.CadreInput .box input[type="submit"]{
|
||||
background-color: #04070a;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
font-weight: 600;
|
||||
margin-top: 10px;
|
||||
}
|
||||
label{
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
label input{
|
||||
margin-right: 5px;
|
||||
}
|
||||
.forgot{
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
}
|
@ -1,124 +0,0 @@
|
||||
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Share+Tech+Mono&display=swap);
|
||||
*{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
body{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
background: #2f363e;
|
||||
}
|
||||
|
||||
.container{
|
||||
position: relative;
|
||||
width: 350px;
|
||||
min-height: 500px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #2f363e;
|
||||
box-shadow: 25px 25px 75px rgba(0,0,0,0.25),
|
||||
10px 10px 70px rgba(0,0,0,0.25),
|
||||
inset 5px 5px 10px rgba(0, 0, 0, 0.5),
|
||||
inset 5px 5px 10px rgba(255, 255, 255, 0.2),
|
||||
inset -5px -5px 15px rgba(0, 0, 0, 0.75);
|
||||
border-radius: 30px;
|
||||
padding: 50px;
|
||||
}
|
||||
form{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
.container h3{
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
font-size: 2em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.CadreInput
|
||||
{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.CadreInput span{
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
margin-bottom: 10px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.75em;
|
||||
border-left: 4px solid #fff;
|
||||
padding-left: 4px;
|
||||
line-height: 1em;
|
||||
}
|
||||
.CadreInput .box{
|
||||
display: flex;
|
||||
}
|
||||
.CadreInput .box .icon{
|
||||
position: relative;
|
||||
min-width: 40px;
|
||||
height: 40px;
|
||||
background-color: #a50b12;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
color: #fff;
|
||||
font-size: 1.15em;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.CadreInput .box input{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
border: none;
|
||||
outline: none;
|
||||
padding: 10px 20px;
|
||||
border-radius: 30px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.CadreInput .box input[type="submit"]{
|
||||
background-color: #04070a;
|
||||
box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.25),
|
||||
inset 2px 2px 5px rgba(255, 255, 255, 0.25),
|
||||
inset -3px -3px 5px rgba(0, 0, 0, 0.5);
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
font-weight: 600;
|
||||
margin-top: 10px;
|
||||
}
|
||||
label{
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
label input{
|
||||
margin-right: 5px;
|
||||
}
|
||||
.forgot{
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.85em;
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
include 'dal/Gateway/GatewayAbstrait.php';
|
||||
|
||||
include 'metier/Alumni.php';
|
||||
|
||||
|
||||
class AlumniGateway extends GatewayAbstrait{
|
||||
|
||||
public function __construct(Connection $con){
|
||||
parent::__construct($con);
|
||||
}
|
||||
|
||||
public function insertAlumni(string $mail, string $mdp, string $role){
|
||||
try{
|
||||
$query='INSERT INTO Alumni(mail,mdp,role) VALUES (:mail, :mdp, :role)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':mail' => array($mail, PDO::PARAM_STR),
|
||||
':mdp' => array($mdp, PDO::PARAM_STR),
|
||||
':role' => array($role, PDO::PARAM_STR)
|
||||
));
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function supprimeAlumni(string $id){
|
||||
try{
|
||||
$query='DELETE FROM Alumni WHERE id = (:id)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
));
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function modifieMdp(string $id,string $newMdp){
|
||||
try{
|
||||
$query='UPDATE ALumni SET mdp=(:mdp) WHERE id=(:id)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
':mdp' => array($newMdp, PDO::PARAM_STR),
|
||||
));
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function recupereAlumni(string $id){
|
||||
try{
|
||||
$query='SELECT * FROM Alumni WHERE id=(:id)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
));
|
||||
$res = $this->con->getResults();
|
||||
$a=new Alumni($res['id'],$res['mail'],$res['mdp'],$res['role']);
|
||||
return $a;
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function recupereDataAlumni(){
|
||||
try{
|
||||
$query='SELECT * FROM Alumni';
|
||||
$this->con->executeQuery($query);
|
||||
$res = $this->con->getResults();
|
||||
$AlumniArray = array();
|
||||
foreach($res as $v){
|
||||
$a=new Alumni($v['id'],$v['mail'],$v['mdp'],$v['role']);
|
||||
array_push($AlumniArray,$a);
|
||||
}
|
||||
return $AlumniArray;
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,82 +0,0 @@
|
||||
<?php
|
||||
|
||||
class CompteGateway
|
||||
{
|
||||
private Connection $con;
|
||||
|
||||
/**
|
||||
* @param $con
|
||||
*/
|
||||
public function __construct(Connection $con){
|
||||
$this->con = $con;
|
||||
}
|
||||
|
||||
public function insert(string $email, string $pseudo, string $motDePasse){
|
||||
$query='INSERT INTO Compte VALUES (:e, :p, :m)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR),
|
||||
':p' => array($pseudo, PDO::PARAM_STR),
|
||||
':m' => array($motDePasse, PDO::PARAM_STR)
|
||||
));
|
||||
}
|
||||
|
||||
public function updateEmail(string $email, string $newEmail){
|
||||
$query='UPDATE Compte SET email=:new WHERE email=:e';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR),
|
||||
':new' => array($newEmail, PDO::PARAM_STR)
|
||||
));
|
||||
}
|
||||
|
||||
public function updatePseudo(string $email, string $pseudo){
|
||||
$query='UPDATE Compte SET pseudo=:new WHERE email=:e';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR),
|
||||
':new' => array($pseudo, PDO::PARAM_STR)
|
||||
));
|
||||
}
|
||||
|
||||
public function updateMotDePasse(string $email, string $password){
|
||||
$query='UPDATE Compte SET motDePasse=:new WHERE email=:e';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR),
|
||||
':new' => array($password, PDO::PARAM_STR)
|
||||
));
|
||||
}
|
||||
|
||||
public function delete(string $email){
|
||||
$query='DELETE FROM Compte WHERE email=:e';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR)
|
||||
));
|
||||
}
|
||||
|
||||
public function findByPseudo(string $pseudo){
|
||||
$query = 'SELECT * FROM Compte WHERE pseudo=:p';
|
||||
$this->con->executeQuery($query, array(
|
||||
':p' => array($pseudo, PDO::PARAM_STR)
|
||||
));
|
||||
$res=$this->con->getResults();
|
||||
return new Compte($res[0]['email'],$res[0]['pseudo'],$res[0]['motDePasse']);
|
||||
}
|
||||
|
||||
public function findByEmail(string $email){
|
||||
$query='SELECT * FROM Compte WHERE email=:e';
|
||||
$this->con->executeQuery($query, array(
|
||||
':e' => array($email, PDO::PARAM_STR),
|
||||
));
|
||||
$res=$this->con->getResults();
|
||||
return new Compte($res[0]['email'],$res[0]['pseudo'],$res[0]['motDePasse']);
|
||||
}
|
||||
|
||||
public function getAll(){
|
||||
$query='SELECT * FROM Compte';
|
||||
$this->con->executeQuery($query);
|
||||
$res=$this->con->getResults();
|
||||
$array=[];
|
||||
foreach($res as $r){
|
||||
$array[]=new Compte($r['email'],$r['pseudo'],$r['motDePasse']);
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
class EvenementGateway
|
||||
{
|
||||
private Connection $con;
|
||||
|
||||
/**
|
||||
* @param $con
|
||||
*/
|
||||
public function __construct(Connection $con){
|
||||
$this->con = $con;
|
||||
}
|
||||
|
||||
public function insert(){
|
||||
$query='INSERT INTO Evenement VALUES ()';
|
||||
$this->con->executeQuery($query, array());
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
?>
|
@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
abstract class GatewayAbstrait{
|
||||
protected Connection $con;
|
||||
|
||||
public function __construct(Connection $con){
|
||||
$this->con = $con;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
class OffreGateway
|
||||
{
|
||||
private Connection $con;
|
||||
|
||||
/**
|
||||
* @param $con
|
||||
*/
|
||||
public function __construct(Connection $con){
|
||||
$this->con = $con;
|
||||
}
|
||||
|
||||
public function insert(){
|
||||
$query='INSERT INTO Offre VALUES ()';
|
||||
$this->con->executeQuery($query, array());
|
||||
}
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
include 'dal/Gateway/GatewayAbstrait.php';
|
||||
|
||||
class ProfilGateway extends GatewayAbstrait{
|
||||
|
||||
public function __construct(Connection $con){
|
||||
$this->con = $con;
|
||||
}
|
||||
|
||||
public function insererProfil(string $email,string $alumni,string $cv, string $nom,string $prenom,string $linkedin,string $github,string $portfolio){
|
||||
try{
|
||||
$query='INSERT INTO Profil(id,alumni,email,cv,nom,prenom,linkedin_url,github_url,portfolio_url) VALUES (:id,:alumni,:email,:cv,:nom,:prenom,:linkedin_url,github_url,portfolio_url)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
':alumni' => array($alumni, PDO::PARAM_STR),
|
||||
':cv' => array($cv, PDO::PARAM_STR),
|
||||
':nom' => array($nom, PDO::PARAM_STR),
|
||||
':prenom' => array($prenom, PDO::PARAM_STR),
|
||||
':linkedin_url' => array($linkedin, PDO::PARAM_STR),
|
||||
':github_url' => array($github, PDO::PARAM_STR),
|
||||
':portfolio_url' => array($portfolio, PDO::PARAM_STR),
|
||||
':email' => array($email, PDO::PARAM_STR)
|
||||
));
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function supprimeAlumni(string $id){
|
||||
try{
|
||||
$query='DELETE FROM Profil WHERE id = (:id)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
));
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function editAlumni(string $id,string $email,string $alumni,string $cv, string $nom,string $prenom,string $linkedin,string $github,string $portfolio){
|
||||
try{
|
||||
supprimeAlumni($id);
|
||||
insererProfil($email,$alumni,$cv,$nom,$prenom,$linkedin,$github,$portfolio);
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function recupereProfil(string $id){
|
||||
try{
|
||||
$query='SELECT * FROM Profil WHERE id=(:id)';
|
||||
$this->con->executeQuery($query, array(
|
||||
':id' => array($id, PDO::PARAM_STR),
|
||||
));
|
||||
$res = $this->con->getResults();
|
||||
return new Profil($res['id'],$res['alumni'],$res['email'],$res['cv'],$res['nom'],$res['prenom'],$res['linkedin_url'],$res['github_url'],$res['portfolio_url']);
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
public function recupereDataProfil(){
|
||||
try{
|
||||
$query='SELECT * FROM Alumni';
|
||||
$this->con->executeQuery($query);
|
||||
$res = $this->con->getResults();
|
||||
$AlumniArray = array();
|
||||
foreach($res as $v){
|
||||
$a=new Profil($v['id'],$v['alumni'],$v['email'],$v['cv'],$v['nom'],$v['prenom'],$v['linkedin_url'],$v['github_url'],$v['portfolio_url']);
|
||||
array_push($AlumniArray,$a);
|
||||
}
|
||||
return $AlumniArray;
|
||||
} catch(PDOException $Exception){
|
||||
require 'vues/erreur.html';
|
||||
} catch (Exception $Exception){
|
||||
require 'vues/erreur.html';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,16 +1,22 @@
|
||||
<?php
|
||||
/** PC IUT - PHP 8.1 */
|
||||
|
||||
/** Chargement config */
|
||||
require_once __DIR__ . '/config/config.php';
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
use controleur\FrontControleur;
|
||||
|
||||
/** Configuration twig */
|
||||
$loader = new \Twig\Loader\FilesystemLoader('vues');
|
||||
$twig = new \Twig\Environment($loader, [
|
||||
'cache' => false,
|
||||
'debug' => true
|
||||
]);
|
||||
|
||||
$cont = new \controleur\FrontControleur();
|
||||
<?php
|
||||
/** PC IUT - PHP 8.1 */
|
||||
|
||||
/** Chargement config */
|
||||
|
||||
require_once __DIR__ . '/src/config/config.php';
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
|
||||
/** Configuration twig */
|
||||
$loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/templates');
|
||||
$twig = new \Twig\Environment($loader, [
|
||||
'cache' => false,
|
||||
'debug' => true
|
||||
]);
|
||||
$twig->addExtension(new \Twig\Extension\DebugExtension());
|
||||
$twig->addGlobal('dir', '/SAE_2A_FA-Reseau_ALICA/php');
|
||||
|
||||
|
||||
|
||||
|
||||
$cont = new \App\controleur\FrontControleur();
|
||||
|
@ -1,19 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Alumni{
|
||||
|
||||
private string $id;
|
||||
private string $mail;
|
||||
private string $mdp;
|
||||
private string $role;
|
||||
|
||||
public function __construct($id,$mail,$mdp,$role){
|
||||
$this->id=$id;
|
||||
$this->mail=$mail;
|
||||
$this->mdp=$mdp;
|
||||
$this->role=$role;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Compte{
|
||||
|
||||
/**
|
||||
* @var string Pseudo
|
||||
*/
|
||||
private string $pseudo;
|
||||
/**
|
||||
* @var string Email
|
||||
*/
|
||||
private string $email;
|
||||
/**
|
||||
* @var string Mot de passe
|
||||
*/
|
||||
private string $motDePasse;
|
||||
|
||||
/**
|
||||
* @param string $pseudo
|
||||
* @param string $email
|
||||
* @param string $motDePasse
|
||||
*/
|
||||
public function __construct(string $pseudo, string $email, string $motDePasse)
|
||||
{
|
||||
$this->pseudo = $pseudo;
|
||||
$this->email = $email;
|
||||
$this->motDePasse = $motDePasse;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPseudonyme() : string
|
||||
{
|
||||
return $this->pseudo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getEmail() : string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMotDePasse(): string
|
||||
{
|
||||
return $this->motDePasse;
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Evenement
|
||||
{
|
||||
/**
|
||||
* @var string Nom Evènement
|
||||
*/
|
||||
private string $nameEvent;
|
||||
|
||||
/**
|
||||
* @var string date Evenement
|
||||
*/
|
||||
private string $date;
|
||||
|
||||
/**
|
||||
* @var Compte Organisateur
|
||||
*/
|
||||
private Compte $organisator;
|
||||
|
||||
/**
|
||||
* @var array Liste des Participants
|
||||
*/
|
||||
private array $participants;
|
||||
|
||||
/**
|
||||
* @param string $nameEvent
|
||||
* @param string $date
|
||||
* @param Compte $organisator
|
||||
* @param array $participants
|
||||
*/
|
||||
public function __construct(string $nameEvent,string $date,Compte $organisator,
|
||||
array $participants)
|
||||
{
|
||||
$this->nameEvent = $nameEvent;
|
||||
$this->date = $date;
|
||||
$this->organisator = $organisator;
|
||||
$this->participants = $participants;
|
||||
}
|
||||
|
||||
public function getNameEvent() : string
|
||||
{
|
||||
return $this->nameEvent;
|
||||
}
|
||||
|
||||
public function getDateEvent() : string
|
||||
{
|
||||
return $this->date;
|
||||
}
|
||||
|
||||
public function getParticipants() : array
|
||||
{
|
||||
return $this->participants;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Offre
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string intitulé de l'offre
|
||||
*/
|
||||
private string $name;
|
||||
|
||||
/**
|
||||
* @var string Entreprise de l'offre
|
||||
*/
|
||||
private string $company;
|
||||
|
||||
/**
|
||||
* @var Compte recruteur
|
||||
*/
|
||||
private Compte $recruiter;
|
||||
|
||||
/**
|
||||
* @var string description de l'offre
|
||||
*/
|
||||
private string $description;
|
||||
|
||||
public function __construct(string $offername,string $offercompany,
|
||||
string $offermanager,string $description)
|
||||
{
|
||||
$this->name = $offername;
|
||||
$this->company = $offercompany;
|
||||
$this->recruiter = $offermanager;
|
||||
$this->description = $description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCompany(): string
|
||||
{
|
||||
return $this->company;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Compte|string
|
||||
*/
|
||||
public function getRecruiter(): Compte|string
|
||||
{
|
||||
return $this->recruiter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription(): string
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Alumni{
|
||||
|
||||
private string $id;
|
||||
private string $alumni;
|
||||
private string $email;
|
||||
private string $cv;
|
||||
private string $nom;
|
||||
private string $prenom;
|
||||
private string $linkedin;
|
||||
private string $github;
|
||||
private string $portfolio;
|
||||
|
||||
public function __construct($id,$alumni,$email,$cv,$prenom,$linkedin,$github,$portfolio){
|
||||
$this->id=$id;
|
||||
$this->alumni=$alumni;
|
||||
$this->email=$email;
|
||||
$this->cv=$cv;
|
||||
$this->nom=$nom;
|
||||
$this->prenom=$prenom;
|
||||
$this->linkedin=$linkedin;
|
||||
$this->github=$github;
|
||||
$this->portfolio=$portfolio;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace modeles;
|
||||
|
||||
class AdminModele extends MembreModele
|
||||
{
|
||||
/**
|
||||
* @description supprimer un compte
|
||||
* @param \Compte $account compte à supprimer
|
||||
*/
|
||||
public function deleteAccount(\Compte $account)
|
||||
{
|
||||
// TO DO
|
||||
}
|
||||
|
||||
/**
|
||||
* @description obtenir la liste des signalements
|
||||
* @return array des signalements
|
||||
*/
|
||||
public function LoadReports() : array
|
||||
{
|
||||
// TO DO
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @description supprimer une offre spécifique
|
||||
* @param \Offre $offer offre à supprimer
|
||||
*/
|
||||
public function deleteOffer(\Offre $offer)
|
||||
{
|
||||
// TO DO
|
||||
}
|
||||
|
||||
/**
|
||||
* @description créer un évènement
|
||||
* @return \Evenement évènement créé
|
||||
*/
|
||||
public function createEvent() : \Evenement
|
||||
{
|
||||
$event = new \Evenement("","",null);
|
||||
// TO DO
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description suppression d'un évènement
|
||||
* @param \Evenement $event évènement à supprimer
|
||||
*/
|
||||
public function deleteEvent(\Evenement $event)
|
||||
{
|
||||
// TO DO
|
||||
}
|
||||
|
||||
/**
|
||||
* @description obtenir la liste de tous les utilisateurs
|
||||
* @return array liste de tous les utilisateurs
|
||||
*/
|
||||
public function getUserList() : array
|
||||
{
|
||||
// TO DO
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace modeles;
|
||||
|
||||
class MembreModele extends UtilisateurModele
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @description modifier photo de profil
|
||||
*/
|
||||
public function updateProfilPhoto() : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description ajouter formation
|
||||
*/
|
||||
public function addFormation() : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description modifier formation
|
||||
*/
|
||||
public function updateFormation() : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description ajouter Experience
|
||||
*/
|
||||
public function addExperience() : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description modifier experience
|
||||
*/
|
||||
public function updateExpereience() : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description changer mot de passe
|
||||
* @param string $oldHash ancien hash
|
||||
* @param string $newHash nouveau hash
|
||||
*/
|
||||
public function updatePasswd(string $oldHash,string $newHash) : bool
|
||||
{
|
||||
// TO DO
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace modeles;
|
||||
|
||||
class ModerateurControleur
|
||||
{
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*include 'dal/gateway/Random.php';
|
||||
|
||||
$r=new Random(9);*/
|
||||
|
||||
|
||||
include 'dal/Connection.php';
|
||||
|
||||
include 'dal/gateway/AlumniGateway.php';
|
||||
include 'dal/gateway/ProfilGateway.php';
|
||||
|
||||
include 'config/config.php';
|
||||
|
||||
|
||||
$co=new Connection($base,$login,$mdp);
|
||||
$gat = new ProfilGateway($co);
|
||||
//$gat->insertAlumni('faa','fua','fia');
|
||||
//$gat->deleteAlumni(13);
|
||||
|
||||
/*$gat->modifieMdp(10,'Bwaaa');
|
||||
*/
|
||||
//$gat->recupereAlumni(10);
|
||||
//$gat->recupereDataAlumni();
|
||||
|
||||
?>
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
namespace modeles;
|
||||
|
||||
class UtilisateurModele
|
||||
{
|
||||
/**
|
||||
* @description Charger le flux d'activiter
|
||||
* @return array flux
|
||||
*/
|
||||
public function LoadFeed() : array
|
||||
{
|
||||
// TO DO
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @description se connecter
|
||||
* @param string email
|
||||
* @param string hash
|
||||
* @return \Compte
|
||||
*/
|
||||
public function Login(string $email,string $hash) : \Compte
|
||||
{
|
||||
// TO DO
|
||||
return new \Compte(null,null,null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description s'inscrire
|
||||
* @param string email
|
||||
* @param string hash
|
||||
* @param string $pseudo
|
||||
* @return \Compte chargé
|
||||
*/
|
||||
public function signIn(string $email,string $pseudo,string $hash) : \Compte
|
||||
{
|
||||
// TO DO
|
||||
return new Compte(null,null,null);
|
||||
}
|
||||
|
||||
}
|
After Width: | Height: | Size: 842 KiB |
After Width: | Height: | Size: 333 B |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 515 B |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 657 B |
@ -0,0 +1,54 @@
|
||||
/* styles.css */
|
||||
|
||||
/* Reset CSS pour normaliser le rendu sur tous les navigateurs */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.div_titres {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.div_titres a {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.div_titres h1 {
|
||||
width: 50%;
|
||||
color: #00DBFF;
|
||||
}
|
||||
|
||||
.div_titres a img {
|
||||
margin-left: 40px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
color: #00DBFF;
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 15px;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 5px;
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
.three-body {
|
||||
--uib-size: 500px;
|
||||
--uib-speed: 0.8s;
|
||||
--uib-color: #00DBFF;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
height: var(--uib-size);
|
||||
width: var(--uib-size);
|
||||
animation: spin78236 calc(var(--uib-speed) * 2.5) infinite linear;
|
||||
}
|
||||
|
||||
.three-body__dot {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.three-body__dot:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 0;
|
||||
width: 100%;
|
||||
padding-bottom: 100%;
|
||||
background-color: var(--uib-color);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(1) {
|
||||
bottom: 5%;
|
||||
left: 0;
|
||||
transform: rotate(60deg);
|
||||
transform-origin: 50% 85%;
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(1)::after {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
animation: wobble1 var(--uib-speed) infinite ease-in-out;
|
||||
animation-delay: calc(var(--uib-speed) * -0.3);
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(2) {
|
||||
bottom: 5%;
|
||||
right: 0;
|
||||
transform: rotate(-60deg);
|
||||
transform-origin: 50% 85%;
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(2)::after {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
animation: wobble1 var(--uib-speed) infinite
|
||||
calc(var(--uib-speed) * -0.15) ease-in-out;
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(3) {
|
||||
bottom: -5%;
|
||||
left: 0;
|
||||
transform: translateX(116.666%);
|
||||
}
|
||||
|
||||
.three-body__dot:nth-child(3)::after {
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation: wobble2 var(--uib-speed) infinite ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes spin78236 {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes wobble1 {
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0%) scale(1);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-66%) scale(0.65);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes wobble2 {
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0%) scale(1);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(66%) scale(0.65);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
@ -0,0 +1,148 @@
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar-container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 2rem;
|
||||
width: 100%;
|
||||
height: 70px;
|
||||
background: #fff;
|
||||
color: #212121;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.navbar-container .logo-container a {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 500;
|
||||
font-family: 'Kanit', sans-serif;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
color: #212121;
|
||||
max-height: 70px;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 3rem;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .nav-link a {
|
||||
color: #212121;
|
||||
padding: 10px;
|
||||
text-transform: uppercase;
|
||||
transition: 0.2s;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .nav-link:after {
|
||||
content: '';
|
||||
display: block;
|
||||
border-top: 3px solid #00DBFF;
|
||||
transform: scaleX(0);
|
||||
transition: transform 250ms ease-in-out;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .nav-link:hover:after {
|
||||
transform: scaleX(0.8);
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register .button {
|
||||
color: #00DBFF;
|
||||
padding: 5px 20px;
|
||||
text-transform: uppercase;
|
||||
border-radius: 15px;
|
||||
border: #fff 2px solid;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register .button2{
|
||||
background: #00DBFF;
|
||||
color: #fff;
|
||||
border-radius: 15px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register .button:hover {
|
||||
border: #00DBFF 2px solid;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register .button2:hover {
|
||||
border: #00A4FF 2px solid;
|
||||
}
|
||||
|
||||
@media(max-width: 1030px) {
|
||||
.navbar-container {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items {
|
||||
gap: 0.1rem;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .nav-link a,
|
||||
.navbar-container .nav-items .login-register .button {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 915px) {
|
||||
.navbar-container .nav-items {
|
||||
flex-direction: column;
|
||||
position: fixed;
|
||||
top: 70px;
|
||||
right: -100%;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
padding: 1rem 0;
|
||||
z-index: 99;
|
||||
background: #fff;
|
||||
transition: 0.2s ease-in;
|
||||
}
|
||||
|
||||
.bars {
|
||||
width: 22px;
|
||||
height: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bars .bar {
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: #212121;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items {
|
||||
gap: 3rem;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register {
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
flex-direction: column;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.navbar-container .nav-items .login-register .button {
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.navbar-container .nav-items.active {
|
||||
right: 0;
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
|
||||
img
|
||||
{
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
body{
|
||||
margin: 0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
#titleDiv
|
||||
{
|
||||
background-image:url('../assets/deb.webp');
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
background-position: center;
|
||||
color :white;
|
||||
}
|
||||
|
||||
#title p
|
||||
{
|
||||
background-color: grey;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#title
|
||||
{
|
||||
font-size: 20px;
|
||||
padding: 20px;
|
||||
height: 70%;
|
||||
align-items: center;
|
||||
color: white;
|
||||
background-color: #00DBFF;
|
||||
|
||||
}
|
||||
|
||||
#key {
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
color: black;
|
||||
}
|
||||
#key p
|
||||
{
|
||||
background-color: grey;
|
||||
border-radius: 3px;
|
||||
padding:10%;
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
.offre-container {
|
||||
margin-bottom: 5%;
|
||||
}
|
||||
.offre-img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#titrePrincipal {
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid black;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.custom-button {
|
||||
background-color: #7fb4bd;
|
||||
border-color: #7fb4bd;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.row1
|
||||
{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
|
||||
.row1 h4
|
||||
{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.row1 img
|
||||
{
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.authorDate
|
||||
{
|
||||
color: #00DBFF;
|
||||
margin: 1%;
|
||||
}
|
||||
|
||||
.row3 {
|
||||
width: 30%;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.row3 img {
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
a{
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.current{
|
||||
|
||||
border-bottom: 1px solid black;
|
||||
}
|
@ -0,0 +1,122 @@
|
||||
/* profil.css */
|
||||
.profiles-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
gap: 20px;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.profile {
|
||||
width: calc(50% - 20px); /* Ajustez la largeur si nécessaire pour correspondre au design */
|
||||
border: 1px solid #ccc; /* Bordure comme dans l'image */
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
margin-bottom: 20px;
|
||||
display: flex;
|
||||
align-items: center; /* Alignement vertical */
|
||||
}
|
||||
|
||||
.profile-image-container {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f0f0f0;
|
||||
flex-shrink: 0; /* Empêche le conteneur de rétrécir */
|
||||
}
|
||||
|
||||
.profile-image-container img {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.profile-details {
|
||||
padding: 10px;
|
||||
flex-grow: 1; /* Permet à ce div de prendre l'espace restant */
|
||||
}
|
||||
|
||||
.profile-details p {
|
||||
margin: 5px 0;
|
||||
font-weight: bold; /* Texte en gras comme dans l'image */
|
||||
}
|
||||
|
||||
.profile-details .job-title {
|
||||
color: #007bff;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.profile-details a {
|
||||
display: block; /* Prend toute la largeur du conteneur */
|
||||
background: #007bff;
|
||||
color: #fff;
|
||||
padding: 5px 15px;
|
||||
text-decoration: none;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
margin-top: 10px; /* Espace au-dessus du lien */
|
||||
text-align: center; /* Centre le texte dans le lien */
|
||||
}
|
||||
|
||||
.profile-details a:hover {
|
||||
background: #0056b3;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* profil.css */
|
||||
.pagination {
|
||||
display: flex;
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.page-link {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 0.5rem 0.75rem;
|
||||
margin-left: -1px;
|
||||
line-height: 1.25;
|
||||
color: #007bff;
|
||||
background-color: #fff;
|
||||
border: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.page-link:hover {
|
||||
color: #0056b3;
|
||||
text-decoration: none;
|
||||
background-color: #e9ecef;
|
||||
border-color: #dee2e6;
|
||||
}
|
||||
|
||||
.page-item:first-child .page-link {
|
||||
margin-left: 0;
|
||||
border-top-left-radius: 0.25rem;
|
||||
border-bottom-left-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.page-item:last-child .page-link {
|
||||
border-top-right-radius: 0.25rem;
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.page-item.active .page-link {
|
||||
z-index: 1;
|
||||
color: #fff;
|
||||
background-color: #007bff;
|
||||
border-color: #007bff;
|
||||
}
|
||||
|
||||
.page-item.disabled .page-link {
|
||||
color: #6c757d;
|
||||
pointer-events: none;
|
||||
cursor: auto;
|
||||
background-color: #fff;
|
||||
border-color: #dee2e6;
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 2.5 MiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 467 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 2.5 MiB |
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 2.5 MiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 34 KiB |