PHP LogoCalendar and Event Planner

A Calendar and Event Planner is a software application or a module within a larger system designed to help users organize their time, schedule events, and manage appointments. It provides a visual representation of dates and allows users to associate specific activities, meetings, or reminders with those dates.

Core Functionalities:
1. Date Display: Presents a calendar view (monthly, weekly, or daily) showing dates and often highlighting days with events.
2. Event Creation: Allows users to add new events, typically including details like title, description, start date/time, end date/time, location, and participants.
3. Event Viewing: Provides mechanisms to view upcoming events, past events, or events on a specific date. This can be in a list format or directly on the calendar interface.
4. Event Editing/Deletion: Enables users to modify existing event details or remove events that are no longer relevant.
5. Reminders/Notifications: Often includes a feature to set reminders for events, notifying users via email, in-app alerts, or push notifications before an event starts.
6. Recurring Events: Supports setting up events that repeat on a regular basis (e.g., daily, weekly, monthly, annually).
7. Search and Filter: Allows users to search for specific events or filter them based on criteria like date range, category, or keyword.
8. Synchronization: May offer integration with other calendar services (e.g., Google Calendar, Outlook Calendar) or allow export/import of event data.

Importance:
* Time Management: Helps individuals and teams efficiently manage their schedules and allocate time for tasks and appointments.
* Organization: Provides a centralized place to keep track of all important dates and activities, reducing the chances of forgetting commitments.
* Collaboration: In a team setting, it facilitates shared scheduling and coordination of meetings and project milestones.
* Productivity: By visualizing commitments, users can better plan their work and avoid scheduling conflicts.

Technical Implementation:
Developing a calendar and event planner typically involves:
* Frontend (UI): HTML, CSS, and JavaScript are used to create the interactive calendar interface, forms for event creation, and event display. Libraries like FullCalendar.js are popular for this.
* Backend (Server-Side Logic): A language like PHP, Python, Node.js, or Java handles data processing, user authentication, and interaction with the database.
* Database: A relational database (e.g., MySQL, PostgreSQL, SQLite) is used to store event details, user information, and other relevant data. NoSQL databases can also be used.
* APIs: For advanced features like external calendar synchronization, APIs from services like Google Calendar API or Microsoft Graph API might be utilized.

This example will demonstrate a simplified PHP backend for managing events stored in an SQLite database, accessible via a basic HTML interface.

Example Code

<?php

// Define the database file
define('DB_FILE', 'events.sqlite');

/
 * CalendarEvent Class to manage events in the database.
 */
class CalendarEvent {
    private $pdo;

    public function __construct() {
        try {
            // Connect to SQLite database
            $this->pdo = new PDO('sqlite:' . DB_FILE);
            // Set PDO error mode to exception
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            // Create events table if it doesn't exist
            $this->createTable();
        } catch (PDOException $e) {
            die("Database connection failed: " . $e->getMessage());
        }
    }

    private function createTable() {
        $query = "
            CREATE TABLE IF NOT EXISTS events (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                title TEXT NOT NULL,
                description TEXT,
                start_datetime DATETIME NOT NULL,
                end_datetime DATETIME NOT NULL
            );
        ";
        $this->pdo->exec($query);
    }

    /
     * Adds a new event to the database.
     * @param string $title
     * @param string $description
     * @param string $start_datetime YYYY-MM-DD HH:MM:SS format
     * @param string $end_datetime YYYY-MM-DD HH:MM:SS format
     * @return bool True on success, false on failure.
     */
    public function addEvent($title, $description, $start_datetime, $end_datetime) {
        $query = "INSERT INTO events (title, description, start_datetime, end_datetime) VALUES (:title, :description, :start_datetime, :end_datetime)";
        $stmt = $this->pdo->prepare($query);
        return $stmt->execute([
            ':title' => $title,
            ':description' => $description,
            ':start_datetime' => $start_datetime,
            ':end_datetime' => $end_datetime
        ]);
    }

    /
     * Retrieves all events from the database, ordered by start date.
     * @return array An array of event objects.
     */
    public function getEvents() {
        $query = "SELECT * FROM events ORDER BY start_datetime ASC";
        $stmt = $this->pdo->query($query);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    // You could add methods for updateEvent, deleteEvent, getEventById, etc.
}

// Initialize the CalendarEvent manager
$eventManager = new CalendarEvent();

// Handle form submission for adding a new event
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_event') {
    $title = trim($_POST['title'] ?? '');
    $description = trim($_POST['description'] ?? '');
    $start_date = trim($_POST['start_date'] ?? '');
    $start_time = trim($_POST['start_time'] ?? '');
    $end_date = trim($_POST['end_date'] ?? '');
    $end_time = trim($_POST['end_time'] ?? '');

    // Combine date and time
    $start_datetime = !empty($start_date) && !empty($start_time) ? $start_date . ' ' . $start_time . ':00' : '';
    $end_datetime = !empty($end_date) && !empty($end_time) ? $end_date . ' ' . $end_time . ':00' : '';

    if (!empty($title) && !empty($start_datetime) && !empty($end_datetime)) {
        if ($eventManager->addEvent($title, $description, $start_datetime, $end_datetime)) {
            $message = "Event added successfully!";
        } else {
            $message = "Failed to add event.";
        }
    } else {
        $message = "Please fill in all required fields (Title, Start Date/Time, End Date/Time).";
    }
}

// Get all events for display
$events = $eventManager->getEvents();

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calendar and Event Planner</title>
    <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; background-color: #f4f4f4; color: #333; }
        .container { max-width: 900px; margin: auto; background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }
        h1, h2 { color: #0056b3; }
        form { background: #e9ecef; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
        form div { margin-bottom: 10px; }
        form label { display: block; margin-bottom: 5px; font-weight: bold; }
        form input[type="text"],
        form input[type="date"],
        form input[type="time"],
        form textarea {
            width: calc(100% - 22px);
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box;
        }
        form button {
            background-color: #007bff;
            color: white;
            padding: 10px 15px;
            border: none;
            border-radius: 44px;
            cursor: pointer;
            font-size: 16px;
        }
        form button:hover {
            background-color: #0056b3;
        }
        .message { padding: 10px; margin-bottom: 15px; border-radius: 4px; }
        .success { background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; }
        .error { background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; }
        .event-list { margin-top: 20px; }
        .event-list table { width: 100%; border-collapse: collapse; margin-top: 15px; }
        .event-list th, .event-list td { border: 1px solid #ddd; padding: 10px; text-align: left; }
        .event-list th { background-color: #007bff; color: white; }
        .event-list tr:nth-child(even) { background-color: #f2f2f2; }
        .event-list tr:hover { background-color: #e2e6ea; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Calendar and Event Planner</h1>

        <?php if (isset($message)): ?>
            <div class="message <?php echo strpos($message, 'successfully') !== false ? 'success' : 'error'; ?>">
                <?php echo htmlspecialchars($message); ?>
            </div>
        <?php endif; ?>

        <h2>Add New Event</h2>
        <form action="" method="POST">
            <input type="hidden" name="action" value="add_event">
            <div>
                <label for="title">Event Title:</label>
                <input type="text" id="title" name="title" required>
            </div>
            <div>
                <label for="description">Description:</label>
                <textarea id="description" name="description" rows="3"></textarea>
            </div>
            <div>
                <label for="start_date">Start Date:</label>
                <input type="date" id="start_date" name="start_date" required>
                <label for="start_time">Start Time:</label>
                <input type="time" id="start_time" name="start_time" value="09:00" required>
            </div>
            <div>
                <label for="end_date">End Date:</label>
                <input type="date" id="end_date" name="end_date" required>
                <label for="end_time">End Time:</label>
                <input type="time" id="end_time" name="end_time" value="10:00" required>
            </div>
            <div>
                <button type="submit">Add Event</button>
            </div>
        </form>

        <h2>Upcoming Events</h2>
        <div class="event-list">
            <?php if (empty($events)): ?>
                <p>No events planned yet. Add one above!</p>
            <?php else: ?>
                <table>
                    <thead>
                        <tr>
                            <th>Title</th>
                            <th>Description</th>
                            <th>Start Time</th>
                            <th>End Time</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($events as $event): ?>
                            <tr>
                                <td><?php echo htmlspecialchars($event['title']); ?></td>
                                <td><?php echo htmlspecialchars($event['description']); ?></td>
                                <td><?php echo htmlspecialchars(date('Y-m-d H:i', strtotime($event['start_datetime']))); ?></td>
                                <td><?php echo htmlspecialchars(date('Y-m-d H:i', strtotime($event['end_datetime']))); ?></td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            <?php endif; ?>
        </div>
    </div>
</body>
</html>