<?php
include_once "../inc/start.php";
include_once "../inc/protect.php";

if(empty($_POST['phpaction'])) {
    log_error("Прямой вызов actions.php");
    exit('Ошибка: [Прямой вызов инклуда]');
}

if($conf->token == 1 && ($_SESSION['token'] != clean($_POST['token'], null))) {
    log_error("Неверный токен");
    exit('Ошибка: [Неверный токен]');
}

if(isset($_POST['task_check_file'])) {
    $taskid = checkJs($_POST['taskid'], "int");
   
    $STH = $pdo->query("SELECT `file`, `strfield`, `intfield`, `award`, `award_count` FROM `tasks` WHERE `id` = {$taskid} LIMIT 1");
    $STH->setFetchMode(PDO::FETCH_ASSOC);
    $task = $STH->fetch();
   
    if( !isset( $task['file'] ) )
    {
        exit (json_encode(array('status' => '2', 'data' => '<div class="btn btn-outline-success">Задание не существует</div>')));
    }
   
    $STH = $pdo->query("SELECT `id` FROM `users__tasks` WHERE `userid`={$_SESSION['id']} AND `taskid`={$taskid} LIMIT 1");
   
    if( $STH->fetch() )
    {
        exit (json_encode(array('status' => '2', 'data' => 'Вы уже выполнили это задание!')));
    }
   
    include_once "tasks/functions.php";
   
    if(!function_exists( $task['file'] )) {
        exit (json_encode(array('status' => '2', 'data' => 'Задание временно не доступно')));
    }
   
    $task['file']($taskid,$task);
   
    exit (json_encode(array('status' => '2', 'data' => '<div class="btn btn-outline-danger">Что то пошло не так!</div>')));
}

if(!is_admin()) {
    exit('Ошибка: [Доступно только администраторам]');
}

if(isset($_POST['task_dell_function'])) {
    $taskid = checkJs($_POST['taskid'], "int");
   
    if( $pdo->query("DELETE FROM `tasks` WHERE `id` = {$taskid}") )
    {
        exit (json_encode(array('status' => '1', 'data' => 'Удалено')));
    }
   
    exit (json_encode(array('status' => '2', 'data' => 'Не удалось удалить')));
}

if(isset($_POST['task_edit_function'])) {
    $taskid = checkJs($_POST['taskid'], "int");
    $active = checkJs($_POST['active'], "int");
    $award = checkJs($_POST['award'], "int");
    $name = checkJs($_POST['name'], null);
    $strfield = checkJs($_POST['strfield'], null);
    $intfield = checkJs($_POST['intfield'], "int");
    $file = checkJs($_POST['file'], null);
    $fa = checkJs($_POST['fa'], null);
    $award_count = checkJs($_POST['award_count'], null);
   
    include_once '../inc/classes/HTMLPurifier/HTMLPurifier.auto.php';
    $description = HTMLPurifier()->purify($_POST['description']);
    $description = find_img_mp3($description, rand(1, 250), 1);
   
    if( empty($award_count) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Укажите количество награды')));
    }
    if( empty($award) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Награда обязательно')));
    }
    if( empty($taskid) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Задание не существует')));
    }
    if( empty($active) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Задание должно быть либо включено либо выключено')));
    }
    if( empty($name) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Наименование задания должно быть обязательно заполнено')));
    }
    if( empty($description) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Описание задания должно быть обязательно заполнено')));
    }
    if( empty($file) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Функция обязательно')));
    }
    if( $award_count <= 0 ) {
        exit (json_encode(array('status' => '2', 'data' => 'Награда должна быть больше 0')));
    }
   
    $strfield = empty($strfield) ? '' : $strfield;
    $intfield = empty($intfield) ? 0 : $intfield;
    $fa = empty($fa) ? '' : $fa;
   
    $STH = $pdo->query("SELECT `id` FROM `tasks` WHERE `id` = {$taskid} LIMIT 1");
    if( empty($STH->fetch()) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Задание не существует')));
    }
   
    if( $pdo->query("UPDATE `tasks` SET `active`={$active},`name`='{$name}',`strfield`='{$strfield}',`intfield`={$intfield},`fa`='{$fa}',`description`='{$description}',`award`='{$award}',`award_count`={$award_count},`file`='{$file}' WHERE `id` = {$taskid}") )
    {
        exit (json_encode(array('status' => '1', 'data' => 'Сохранено')));
    }
   
    exit (json_encode(array('status' => '2', 'data' => 'Не удалось сохранить')));
}

if(isset($_POST['task_add_function'])) {
    $award = checkJs($_POST['award'], "int");
    $award_count = checkJs($_POST['award_count'], null);
    $name = checkJs($_POST['name'], null);
    $strfield = checkJs($_POST['strfield'], null);
    $intfield = checkJs($_POST['intfield'], "int");
    $file = checkJs($_POST['file'], null);
    $fa = checkJs($_POST['fa'], null);
    include_once '../inc/classes/HTMLPurifier/HTMLPurifier.auto.php';
    $description = HTMLPurifier()->purify($_POST['description']);
    $description = find_img_mp3($description, rand(1, 250), 1);
   
    if( empty($award_count) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Укажите количество награды')));
    }
    if( empty($award) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Награда обязательно')));
    }
    if( empty($name) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Наименование задания должно быть обязательно заполнено')));
    }
    if( empty($description) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Описание задания должно быть обязательно заполнено')));
    }
    if( empty($file) ) {
        exit (json_encode(array('status' => '2', 'data' => 'Функция обязательно')));
    }
    if( $award_count <= 0 ) {
        exit (json_encode(array('status' => '2', 'data' => 'Награда должна быть больше 0')));
    }
   
    $strfield = empty($strfield) ? '' : $strfield;
    $intfield = empty($intfield) ? 0 : $intfield;
    $fa = empty($fa) ? '' : $fa;
   
    if( $pdo->query("INSERT INTO `tasks`(`name`, `description`, `fa`, `file`, `strfield`, `intfield`, `award`, `award_count`) VALUES ('{$name}','{$description}','{$fa}','{$file}','{$strfield}',{$intfield},{$award},{$award_count})") )
    {
        exit (json_encode(array('status' => '1', 'data' => 'Добавлено')));
    }
   
    exit (json_encode(array('status' => '2', 'data' => 'Не удалось добавить')));
}