Compare commits

..

98 Commits
vues ... master

Author SHA1 Message Date
Thomas MUZARD c60f579a25 Transférer les fichiers vers '' 1 year ago
Clément Verdoire 776993ce23 gestion images 1 year ago
Baptiste D 4c3e3571a9 push avant évaluation 1 year ago
Baptiste D 1d3486d9ba Merge branch 'master' of codefirst.iut.uca.fr:leo.tuaillon/SAE_2A_FA-Reseau_ALICA 1 year ago
Baptiste D 02048befd8 correction bug filtres offres 1 year ago
thomas muzard 13eb6be744 bouton profil connecté 1 year ago
Baptiste D e6f5518ebc merge from server 1 year ago
Baptiste D 03371c34ad offres 100% fonctionnelles 1 year ago
Clément Verdoire 941296e44c Merge branch 'master' of codefirst.iut.uca.fr:leo.tuaillon/SAE_2A_FA-Reseau_ALICA 1 year ago
Clément Verdoire 60dff089bb modif verif event 1 year ago
Baptiste D ef2ff36190 Merge branch 'master' of codefirst.iut.uca.fr:leo.tuaillon/SAE_2A_FA-Reseau_ALICA 1 year ago
Baptiste D 132d41e1db 100 eme push 1 year ago
Clément Verdoire 9176e6cb03 ajout modification image 1 year ago
Clément Verdoire 14479cf2a3 Merge branch 'master' of codefirst.iut.uca.fr:leo.tuaillon/SAE_2A_FA-Reseau_ALICA 1 year ago
Clément Verdoire 39bae853c9 last changes 1 year ago
Baptiste D 9271f53d47 resolution pb offres 1 year ago
Clément Verdoire 4031f71acb changes Controler 1 year ago
Baptiste D 406cde7784 résolution bug création offre 1 year ago
Baptiste D cebb1aac3a Merge branch 'master' of codefirst.iut.uca.fr:leo.tuaillon/SAE_2A_FA-Reseau_ALICA 1 year ago
Baptiste D 6aa6dabb26 commit 1 year ago
Leo TUAILLON 3d0267bb61 profils ban set 1 year ago
Leo TUAILLON 849663f143 premice deleteUser 1 year ago
Clément Verdoire 1e4aaf41b8 m 1 year ago
Leo TUAILLON a2f805cba2 Modo controleur (my bad) 1 year ago
Leo TUAILLON ce5fb022b9 remplacement du header de redirection par un twig->render 1 year ago
Leo TUAILLON b5d91b5ac3 fix session variables 1 year ago
Baptiste D a32a224099 résolution issue connection 1 year ago
Baptiste D 090bb42cbd resolution bug 1 year ago
Clément Verdoire 7f85096c7b resol bug 1 year ago
Baptiste D 43729cfd59 resolution bug deco 1 year ago
Leo TUAILLON ed00c99894 Merge pull request 'AffichageProfil' () from AffichageProfil into master 1 year ago
Leo TUAILLON bc1f77c054 affichage des profils + réglage du problème de connection 1 year ago
Leo TUAILLON 4ee484b938 affichage profil et pagination fonctionnelle 1 year ago
Leo TUAILLON f2cea0d18d trohjrtiuuitri 1 year ago
Leo Tuaillon a1a1ae6ecb ihefuih 1 year ago
Leo Tuaillon e208694186 modifications des chemins css 1 year ago
Baptiste DUDONNE 1ab3ffebf1 Merge pull request 'Routeur' () from Routeur into master 1 year ago
Baptiste D 6d5cc2e436 resolving conflicts 1 year ago
Baptiste D 5bd82f523a fix conflicts 1 year ago
Leo Tuaillon 8a26f49de3 ajout de la page affiche des profils (10 par 10) et système de pagination entre les pages fonctionnelle 1 year ago
Alexis Feron b6e103465a Corrections et retablissement vues 1 year ago
Baltazouu e2b6319438 resolution bugs & eventsd fonctionnels 1 year ago
Baltazouu 9a151f87de resolution derniers bugs 1 year ago
Baltazouu 44414d4a95 reparation msg aucune offre trv 1 year ago
Baltazouu f001193e66 altorouter working 1 year ago
Baltazouu 06799359ba resolve conflicts 1 year ago
Baltazouu 7d5ece1532 debut altorouter 1 year ago
Baltazouu b7a820f49d avancees altorouteur 1 year ago
Leo Tuaillon a92e9d4f1d ajout de id dans les alumni 1 year ago
Baptiste D 8e3e130f93 début alto routeur 1 year ago
Leo Tuaillon be622c2be6 modif bugs de réglages des conflits 1 year ago
Leo TUAILLON a0a4f139e4 Merge pull request 'evenements' () from evenements into master 1 year ago
Clément Verdoire 28c2d704c8 last changes 1 year ago
Clément Verdoire a2a4f2006e Ajout bootstrap + corrections propreté du code 1 year ago
Baptiste D ec76db2afc images dans dossier fonctionnelles 1 year ago
Clément Verdoire f1b6110bd5 gestion images en cours de dev 1 year ago
Alexis FERON 7f7af15d51 corrections 1 year ago
Alexis FERON e71d839e33 unification variables de la base 1 year ago
Baptiste D 803f898499 commit 1 year ago
Baptiste D 297c59b5ff résolution des problemes 1 year ago
Leo Tuaillon e9afe5fbb0 Merge branch 'inscription-connection' 1 year ago
Leo Tuaillon d9ea1e83b7 password hash 1 year ago
Baptiste D fe8fcca368 vues pour rendu php terminées/dernier commit avant fusion 1 year ago
Baptiste D fd7bdac0ae filtres offres fonctionnel aved sauvegarde des choix 1 year ago
Baptiste D 44416aebce filtres recherches fonctionnels, reste à revoir la persistance du formulaire 1 year ago
Baptiste D 5bf45c24b4 fix bug création offre education 1 year ago
Baptiste D 2f2b7b7ed7 savegarde et récuperation d'images fonctionnelle plus page offre fonctionnelle 1 year ago
Baptiste D 265d12d88f création offre fonctionnelle avec gestion erreur 1 year ago
Baptiste D e32653bace correction bug vue offres & ajout lien vers détail fonctionnel 1 year ago
Baptiste D 3e12d5be53 creer offre fonctionnel avec gestion image (manque verif mail, site web & numero 1 year ago
Baltazouu b27f5f5e98 test action displayOffer 1 year ago
Baltazouu 4bbdc49669 creation offre et vue offreDetail fonctionnel (vue a revoir) 1 year ago
Baptiste D 1dace622eb push 1 year ago
Baptiste D 04cfe69e03 🎉 🚀 1 year ago
Baptiste D 078be2a262 offres fonctionnelle et gestion d'images avec twig également fonctionnel 1 year ago
Baptiste D 51d4223a09 modification classe offre et gateway 1 year ago
Baptiste D 4bc8b49b31 insertion offre fonctionnelle 1 year ago
Baptiste D ec5c68db48 ajout vue offres 1 year ago
Baptiste D ce81b7af42 insérer & récuperer images fonctionnel 1 year ago
Baptiste Dudonné 1608d3f17d insertion image fonctionnelle 1 year ago
Clément Verdoire 1b0f96ac9e action rechercherEvenement fonctionnelle 1 year ago
Clément Verdoire ceede5dfde ajout css pour page listerEvenement 1 year ago
Leo Tuaillon 206e3ef580 Inscription Connexion et deconnexion fonctionnelles avec création du profil associé lors de l'inscription 1 year ago
Clément VERDOIRE 39f89f0b4e action avoirDetailEvenement fonctionnel 1 year ago
Clément VERDOIRE 80ca88b7ea Action supprimerEvenement fonctionnel 1 year ago
Clément Verdoire 58b4a8b01c modif de derniere minute 1 year ago
Clément Verdoire adaed2b23a creerEvenement fonctionnel 1 year ago
Clément VERDOIRE 02f75caa55 modification evenement listerEvenement 1 year ago
Clément VERDOIRE cf50341780 creerEvenement fonctionnel (réaliser sans l'organisateur en tant que alumni, car manque connexion/inscription) 1 year ago
Clément Verdoire f555b307f8 travaux sur ajouterEvenement, non fonctionnel 1 year ago
Clément VERDOIRE 32b92c325c debut "creerEvenement", mais problème récuperation image 1 year ago
Clément Verdoire 2be9ba66f2 Action listerEvenement fonctionnelle, manque gestion d'erreur/et qlqs autres trucs surement 1 year ago
Leo Tuaillon a9afecf68a connection + deconnection fonctionnelles 1 year ago
Leo Tuaillon 959b9cf0d0 connection 1 year ago
Leo TUAILLON f6ef3626c1 Merge pull request 'inscription fonctionnel (pages d'erreurs et success à ajouter) + nouvelle architecture' () from inscription-connection into master 1 year ago
Leo Tuaillon 7772e9da45 new archi + inscription fonctionnel (sans les gestions d'erreur) 1 year ago
Leo Tuaillon ca79f102cf premice inscription + refonte autoload et ajout de la librairie PDO 1 year ago
thomas muzard 68bdbc2afe init 1 year ago

BIN
.DS_Store vendored

Binary file not shown.

441
.gitignore vendored

@ -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/

@ -2,9 +2,7 @@
<module type="WEB_MODULE" version="4"> <module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/php/config" isTestSource="false" packagePrefix="config\" /> <sourceFolder url="file://$MODULE_DIR$/php/src" isTestSource="false" packagePrefix="App\" />
<sourceFolder url="file://$MODULE_DIR$/php/controleur" isTestSource="false" packagePrefix="controleur\" />
<sourceFolder url="file://$MODULE_DIR$/php/modeles" isTestSource="false" packagePrefix="modeles\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" /> <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" /> <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" /> <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

@ -0,0 +1,372 @@
-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Hôte : localhost:8889
-- Généré le : lun. 20 nov. 2023 à 20:05
-- Version du serveur : 5.7.39
-- Version de PHP : 8.2.0
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `dbAlica`
--
-- --------------------------------------------------------
--
-- Structure de la table `Alumni`
--
CREATE TABLE `Alumni` (
`id` int(11) NOT NULL,
`mail` varchar(128) NOT NULL,
`mdp` varchar(256) NOT NULL,
`role` varchar(16) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Déchargement des données de la table `Alumni`
--
INSERT INTO `Alumni` (`id`, `mail`, `mdp`, `role`) VALUES
(1, 'test', 'test', 'admin'),
(4, 'Admin@alica.com', '$2y$10$f2z.qWTtGhp.nZo0zBlw8Og9GpcQYcBOTIfqAj3UP2MEiN5uXS1Ue', 'Admin'),
(5, 'john@doe', '$2y$10$oOMH01Zxkz4yQPVs44fkHODMc78m8eeIOaSMF84K1w4ikPyUAiwwy', 'Membre'),
(6, 'jack@doe', '$2y$10$sFeUX9.evOansuqwj4nFuOLy9n3j6tkAFHmsL1kTDuUxhgF6WZRZy', 'Membre'),
(7, 'test@gmail.com', '$2y$10$41F6OQz9V1cr2D1rYX9np.5fTKe68dYrJlLpZf7t5G9c8g2mgOF9K', 'Membre'),
(8, 'admin@test', '$2y$10$mHKhDhpN7.Z1UyvE3..ZIuGPbjtmUa9QDhmuQyU1h68d/2z25DUDK', 'Admin'),
(9, 'membre@test', '$2y$10$hVS.BcHq.b/oneN0KiJI3u6CXGeb2UXRw5mJtvZByJG1./mIG4QbK', 'Membre'),
(10, 'test@e', '$2y$10$K3LBNsukXWvBqsbEid5Px.PnNQmomNa0tlnNvFlxDxRYdSbfOWdcK', 'Membre'),
(11, 'emma.dupont@email.com', '$2y$10$eg7ARpvdTqnpJ1tMi.AhcufFZtBQxkhnE8GF1/z4RRrTg3C1wpCsC', 'Membre'),
(12, 'lucas.martin@email.com', '$2y$10$yk7/MCHif6niCjqWrFxA2u1C69ThVb9tpduyTZtcDjnW.V.gM51Iu', 'Membre'),
(13, 'chloe.bernard@mail', '$2y$10$p0BjmKiuFbd3zBzBo6sWJ.tZi./2J7c3MZ9unCn/OkW6LBBvnC.FC', 'Membre'),
(14, 'ines.leroy@email.com', '$2y$10$QDoHq2B7m6WseAPe6kH6MuoaCREBWqChO95NxUVMrZDH1aShHD7zW', 'Membre'),
(15, 'te@te', '$2y$10$.kM.SFMvZnDEGuE8rxclc.UaJbKYesqzNNkE5VdE7NAPEwWOTS4u6', 'Membre'),
(16, 'lea.simon@email.com', '$2y$10$AckHtFDM3C.O.ACQlqh5FuVqSr3bB2.IjcPmdrrM/fYRYU6lU6OdW', 'Membre'),
(17, 'gabriel.michel@email.com', '$2y$10$bNoO9pNylyCL2hznrZ7OyO7aWVJUrZieda2uwnYo/Ly8TB7Nl7fLS', 'Membre'),
(18, 'Sarah@email', '$2y$10$50o/3cFzapPB90apopD5b.tWrRxCG0sYOni6TinI41cwHCzYFiUFO', 'Membre'),
(19, 'raphael.garcia@email.fr', '$2y$10$m2dHfABuizTRBGymKfO60eyzo13BPTSSH/EdEhXcDkauzuRuk7HR.', 'Membre'),
(20, 'Alice@a', '$2y$10$atRfojz7W0mQzv9l0IgRhOF5WWn7FjTRZtSbZkzQveYdInMsy5RrS', 'Membre'),
(21, 'maxime.pichon@email.com', '$2y$10$sA3N6D01ATFdCKqJ6fflNe484KMKejFIfaTYHGOH9AoPHOnRmSvi2', 'Membre'),
(22, 'zoe.Gauthier@gmail.com', '$2y$10$bVaPrdlcYOHcclq0OjZUTOwoLkmMXLw9Ww6OTSDnhFAujDL4nqBqG', 'Membre');
-- --------------------------------------------------------
--
-- Structure de la table `Article`
--
CREATE TABLE `Article` (
`id` int(11) NOT NULL,
`auteur` int(11) NOT NULL,
`Titre` varchar(64) NOT NULL,
`sousTitre` varchar(64) NOT NULL,
`description` varchar(1024) NOT NULL,
`image` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Evenement`
--
CREATE TABLE `Evenement` (
`id` int(11) NOT NULL,
`organisateur` int(11) NOT NULL,
`titre` varchar(64) NOT NULL,
`description` varchar(512) NOT NULL,
`image` varchar(256) NOT NULL,
`date` date NOT NULL,
`nbPlaceMax` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Déchargement des données de la table `Evenement`
--
INSERT INTO `Evenement` (`id`, `organisateur`, `titre`, `description`, `image`, `date`, `nbPlaceMax`) VALUES
(1, 1, 'Laser Game', 'Evement laser game avec tous les membres du réseau ALICA, vous êtes la bienvenue..', '18044Laser Game PBOB9302.jpg', '2023-11-18', 20),
(2, 1, 'Rencontre Annuelle des Anciens d\'Alica', 'Un rassemblement annuel pour tous les anciens étudiants, avec des discours inspirants, des ateliers de réseautage et un dîner de gala\r\nLieu : Centre de conférence de l\'IUT dAubière', '16494Bandeau CreerAsso.jpg', '2023-11-24', 30);
-- --------------------------------------------------------
--
-- Structure de la table `Experience`
--
CREATE TABLE `Experience` (
`id` int(11) NOT NULL,
`profil` int(11) NOT NULL,
`intitule` varchar(256) NOT NULL,
`dateDebut` date NOT NULL,
`dateFin` date NOT NULL,
`nomEntreprise` varchar(64) NOT NULL,
`currentJob` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Formation`
--
CREATE TABLE `Formation` (
`id` int(11) NOT NULL,
`profil` int(11) NOT NULL,
`nom` varchar(64) NOT NULL,
`ville` varchar(32) NOT NULL,
`dateDeb` date NOT NULL,
`dateFin` date NOT NULL,
`currentFormation` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Image`
--
CREATE TABLE `Image` (
`id` int(5) NOT NULL,
`nom` varchar(50) NOT NULL,
`taille` varchar(25) NOT NULL,
`type` varchar(25) NOT NULL,
`blob` longblob NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Offre`
--
CREATE TABLE `Offre` (
`id` int(11) NOT NULL,
`offreur` int(11) NOT NULL,
`titre` varchar(128) NOT NULL,
`description` varchar(1024) NOT NULL,
`image` varchar(100) NOT NULL,
`logo` varchar(100) NOT NULL,
`typeContrat` varchar(16) NOT NULL,
`ville` varchar(64) NOT NULL,
`entreprise` varchar(64) NOT NULL,
`descriptifPoste` varchar(2028) NOT NULL,
`profil` varchar(2028) NOT NULL,
`experience` varchar(512) NOT NULL,
`niveauEtudes` varchar(16) NOT NULL,
`mailContact` varchar(128) NOT NULL,
`numero` varchar(12) NOT NULL,
`websiteURL` varchar(256) NOT NULL,
`remote` tinyint(1) NOT NULL,
`date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Participer`
--
CREATE TABLE `Participer` (
`alumni` int(11) NOT NULL,
`evenement` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `Profil`
--
CREATE TABLE `Profil` (
`id` int(11) NOT NULL,
`alumni` int(11) NOT NULL,
`email` varchar(128) NOT NULL,
`cv` varchar(256) DEFAULT NULL,
`nom` varchar(64) NOT NULL,
`prenom` varchar(32) NOT NULL,
`linkedinURL` varchar(256) DEFAULT NULL,
`githubURL` varchar(256) DEFAULT NULL,
`portfolioURL` varchar(256) DEFAULT NULL,
`image` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Déchargement des données de la table `Profil`
--
INSERT INTO `Profil` (`id`, `alumni`, `email`, `cv`, `nom`, `prenom`, `linkedinURL`, `githubURL`, `portfolioURL`, `image`) VALUES
(4, 4, 'Admin@alica.com', NULL, 'TUAILLON', 'Leo', NULL, NULL, NULL, '19879.png'),
(5, 5, 'john@doe', NULL, 'Doe', 'John', NULL, NULL, NULL, '2.jpg'),
(6, 6, 'jack@doe', NULL, 'Doe', 'Jack', NULL, NULL, NULL, NULL),
(7, 7, 'test@gmail.com', NULL, 'test', 'test', NULL, NULL, NULL, NULL),
(8, 8, 'admin@test', NULL, 'Admin', 'CompteTest', NULL, NULL, NULL, '1.png'),
(9, 9, 'membre@test', NULL, 'Membre', 'compteTest', NULL, NULL, NULL, '3.jpg'),
(10, 10, 'test@e', NULL, 'nom', 'prénom', NULL, NULL, NULL, NULL),
(11, 11, 'emma.dupont@email.com', NULL, 'Dupont', 'Emma', NULL, NULL, NULL, NULL),
(12, 12, 'lucas.martin@email.com', NULL, 'Martin', 'Lucas', NULL, NULL, NULL, NULL),
(13, 13, 'chloe.bernard@mail', NULL, 'Bernard', 'Chloé', NULL, NULL, NULL, '1.png'),
(14, 14, 'ines.leroy@email.com', NULL, 'Leroy', 'Ines', NULL, NULL, NULL, NULL),
(15, 15, 'te@te', NULL, 'Moreau', 'Alexandre', NULL, NULL, NULL, NULL),
(16, 16, 'lea.simon@email.com', NULL, 'Simon', 'Léa', NULL, NULL, NULL, '3.jpg'),
(17, 17, 'gabriel.michel@email.com', NULL, 'Michel', 'Gabriel', NULL, NULL, NULL, NULL),
(18, 18, 'Sarah@email', NULL, 'Lefevre', 'Sarah', NULL, NULL, NULL, NULL),
(19, 19, 'raphael.garcia@email.fr', NULL, 'Garcia', 'Raphaël', NULL, NULL, NULL, NULL),
(20, 20, 'Alice@a', NULL, 'Alice', 'Alice', NULL, NULL, NULL, '2.jpg'),
(21, 21, 'maxime.pichon@email.com', NULL, 'Pichon', 'Maxime', NULL, NULL, NULL, NULL),
(22, 22, 'zoe.Gauthier@gmail.com', NULL, 'Gauthier', 'zoé', NULL, NULL, NULL, '3.jpg');
--
-- Index pour les tables déchargées
--
--
-- Index pour la table `Alumni`
--
ALTER TABLE `Alumni`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `mail` (`mail`);
--
-- Index pour la table `Article`
--
ALTER TABLE `Article`
ADD PRIMARY KEY (`id`),
ADD KEY `image` (`image`),
ADD KEY `auteur` (`auteur`);
--
-- Index pour la table `Evenement`
--
ALTER TABLE `Evenement`
ADD PRIMARY KEY (`id`),
ADD KEY `organisateur` (`organisateur`);
--
-- Index pour la table `Experience`
--
ALTER TABLE `Experience`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `Formation`
--
ALTER TABLE `Formation`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `Image`
--
ALTER TABLE `Image`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `Offre`
--
ALTER TABLE `Offre`
ADD PRIMARY KEY (`id`),
ADD KEY `offreur` (`offreur`);
--
-- Index pour la table `Profil`
--
ALTER TABLE `Profil`
ADD PRIMARY KEY (`id`),
ADD KEY `alumni` (`alumni`);
--
-- AUTO_INCREMENT pour les tables déchargées
--
--
-- AUTO_INCREMENT pour la table `Alumni`
--
ALTER TABLE `Alumni`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=30;
--
-- AUTO_INCREMENT pour la table `Article`
--
ALTER TABLE `Article`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `Evenement`
--
ALTER TABLE `Evenement`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT pour la table `Experience`
--
ALTER TABLE `Experience`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `Formation`
--
ALTER TABLE `Formation`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `Image`
--
ALTER TABLE `Image`
MODIFY `id` int(5) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `Offre`
--
ALTER TABLE `Offre`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT pour la table `Profil`
--
ALTER TABLE `Profil`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=28;
--
-- Contraintes pour les tables déchargées
--
--
-- Contraintes pour la table `Article`
--
ALTER TABLE `Article`
ADD CONSTRAINT `article_ibfk_1` FOREIGN KEY (`image`) REFERENCES `Image` (`id`),
ADD CONSTRAINT `article_ibfk_2` FOREIGN KEY (`auteur`) REFERENCES `Alumni` (`id`);
--
-- Contraintes pour la table `Evenement`
--
ALTER TABLE `Evenement`
ADD CONSTRAINT `evenement_ibfk_1` FOREIGN KEY (`organisateur`) REFERENCES `Alumni` (`id`);
--
-- Contraintes pour la table `Offre`
--
ALTER TABLE `Offre`
ADD CONSTRAINT `offre_ibfk_1` FOREIGN KEY (`offreur`) REFERENCES `Alumni` (`id`);
--
-- Contraintes pour la table `Profil`
--
ALTER TABLE `Profil`
ADD CONSTRAINT `fk_profil_alumni` FOREIGN KEY (`alumni`) REFERENCES `Alumni` (`id`);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

BIN
php/.DS_Store vendored

Binary file not shown.

@ -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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

@ -1,12 +1,13 @@
{ {
"require": { "require": {
"twig/twig": "^3.0" "twig/twig": "^3.0",
"twig/extensions": "^1.5",
"ext-pdo": "*",
"ext-fileinfo": "*"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"controleur\\": "controleur/", "App\\": "src/"
"config\\": "config/",
"modeles\\": "modeles/"
} }
} }
} }

6
php/composer.lock generated

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "6a6772df2521c6860a448e9115f2793a", "content-hash": "e4bbfb6f07dd88c6288177f48b9cb54c",
"packages": [ "packages": [
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@ -249,7 +249,9 @@
"stability-flags": [], "stability-flags": [],
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": [], "platform": {
"ext-pdo": "*"
},
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"
} }

@ -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(["'", '"'], ['&#39;', '&#34;'], $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 = '';
$login = '';
$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,56 +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"
]
);
$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,82 +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;
/* Temporaire (le temps d'avoir en base) */
$eventsList = [
[
'imagePath' => 'assets/event1.png',
'nom' => 'Événement 1',
'description' => 'Description de l\'événement 1',
'date' => '01/01/2023'
],
[
'imagePath' => 'assets/event2.png',
'nom' => 'Événement 2',
'description' => 'Description de l\'événement 2',
'date' => '02/01/2023'
],
[
'imagePath' => 'assets/event3.png',
'nom' => 'Événement 3',
'description' => 'Description de l\'événement 3',
'date' => '03/01/2023'
]
];
echo $twig->render('accueil.html', ["eventsList"=>$eventsList]);
}
protected function consulterProfilLimite()
{
//TODO
}
}

@ -1,122 +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);
*{
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
margin: 0;
}
.main {
color: #212121;
font-size: 1rem;
}
.title-banner{
text-align: center;
}
.banner-img{
width: 100%;
height: 250px;
object-fit: cover;
}
.banner {
position: relative;
}
.title-banner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
padding: 10px;
border-radius: 5px;
}
.title-banner .title{
font-size: 35px;
color: #00DBFF;
font-weight: bold;
}
.title-banner .subtitle{
font-size: 20px;
color: #fff;
}
.title-banner .description{
font-size: 15px;
color: #fff;
}
.slideshow-container {
position: relative;
max-width: 70%;
margin: 0 auto;
padding: 30px;
}
.slide {
width: 100%;
height: 350px;
border-radius: 20px;
border: #212121 1px solid;
}
.slide-content {
display: flex;
width: 100%;
}
.slide-img,
.slide-info {
width: 50%;
overflow: hidden;
}
.slide-info{
padding: 15px;
}
.slide-title{
font-size: 20px;
font-weight: bold;
}
.slide-info .button{
color: #00DBFF;
font-size: 14px;
padding: 5px;
text-transform: uppercase;
border-radius: 15px;
border: #00DBFF 2px solid;
display: inline-block;
margin-top: 10px;
}
.slide-img img{
height: 350px;
border-radius: 20px;
}
.prevButton, .nextButton {
position: absolute;
top: 50%;
transform: translateY(-50%);
font-size: 24px;
background-color: black;
color: white;
padding: 8px 16px;
border: none;
cursor: pointer;
}
.prevButton {
left: 0;
}
.nextButton {
right: 0;
}

@ -1,83 +0,0 @@
<?php
class AlumniGateway
{
private Connection $con;
/**
* @param $con
*/
public function __construct(Connection $con){
$this->con = $con;
}
public function insert(string $email, int $id, string $motDePasse, Role $role){
$query='INSERT INTO Alumni VALUES (:i, :e, :m, :r)';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT),
':e' => array($email, PDO::PARAM_STR),
':m' => array($motDePasse, PDO::PARAM_STR),
':r' => array($role, PDO::PARAM_STR)
));
}
public function updateEmail(int $id, string $newEmail){
$query='UPDATE Alumni SET email=:new WHERE id=:i';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT),
':new' => array($newEmail, PDO::PARAM_STR)
));
}
public function updateMotDePasse(int $id, string $password){
$query='UPDATE Alumni SET motDePasse=:new WHERE id=:i';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT),
':new' => array($password, PDO::PARAM_STR)
));
}
public function updateRole(int $id, Role $newRole){
$query='UPDATE Alumni SET role=:new WHERE id=:i';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT),
':new' => array($newRole, PDO::PARAM_STR)
));
}
public function delete(int $id){
$query='DELETE FROM Alumni WHERE id=:i';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT)
));
}
public function findById(int $id){
$query = 'SELECT * FROM Alumni WHERE id=:i';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT)
));
$res=$this->con->getResults();
return new Alumni($res[0]['mail'],$res[0]['id'],$res[0]['mdp'],$res[0]['role']);
}
public function findByEmail(string $email){
$query='SELECT * FROM Alumni WHERE email=:e';
$this->con->executeQuery($query, array(
':e' => array($email, PDO::PARAM_STR),
));
$res=$this->con->getResults();
return new Alumni($res[0]['mail'],$res[0]['id'],$res[0]['mdp'],$res[0]['role']);
}
public function getAll(){
$query='SELECT * FROM Alumni';
$this->con->executeQuery($query);
$res=$this->con->getResults();
$array=[];
foreach($res as $r){
$array[]=new Alumni($r['mail'],$r['id'],$r['mdp'],$r['role']);
}
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,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,16 +1,22 @@
<?php <?php
/** PC IUT - PHP 8.1 */ /** PC IUT - PHP 8.1 */
/** Chargement config */ /** Chargement config */
require_once __DIR__ . '/config/config.php';
require __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/src/config/config.php';
use controleur\FrontControleur; require __DIR__ . '/vendor/autoload.php';
/** Configuration twig */
$loader = new \Twig\Loader\FilesystemLoader('vues'); /** Configuration twig */
$twig = new \Twig\Environment($loader, [ $loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/templates');
'cache' => false, $twig = new \Twig\Environment($loader, [
'debug' => true 'cache' => false,
]); 'debug' => true
]);
$cont = new \controleur\FrontControleur(); $twig->addExtension(new \Twig\Extension\DebugExtension());
$twig->addGlobal('dir', '/SAE_2A_FA-Reseau_ALICA/php');
$cont = new \App\controleur\FrontControleur();

@ -1,74 +0,0 @@
<?php
enum Role
{
case Admin;
case Moderateur;
case Utilisateur;
}
class Alumni{
/**
* @var int Identifiant
*/
private int $id;
/**
* @var string Email
*/
private string $email;
/**
* @var string Mot de passe
*/
private string $motDePasse;
/**
* @var Role Role
*/
private Role $role;
/**
* @param int $id
* @param string $email
* @param string $motDePasse
* @param Role $role
*/
public function __construct(int $id, string $email, string $motDePasse, Role $role)
{
$this->id = $id;
$this->email = $email;
$this->motDePasse = $motDePasse;
$this->role = $role;
}
/**
* @return string
*/
public function getId() : string
{
return $this->id;
}
/**
* @return string
*/
public function getEmail() : string
{
return $this->email;
}
/**
* @return string
*/
public function getMotDePasse(): string
{
return $this->motDePasse;
}
public function getRole(): Role
{
return $this->role;
}
}

@ -1,94 +0,0 @@
<?php
class Evenement
{
/**
* @var int Identifiant
*/
private int $id;
/**
* @var string Nom Evenement
*/
private string $nom;
/**
* @var string Date de l'evenement
*/
private string $date;
/**
* @var Alumni Organisateur
*/
private Alumni $organisateur;
/**
* @var array Liste des Participants
*/
private array $participants;
/**
* @var int Nombre maximal d'inscrits
*/
private int $nbInscriptionMax;
/**
* @var string Url de l'image
*/
private string $imageUrl;
/**
* @param int $id
* @param string $nom
* @param string $date
* @param Alumni $organisateur
* @param array $participants
* @param int $nbInscriptionMax
* @param string $imageUrl
*/
public function __construct(int $id, string $nom, string $date, Alumni $organisateur, array $participants, int $nbInscriptionMax, string $imageUrl)
{
$this->id = $id;
$this->nom = $nom;
$this->date = $date;
$this->organisateur = $organisateur;
$this->participants = $participants;
$this->nbInscriptionMax = $nbInscriptionMax;
$this->imageUrl = $imageUrl;
}
public function getId(): int
{
return $this->id;
}
public function getNom() : string
{
return $this->nom;
}
public function getDate() : string
{
return $this->date;
}
public function getParticipants() : array
{
return $this->participants;
}
public function getOrganisateur(): Alumni
{
return $this->organisateur;
}
public function getNbInscriptionMax(): int
{
return $this->nbInscriptionMax;
}
public function getImageUrl(): string
{
return $this->imageUrl;
}
}

@ -1,213 +0,0 @@
<?php
enum TypeContrat
{
case CDI;
case CDD;
case Alternance;
case Stage;
}
enum ProfilRecherche
{
case Junior;
case Senior;
case Indifferent;
}
enum NiveauEtudes: string
{
case Bac2 = "Bac+2";
case Bac3 = "Bac+3";
case Bac5 = "Bac+5";
case Indifferent = "Indifferent";
}
class Offre
{
/**
* @var int Identifiant
*/
private int $id;
/**
* @var Alumni Offreur
*/
private Alumni $offreur;
/**
* @var string intitulé de l'offre
*/
private string $nom;
/**
* @var string Description de l'offre
*/
private string $description;
/**
* @var string Url de l'image
*/
private string $imageUrl;
/**
* @var TypeContrat Type de contrat
*/
private TypeContrat $typeContrat;
/**
* @var string Ville
*/
private string $ville;
/**
* @var string Entreprise de l'offre
*/
private string $entreprise;
/**
* @var string Descriptif du poste
*/
private string $descriptifPoste;
/**
* @var ProfilRecherche Profil recherché
*/
private ProfilRecherche $profil;
/**
* @var string Experience
*/
private string $experience;
/**
* @var NiveauEtudes Niveau d'études
*/
private NiveauEtudes $niveauEtudes;
/**
* @var string Email de contact
*/
private string $mailContact;
/**
* @var string Numero
*/
private string $numero;
/**
* @var string Url du site
*/
private string $siteUrl;
/**
* @param int $id
* @param Alumni $offreur
* @param string $nom
* @param string $description
* @param string $imageUrl
* @param TypeContrat $typeContrat
* @param string $ville
* @param string $entreprise
* @param string $descriptifPoste
* @param Profil $profil
* @param string $experience
* @param NiveauEtudes $niveauEtudes
* @param string $mailContact
* @param string $numero
* @param string $siteUrl
*/
public function __construct(int $id, Alumni $offreur, string $nom, string $description, string $imageUrl, TypeContrat $typeContrat, string $ville, string $entreprise, string $descriptifPoste, Profil $profil, string $experience, NiveauEtudes $niveauEtudes, string $mailContact, string $numero, string $siteUrl)
{
$this->id = $id;
$this->offreur = $offreur;
$this->nom = $nom;
$this->description = $description;
$this->imageUrl = $imageUrl;
$this->typeContrat = $typeContrat;
$this->ville = $ville;
$this->entreprise = $entreprise;
$this->descriptifPoste = $descriptifPoste;
$this->profil = $profil;
$this->experience = $experience;
$this->niveauEtudes = $niveauEtudes;
$this->mailContact = $mailContact;
$this->numero = $numero;
$this->siteUrl = $siteUrl;
}
public function getId(): int
{
return $this->id;
}
public function getOffreur(): Alumni
{
return $this->offreur;
}
public function getNom(): string
{
return $this->nom;
}
public function getDescription(): string
{
return $this->description;
}
public function getImageUrl(): string
{
return $this->imageUrl;
}
public function getTypeContrat(): TypeContrat
{
return $this->typeContrat;
}
public function getVille(): string
{
return $this->ville;
}
public function getEntreprise(): string
{
return $this->entreprise;
}
public function getDescriptifPoste(): string
{
return $this->descriptifPoste;
}
public function getProfil(): Profil
{
return $this->profil;
}
public function getExperience(): string
{
return $this->experience;
}
public function getNiveauEtudes(): NiveauEtudes
{
return $this->niveauEtudes;
}
public function getMailContact(): string
{
return $this->mailContact;
}
public function getNumero(): string
{
return $this->numero;
}
public function getSiteUrl(): string
{
return $this->siteUrl;
}
}

@ -1,68 +0,0 @@
<?php
namespace modeles;
class AdminModele extends MembreModele
{
/**
* @description supprimer un compte
* @param \Alumni $account compte à supprimer
*/
public function deleteAccount(\Alumni $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,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 \Alumni
*/
public function Login(string $email,string $hash) : \Alumni
{
// TO DO
return new \Alumni(null,null,null);
}
/**
* @description s'inscrire
* @param string email
* @param string hash
* @param string $pseudo
* @return \Alumni chargé
*/
public function signIn(string $email,string $pseudo,string $hash) : \Alumni
{
// TO DO
return new Compte(null,null,null);
}
}

Before

Width:  |  Height:  |  Size: 842 KiB

After

Width:  |  Height:  |  Size: 842 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M782.87-98.52 526.913-354.478q-29.435 21.739-68.152 34.608-38.718 12.87-83.283 12.87-114.087 0-193.544-79.457Q102.477-465.913 102.477-580q0-114.087 79.457-193.544 79.457-79.457 193.544-79.457 114.087 0 193.544 79.457Q648.479-694.087 648.479-580q0 45.13-12.87 83.283-12.869 38.152-34.608 67.021l256.522 257.087-74.653 74.088ZM375.478-413.002q69.913 0 118.456-48.543Q542.477-510.087 542.477-580q0-69.913-48.543-118.456-48.543-48.543-118.456-48.543-69.913 0-118.456 48.543Q208.479-649.913 208.479-580q0 69.913 48.543 118.456 48.543 48.543 118.456 48.543Z"/></svg>

After

Width:  |  Height:  |  Size: 657 B

@ -0,0 +1,30 @@
@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: inline;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #fff;
}
input{
position: relative;
outline: none;
padding: 10px 20px;
border-radius: 10px;
letter-spacing: 1px;
font-size: 0.85em;
background-color: #00DBFF;
color: #fff;
cursor: pointer;
text-transform: uppercase;
font-weight: 600;
margin-top: 10px;
border: none;
}

@ -9,20 +9,17 @@
a{ a{
text-decoration: none; text-decoration: none;
} }
body{
display: block;
background: #fff;
}
.content{ body{
display: flex; display: flex;
flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
min-height: calc(100vh - 70px); min-height: 100vh;
background: #fff; background: #fff;
} }
.container{ .containerC{
position: relative; position: relative;
width: 500px; width: 500px;
min-height: 500px; min-height: 500px;
@ -34,12 +31,13 @@ body{
-10px -10px 20px #ccc; -10px -10px 20px #ccc;
border-radius: 30px; border-radius: 30px;
padding: 50px; padding: 50px;
margin: 50px;
} }
form{ form{
position: relative; position: relative;
width: 100%; width: 100%;
} }
.container h3{ .containerC h3{
color: #000; color: #000;
font-weight: 600; font-weight: 600;
font-size: 2em; font-size: 2em;
@ -112,4 +110,4 @@ form{
color: #000; color: #000;
letter-spacing: 1px; letter-spacing: 1px;
font-size: 0.85em; font-size: 0.85em;
} }

@ -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;
}

@ -11,19 +11,15 @@ a{
} }
body{ body{
display: block;
background: #fff;
}
.content{
display: flex; display: flex;
flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
min-height: calc(100vh - 70px); min-height: 100vh;
background: #fff; background: #fff;
} }
.container{ .containerC{
position: relative; position: relative;
width: 500px; width: 500px;
min-height: 500px; min-height: 500px;
@ -35,12 +31,13 @@ body{
-10px -10px 20px #ccc; -10px -10px 20px #ccc;
border-radius: 30px; border-radius: 30px;
padding: 50px; padding: 50px;
margin: 50px;
} }
form{ form{
position: relative; position: relative;
width: 100%; width: 100%;
} }
.container h3{ .containerC h3{
color: #000; color: #000;
font-weight: 600; font-weight: 600;
font-size: 2em; font-size: 2em;

@ -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;
}
}

@ -39,6 +39,7 @@ a {
padding: 10px; padding: 10px;
text-transform: uppercase; text-transform: uppercase;
transition: 0.2s; transition: 0.2s;
text-decoration: none;
} }
.navbar-container .nav-items .nav-link:after { .navbar-container .nav-items .nav-link:after {
@ -65,12 +66,14 @@ a {
text-transform: uppercase; text-transform: uppercase;
border-radius: 15px; border-radius: 15px;
border: #fff 2px solid; border: #fff 2px solid;
text-decoration: none;
} }
.navbar-container .nav-items .login-register .button2{ .navbar-container .nav-items .login-register .button2{
background: #00DBFF; background: #00DBFF;
color: #fff; color: #fff;
border-radius: 15px; border-radius: 15px;
text-decoration: none;
} }
.navbar-container .nav-items .login-register .button:hover { .navbar-container .nav-items .login-register .button:hover {

@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save