- CAMAGRU is an instagram like web app that is made with PHP (OOP, MVC structure, PDO), and MySQL
- The project is still under development (unfinished and might have errors and bugs)
Install the app through the setup page to create automatically the database and a user account, steps:
-
Change database credentials and environment variables
-
Copy and rename the database file:
- cp config/database.example.php config/database.php
-
Edit database credentials:
- vim config/database.php
-
Copy and rename the environment variables file:
- cp config/env.vars.example.php config/env.vars.php
-
Edit environment variables:
- vim config/env.vars.php
-
-
Open setup page:
-
Authentication
- Login page: http://localhost/camagru/signin
Created user in setup page: user1:helloWorld10$$
- Sign up page : http://localhost/camagru/signup
After signing up you will need to activate you account through email
- Login page: http://localhost/camagru/signin
-
Config database file: has PDO connection credentials to connect with the database
-
Config setup file: creates database and tables and a user account (user1:helloWorld10$$)
-
Database Class (inherited by all classes)
- get all
- get where (by conditions and more)
- create
- update
- delete
- delete where
- count all
- count where
-
User class
- login function
- sign up function (with secured password in validation)
- create function : with hashed password
- update function : for edit profile page
-
Post class
- validate post from local
- publish post from camera
- validate post from camera
- publish post from local
- get all
- get for user
- like
- unlike
- comment
- delete and deletes all associated likes and comments
- get all with limit (for pagination in home and profile page)
-
Like class
-
Comment class
- send mail after comment published if preference is activated
-
Mail class (functions to send mail)
-
Session class (deals with sessions and session messages)
-
Routing functions
-
Rendering functions
-
Cookies functions (secured)
-
Design
- Themes and CSS
- Navigation menu (dynamic)
- Layout (nav,body,sidebar,footer)
- Darkmode button (using cookies)
- Mobile optimized
- Fix nav menu (with js)
-
Error page
-
Sign in page
-
Logout page
-
Sign up page
-
Confirm account by email page
-
Recover password page
-
Profile page
- Design
- Logic
- Basic info
- Connected user's post all
- Comments and likes statistics
- Connected user's post pagination
-
Edit profile page
- Design
- Logic (change info and password)
-
Publish picture page
- Design
- Logic
- Capture picture from Live webcam (js)
- Add stickers to picture from camera (js)
- Upload picture from camera (php)
- Upload picture from local (php)
- Validate the local picture (php)
- Combine sticker and pick on php
- Add stickers to picture from local (js)
- Switch between modes (cemera/upload) (js)
-
Post page
- Design
- Logic
- (get post by id)
- get all (for publish page)
- get all by user with offset and number (for profile page)
- like & unlike & delete route (/post/1/like & /post/1/unlike & /post/1/delete)
- delete post
- comment on post
-
Home page
- Design
- Logic
- listing all posts of all users
- listing posts with Pagination (infinite pagination)
-
Validation and messages
- Validation functions
- Session messages
- Validation messages
-
Security functions
- securing routes (by session and htaccess)
- check user logged and permissions
- hashed password
- protection against database injection (prepared statements)
- Protection against inject HTML or “user” JavaScript in badly protected variables.
- Protection against Use an extern form to manipulate so-called private data
-
Testing
- compatible with Firefox (>= 41) and Chrome (>= 46)
- private and protected pages
- validation errors in forms
- incorrect page links
- injection testing
- Test Gif with png problem & png with png problem (filter) (other machines)
- Test compatibility with chrome old v
- Extern form to manipulate private data??
-
Finalizing Deleting debugging messages and elements One database file
-
More to do
- Hide load more if all loaded
- Likes and comments ajax
- Improve design