├── .gitignore ├── public ├── css │ └── style.css ├── images │ ├── logo.png │ ├── slider1.jpg │ ├── slider2.jpg │ ├── slider3.jpg │ ├── slider4.jpg │ ├── slider5.jpg │ ├── team │ │ ├── K K SHAH.JPG │ │ ├── MUKUL GARG.png │ │ ├── OM AGRAWAL.jpg │ │ ├── NITIN PARIKH.JPG │ │ ├── SANGITA AGRAWAL.png │ │ ├── SURENDRA AGRAWAL.png │ │ ├── ASHOK SHARMA 2007-08.jpg │ │ ├── DEEPTI GARG 2013-14.JPG │ │ ├── DISHA SEHGAL 2022-23.JPG │ │ ├── SUSHIL GARG 2011-12.JPG │ │ ├── JIGISHA RUPANI 2020-21.JPG │ │ ├── KARUNA BAGADIA 2019-20.JPG │ │ ├── MANISH BAGADIA 2018-19.JPG │ │ ├── MANISH RUPANI 2015-16.JPG │ │ ├── RAJESH GANDHI 2006-07.JPG │ │ ├── SURESH AGRAWAL 2021-22.jpeg │ │ ├── TREASURER ANIL KANORIA.JPG │ │ ├── VINOD AGRAWAL 2017-18.JPG │ │ ├── MANISH AGRAWAL 2014-15.jpeg │ │ ├── PRESIDENT SUNITA AGARWAL.JPG │ │ ├── SECRETARY SHIKHA DHANUKA.JPG │ │ └── SURENDRA AGRAWAL 2012-13.jpg │ └── photo-1609607847926-da4702f01fef.avif └── js │ └── script.js ├── .env ├── src ├── models │ ├── Project.js │ └── evenModel.js └── middleware │ └── authentication.js ├── package.json ├── views ├── admin │ ├── login.hbs │ └── admin.hbs ├── contact.hbs ├── project.hbs ├── home.hbs ├── event.hbs └── team.hbs └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | .env 4 | -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Comfortaa', sans-serif; 3 | } 4 | -------------------------------------------------------------------------------- /public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/logo.png -------------------------------------------------------------------------------- /public/images/slider1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/slider1.jpg -------------------------------------------------------------------------------- /public/images/slider2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/slider2.jpg -------------------------------------------------------------------------------- /public/images/slider3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/slider3.jpg -------------------------------------------------------------------------------- /public/images/slider4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/slider4.jpg -------------------------------------------------------------------------------- /public/images/slider5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/slider5.jpg -------------------------------------------------------------------------------- /public/images/team/K K SHAH.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/K K SHAH.JPG -------------------------------------------------------------------------------- /public/images/team/MUKUL GARG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/MUKUL GARG.png -------------------------------------------------------------------------------- /public/images/team/OM AGRAWAL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/OM AGRAWAL.jpg -------------------------------------------------------------------------------- /public/images/team/NITIN PARIKH.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/NITIN PARIKH.JPG -------------------------------------------------------------------------------- /public/images/team/SANGITA AGRAWAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SANGITA AGRAWAL.png -------------------------------------------------------------------------------- /public/images/team/SURENDRA AGRAWAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SURENDRA AGRAWAL.png -------------------------------------------------------------------------------- /public/images/team/ASHOK SHARMA 2007-08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/ASHOK SHARMA 2007-08.jpg -------------------------------------------------------------------------------- /public/images/team/DEEPTI GARG 2013-14.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/DEEPTI GARG 2013-14.JPG -------------------------------------------------------------------------------- /public/images/team/DISHA SEHGAL 2022-23.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/DISHA SEHGAL 2022-23.JPG -------------------------------------------------------------------------------- /public/images/team/SUSHIL GARG 2011-12.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SUSHIL GARG 2011-12.JPG -------------------------------------------------------------------------------- /public/images/team/JIGISHA RUPANI 2020-21.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/JIGISHA RUPANI 2020-21.JPG -------------------------------------------------------------------------------- /public/images/team/KARUNA BAGADIA 2019-20.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/KARUNA BAGADIA 2019-20.JPG -------------------------------------------------------------------------------- /public/images/team/MANISH BAGADIA 2018-19.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/MANISH BAGADIA 2018-19.JPG -------------------------------------------------------------------------------- /public/images/team/MANISH RUPANI 2015-16.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/MANISH RUPANI 2015-16.JPG -------------------------------------------------------------------------------- /public/images/team/RAJESH GANDHI 2006-07.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/RAJESH GANDHI 2006-07.JPG -------------------------------------------------------------------------------- /public/images/team/SURESH AGRAWAL 2021-22.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SURESH AGRAWAL 2021-22.jpeg -------------------------------------------------------------------------------- /public/images/team/TREASURER ANIL KANORIA.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/TREASURER ANIL KANORIA.JPG -------------------------------------------------------------------------------- /public/images/team/VINOD AGRAWAL 2017-18.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/VINOD AGRAWAL 2017-18.JPG -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | JWT_SECRET: 'youneverknow32the54' 2 | MONGO_URI=mongodb+srv://evandizetech:evandize%237574!!aayush@cluster0.9odiwlo.mongodb.net/Club_data 3 | -------------------------------------------------------------------------------- /public/images/team/MANISH AGRAWAL 2014-15.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/MANISH AGRAWAL 2014-15.jpeg -------------------------------------------------------------------------------- /public/images/team/PRESIDENT SUNITA AGARWAL.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/PRESIDENT SUNITA AGARWAL.JPG -------------------------------------------------------------------------------- /public/images/team/SECRETARY SHIKHA DHANUKA.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SECRETARY SHIKHA DHANUKA.JPG -------------------------------------------------------------------------------- /public/images/team/SURENDRA AGRAWAL 2012-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/team/SURENDRA AGRAWAL 2012-13.jpg -------------------------------------------------------------------------------- /public/images/photo-1609607847926-da4702f01fef.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hrshw/Lions-scl/HEAD/public/images/photo-1609607847926-da4702f01fef.avif -------------------------------------------------------------------------------- /src/models/Project.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const projectSchema = new mongoose.Schema({ 4 | projectTitle: { 5 | type: String, 6 | required: true 7 | }, 8 | projectDescription: { 9 | type: String, 10 | required: true 11 | }, 12 | image: { 13 | type: String, 14 | required: true 15 | } 16 | }); 17 | 18 | const Project = mongoose.model('Project', projectSchema); 19 | 20 | module.exports = Project; 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "schoolwebsite", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "cookie-parser": "^1.4.6", 13 | "cors": "^2.8.5", 14 | "dotenv": "^16.4.5", 15 | "express": "^4.18.2", 16 | "hbs": "^4.2.0", 17 | "jsonwebtoken": "^9.0.2", 18 | "mongoose": "^8.1.1", 19 | "multer": "^1.4.5-lts.1", 20 | "sharp": "^0.33.2" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/middleware/authentication.js: -------------------------------------------------------------------------------- 1 | // middleware/authentication.js 2 | const jwt = require('jsonwebtoken'); 3 | 4 | // Middleware to check if the user is authenticated 5 | const authenticateToken = (req, res, next) => { 6 | const token = req.cookies.accessToken; 7 | if (token == null) return res.redirect('/login'); 8 | 9 | jwt.verify(token, process.env.JWT_SECRET, (err, user) => { 10 | if (err) { 11 | console.log('Token verification failed:', err); 12 | return res.redirect('/login'); 13 | } 14 | req.user = user; 15 | next(); 16 | }); 17 | }; 18 | 19 | 20 | module.exports = { authenticateToken }; 21 | -------------------------------------------------------------------------------- /src/models/evenModel.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | // Define the schema for the Event model 4 | const eventSchema = new mongoose.Schema({ 5 | eventTitle: { 6 | type: String, 7 | required: true 8 | }, 9 | conductedOn: { 10 | type: String, 11 | required: true 12 | }, 13 | conductedAt: { 14 | type: String, 15 | required: true 16 | }, 17 | totalCost: { 18 | type: Number, 19 | required: true 20 | }, 21 | totalBeneficiaries: { 22 | type: Number, 23 | required: true 24 | }, 25 | images: { 26 | type: [String], 27 | required: true 28 | } 29 | }); 30 | 31 | // Create and export the Event model 32 | module.exports = mongoose.model('Event', eventSchema); 33 | -------------------------------------------------------------------------------- /views/admin/login.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Admin login 7 | 8 | 9 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
43 |

Admin Login

44 |
45 |
46 | 47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 | 55 |
56 | 57 | 58 |
59 | 60 | 61 |
62 | 63 | 64 |
65 |
66 | 67 | Forgot password? 68 |
69 |
70 | 71 | 72 | 73 |
74 | 75 | 76 | 77 |
78 |
79 |
80 | 81 | 82 | 83 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /public/js/script.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | // Activate the carousel 3 | $('#carouselExampleFade').carousel(); 4 | 5 | // Set interval for auto sliding (5 seconds) 6 | setInterval(function () { 7 | $('#carouselExampleFade').carousel('next'); 8 | }, 5000); // 5000 milliseconds = 5 seconds 9 | }); 10 | 11 | 12 | 13 | function toggleDescription(element) { 14 | var card = element.closest('.card'); 15 | var description = card.querySelector('.description'); 16 | var fullDescription = card.querySelector('.full-description'); 17 | var readMore = card.querySelector('.read-more'); 18 | var readLess = card.querySelector('.read-less'); 19 | 20 | description.style.display = 'none'; 21 | fullDescription.style.display = 'block'; 22 | readMore.style.display = 'none'; 23 | readLess.style.display = 'inline'; 24 | card.classList.add('expanded'); 25 | } 26 | 27 | function toggleDescriptionBack(element) { 28 | var card = element.closest('.card'); 29 | var description = card.querySelector('.description'); 30 | var fullDescription = card.querySelector('.full-description'); 31 | var readMore = card.querySelector('.read-more'); 32 | var readLess = card.querySelector('.read-less'); 33 | 34 | description.style.display = 'block'; 35 | fullDescription.style.display = 'none'; 36 | readMore.style.display = 'inline'; 37 | readLess.style.display = 'none'; 38 | card.classList.remove('expanded'); 39 | } 40 | 41 | function uploadEvent() { 42 | // Get form data 43 | const eventTitle = document.getElementById('eventTitle').value; 44 | const conductedOn = document.getElementById('conductedOn').value; 45 | const conductedAt = document.getElementById('ConductedAt').value; 46 | const totalCost = document.getElementById('totalCost').value; 47 | const totalBeneficiaries = document.getElementById('totalBeneficiaries').value; 48 | 49 | // Validate form fields 50 | if (!eventTitle || !conductedOn || !conductedAt || !totalCost || !totalBeneficiaries) { 51 | alert('Please fill in all required fields.'); 52 | return; 53 | } 54 | 55 | // Get event image files 56 | const eventImage1 = document.getElementById('eventImage1').files[0]; 57 | const eventImage2 = document.getElementById('eventImage2').files[0]; 58 | const eventImage3 = document.getElementById('eventImage3').files[0]; 59 | const eventImage4 = document.getElementById('eventImage4').files[0]; 60 | const eventImage5 = document.getElementById('eventImage5').files[0]; 61 | 62 | // Check if at least one image is uploaded 63 | if (!eventImage1 && !eventImage2 && !eventImage3 && !eventImage4 && !eventImage5) { 64 | alert('Please upload at least one image.'); 65 | return; 66 | } 67 | 68 | // Check image file size 69 | if (eventImage1 && eventImage1.size > 2 * 1024 * 1024) { 70 | alert('Image file size exceeds the limit of 2mb KB.'); 71 | return; 72 | } 73 | if (eventImage2 && eventImage2.size > 2 * 1024 * 1024) { 74 | alert('Image file size exceeds the limit of 2mb KB.'); 75 | return; 76 | } 77 | if (eventImage3 && eventImage3.size > 2 * 1024 * 1024) { 78 | alert('Image file size exceeds the limit of 2mb KB.'); 79 | return; 80 | } 81 | if (eventImage4 && eventImage4.size > 2 * 1024 * 1024) { 82 | alert('Image file size exceeds the limit of 2mb KB.'); 83 | return; 84 | } 85 | if (eventImage5 && eventImage5.size > 2 * 1024 * 1024) { 86 | alert('Image file size exceeds the limit of 2mb KB.'); 87 | return; 88 | } 89 | // Create FormData object 90 | const formData = new FormData(); 91 | formData.append('eventTitle', eventTitle); 92 | formData.append('conductedOn', conductedOn); 93 | formData.append('conductedAt', conductedAt); 94 | formData.append('totalCost', totalCost); 95 | formData.append('totalBeneficiaries', totalBeneficiaries); 96 | 97 | console.log('Form data:', formData); 98 | 99 | // Append event image files to FormData 100 | if (eventImage1) formData.append('eventImage', eventImage1); 101 | if (eventImage2) formData.append('eventImage', eventImage2); 102 | if (eventImage3) formData.append('eventImage', eventImage3); 103 | if (eventImage4) formData.append('eventImage', eventImage4); 104 | if (eventImage5) formData.append('eventImage', eventImage5); 105 | 106 | // Send POST request to server 107 | fetch('/uploadEvent', { 108 | method: 'POST', 109 | body: formData 110 | }) 111 | .then(response => { 112 | if (response.ok) { 113 | // Reset the form 114 | document.getElementById('eventForm').reset(); 115 | // Show success message 116 | alert('Event uploaded successfully!'); 117 | } else { 118 | // Show error message 119 | throw new Error('Failed to upload event'); 120 | } 121 | }) 122 | .catch(error => { 123 | console.error('Error:', error); 124 | // Show error message 125 | alert('Failed to upload event'); 126 | }); 127 | } 128 | 129 | function uploadProject() { 130 | const form = document.getElementById('projectForm'); 131 | const formData = new FormData(form); 132 | 133 | // Log form data for debugging 134 | for (const [key, value] of formData.entries()) { 135 | console.log(`${key}: ${value}`); 136 | } 137 | 138 | // Ensure required fields are filled 139 | if (!formData.get('projectTitle') || !formData.get('projectDescription') || !formData.get('projectImage')) { 140 | alert('Please fill in all required fields.'); 141 | return; 142 | } 143 | 144 | // Send POST request to the server 145 | fetch('/uploadProject', { 146 | method: 'POST', 147 | body: formData 148 | }) 149 | .then(response => response.json()) 150 | .then(data => { 151 | console.log('Success:', data); 152 | alert('Project uploaded successfully'); 153 | // Reset the form 154 | form.reset(); 155 | }) 156 | .catch((error) => { 157 | console.error('Error:', error); 158 | alert('Error uploading project'); 159 | }); 160 | } 161 | 162 | 163 | 164 | // function uploadCarouselImage() { 165 | // // Get carousel image files 166 | // const carouselImage1 = document.getElementById('carouselImage1').files[0]; 167 | // const carouselImage2 = document.getElementById('carouselImage2').files[0]; 168 | // const carouselImage3 = document.getElementById('carouselImage3').files[0]; 169 | // const carouselImage4 = document.getElementById('carouselImage4').files[0]; 170 | // const carouselImage5 = document.getElementById('carouselImage5').files[0]; 171 | 172 | // // Check if at least one image is selected 173 | // if (!carouselImage1 && !carouselImage2 && !carouselImage3) { 174 | // alert('Please select at least one image.'); 175 | // return; 176 | // } 177 | 178 | // // Check image file size 179 | // if (carouselImage1 && carouselImage1.size > 2 * 1024 * 1024) { 180 | // alert('Image file size exceeds the limit of 200 KB.'); 181 | // return; 182 | // } 183 | // if (carouselImage2 && carouselImage2.size > 2 * 1024 * 1024) { 184 | // alert('Image file size exceeds the limit of 200 KB.'); 185 | // return; 186 | // } 187 | // if (carouselImage3 && carouselImage3.size > 2 * 1024 * 1024) { 188 | // alert('Image file size exceeds the limit of 200 KB.'); 189 | // return; 190 | // } 191 | // if (carouselImage4 && carouselImage4.size > 2 * 1024 * 1024) { 192 | // alert('Image file size exceeds the limit of 200 KB.'); 193 | // return; 194 | // } 195 | // if (carouselImage5 && carouselImage5.size > 2 * 1024 * 1024) { 196 | // alert('Image file size exceeds the limit of 200 KB.'); 197 | // return; 198 | // } 199 | 200 | // // Create FormData object 201 | // const formData = new FormData(); 202 | 203 | // // Append carousel image files to FormData 204 | // if (carouselImage1) formData.append('carouselImage', carouselImage1); 205 | // if (carouselImage2) formData.append('carouselImage', carouselImage2); 206 | // if (carouselImage3) formData.append('carouselImage', carouselImage3); 207 | // if (carouselImage4) formData.append('carouselImage', carouselImage4); 208 | // if (carouselImage5) formData.append('carouselImage', carouselImage5); 209 | 210 | // // Send POST request to server 211 | // fetch('/uploadCarouselImage', { 212 | // method: 'POST', 213 | // body: formData 214 | // }) 215 | // .then(response => { 216 | // if (response.ok) { 217 | // // Reset the form 218 | // document.getElementById('carouselForm').reset(); 219 | // // Show success message 220 | // alert('Carousel images uploaded successfully!'); 221 | // } else { 222 | // // Show error message 223 | // throw new Error('Failed to upload carousel images'); 224 | // } 225 | // }) 226 | // .catch(error => { 227 | // console.error('Error:', error); 228 | // // Show error message 229 | // alert('Failed to upload carousel images'); 230 | // }); 231 | // } 232 | -------------------------------------------------------------------------------- /views/contact.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LCAG - Contact 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 22 | 23 | 24 |
25 | 26 |

Lions club of Ahmedabad Greater

27 |
28 |
29 |
30 | 56 |
57 | 84 | 85 | 86 |
87 |
88 |
89 | 90 | 91 |
92 |
93 | 94 | 95 |
We'll never share your email with anyone else.
96 |
97 |
98 | 99 | 100 |
101 |
102 | 103 | 104 |
105 |
106 | 107 | 108 |
109 | 110 | 115 | 116 |
117 | 118 | 119 | 120 |
121 | 122 | 123 |
124 | 144 | 145 | 146 | 155 | 158 | 159 | 167 | 168 | -------------------------------------------------------------------------------- /views/project.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | LCAG - Projects 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 90 | 91 | 92 | 93 |
94 | 95 |

Lions club of Ahmedabad Greater

96 |
97 |
98 |
99 | 126 |
127 | 154 | 155 |
156 |
157 |

Our Projects:

158 |
159 | 160 |
161 | 162 |
163 |
164 | 165 | {{#each projects}} 166 |
167 |
168 | {{this.projectTitle}} 169 |
170 |

{{this.projectTitle}}

171 |

{{this.projectDescription}}

172 | 173 | Read More 174 | 175 |
176 |
177 |
178 | {{/each}} 179 |
180 |
181 | 182 |
183 | 184 |
185 |
186 | 214 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | -------------------------------------------------------------------------------- /views/home.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Lions club of Ahmedabad Greater 8 | 10 | 11 | 12 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | 36 |

Lions club of Ahmedabad Greater

37 | 40 |
41 | 42 | 69 |
70 | 97 |
98 |
99 |

About Us:

100 |
101 |

102 | Our Club the “Lions Club of Ahmedabad Greater” is part of Lions Clubs International. The club received its 103 | charter on 27th September 2003. 104 | This club is Home Club of Lion Om Agarwal who is Multiple Council Chairman of undivided Multiple District 105 | 323, which covered States of Gujarat, Maharashtra, Madhya Pradesh, Rajasthan and Chhatisgarh i.e. entire 106 | Western India during the year 2006-2007. 107 | Our club is blessed to have senior and experienced Lion members like Mr Rajesh Gandhi, Mr. Nitin Parikh, Mr. 108 | K.K.Shah, Mr Ashok Sharma ……. 109 | After getting inspiration from “Women Empowerment”, the club has maximum number of Ladies in our Managing 110 | Committee and they are running our club at a great level. 111 | Our members are countable in comparison of other club but our work is tremendous at District Level. 112 |

113 |
114 | 115 |
116 | 117 |
118 |

Motto:

119 |
120 |

"We Serve"

121 |
122 |
123 |
124 |

Vision:

125 |
126 |

"To be the leader in community and humanitarian service."

127 |
128 |
129 | 130 |
131 |

Mission:

132 |
133 |

Our mission is to empower Lions clubs, volunteers, and partners to improve health and 134 | well-being, strengthen communities, and support those in need through humanitarian services and grants that 135 | impact lives globally, and encourage peace and international understanding.

136 |
137 |
138 |
139 |

Flag Salutation:

140 |
141 |

We salute our National Flag and pledge our allegiance to the same. It’s honor and it’s 142 | glory depend upon the zeal and assiduity with which each one of us shoulder our responsibilities of a good 143 | citizen. It’s glorious history written in letters of gold, inspires us to put in good work for the fair name 144 | of our country. We declare our unflinching loyalty to our National Flag and maintain that it’s course shall 145 | be our course and that each individual amongst us will make genuine efforts to add to it’s luster and glory 146 | and make it fly proudly aloft in the community of Nations.

147 |
148 |
149 |
150 |
151 | 179 | 180 | 181 | 184 | 185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /views/event.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | LCAG - Projects 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 31 | 32 | 33 | 34 |
35 | 36 |

Lions club of Ahmedabad Greater

37 |
38 |
39 |
40 | 67 |
68 | 95 | 96 |
97 |
98 |

Events/Galery:

99 |
100 | 101 |
102 | 103 |
104 |
105 | 106 | 107 | {{#each events}} 108 |
109 |
110 | 111 |
112 | 113 | 114 | 115 |

Name of activity : {{this.eventTitle}} 116 |

117 |

Conducted on : {{this.conductedOn}}

118 |

Conducted at : {{this.conductedAt}}

119 |

Total Cost : {{this.totalCost}}

120 |

Total Beneficiaries : 121 | {{this.totalBeneficiaries}}

122 | 123 | 125 | 126 |
127 |
128 |
129 | {{/each}} 130 | 131 | 132 |
133 |
134 | 135 |
136 | 137 |
138 |
139 | 167 | 168 | 169 | 196 | 197 | 200 | 240 | 241 | 242 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const express = require('express'); 3 | const app = express(); 4 | const mongoose = require('mongoose'); 5 | const hbs = require('hbs'); 6 | const fs = require('fs'); 7 | const path = require('path'); 8 | const sharp = require('sharp'); 9 | const jwt = require('jsonwebtoken') 10 | const {authenticateToken} = require('./src/middleware/authentication'); 11 | const cookieParser = require('cookie-parser'); 12 | const multer = require('multer'); 13 | const Event = require('./src/models/evenModel'); 14 | const Project = require('./src/models/Project'); 15 | const PORT = process.env.PORT || 3000; 16 | const cors = require('cors'); 17 | 18 | 19 | app.use(cors()); 20 | 21 | // Set up multer for file uploads 22 | const storage = multer.memoryStorage(); // Store files in memory 23 | const upload = multer({ 24 | storage: storage, 25 | limits: { 26 | fileSize: 700 * 1024 // Limit file size to 700 KB 27 | } 28 | }); 29 | // Set up middleware 30 | app.use(cookieParser()); 31 | app.use(express.urlencoded({ extended: true })); 32 | app.use(express.static('public')); 33 | app.set('view engine', 'hbs'); 34 | // Set the path for views 35 | app.set('views', path.join(__dirname, 'views')); 36 | 37 | 38 | // Register handlebars helpers 39 | hbs.registerHelper('JSONstringify', function (context) { 40 | return JSON.stringify(context); 41 | }); 42 | 43 | mongoose.connect(process.env.MONGO_URI); 44 | 45 | // Check if MongoDB is connected successfully 46 | const db = mongoose.connection; 47 | db.on('error', console.error.bind(console, 'MongoDB connection error:')); 48 | db.once('open', () => { 49 | console.log('MongoDB connected successfully!'); 50 | }); 51 | 52 | 53 | 54 | app.get('/', (req, res) => { 55 | res.render('home'); 56 | }); 57 | app.get('/team', (req, res) => { 58 | res.render('team'); 59 | }); 60 | // app.get('/projects', (req, res) => { 61 | // res.render('project'); 62 | // }); 63 | 64 | app.get('/contact', (req, res) => { 65 | res.render('contact'); 66 | }); 67 | 68 | app.get('/login', (req, res) => { 69 | res.render('admin/login'); 70 | }); 71 | 72 | app.post('/login', (req, res) => { 73 | const { username, password } = req.body; 74 | 75 | console.log('Received credentials:', username, password); 76 | 77 | // Dummy authentication logic (replace with your actual authentication logic) 78 | if (username === 'Adminlcg' && password === 'Admin@234') { 79 | const user = { username: 'Adminlcg' }; 80 | 81 | const accessToken = jwt.sign(user, process.env.JWT_SECRET, { expiresIn: '1h' }); 82 | 83 | // Set the token as a cookie 84 | res.cookie('accessToken', accessToken, { httpOnly: true }); 85 | 86 | // Return the token as JSON 87 | res.json({ token: accessToken }); 88 | } else { 89 | // Return an error as JSON 90 | res.status(401).json({ message: 'Unauthorized - Invalid credentials' }); 91 | } 92 | }); 93 | 94 | 95 | app.get('/admin', authenticateToken, (req, res) => { 96 | if (!req.user) { 97 | return res.redirect('/login'); 98 | } 99 | 100 | res.render('admin/admin', { user: req.user }); 101 | }); 102 | 103 | 104 | 105 | // POST endpoint to handle form submission and file uploads 106 | app.post('/uploadEvent', upload.array('eventImage', 5), async (req, res) => { 107 | 108 | try { 109 | // Handle form data 110 | const eventData = { 111 | eventTitle: req.body.eventTitle, 112 | conductedOn: req.body.conductedOn, 113 | conductedAt: req.body.conductedAt, 114 | totalCost: req.body.totalCost, 115 | totalBeneficiaries: req.body.totalBeneficiaries, 116 | images: [] 117 | }; 118 | 119 | 120 | // Process each uploaded file 121 | for (const file of req.files) { 122 | // Resize image using sharp 123 | const resizedImageBuffer = await sharp(file.buffer) 124 | .resize({ width: 800, height: 600, fit: 'inside' }) // Resize image to fit within 800x600 dimensions 125 | .toBuffer(); 126 | 127 | // Generate unique filename 128 | const filename = `${Date.now()}-${file.originalname}`; 129 | const imagePath = path.join(__dirname, 'public', 'uploads', filename); 130 | 131 | // Write resized image to disk 132 | await fs.promises.writeFile(imagePath, resizedImageBuffer); 133 | 134 | // Add filename to eventData 135 | eventData.images.push(filename); 136 | } 137 | 138 | // Save eventData to MongoDB 139 | const event = new Event(eventData); 140 | await event.save(); 141 | 142 | // Send response 143 | res.status(200).json({ message: 'Event data received and saved successfully', eventData }); 144 | } catch (error) { 145 | console.error('Error uploading event:', error); 146 | res.status(500).json({ error: 'Internal server error' }); 147 | } 148 | }); 149 | 150 | // Render events page with event data fetched from MongoDB 151 | app.get('/events', async (req, res) => { 152 | try { 153 | // Fetch events from MongoDB 154 | const events = await Event.find(); 155 | // Render event.hbs template and pass events data to it 156 | res.render('event', { events: events }); 157 | } catch (error) { 158 | console.error('Error fetching events:', error); 159 | res.status(500).send('Internal Server Error'); 160 | } 161 | }); 162 | 163 | app.get('/api/events', authenticateToken, async (req, res) => { 164 | try { 165 | const events = await Event.find(); 166 | res.json(events); 167 | } catch (error) { 168 | console.error('Error fetching events:', error); 169 | res.status(500).json({ error: 'Internal Server Error' }); 170 | } 171 | }); 172 | 173 | 174 | 175 | // Get a specific event by ID 176 | app.get('/events/:id', async (req, res) => { 177 | try { 178 | const event = await Event.findById(req.params.id); 179 | if (!event) { 180 | return res.status(404).json({ message: 'Event not found' }); 181 | } 182 | res.json(event); 183 | } catch (error) { 184 | console.error('Error fetching event:', error); 185 | res.status(500).json({ error: 'Internal server error' }); 186 | } 187 | }); 188 | // Update a specific event by ID 189 | app.put('/events/:id', upload.array('eventImage', 5), async (req, res) => { 190 | try { 191 | const event = await Event.findById(req.params.id); 192 | if (!event) { 193 | return res.status(404).json({ message: 'Event not found' }); 194 | } 195 | 196 | // Handle form data 197 | event.eventTitle = req.body.eventTitle; 198 | event.conductedOn = req.body.conductedOn; 199 | event.conductedAt = req.body.conductedAt; 200 | event.totalCost = req.body.totalCost; 201 | event.totalBeneficiaries = req.body.totalBeneficiaries; 202 | 203 | // Handle image updates 204 | const imagesToKeep = JSON.parse(req.body.imagesToKeep || '[]'); 205 | const imagesToDelete = event.images.filter(img => !imagesToKeep.includes(img)); 206 | 207 | // Delete images that are not in imagesToKeep 208 | for (const image of imagesToDelete) { 209 | const imagePath = path.join(__dirname, 'public', 'uploads', image); 210 | await fs.promises.unlink(imagePath).catch(err => console.error(`Failed to delete ${image}:`, err)); 211 | } 212 | 213 | // Update the event's images array 214 | event.images = imagesToKeep; 215 | 216 | // Handle new image uploads 217 | if (req.files && req.files.length > 0) { 218 | for (const file of req.files) { 219 | const resizedImageBuffer = await sharp(file.buffer) 220 | .resize({ width: 800, height: 600, fit: 'inside' }) 221 | .toBuffer(); 222 | const filename = `${Date.now()}-${file.originalname}`; 223 | const imagePath = path.join(__dirname, 'public', 'uploads', filename); 224 | await fs.promises.writeFile(imagePath, resizedImageBuffer); 225 | event.images.push(filename); 226 | } 227 | } 228 | 229 | await event.save(); 230 | res.json({ message: 'Event updated successfully', event }); 231 | } catch (error) { 232 | console.error('Error updating event:', error); 233 | res.status(500).json({ error: 'Internal server error' }); 234 | } 235 | }); 236 | // Delete a specific event by ID 237 | app.delete('/events/:id', async (req, res) => { 238 | try { 239 | const event = await Event.findByIdAndDelete(req.params.id); 240 | if (!event) { 241 | return res.status(404).json({ message: 'Event not found' }); 242 | } 243 | 244 | // Delete images from the directory 245 | if (event.images && event.images.length > 0) { 246 | for (const image of event.images) { 247 | const imagePath = path.join(__dirname, 'public', 'uploads', image); 248 | await fs.promises.unlink(imagePath); 249 | } 250 | } 251 | 252 | res.json({ message: 'Event deleted successfully' }); 253 | } catch (error) { 254 | console.error('Error deleting event:', error); 255 | res.status(500).json({ error: 'Internal server error' }); 256 | } 257 | }); 258 | 259 | 260 | // POST endpoint to handle form submission and file uploads 261 | app.post('/uploadProject', upload.single('projectImage'), async (req, res) => { 262 | try { 263 | // Handle form data 264 | const projectData = { 265 | projectTitle: req.body.projectTitle, 266 | projectDescription: req.body.projectDescription, 267 | image: '' 268 | }; 269 | 270 | if (req.file) { 271 | // Resize image using sharp 272 | const resizedImageBuffer = await sharp(req.file.buffer) 273 | .resize({ width: 800, height: 600, fit: 'inside' }) // Resize image to fit within 800x600 dimensions 274 | .toBuffer(); 275 | 276 | // Generate unique filename 277 | const filename = `${Date.now()}-${req.file.originalname}`; 278 | const imagePath = path.join(__dirname, 'public', 'uploads', filename); 279 | 280 | // Write resized image to disk 281 | await fs.promises.writeFile(imagePath, resizedImageBuffer); 282 | 283 | // Add filename to projectData 284 | projectData.image = filename; 285 | } 286 | 287 | // Save projectData to MongoDB 288 | const project = new Project(projectData); 289 | await project.save(); 290 | 291 | // Send response 292 | res.status(200).json({ message: 'Project data received and saved successfully', projectData }); 293 | } catch (error) { 294 | console.error('Error uploading project:', error); 295 | res.status(500).json({ error: 'Internal server error' }); 296 | } 297 | }); 298 | 299 | // Render projects page with project data fetched from MongoDB 300 | app.get('/projects', async (req, res) => { 301 | try { 302 | // Fetch projects from MongoDB 303 | const projects = await Project.find(); 304 | 305 | console.log(projects); 306 | // Render project.hbs template and pass projects data to it 307 | res.render('project', { projects: projects }); 308 | } catch (error) { 309 | console.error('Error fetching projects:', error); 310 | res.status(500).send('Internal Server Error'); 311 | } 312 | }); 313 | 314 | app.get('/api/projects', authenticateToken, async (req, res) => { 315 | try { 316 | const projects = await Project.find(); 317 | res.json(projects); 318 | } catch (error) { 319 | console.error('Error fetching projects:', error); 320 | res.status(500).json({ error: 'Internal Server Error' }); 321 | } 322 | }); 323 | 324 | // Get a specific project by ID 325 | app.get('/projects/:id', async (req, res) => { 326 | try { 327 | const project = await Project.findById(req.params.id); 328 | if (!project) { 329 | return res.status(404).json({ message: 'Project not found' }); 330 | } 331 | res.json(project); 332 | } catch (error) { 333 | console.error('Error fetching project:', error); 334 | res.status(500).json({ error: 'Internal server error' }); 335 | } 336 | }); 337 | 338 | 339 | // Update a specific project by ID 340 | app.put('/projects/:id', upload.single('projectImage'), async (req, res) => { 341 | try { 342 | const project = await Project.findById(req.params.id); 343 | if (!project) { 344 | return res.status(404).json({ message: 'Project not found' }); 345 | } 346 | 347 | // Handle form data 348 | project.projectTitle = req.body.projectTitle; 349 | project.projectDescription = req.body.projectDescription; 350 | 351 | // Delete old image if a new image is uploaded 352 | if (req.file) { 353 | if (project.image) { 354 | const oldImagePath = path.join(__dirname, 'public', 'uploads', project.image); 355 | await fs.promises.unlink(oldImagePath); 356 | } 357 | 358 | const resizedImageBuffer = await sharp(req.file.buffer) 359 | .resize({ width: 800, height: 600, fit: 'inside' }) 360 | .toBuffer(); 361 | const filename = `${Date.now()}-${req.file.originalname}`; 362 | const imagePath = path.join(__dirname, 'public', 'uploads', filename); 363 | await fs.promises.writeFile(imagePath, resizedImageBuffer); 364 | project.image = filename; 365 | } 366 | 367 | await project.save(); 368 | res.json({ message: 'Project updated successfully', project }); 369 | } catch (error) { 370 | console.error('Error updating project:', error); 371 | res.status(500).json({ error: 'Internal server error' }); 372 | } 373 | }); 374 | 375 | // Delete a specific project by ID 376 | app.delete('/projects/:id', async (req, res) => { 377 | try { 378 | const project = await Project.findByIdAndDelete(req.params.id); 379 | if (!project) { 380 | return res.status(404).json({ message: 'Project not found' }); 381 | } 382 | 383 | // Delete image from the directory 384 | if (project.image) { 385 | const imagePath = path.join(__dirname, 'public', 'uploads', project.image); 386 | await fs.promises.unlink(imagePath); 387 | } 388 | 389 | res.json({ message: 'Project deleted successfully' }); 390 | } catch (error) { 391 | console.error('Error deleting project:', error); 392 | res.status(500).json({ error: 'Internal server error' }); 393 | } 394 | }); 395 | 396 | // POST endpoint to handle carousel image uploads 397 | // app.post('/uploadCarouselImage', upload.array('carouselImage', 5), async (req, res) => { 398 | // try { 399 | // // Process each uploaded file 400 | // for (const file of req.files) { 401 | // // Check if the file size exceeds 200 KB 402 | // if (file.size > 200000) { 403 | // return res.status(400).json({ error: 'File size exceeds the limit of 200 KB.' }); 404 | // } 405 | 406 | // // Resize image using sharp 407 | // const resizedImageBuffer = await sharp(file.buffer) 408 | // .resize({ width: 800, height: 600, fit: 'inside' }) // Resize image to fit within 800x600 dimensions 409 | // .toBuffer(); 410 | 411 | // // Generate unique filename 412 | // const filename = `${Date.now()}-${file.originalname}`; 413 | // const imagePath = path.join(__dirname, 'public', 'uploads', 'carouselimages', filename); 414 | 415 | // // Write resized image to disk 416 | // await fs.promises.writeFile(imagePath, resizedImageBuffer); 417 | // } 418 | 419 | // // Send success response 420 | // res.status(200).json({ message: 'Carousel images uploaded successfully' }); 421 | // } catch (error) { 422 | // console.error('Error uploading carousel images:', error); 423 | // res.status(500).json({ error: 'Internal server error' }); 424 | // } 425 | // }); 426 | 427 | 428 | app.listen(PORT, () => { 429 | console.log(`Server is running on port ${PORT}`); 430 | }); 431 | -------------------------------------------------------------------------------- /views/team.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | LCAG - Teams 8 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 |

Lions club of Ahmedabad Greater

27 |
28 | 29 |
30 |
31 | 58 |
59 | 86 | 87 |
88 |
89 |

Our Team:

90 |
91 | 92 |
93 | 94 | 95 |
96 |
97 |

Our Pride

98 | OM AGRAWAL 99 |

OM AGARWAL

100 |
101 |

102 | Past Council Chairman Om Agrawal, is a complete leader. He has achieved excellence in Lionism, 103 | excellence in his profession and of course excellence in family life. 104 | 105 | He was District Governor of undivided District - District 323 B for the year 2005-2006 and Multiple 106 | Council Chairman of undivided Multiple District 323, which covered States of Gujarat, Maharashtra, 107 | Madhya Pradesh, Rajasthan and Chhatisgarh i.e. entire Western India during the year 2006-2007. 108 |

109 |

110 | He is the only Lion from our Country, who was declared as the BEST LION amongst 14 Lakh Lion Members in 111 | the entire world in the Boston International Convention in the year 2006. He was also declared as the 112 | 2nd Best District Governor in the entire world for the year 2005-2006. He was also honored with Five 113 | Star District Award by Lions International as District Governor for the year 2005-2006. 114 | 115 | He is the only Lion from our Country, who was selected as a JUDGE for International Peace Poster 116 | Contest, by Lions Clubs International, held in Chicago, USA during the year 1992-1993. 117 | 118 | Dr. Win Kun Tam from Hong Kong, who became Lions International President in the year 2011-12, appointed 119 | Om Agrawal as his Election Representative during Minneapolis International Convention, the only one 120 | outside his home country, a great honor for our country and Om Agrawal 121 | 122 | He is recipient of highest number of International President Gold Medals 7, apart from many Leadership 123 | Medals, and International President’s Appreciation Certificates. 124 | 125 | He was recognized by Dr. Balram Jakhar, His Excellency The Governor of Madhya Pradesh by prestigious 126 | “Rashtriya Ratna” Award for his contributions in serving the society and business. 127 | 128 | He is a Lions International trained faculty and was appointed as Multiple Leadership Vice Chairman for 3 129 | years. He has been Chairman and faculty member for number of PST Schooling and Regional Leadership 130 | Institutes all over the Multiple. 131 | 132 | He is associated with many other organizations like Gujarat Chamber of Commerce, Agrasen Charitable 133 | Foundation, Agrwal Sewa Samiti, Rani Shakti Sewa Samiti and several Sports and Recreation Clubs too. 134 | 135 | He received his bachelor of Engineering degree from the most prestigious BITS, Pilani and Master of 136 | Science in Electrical Engineering from Newark College of Engineering, USA. After serving in Senior 137 | Positions in Birla Group of companies, presently he is in chemicals marketing business, under the banner 138 | Agrawal Group. 139 | 140 | He is happily married to Lion Kusum Agrawal who herself is a member of Lions Club of Ahmedabad Greater 141 | as well as Lioness Club of Ahmedabad Karnavati and Ahmedabad Main. The couple is blessed with son 142 | Saurabh, promoter and MD of Zebpay (The Bitcoin trading platform), and daughter Suruchi, a Chartered 143 | accountant, Director in KATCH Motors Pvt Ltd., Indore. 144 | 145 | He is a “Model Lion” who has strived to achieve excellence in everything he did which is true to his 146 | slogan, “Breathe Brilliance” as District Governor and “Passion For Brilliance” as Council Chairman. 147 |

148 | 150 | 152 |
153 |
154 | 155 |
156 | PRESIDENT SANGITA AGARWAL 158 |
President
159 |

SANGITA AGRAWAL

160 |
161 |
162 | SECRETARY MUKUL GARG 164 |
SECRETARY
165 |

MUKUL GARG

166 |
167 |
168 | TREASURER ANIL KANORIA 170 |
TREASURER
171 |

ANIL KANORIA

172 |
173 | 174 |
175 |

Galaxy of Past presidents :

176 |
177 |
178 | PRESIDENT SUNITA AGARWAL 180 |

SUNITA AGARWAL

181 |
182 | {{!--
183 | SECRETARY SHIKHA DHANUKA 185 |

SHIKHA DHANUKA

186 |
--}} 187 |
188 | DISHA SEHGAL 190 |

DISHA SEHGAL

191 |
192 |
193 | SURESH AGRAWAL 195 |

SURESH AGRAWAL

196 |
197 |
198 | JIGISHA RUPANI 200 |

JIGISHA RUPANI

201 |
202 |
203 | KARUNA BAGADIA 205 |

KARUNA BAGADIA

206 |
207 |
208 | SECRETARY SHIKHA DHANUKA 210 |

MANISH BAGADIA

211 |
212 |
213 | VINOD AGRAWAL 215 |

VINOD AGRAWAL

216 |
217 |
218 | MANISH RUPANI 220 |

MANISH RUPANI

221 |
222 |
223 | MANISH AGRAWAL 225 |

MANISH AGRAWAL

226 |
227 |
228 | DEEPTI GARG 230 |

DEEPTI GARG

231 |
232 |
233 | SURENDRA AGRAWAL 235 |

SURENDRA AGRAWAL

236 |
237 |
238 | SUSHIL GARG 240 |

SUSHIL GARG

241 |
242 |
243 | ASHOK SHARMA 245 |

ASHOK SHARMA

246 |
247 |
248 | RAJESH GANDHI 250 |

RAJESH GANDHI

251 |
252 |
253 | NITIN PARIKH 255 |

NITIN PARIKH

256 |
257 |
258 | K K SHAH 259 |

K K SHAH

260 |
261 |
262 | OM AGRAWAL 264 |

OM AGRAWAL

265 |
266 |
267 | 268 |
269 | 270 |
271 |
272 | 300 | 301 | 302 | 303 | 306 | 307 | 329 | 330 | 331 | -------------------------------------------------------------------------------- /views/admin/admin.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Admin Page 8 | 10 | 11 | 12 | 13 | 14 | 15 | 100 | 101 | 102 | 103 |
104 |
Menu
105 | 113 |
114 |

Admin Page

115 |
116 | 117 |
118 | 119 |
120 | 121 | 122 |
123 |
124 | 125 | 126 |
127 |
128 | 129 | 130 |
131 |
132 | 133 | 134 |
135 |
136 | 137 | 138 |
139 |
140 | 141 | 142 | 143 | 144 | 145 | 146 |
147 | 148 | 150 | 151 | 152 | 153 |
154 |

Events

155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 174 |
175 | 176 |
ImagesNameConducted OnConducted AtTotal CostTotal BeneficiariesActions
177 |
178 | 179 |
180 | 181 | 182 |
183 | 184 | 185 |
186 |
187 | 188 | 189 | 190 |
191 |
192 | 193 | 195 |
196 |
197 | 198 | 199 |
200 | 201 | 203 | 204 | 205 | 206 |
207 |

Projects

208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 224 |
225 | 226 |
ImageTitleDescriptionActions
227 |
228 |
229 | 230 | 231 | 234 | 235 |
236 | 237 | 240 | 243 | 244 | 245 | 553 | 554 | 555 | 556 | --------------------------------------------------------------------------------