Skip to content
Snippets Groups Projects
1.113_init_mailqueue.php 3.16 KiB
Newer Older
<?php
class InitMailqueue extends Migration
{
    function description()
    {
        return 'Creates configs and cronjobs for the mailqueue. You still need to enable it.';
    }

    function up()
    {
        //Add table
        $query = "CREATE TABLE IF NOT EXISTS `mail_queue_entries` (
            `mail_queue_id` varchar(32) NOT NULL,
            `mail` text NOT NULL,
            `message_id` varchar(32) DEFAULT NULL,
            `user_id` varchar(32) DEFAULT NULL,
            `tries` int(11) NOT NULL,
            `last_try` int(11) NOT NULL DEFAULT '0',
            `mkdate` bigint(20) NOT NULL,
            `chdate` bigint(20) NOT NULL,
            PRIMARY KEY (`mail_queue_id`),
            KEY `message_id` (`message_id`),
            KEY `user_id` (`user_id`)
        ) ENGINE=MyISAM";
        $statement = DBManager::get()->prepare($query);
        $statement->execute();

        // Add config entries
        $query = "INSERT IGNORE INTO `config`
                    (`config_id`, `field`, `value`, `is_default`, `type`, `range`, `section`,
                     `mkdate`, `chdate`, `description`)
                  VALUES (MD5(:field), :field, :value, 1, :type, 'global', 'global',
                          UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :description)";
        $statement = DBManager::get()->prepare($query);

        $statement->execute([
            ':field' => 'MAILQUEUE_ENABLE',
            ':value' => "0",
            ':type'  => 'boolean',
            ':description' => 'Aktiviert bzw. deaktiviert die Mailqueue',
        ]);

        // Add default cron tasks and schedules
        $new_job = [
            'filename'    => 'lib/cronjobs/send_mail_queue.class.php',
            'class'       => 'SendMailQueueJob',
            'priority'    => 'normal'
        ];

        $query = "INSERT IGNORE INTO `cronjobs_tasks`
                    (`task_id`, `filename`, `class`, `active`)
                  VALUES (:task_id, :filename, :class, 1)";
        $task_statement = DBManager::get()->prepare($query);

        $query = "INSERT IGNORE INTO `cronjobs_schedules`
                    (`schedule_id`, `task_id`, `parameters`, `priority`,
                     `type`, `minute`, `hour`, `mkdate`, `chdate`,
                     `last_result`)
                  VALUES (:schedule_id, :task_id, '[]', :priority, 'periodic',
                          :minute, :hour, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),
                          NULL)";
        $schedule_statement = DBManager::get()->prepare($query);

        
        $task_id = md5(uniqid('task', true));

        $task_statement->execute([
            ':task_id'  => $task_id,
            ':filename' => $new_job['filename'],
            ':class'    => $new_job['class'],
        ]);

        $schedule_id = md5(uniqid('schedule', true));
        $schedule_statement->execute([
            ':schedule_id' => $schedule_id,
            ':task_id'     => $task_id,
            ':priority'    => $new_job['priority'],
            ':hour'        => $new_job['hour'],
            ':minute'      => $new_job['minute'],
        ]);
    }

    function down()
    {
        throw new RuntimeException('down() is not implemented for this migration');