Herman Project
Herman Project
A PROJECT REPORT
ON
Submitted by
SUDARSHAN GOWDA
U03HW22S0137
CERTIFICATE
1). ..........................
2). .......................
ACKNOWLEDGEMENT
I express my grateful thanks to all the staff members, Department of BCA for
their valuable assistance, encouragement, and co-operation during this
wonderful learning experience.
Finally, I would like to express my sincere thanks to my parents and friends for
the useful tips and moral support.
TABLE OF CONTENT
1 INTRODUCTION 1
1.1 PURPOSE 2
1.2 PROBLEM STATEMENT 3-4
1.3 EXISTING SYTSEM 4-5
1.4 SYSTEM MODULES 6-7
2 SYSTEM ANALYSIS 8
2.1 OPERATIONAL FEASIBILITY 9-10
2.2 ECONOMIC FEASIBILITY 10-12
2.3 TECHNICAL FEASIBILITY 13-14
3 SOFTWARE COMPONENT 15
3.1 INTRODUCTION TO HTML 16
3.2 INTRODUCTION TO JAVASCRIPT 17-18
3.3 INTRODUCTION TO EXPRESS 18-19
3.4 INTRODUCTION TO CSS 20-21
3.7 INTRODUCTION TO MySQL 21-23
4 SOFTWARE REQUIREMENT 24
4.1 FUNCTIONAL REQUIREMENT 25-27
4.2 NON-FUNCTIONAL REQUIREMENT 28-29
5 SYSTEM DESIGN 30
5.1 DATA FLOW DIAGRAM 31-32
5.2 ER DIAGRAM 33-34
6 SNAPSHOTS 35-40
7 CODING 40-107
8 FUTURE ENHANCEMENT 108-111
CHAPTER 1
INTRODUCTION
A Zoo Management System plays a vital role in modernizing zoo operations by providing a
structured and organized way to handle diverse responsibilities. It enables easy tracking of
animal species, habitats, breeding programs, and veterinary care while also managing
human resources and facility maintenance. With real-time data access and reporting
features, the system ensures timely actions and supports conservation efforts. Additionally,
it can enhance visitor engagement through online bookings, interactive maps, and event
scheduling, making the zoo experience more enjoyable and educational.
1.1 PURPOSE
• Streamline operations through automation of booking, dispatch, and delivery processes.
• Enhance real-time tracking of shipments to provide transparency and updates to
customers.
• Improve service quality and customer satisfaction by enabling efficient
communication and fast delivery.
• Reduce operational costs through route optimization, automation, and better resource
allocation.
• Secure data handling by implementing robust data protection measures.
• Generate analytical reports for performance, finance, and resource insights.
• Create a user-friendly, web-based platform accessible across devices for managing
shipments, tracking, and customer support.
The current zoo management system is largely manual and fragmented, with data stored in
various formats and locations. This approach has several significant drawbacks:
Visitor Logs: Visitor entry and exit logs are manually recorded, making it difficult
to manage large volumes of visitors efficiently.
Inventory Lists: Stock levels for animal food, medical supplies, and other
inventory items are tracked manually, leading to potential stockouts or
overstocking.
Animal Monitoring: No integrated system for monitoring animal health and behavior
in real-time, making it difficult to identify and address potential issues promptly.
Ticket Sales: Ticket sales and reservations are often handled manually, leading to
long queues and visitor dissatisfaction.
Task Allocation: Manual allocation of tasks and shifts for zookeepers, veterinarians,
and other staff, leading to inefficiencies and potential staff shortages.
The proposed Zoo Management System (ZMS) will consist of several key modules designed to
Animal Records: Maintain detailed profiles for each animal, including species, age,
Health Monitoring: Track health metrics, schedule veterinary check-ups, and record
Behavioral Tracking: Monitor and record animal behavior to identify any changes or
Ticketing and Reservations: Manage online and offline ticket sales, reservations, and
Visitor Flow Management: Monitor visitor numbers and manage entry and exit points to
Feedback and Surveys: Collect visitor feedback and conduct surveys to improve the
Staff Scheduling: Automate the allocation of tasks and shifts for zookeepers, veterinarians,
Inventory Tracking: Manage stock levels for animal food, medical supplies, and
Cost Management: Track inventory costs and provide insights for cost optimization,
Revenue Tracking: Monitor income from ticket sales, donations, and other sources to
Expense Management: Track operational expenses and provide detailed financial reports
Budgeting and Forecasting: Develop budgets and forecasts to support financial planning
Custom Reports: Allow users to create custom reports based on specific requirements,
CHAPTER 2
SYSTEM ANALYSIS
Lower Cost of Error: Prevents costly mistakes (e.g., missed feedings, duplicate ticketing) that might
lead to financial penalties or reputational damage.
Enhanced Visitor Satisfaction: Improves repeat visit rates and referrals, indirectly contributing
to revenue growth.
4. Integration Capabilities
Supports integration with:
Barcode scanners or RFID readers for animal tracking.
SMS or Email APIs for notification systems.
GPS or environmental sensors for real-time monitoring of enclosures.
Easily extendable to include payment gateways, third-party booking systems, or cloud
storage solutions.
5. Database Management
Utilizes MySQL as the backend, offering a reliable, scalable, and fast relational database system.
Designed to handle large volumes of records, including animal profiles, feeding logs, ticket
sales, visitor data, and staff assignments.
8. Automation Support
Automated alerts, task reminders, and reporting minimize manual input and errors.
Supports auto-generation of feeding and medical schedules, ticket receipts, and monthly performance
reports.
CHAPTER 3
SOFTWARE COMPONENT
Middleware Support
Middleware functions can be used to handle requests, process data, perform authentication, or handle errors
before sending responses.
Template Engines Integration
Express supports various template engines like EJS, Pug, or Handlebars to dynamically render HTML
pages on the server.
Easy to Integrate
It can be integrated with databases (like MongoDB, MySQL) and third-party libraries, making it highly
versatile for full-stack development.
CSS (Cascading Style Sheets) is a stylesheet language used to define the visual appearance and formatting of
web pages written in HTML. It plays a crucial role in web development by controlling the layout, colors,
fonts, spacing, animations, and responsiveness of websites. While HTML is responsible for the structure
and content of a web page, CSS is responsible for how it looks and feels.
Since its introduction, CSS has evolved significantly. With the advent of CSS3, developers now have access to
a wide range of powerful features such as media queries, transitions, animations, and flexible box
(Flexbox) or grid layouts, enabling them to design visually dynamic and responsive web applications.
In a Courier Management System, CSS is essential for designing a clean, user-friendly interface for
different user roles such as:
Customers
CSS enhances the experience of booking shipments, viewing tracking information, and accessing their
shipment history with clearly styled forms, buttons, and alerts.
Admins and Sub-Admins
Dashboard interfaces, navigation menus, and report views are styled to be both visually appealing and
functionally intuitive.
Responsive Design
The system must work well on different screen sizes—CSS media queries ensure that the application
is mobile-friendly, especially for couriers updating delivery statuses on mobile devices.
Theme Consistency
CSS maintains a uniform color theme, branding elements (like logos and buttons), and layout across all
modules, contributing to a professional and trustworthy system interface.
Flexbox and Grid: Layout systems that allow precise alignment and distribution of space
among elements, especially useful for dashboards and forms.
CSS Transitions and Animations: Smooth visual effects for interactive feedback (e.g., button
hover effects, notification fades).
Custom Fonts and Icons: Use of web fonts (e.g., Google Fonts) and icon libraries ( like Font
Awesome) to enhance visual appeal.
Variables and Custom Properties: Enable theming and easier maintenance of consistent design
values (e.g., primary color, font sizes).
Z-index and Layering: Used to control the stacking order of elements such as modals, tooltips,
and menus.
MySQL is an open-source relational database management system (RDBMS) that is widely used for
managing and organizing data in web applications. It is based on Structured Query Language (SQL), the
standard language for accessing and manipulating databases.
MySQL is known for its speed, reliability, ease of use, and flexibility, making it one of the most popular
database systems in the world. It is commonly used in conjunction with server-side scripting languages
like PHP, and is part of many technology stacks such as LAMP (Linux, Apache, MySQL, PHP)
and XAMPP (cross-platform Apache, MariaDB/MySQL, PHP, Perl).
Easily integrates with server-side languages like PHP, Python, and Java for dynamic web applications.
Efficient Data Handling
Supports complex queries, joins, stored procedures, and indexing for advanced data manipulation.
Reliability
Offers strong data backup, recovery, and transactional support, ensuring data consistency and safety.
Support for Multiple Users
Can handle multiple users simultaneously without compromising performance.
CHAPTER 4
SOFTWARE REQUIREMENT
Software Requirement
1. Operating System
Compatible with Windows, Linux, or macOS for both development and deployment.
The system can be hosted on any standard server OS supporting PHP and MySQL.
2. Web Server
Apache HTTP Server (commonly used with XAMPP package) to serve the web application.
Supports PHP execution and handles HTTP requests and responses.
5. Development Environment
XAMPP or similar package (includes Apache, PHP, MySQL) for local development and testing.
Code editor/IDE such as Visual Studio Code, PHPStorm, or Sublime Text.
6. Security Components
SSL/TLS certificates for secure HTTPS connections.
PHP libraries for input validation, encryption, and session management.
7. Notification Services
Integration with SMS gateway APIs or email servers for sending shipment status notifications.
8. Browser Compatibility
The system must support all major modern web browsers including Google Chrome,
Mozilla Firefox, Microsoft Edge, and Safari.
2. Animal Management
Admins or authorized staff can add, update, or delete animal records.
Each record must include:
o Species, name, gender, age
o Health history, diet type, feeding schedule
o Enclosure location and photos
System should support classification by species, habitat, or conservation status.
4. Staff Management
Admins can manage staff records (zookeepers, vets, support staff).
Staff can be assigned to specific animals, enclosures, or zones.
Shift timings and daily task assignments can be viewed and updated.
7. Real-Time Notifications
Users should receive system-generated alerts for:
o Upcoming events
o Scheduled feeding or medical updates
o Visitor booking confirmations
o Critical system updates (e.g., animal health issues)
Notifications can be sent via email or SMS API integration.
1. Performance Requirements
The system should handle multiple concurrent users (e.g., admins, zookeepers, and visitors)
without significant delays.
Web pages (e.g., animal profiles, ticket booking) should load within 2–3 seconds under normal load.
Real-time tracking, notifications, and schedule updates should reflect changes immediately.
2. Scalability
The system must be capable of supporting:
o Additional animals and enclosures
o Increased number of staff members and visitors
o Future expansion to multiple zoo branches
Architecture should support adding new modules (e.g., wildlife adoption, research portals) without
core rework.
3. Security Requirements
All user data must be protected using secure login, encryption, and session management.
Implement role-based access control (RBAC) to prevent unauthorized access to restricted modules.
The system must be safeguarded against common vulnerabilities:
o SQL Injection
o Cross-Site Scripting (XSS)
o Cross-Site Request Forgery (CSRF)
5. Usability
The user interface should be clean, responsive, and easy to navigate for both technical and non-
technical users.
Minimal training should be required for staff to use features like schedule logging or report generation.
Use of icons, tooltips, and consistent design elements should enhance user experience.
6. Maintainability
Code must be well-documented, modular, and follow standard naming conventions.
Developers should be able to easily debug, modify, or upgrade features.
Logs should track key actions (e.g., login, data updates, errors) for monitoring and troubleshooting.
7. Portability
The system should run on multiple platforms: Windows, Linux, and macOS.
Should be accessible on desktops, tablets, and smartphones using modern web browsers.
8. Compatibility
The application must be compatible with major browsers such as:
o Google Chrome
o Mozilla Firefox
o Microsoft Edge
o Safari
CHAPTER 5
SYSTEM DESIGN
SYSTEM DESIGN
System design is the most creative and challenging. The System Design Document describes
the system requirements, operating environment, system and subsystem architecture, files and
database design, input formats, output layouts, human-machine interfaces, detailed design,
processing logic, and external interfaces
A data flow diagram (DFD) maps out the flow of information for any process or system. It
uses defined symbols like rectangles, circles and arrows, plus short text labels, to show data
inputs, outputs, storage points and the routes between each destination.
In user panel design we have done our task for user. Here we provide facility
about Zoo Management system. In index page user can select any options
We have design user login facility to manage and update all of the information. It is fully
secured page. Without appropriate username and password it cannot be accessed by
anyone. For admin login after giving username and password we need to click a login
button , when we click login button it is not directly entered in home page , it stay in
login page. Then it starts a session and set two variables called username and password.
If the username and password are matched with database, it can enter in home page. It is
not possible without click login button. In case if username or password are not matched
with database than Invalid username or password massage is shown. We can describe
the login facility in admin login by using below flow chart given below
5.2 ER DIAGRAM
The Entity-Relationship (ER) diagram for a Zoo Management System (ZMS) involves identifying the key
entities, their attributes, and the relationships between them. Below is a detailed description of the ER
diagram for the ZMS, including the entities, their attributes, and the relationships.
The diagram helps in database design by organizing data elements and defining how they relate to each
other logically.
1. Animal
Attributes: AnimalID (PK), Name, Species, Age, Gender, HealthStatus,
DietaryRequirements, HabitatID (FK)
Description: Represents the animals in the zoo, including their basic information and health status.
2. Habitat
Attributes: HabitatID (PK), HabitatName, Description, Capacity
Description: Represents the habitats or enclosures where animals are housed.
3. Staff
Attributes: StaffID (PK), Name, Role, ContactNumber, Email, DepartmentID (FK)
Description: Represents the staff members working at the zoo, including their roles and
contact information.
4. Department
Attributes: DepartmentID (PK), DepartmentName, Description
Description: Represents different departments within the zoo, such as veterinary, maintenance,
and administration.
5. Visitor
Attributes: VisitorID (PK), Name, Age, ContactNumber, Email, TicketID (FK)
Description: Represents visitors to the zoo, including their basic information and ticket details.
6. Ticket
Attributes: TicketID (PK), TicketType, PurchaseDate, ValidFrom, ValidTo, VisitorID (FK)
Description: Represents tickets purchased by visitors, including the type of ticket and
validity period.
7. Inventory
Attributes: InventoryID (PK), ItemName, ItemType, Quantity, SupplierID (FK)
Description: Represents items in the zoo's inventory, such as animal food and medical supplies.
8. Supplier
Attributes: SupplierID (PK), SupplierName, ContactNumber, Email, Address
Description: Represents suppliers of inventory items, including their contact information.
9. HealthRecord
Attributes: RecordID (PK), AnimalID (FK), Date, Description, VeterinarianID (FK)
Description: Represents health records of animals, including details of veterinary check-ups
and treatment
ER DIAGRAM (ER)
CHAPTER 6
SNAPSHOTS
Home Page
Gallery
Animals
Tickets
Vacancies
Events
Contact Us
Admin Panel
Login Panel
CHAPTER 7
CODING
<?php
require '../db/db_connect.php';
$animalTable = new Table('animals');
<?php
require_once '../db/db_connect.php';
// $galleryTable = new Table('gallery');
// $galleries = $galleryTable->findInDatabase('g_archived', 'false');
<?php
require_once '../db/db_connect.php';
$classTable = new Table('classifications');
$classId=$_GET['class_id'];
<?php
require_once '../db/db_connect.php';
$classTable = new Table('classifications');
$animalImageTable = new Table('animal_images');
$animalTable = new Table('animals');
<?php
require '../db/db_connect.php';
$fileName = pathinfo($_FILES['cv']['name'])['filename'];
$newFileName = $fileName . '_' . time();
$extension = pathinfo($_FILES['cv']['name'])['extension'];
$fullName = $newFileName . '.' . $extension;
$_POST['vacancy_id'] = $_GET['vac_id'];
$applicationTable->insertInDatabase($_POST);
header('Location:apply_vacancy?msg= Application received. You\'ll be contacted after few days');
<?php
$ticketTable = new
Table('tickets'); if
(isset($_POST['submit'])) {
unset($_POST['submit']);
$totalPrice = $_POST['regular_num'] * 6 + $_POST['child_num'] * 2 + $_POST['student_num'] * 3;
if ($totalPrice == 0) {
header('Location:ticket_page?msg=Booking failed. You must select at least one ticket&type=danger');
} else {
$_POST['visitor_id'] = $_SESSION['visitor_id'];
$ticketTable->insertInDatabase($_POST);
header('Location:ticket_page?msg=Ticket booked successfully!! Your total price is: $' . $totalPrice .
'&type=success');
}
}
<?php
require '../db/db_connect.php';
$vacancies->execute();
<?php
$eventsTable = new Table('events');
$events = $eventsTable->findInDatabase('event_archived', 'false');
<?php
$testimonialTable = new Table('testimonials');
if (isset($_POST['submit'])) {
unset($_POST['submit']);
$_POST['sponsor_id'] = $_SESSION['sponsor_id'];
$testimonialTable->insertInDatabase($_POST); header('Location:post_testimonial?
msg=Testimonial added successfully');
}
$title = "Zoo - Add Testimonial";
$content = loadTemplate('../templates/post_testimonial_template.php', []);
<?php
$sponsorTable = new
Table('sponsors'); if
(isset($_POST['submit'])) {
unset($_POST['submit']);
if ($_POST['sponsor_id'] == "") {
$_POST['s_password'] = password_hash($_POST['s_password'], PASSWORD_DEFAULT);
}
if ($_POST['sponsor_id'] != "") {
$_SESSION['s_client_name'] = $_POST['s_client_name'];
$_SESSION['s_existing_customer'] = $_POST['s_existing_customer'];
$_SESSION['s_phone_number'] = $_POST['s_phone_number'];
$_SESSION['s_client_address'] = $_POST['s_client_address'];
$_SESSION['s_yearly_revenue'] = $_POST['s_yearly_revenue'];
$_SESSION['s_business_type'] = $_POST['s_business_type'];
$_SESSION['s_email'] = $_POST['s_email'];
}
$sponsorTable->saveInDatabase($_POST, 'sponsor_id');
if ($_POST['sponsor_id'] == "")
header('Location:register_sponsor?msg=Applied for registration. You can login after few hours.');
else
header('Location:register_sponsor?msg=Updated Successfully');
}
<?php
$visitorTable = new Table('visitors');
if (isset($_POST['submit'])) {
unset($_POST['submit']);
if ($_POST['visitor_id'] == "") {
$_POST['v_password'] = password_hash($_POST['v_password'], PASSWORD_DEFAULT);
}
$visitorTable->saveInDatabase($_POST, 'visitor_id');
if ($_POST['visitor_id'] != "") {
$_SESSION['v_firstname'] = $_POST['v_firstname'];
$_SESSION['v_lastname'] = $_POST['v_lastname'];
$_SESSION['v_email'] = $_POST['v_email'];
$_SESSION['v_address'] = $_POST['v_address'];
}
<?php
$sponsorAnimalTable = new Table('sponsored_animals');
if (isset($_POST['submit'])) {
unset($_POST['submit']);
$_POST['animal_id'] = $_GET['an_id'];
$_POST['sponsor_id'] = $_SESSION['sponsor_id'];
$fileName = pathinfo($_FILES['image']['name'])['filename'];
$newFileName = $fileName . '_' . time();
$extension = pathinfo($_FILES['image']['name'])['extension'];
$fullName = $newFileName . '.' . $extension;
$_POST['signage_photo'] = $fullName;
$price = $_POST['total_price'];
$sBand;
$_POST['sponsor_band'] = $sBand;
$sponsorAnimalTable->insertInDatabase($_POST);
(function($) {
"use strict";
$(window).resize(function()
{ if ($(window).width() <
768) {
$('.sidebar .collapse').collapse('hide');
};
});
$('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function(e) {
if ($(window).width() > 768) {
var e0 = e.originalEvent,
delta = e0.wheelDelta || -e0.detail;
this.scrollTop += (delta < 0 ? 1 : -1) * 30;
e.preventDefault();
}
});
$(document).on('scroll', function() {
var scrollDistance = $
(this).scrollTop(); if (scrollDistance >
100) {
$('.scroll-to-top').fadeIn();
} else {
$('.scroll-to-top').fadeOut();
}
});
$('html, body').stop().animate({
scrollTop: ($($anchor.attr('href')).offset().top)
}, 1000, 'easeInOutExpo');
e.preventDefault();
});
})(jQuery);
<?php
$badge = [
'high' => 'danger',
'medium' =>
'warning', 'low' =>
'success'
];
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] . '
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
} ?>
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['attended']) ? "Attended" : "" ?>
Watchlist</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 600px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Image</th>
<th scope="col">Given Name</th>
<th scope="col">Classification</th>
<th scope="col">Issue</th>
<th scope="col">Severity</th>
<th scope="col">Date Issued</th>
<th scope="col">Attended</th>
<?php if ($_SESSION['role'] != "zookeeper") { ?>
<th scope="col">Action</th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php foreach ($watchlists as $key => $watchlist) {
$animal = $getAnimalData($watchlist['animal_id']);
$className = $getClassName($animal['class_id']);
$imageName = $getImageName($animal['animal_id']);
?>
<tr>
<?php
$animals2 = $animals->fetchAll();
$classifications2 = $classifications->fetchAll();
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] . '
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
} ?>
<h1 class="h3 mb-4 text-gray-800">Set Animal of the Week</h1>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<?php
foreach ($classifications2 as $key => $row) { ?>
<li class="nav-item">
<a class="nav-link <?php if ($key == 0) echo "active" ?>" data-toggle="tab" href="#<?php echo
$row['class_table_name'] ?>" role="tab"><?php echo $row['class_display_name']; ?></a>
</li>
<?php } ?>
</ul>
<div class="tab-content" id="myTabContent">
<?php
foreach ($classifications2 as $key => $class) { ?>
<div class="tab-pane fade <?php if ($key == 0) echo "show active" ?>" id="<?php echo
$class['class_table_name'] ?>" role="tabpanel">
<?php
$classId = $class['class_id'];
$tableName = $class['class_table_name'];
?>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Image</th>
<th scope="col">Name</th>
<th scope="col">Species Name</th>
<th scope="col">DOB</th>
<th scope="col">Gender</th>
<th scope="col">Join Date</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php
$count = 1;
foreach ($animals2 as $animal) { ?>
<?php if ($animal['class_id'] == $classId) {
$imageName = $getImageName($animal['animal_id']);
?>
<tr>
<th scope="row"><?= $count++ ?></th>
<td><img src="../../img/animals/<?= $imageName ?>" alt="" width="120px"
style="border-radius: 20px;"></td>
<td><?= $animal['an_given_name'] ?></td>
<td><?= $animal['an_species_name'] ?></td>
<td><?= $animal['an_dob'] ?></td>
<td><?= $animal['an_gender'] ?></td>
<td><?= $animal['an_joindate'] ?></td>
<td>
<a href="archive?set_an_week=<?= $animal['animal_id'] ?>" class="btn btn-
success btn-sm d-inline-block"><i class="fas fa-trophy"></i> Set Animal of the Week</a>
</td>
</tr>
<?php } ?>
<?php } ?>
</tbody>
</table>
</div>
</div>
<?php } ?>
</div>
<div class="mt-4">
<div class="card mb-4">
<div class="card-header h5 text-gray-800 font-weight-bold">
Current Animal of the Week
</div>
<div class="card-body d-flex">
<?php if ($currAnimal != null) { ?>
<div class="text-center">
<img src="../../img/animals/<?= $getImageName($currAnimal['animal_id']) ?>" alt=""
width="60%" style="border-radius: 20px">
</div>
<div>
<h6> <span class="text-muted">Given name:</span> <?=
$currAnimal['an_given_name'] ?></h6>
<h6> <span class="text-muted">Species name:</span> <?=
$currAnimal['an_species_name'] ?></h6>
<h6> <span class="text-muted">Date of birth:</span> <?= $currAnimal['an_dob']
?></h6>
<h6> <span class="text-muted">Gender:</span> <?= $currAnimal['an_gender'] ==
"m" ? "Male":"Female" ?></h6>
<h6> <span class="text-muted">Zoo join date:</span> <?=
$currAnimal['an_joindate'] ?></h6>
</div>
<?php } else { ?>
Animal of the week not set
<?php } ?>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row pb-5">
<div class="col-md-8 order-md-1">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-' . $_GET['type'] . ' alert-dismissible fade show" role="alert">' .
$_GET['msg'] . '
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800"><?= isset($_GET['l_id']) ? "Edit" : "Add" ?> Location</h1>
<form action="" method="post">
<input type="hidden" name="location_id" value="<?php if (isset($location['location_id'])) echo
$location['location_id'] ?>">
<div class="mb-4 field-required">
<label for="location_name">Location Name</label>
<input type="text" value="<?= isset($location['location_name']) ? $location['location_name'] : ""
?>" class="form-control" id="location_name" placeholder="" name="location_name" required>
</div>
<!-- <hr class="mb-3"> -->
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="archived" name="location_archived"
value="true" <?= isset($location['location_archived']) && $location['location_archived'] == "true" ?
"checked" : "" ?>>
<label class="custom-control-label" for="archived">Archived</label>
</div>
<hr class="mb-4">
<button class="btn btn-primary btn-lg btn-block" type="submit" name="submit"><?=
isset($_GET['l_id']) ? "Edit" : "Add" ?> Location</button>
</form>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] . '
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View Archived Accounts </h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Full Name</th>
<th scope="col">Email</th>
<th scope="col">Role</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($accounts as $key => $account) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $account['admin_name'] ?></td>
<td><?= $account['admin_email'] ?></td>
<td><?= $account['role'] ?></td>
<td>
<a href="archive?unarc_account_id=<?= $account['admin_id'] ?>" class="btn btn-
success btn-sm d-inline-block"><i class="fas fa-box-open"></i> Unarchive</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['archived']) ? "Archived" : "" ?>
Locations</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 600px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Location Name</th>
<th scope="col">Archived</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($locations as $key => $location) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $location['location_name'] ?></td>
<td><?= $location['location_archived'] ?></td>
<?php if (!isset($_GET['archived'])) { ?>
<td style="max-width: 200px;">
<a href="save_location?l_id=<?= $location['location_id'] ?>" class="btn btn-primary
btn-sm d-inline-block"><i class="fas fa-edit"></i> Edit</a>
<a href="archive?l_id=<?= $location['location_id'] ?>&archive=true" class="btn btn-
warning btn-sm d-inline-block"><i class="fas fa-archive"></i> Archive</a>
</td>
<?php } else { ?>
<td style="max-width: 140px">
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] . '
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['archived']) ? "Archived" : "" ?>
Employees</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 700px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Employee Name</th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th scope="col">Position</th>
<th scope="col">Contract Type</th>
<th scope="col">Contract Start Date</th>
<th scope="col">Contract End Date</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($employees as $key => $employee) {
$app = $getApplication($employee['application_id']);
$vac = $getVacancy($employee['vacancy_id']);
?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $app['a_fullname'] ?></td>
<td><?= $app['a_email'] ?></td>
<div class="container">
<div class="row pb-5">
<div class="col-md-8 order-md-1">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800"><?= isset($_GET['account_id']) ? "Edit" : "Add" ?> User
Account</h1>
<form action="" method="post">
<input type="hidden" name="admin_id" value="<?php if (isset($account['admin_id'])) echo
$account['admin_id'] ?>">
<div class="mb-4 field-required">
<label for="class_display_name">Full Name</label>
?>
<h1 class="h3 mb-4 text-gray-800">View Animal Sponsorship Applications</h1>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<?php
foreach ($classes as $key => $row) { ?>
<li class="nav-item">
<a class="nav-link <?php if ($key == 0) echo "active" ?>" data-toggle="tab" href="#<?php
echo $row['status'] ?>" role="tab"><span class="text-capitalize"><?= $row['status'] ?></span></a>
</li>
<?php } ?>
</ul>
<div class="tab-content" id="myTabContent">
<?php
foreach ($classes as $key => $class) { ?>
<div class="tab-pane fade <?php if ($key == 0) echo "show active" ?>" id="<?php echo
$class['status'] ?>" role="tabpanel">
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Client/Company Name</th>
<th scope="col">Phone</th>
<th scope="col">Yearly Revenue</th>
<th scope="col">Business Type</th>
<th scope="col">Website</th>
<th scope="col">Sponsorship Band</th>
<th scope="col">Total Price</th>
<th scope="col">Start Date</th>
<th scope="col">End Date</th>
<th scope="col">Sponsored Animal</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<?php
$count = 1;
foreach ($sponAni as $spon) { ?>
<?php if ($spon['s_status'] == $class['status']) {
$sponsorData = $getSponsor($spon['sponsor_id']);
?>
<tr>
<th scope="row"><?= $count++ ?></th>
<td><?= $sponsorData['s_client_name'] ?></td>
<td><?= $sponsorData['s_phone_number'] ?></td>
<td><?= $sponsorData['s_yearly_revenue'] ?></td>
<td><?= $sponsorData['s_business_type'] ?></td>
<td><?= $spon['s_url'] ?></td>
<td><?= $spon['sponsor_band'] ?></td>
<td>$<?= $spon['total_price'] ?></td>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<h1 class="h3 mb-4 text-gray-800">View Booked Tickets</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 600px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Booked For</th>
<th scope="col">Child Tickets #</th>
<th scope="col">Student Tickets #</th>
<th scope="col">Regular Tickets #</th>
<th scope="col">Total Price</th>
<th scope="col">Visit Date</th>
</tr>
</thead>
<tbody>
<?php foreach ($tickets as $key => $ticket) { ?>
<tr>
<div class="container">
<div class="row pb-5">
<div class="col-md-8 order-md-1">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800"><?= isset($_GET['vacancy_id']) ? "Edit" : "Add" ?>
Vacancy</h1>
<form action="" method="post">
<input type="hidden" name="vacancy_id" value="<?php if (isset($vacancy['vacancy_id'])) echo
$vacancy['vacancy_id'] ?>">
<div class="mb-4 field-required">
<label for="class_display_name">Position</label>
<input type="text" value="<?= isset($vacancy['v_position']) ? $vacancy['v_position'] : "" ?
>" class="form-control" id="class_display_name" placeholder="Eg: Receptionist" name="v_position"
required>
</div>
<div class="mb-4 field-required">
<label for="v_description">Description</label>
<textarea name="v_description" placeholder="....." class="form-control" id="v_description"
cols="30" rows="5" required><?= isset($vacancy['v_description']) ? $vacancy['v_description'] : ""
?></textarea>
</div>
<div class="mb-4 field-required">
<label for="v_type">Vacancy Type</label>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View <span class="text-capitalize"><?= $_GET['type'] . 's'
?></span> </h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Full Name</th>
<th scope="col">Email</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($accounts as $key => $account) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $account['admin_name'] ?></td>
<td><?= $account['admin_email'] ?></td>
<td>
<?php if ($account['admin_id'] != $_SESSION['admin_id']) { ?>
<a href="archive?arc_account_id=<?= $account['admin_id']
?>&arc_account_type=<?= $account['role']?>" class="btn btn-warning btn-sm d-inline-block"><i
class="fas fa-archive"></i> Archive</a>
<?php } ?>
<a href="save_account?account_id=<?= $account['admin_id'] ?>" class="btn btn-
primary btn-sm d-inline-block ml-3"><i class="fas fa-edit"></i> Edit</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php
$animals2 = $animals->fetchAll();
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['archived']) ? "Archived" : "" ?>
Animals</h1>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<?php
foreach ($classifications as $key => $row) { ?>
<li class="nav-item">
<a class="nav-link <?php if ($key == 0) echo "active" ?>" data-toggle="tab" href="#<?php
echo $row['class_table_name'] ?>" role="tab"><?php echo $row['class_display_name']; ?></a>
</li>
<?php } ?>
</ul>
<div class="tab-content" id="myTabContent">
<?php
foreach ($classifications2 as $key => $class) { ?>
<div class="tab-pane fade <?php if ($key == 0) echo "show active" ?>" id="<?php echo
$class['class_table_name'] ?>" role="tabpanel">
<?php
$classId = $class['class_id'];
$tableName = $class['class_table_name'];
?>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Image</th>
<th scope="col">Name</th>
<th scope="col">Species Name</th>
<th scope="col">DOB</th>
<th scope="col">Gender</th>
<th scope="col">Lifespan</th>
<th scope="col">Location</th>
<th scope="col">Diet Requirement</th>
<th scope="col">Natural Habitat</th>
<th scope="col">Population Distribution</th>
<th scope="col">Join Date</th>
<th scope="col">Height</th>
<th scope="col">Weight</th>
<th scope="col">Archived</th>
<!-- you can add more classification data here to show animals in tab -->
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<?php
$applications = $applications_pdo->fetchAll();
$classes = [
['type' => 'unreviewed'],
['type' =>
'accepted'], ['type'
=> 'rejected']
]
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View Job Applications</h1>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<!-- <li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#unreviewed"
role="tab">Unreviewed</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#accepted" role="tab">Accepted</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#rejected" role="tab">Rejected</a>
</li> -->
<?php
foreach ($classes as $key => $row) { ?>
<li class="nav-item">
<a class="nav-link <?php if ($key == 0) echo "active" ?>" data-toggle="tab" href="#<?php
echo $row['type'] ?>" role="tab"><span class="text-capitalize"><?= $row['type']; ?></span></a>
</li>
<?php } ?>
</ul>
<div class="tab-content" id="myTabContent">
<?php
foreach ($classes as $key => $class) { ?>
<div class="tab-pane fade <?php if ($key == 0) echo "show active" ?>" id="<?php echo
$class['type'] ?>" role="tabpanel">
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered">
<thead>
<tr>
<th scope="col">#</th>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['archived']) ? "Archived" : "" ?>
Classifications</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 700px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Classification Display Name</th>
<th scope="col">Classification Table Name</th>
<th scope="col">Archived</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($classifications as $key => $classification) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $classification['class_display_name'] ?></td>
<td><?= $classification['class_table_name'] ?></td>
<td><?= $classification['class_archived'] ?></td>
<?php if (!isset($_GET['archived'])) { ?>
<td style="max-width: 200px;">
<a href="save_classification?class_id=<?= $classification['class_id'] ?>" class="btn
btn-primary btn-sm d-inline-block"><i class="fas fa-edit"></i> Edit</a>
<a href="archive?class_id=<?= $classification['class_id'] ?>&archive=true"
class="btn btn-warning btn-sm d-inline-block"><i class="fas fa-archive"></i> Archive</a>
</td>
<?php } else { ?>
<td style="max-width: 140px">
<a href="archive?class_id=<?= $classification['class_id'] ?>&archive=false"
class="btn btn-success btn-sm d-inline-block"><i class="fas fa-box-open"></i> Unarchive</a>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['archived']) ? "Archived" : "" ?>
Events</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 600px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Event Image</th>
<th scope="col">Event Name</th>
<th scope="col">Description</th>
<th scope="col">Start Date</th>
<th scope="col">Event Duration</th>
</tr>
</thead>
<tbody>
<?php foreach ($events as $key => $event) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td>
<?php if ($event['event_image'] != "") { ?>
<img src="../../img/event/<?= $event['event_image'] ?>" alt="" width="100px"
style="border-radius: 20px;">
<?php } ?>
</td>
<td><?= $event['event_name'] ?></td>
<td><?= $event['event_description'] ?></td>
<td><?= $event['event_start_date'] ?></td>
<?php if (!isset($_GET['archived'])) { ?>
<td style="max-width: 200px;">
pointHitRadius: 10,
pointBorderWidth: 2,
data: [0, 10000, 5000, 15000, 10000, 20000, 15000, 25000, 20000, 30000, 25000, 40000],
}],
},
options: {
maintainAspectRatio: false,
layout: {
padding: {
left: 10,
right: 25,
top: 25,
bottom: 0
}
},
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false,
drawBorder: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
maxTicksLimit: 5,
padding: 10,
// Include a dollar sign in the ticks
callback: function(value, index, values)
{ return '$' + number_format(value);
}
},
gridLines: {
color: "rgb(234, 236, 244)",
zeroLineColor: "rgb(234, 236, 244)",
drawBorder: false,
borderDash: [2],
zeroLineBorderDash: [2]
}
}],
},
legend: {
display: false
},
tooltips: {
backgroundColor: "rgb(255,255,255)",
bodyFontColor: "#858796",
titleMarginBottom: 10,
titleFontColor: '#6e707e',
titleFontSize: 14,
borderColor: '#dddfeb',
borderWidth: 1,
xPadding: 15,
yPadding: 15,
displayColors: false,
intersect: false,
mode: 'index',
caretPadding: 10,
callbacks: {
label: function(tooltipItem, chart) {
var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || '';
return datasetLabel + ': $' + number_format(tooltipItem.yLabel);
}
}
}
}
});
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
}
?>
<h1 class="h3 mb-4 text-gray-800">View Active Vacancies</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 700px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Position</th>
<th scope="col">Description</th>
<th scope="col">Contract Type</th>
<th scope="col">Start Date</th>
<th scope="col">End Date</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($vacancies as $key => $vacancy) { ?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><?= $vacancy['v_position'] ?></td>
<td><?= $vacancy['v_description'] ?></td>
<td class="text-capitalize"><?= $vacancy['v_type'] ?></td>
<td><?= $vacancy['v_start_date'] ?></td>
<td><?= $vacancy['v_end_date'] == "0000-00-00" ? "N/A" : $vacancy['v_end_date']
?></td>
<td>
<a href="save_vacancy?vacancy_id=<?= $vacancy['vacancy_id'] ?>" class="btn btn-
primary btn-sm d-inline-block"><i class="fas fa-edit"></i> Edit</a>
<a href="archive?vacancy_id=<?= $vacancy['vacancy_id'] ?>" class="btn btn-
warning btn-sm d-inline-block"><i class="fas fa-archive"></i> Archive</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<?php
$badge = [
'high' => 'danger',
'medium' =>
'warning', 'low' =>
'success'
];
?>
<div class="container-fluid">
<div class="row">
<div class="col">
<?php
if (isset($_GET['msg'])) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">' . $_GET['msg'] .
'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>';
} ?>
<h1 class="h3 mb-4 text-gray-800">View <?= isset($_GET['attended']) ? "Attended" : "" ?>
Watchlist</h1>
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered" style="min-width: 600px;">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Image</th>
<th scope="col">Given Name</th>
<th scope="col">Classification</th>
<th scope="col">Issue</th>
<th scope="col">Severity</th>
<th scope="col">Date Issued</th>
<th scope="col">Attended</th>
<?php if ($_SESSION['role'] != "zookeeper") { ?>
<th scope="col">Action</th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php foreach ($watchlists as $key => $watchlist) {
$animal = $getAnimalData($watchlist['animal_id']);
$className = $getClassName($animal['class_id']);
$imageName = $getImageName($animal['animal_id']);
?>
<tr>
<th scope="row"><?= $key + 1 ?></th>
<td><img src="../../img/animals/<?= $imageName ?>" alt="" width="100px"
style="border-radius: 20px;"></td>
<td><?= $animal['an_given_name'] ?></td>
:root {
--input-padding-x: 1.5rem;
--input-padding-y: 0.75rem;
}
body {
background: #014e2e;
background: linear-gradient(to right, #014e2e, #498d71);
}
.card-signin {
border: 0;
border-radius: 1rem;
box-shadow: 0 0.5rem 1rem 0 rgba(0, 0, 0, 0.1);
}
.card-signin .card-title {
margin-bottom: 2rem;
font-weight: 300;
font-size: 1.5rem;
}
.card-signin .card-body
{ padding: 2rem;
}
.form-signin
{ width:
100%;
}
.form-signin .btn
{ font-size: 80%;
border-radius: 5rem;
letter-spacing: 0.1rem;
font-weight: bold;
padding: 1rem;
transition: all 0.2s;
}
.form-label-group
{ position: relative;
margin-bottom: 1rem;
}
.form-label-group input
{ height: auto;
border-radius: 2rem;
}
line-height: 1.5;
color: #495057;
border: 1px solid transparent;
border-radius: 0.25rem;
transition: all 0.1s ease-in-
out;
}
.form-label-group input::-webkit-input-placeholder {
color: transparent;
Department of Computer Application-RNSFGC Page | 89
Zoo Management
.form-label-group input:-ms-input-placeholder {
color: transparent;
}
.form-label-group input::-ms-input-placeholder {
color: transparent;
}
.form-label-group input::-moz-placeholder {
color: transparent;
}
.form-label-group input::placeholder {
color: transparent;
}
.form-label-group input:not(:placeholder-shown) {
padding-top: calc(var(--input-padding-y) + var(--input-padding-y) * (2 /
3)); padding-bottom: calc(var(--input-padding-y) / 3);
}
.btn-google
{ color:
white;
background-color: #ea4335;
}
.btn-facebook {
color: white;
background-color: #3b5998;
}
.cursor-pointer{
cursor: pointer;
}
color: #777;
}
}
root {
--blue: #4e73df;
--indigo: #6610f2;
--purple: #6f42c1;
--pink: #e83e8c;
--red: #e74a3b;
--orange: #fd7e14;
--yellow: #f6c23e;
--green: #1cc88a;
--teal: #20c9a6;
--cyan: #36b9cc;
--white: #fff;
--gray: #858796;
--gray-dark: #5a5c69;
--primary: #4e73df;
--secondary: #858796;
--success: #1cc88a;
--info: #36b9cc;
--warning: #f6c23e;
--danger: #e74a3b;
--light: #f8f9fc;
--dark: #5a5c69;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica
Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier
New", monospace;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section
{ display: block;
}
body {
margin: 0;
font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica
Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color
Emoji"; font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color:
#858796; text-
align: left;
background-color: #fff;
}
[tabindex="-1"]:focus {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
p{
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol
{
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote
{ margin: 0 0
1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup
{
position: relative;
font-size: 75%;
Department of Computer Application-RNSFGC Page | 96
Zoo Management
line-height: 0;
vertical-align: baseline;
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a{
color: #4e73df;
text-decoration: none;
background-color: transparent;
}
a:hover {
color: #224abe;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg {
overflow: hidden;
vertical-align: middle;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #858796;
text-align: left;
caption-side: bottom;
}
th {
text-align: inherit;
}
label {
display: inline-block;
margin-bottom: 0.5rem;
}
button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea
{ margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
select {
word-wrap: normal;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button:not(:disabled),
[type="button"]:not(:disabled),
[type="reset"]:not(:disabled),
[type="submit"]:not(:disabled) {
cursor: pointer;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
h1, .h1 {
font-size: 2.5rem;
}
h2, .h2 {
font-size: 2rem;
}
h3, .h3 {
font-size: 1.75rem;
}
h4, .h4 {
font-size: 1.5rem;
}
h5, .h5 {
font-size: 1.25rem;
}
h6, .h6 {
font-size: 1rem;
}
.lead {
font-size: 1.25rem;
font-weight: 300;
}
.display-1 {
font-size: 6rem;
font-weight:
300;
line-height: 1.2;
}
.display-2 {
font-size: 5.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-3 {
font-size: 4.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-4 {
font-size: 3.5rem;
font-weight: 300;
line-height: 1.2;
}
hr {
margin-top: 1rem;
margin-bottom: 1rem;
border: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
small,
.small {
font-size: 80%;
font-weight: 400;
}
mark,
.mark {
padding: 0.2em;
background-color: #fcf8e3;
}
.list-unstyled
{ padding-left:
0; list-style:
none;
}
.list-inline
{ padding-left:
0; list-style:
none;
}
.list-inline-item {
display: inline-block;
}
.list-inline-item:not(:last-child) {
margin-right: 0.5rem;
}
.initialism {
font-size: 90%;
text-transform: uppercase;
}
.blockquote {
margin-bottom: 1rem;
font-size: 1.25rem;
}
.blockquote-footer {
display: block;
font-size: 80%;
color: #858796;
}
.blockquote-footer::before {
content: "\2014\00A0";
}
.img-fluid {
max-width: 100%;
height: auto;
}
.img-thumbnail
{ padding: 0.25rem;
background-color: #fff;
border: 1px solid
#dddfeb; border-radius:
0.35rem; max-width:
100%;
height: auto;
}
.figure {
display: inline-block;
}
.figure-img {
margin-bottom: 0.5rem;
line-height: 1;
.figure-caption {
font-size: 90%;
color: #858796;
}
code {
font-size: 87.5%;
color: #e83e8c;
word-break: break-word;
}
a > code
{ color:
inherit;
}
bd {
padding: 0.2rem 0.4rem;
font-size: 87.5%;
color: #fff;
background-color: #3a3b45;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 100%;
font-weight: 700;
}
pre {
display: block;
font-size: 87.5%;
color: #3a3b45;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
.pre-scrollable {
max-height: 340px;
overflow-y: scroll;
}
.container
{ width:
100%;
padding-right: 0.75rem;
padding-left: 0.75rem;
margin-right: auto;
margin-left: auto;
}
.container-fluid {
width: 100%;
padding-right: 0.75rem;
padding-left: 0.75rem;
margin-right: auto;
margin-left: auto;
}
.row {
display: flex;
flex-wrap: wrap;
margin-right: -0.75rem;
margin-left: -0.75rem;
}
.no-gutters {
margin-right: 0;
margin-left: 0;
}
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,
.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9,
.col-sm-10, .col-sm-11, .col-sm-12, .col-sm,
.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8,
.col- md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,
.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-
10, .col-lg-11, .col-lg-12, .col-lg,
.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-
10, .col-xl-11, .col-xl-12, .col-xl,
.col-xl-auto {
position: relative;
width: 100%;
padding-right: 0.75rem;
padding-left: 0.75rem;
}
(30, 'Panda examle changed', 'example changed', '2020-05-01', 'm', '2 Years', 4, '1.4 kg of grass per
day', 'example', 'example', '2020-05-02', 1.4, 1.5, 'lorem ipsum', 1, 'Broken leg', '', '', '0000-00-00', '', '',
'true'),
(31, 'Dingo', 'Canis Lupus Dingo', '2020-02-11', 'm', '11', 4, 'About 1.5 KG of Meat', 'harsh deserts to lush
rainforests', '10,000 to 50,000', '2021-06-22', 0.55, 11, 'Dingos are a dog-like wolf. They have a long
muzzle, erect ears and strong claws. They usually have a ginger coat and most have white markings on
their feet, tail tip and chest. Their bushy tail is 25–37 cm long.', 1, 'No records in the literature, yet.',
'none', 'none', '0001-01-01', 'none', 'none', 'false'),
(32, 'Myna Bird', 'Common myna', '2021-10-07', 'm', '4', 1, '0.4 KG', 'Open Woodland, Mangroves,
Grasslands, Farmlands', '15', '2021-12-08', 0.23, 0.15, 'Mynas are medium-sized passerines with strong
feet. Their flight is strong and direct, and they are gregarious. Their preferred habitat is fairly open
country, and they eat insects and fruit. Plumage is typically dark, often brown, although some species
have yellow head ornaments.', 2, 'This is sample text. This is sample text. This is sample text. This is
sample text.', 'none', 'none', '0001-01-01', 'This is sample text.', 'This is sample text.', 'false');
`employees` (
CHAPTER 08
FUTURE ENHANCEMENT
As technology and customer expectations evolve, the Courier Management System can be improved and
expanded with additional features and capabilities. The following are some potential future
enhancements that can make the system more robust, user-friendly, and competitive. These future
enhancements can greatly extend the functionality, efficiency, and usability of the Courier Management
System. By implementing these improvements, the system can evolve into a comprehensive logistics
platform that meets the needs of modern businesses and tech-savvy customers. To ensure the long-term
success and adaptability of the Courier Management System, several future enhancements can be
considered. These upgrades aim to improve system efficiency, customer satisfaction, scalability, and
technological competitiveness.
CHAPTER 09
CONCLUSION
AND
REFERENCES
10.1 CONCLUSION
In our project work, an attempt has been made to develop a comprehensive Zoo Management System
was developed to streamline and automate the various operational aspects of managing a zoological
park. Traditional zoo management methods often rely on manual processes, which are time-consuming,
error- prone, and lack scalability. This system addresses these challenges by providing a centralized,
user- friendly platform for managing animals, staff, schedules, visitor interactions, and more.
Developed a centralized web-based system to automate key zoo operations including animal care,
ticket booking, staff management, and reporting.
Implemented secure role-based access for Admins, Sub-admins, Zookeepers, Veterinarians, and Visitors
to ensure controlled functionality.
Enabled systematic logging and monitoring of animal feeding schedules and medical records for
improved care and accountability.
Designed a responsive online ticket booking module to streamline visitor management and enhance user
experience.
Integrated real-time notification features (email/SMS) for alerts on feeding, treatments, and ticketing
events.
Consolidated all operational data into a secure and searchable MySQL database for quick retrieval and
reporting.
Ensured full responsiveness across devices (desktop, tablet, mobile) to support accessibility for field
staff and remote users.
Provided advanced reporting tools for analyzing visitor statistics, animal health updates, and operational
performance.
Built the system using cost-effective open-source technologies (PHP, MySQL, HTML, CSS, JS) to
reduce overall development cost.
Structured the application using a modular and scalable architecture, enabling easy future integration
of advanced features like AI, IoT, and mobile apps.
Learned the importance of planning, modular design, and using ER diagrams and DFDs for
structured system development.
Strengthened full-stack development skills using HTML, CSS, JavaScript, PHP, and MySQL.
Understood how to implement secure login systems and role-based access control for user and
data management.
Improved database design knowledge, focusing on relationships, normalization, and SQL queries
Enhanced problem-solving and debugging abilities through real-time testing and error resolution.
Recognized the value of teamwork, task division, and effective communication in
collaborative projects.
Gained experience in writing clear and structured project documentation and technical reports.
and deadlines.
Learned to think ahead by suggesting scalable, future-proof enhancements aligned with real-
world needs.
In conclusion, the Zoo Management System lays a solid foundation for digital transformation in zoo
operations. It improves coordination among departments, ensures better animal care through systematic
scheduling, and enhances visitor satisfaction through digital engagement. With continued enhancements
and maintenance, the system has the potential to evolve into a complete smart zoo solution.
10.2 REFERENCES
For PHP
https://www.w3schools.com/php/default.asp
https://www.sitepoint.com/php/
https://www.php.net/
For MySQL
https://www.mysql.com/
http://www.mysqltutorial.org
For XAMPP
https://www.apachefriends.org/download.html