<?php
/** @var action_plugin_bez $this */

use \dokuwiki\plugin\bez;

if ($this->get_param('id') == '') {
    header('Location: ?id=bez:threads');
}

//try {
    //$issue_id = (int)$nparams['id'];
    
    //new way
    $thread = $this->model->threadFactory->get_one($this->get_param('id'));


//    $template['tid'] = isset($nparams['tid']) ? $nparams['tid'] : '-1';
//    $template['kid'] = isset($nparams['kid']) ? $nparams['kid'] : '-1';
//    $template['state'] = isset($nparams['state']) ? $nparams['state'] : '-1';
//    $template['action'] = isset($nparams['action']) ? $nparams['action'] : '-default';
        
    $template['issue'] = $issue;
    $template['commcauses'] = $this->model->commcauses->get_all(
        array('issue' => $issue_id)
    );
    
    $template['commcause'] = $this->model->commcauses->
                            create_dummy_object(array('issue' => $issue->id));
    
    $template['corrections'] = $this->model->tasks->get_all(array(
        'issue' => $issue_id,
        'action' => 0,
    ));

    $template['commcauses_tasks'] = array();
    foreach ($this->model->commcauses->get_causes_ids($issue_id) as $kid) {
        $template['commcauses_tasks'][$kid] = $this->model->tasks->get_all(array(
            'cause' => $kid,
        ));
    }


    $template['users'] = $this->model->users->get_all();

    //remove userts that are subscribents already
    $template['users_to_invite'] = array_diff_key($template['users'], $issue->get_subscribents());


	$action = '';
	if (isset($nparams['action'])) {
		$action = $nparams['action'];
		$redirect = false;
		$anchor = '';
		
		if ($action === 'commcause_add') {
            
            $defaults = array('issue' => (string)$issue_id);
            if ($issue->user_is_coordinator()) {
                $defaults['type'] = $_POST['type'];
            }
             
			$commcause = $this->model->commcauses->create_object($defaults);
            
            $data = array('content' => $_POST['content']);
			$commcause->set_data($data);
            
			$id = $this->model->commcauses->save($commcause);
			
			$issue->add_participant($INFO['client']);
			$issue->add_subscribent($INFO['client']);
			
			$issue->update_last_activity();
			$this->model->issues->save($issue);
            
            $commcause->mail_notify_add($issue);
            
			$anchor = 'k'.$id;
			$redirect = true;
		} elseif ($action === 'subscribe') {
			$issue->add_subscribent($INFO['client']);
			$this->model->issues->save($issue);
			
			$redirect = true;
		} elseif ($action === 'unsubscribe') {
			$issue->remove_subscribent($INFO['client']);
			$this->model->issues->save($issue);
            
            $this->add_notification($bezlang['unsubscribed_com']);
                
            $redirect = true;
            
        } elseif ($action === 'invite') {
            $client = $_POST['client'];
            
			$state = $issue->add_subscribent($client);
            //user wasn't subscribent
            if ($state === true) {
                $this->model->issues->save($issue);
                $issue->mail_notify_invite($client);
                
                $this->add_notification($this->model->users->get_user_email($client), $bezlang['invitation_has_been_send']);
                
                $redirect = true;
            } 
			
		} elseif ($action === 'commcause_delete') {
			$commcause = $this->model->commcauses->get_one($template['kid']);
			
			$this->model->commcauses->delete($commcause);
			
			$issue->update_last_activity();
			$this->model->issues->save($issue);
			
			$redirect = true;
		} elseif ($action === 'commcause_edit') {
			if (count($_POST) === 0) {
				$commcause = $this->model->commcauses->get_one($template['kid']);
				$template['kid'] = $commcause->id;
				$value = $commcause->get_assoc();
			} else {
				$commcause = $this->model->commcauses->get_one($template['kid']);
                
                $data = array('content' => $_POST['content']);
                if ($issue->user_is_coordinator()) {
                    $data['type'] = $_POST['type'];
                }
                
				$commcause->set_data($data);
				$this->model->commcauses->save($commcause);
				
				$issue->update_last_activity();
				$this->model->issues->save($issue);
				
				$anchor = 'k'.$commcause->id;
				$redirect = true;
			}
            
        } elseif ($action === 'commcause_edit_metadata') {
            if (count($_POST) === 0) {
				$commcause = $this->model->commcauses->get_one($template['kid']);
				$template['kid'] = $commcause->id;
				$value = $commcause->get_assoc(array('datetime', 'reporter'));
                $unix = strtotime($value['datetime']);
                $value['date'] = date('Y-m-d', $unix);
                $value['time'] = date('H:i:s', $unix);
			} else {
				$commcause = $this->model->commcauses->get_one($template['kid']);
                $_POST['datetime'] = $_POST['date']. ' '.$_POST['time'];
				$commcause->set_meta($_POST);
				$this->model->commcauses->save($commcause);
				
				$anchor = 'k'.$commcause->id;
				$redirect = true;
			}
		} elseif ($action === 'issue_close') {
			$value['opinion'] = $issue->opinion;
		} elseif ($action == 'issue_close_confirm') {
			$issue->set_state($_POST);
			$this->model->issues->save($issue);
            
            $issue->mail_notify_change_state();
            
			$redirect = true;
		} elseif ($action === 'reopen') {
			$issue->set_state(array('state' => '0'));
			$this->model->issues->save($issue);
            
            $issue->mail_notify_change_state();
            
            $redirect = true;
        } elseif ($action === 'issue_edit_metadata') {
            if (count($_POST) > 0) {
                
                $_POST['last_activity'] = $_POST['last_activity_date']. ' '.$_POST['last_activity_time'];
                
                $issue->set_meta($_POST);
                $this->model->issues->save($issue);
                
                $redirect = true;
            } else {
                $value = $issue->get_assoc();
                $value['date'] = date('Y-m-d', (int)$value['date']);
                $value['last_mod'] = date('Y-m-d', (int)$value['last_mod']);
                
                $unix = strtotime($value['last_activity']);
                $value['last_activity_date'] = date('Y-m-d', $unix);
                $value['last_activity_time'] = date('H:i:s', $unix);
            }
 		} elseif (strpos($action, 'task') === 0) {
            $template['task'] = $this->model->tasks->
                    create_dummy_object(array('issue' => $issue->id));
			$template['users'] = $this->model->users->get_all();
			$template['tasktypes'] = $this->model->tasktypes->get_all();
			
			if (count($_POST) > 0) {
				if (!isset($_POST['all_day_event'])) {
					$_POST['all_day_event'] = '0';
				}
			}
						
			if ($action === 'task_reopen') {
				$task = $this->model->tasks->get_one($nparams['tid']);
				$task->set_state(array('state' => '0'));
				$this->model->tasks->save($task);
				
				$issue->update_last_activity();
				$this->model->issues->save($issue);
                
                $task->mail_notify_subscribents($template['issue'],
                        array('action' => $bezlang['mail_task_reopened']));
					
				$redirect = true;
				$anchor = 'z'.$task->id;
				
			} elseif ($action === 'task_edit') {
				$template['tid'] = $nparams['tid'];
				
				$template['causes'] = $this->model->commcauses->get_all(array(
					'issue' => $issue_id,
					'type' => array('!=', '0'),
				));
				
				$task = $this->model->tasks->get_one($template['tid']);
				$value = $task->get_assoc();
                
            } elseif ($action === 'task_change_state') {
                $template['tid'] = $nparams['tid'];				
				$task = $this->model->tasks->get_one($template['tid']);
				$value = array('reason' => $task->reason);
			} elseif($action === 'task_edit_metadata') {
                
                $task = $this->model->tasks->get_one($template['tid']);
                    
                if (count($_POST) > 0) {
                    $task->set_meta($_POST);
                    $this->model->tasks->save($task);
                    
                    header("Location: ?id=bez:issue:id:$issue_id#z".$task->id);
                } else {
                    $value = $task->get_assoc();
                    $value['date'] = date('Y-m-d', (int)$value['date']);
                    $value['close_date'] = date('Y-m-d', (int)$value['close_date']);
                }
            }
			
			if (count($_POST) > 0) {				
				//ends with
				if (substr($action, -strlen('add')) === 'add') {
					$defaults = array('issue' => (string)$issue_id);
					if ($template['kid'] !== '-1') {
						$defaults['cause'] = $template['kid'];
					}
					$task = $this->model->tasks->create_object($defaults);
					
					$task->set_data($_POST);
					$id = $this->model->tasks->save($task);
					
					$issue->add_participant($task->executor);
					$issue->add_subscribent($task->executor);
			
					$issue->update_last_activity();
					$this->model->issues->save($issue);
                    
                    $task->mail_notify_add($issue);
					
					$anchor = 'z'.$id;
					$redirect = true;
				} elseif ($action === 'task_change_state') {
					$task = $this->model->tasks->get_one($template['tid']);
                    
                    if (isset($_POST['no_evaluation'])) {
                        $_POST['reason'] = '';
                    }
					
					$task->set_state(array(
								'state' => $nparams['state'],
								'reason' => $_POST['reason'])
							);
					$this->model->tasks->save($task);
					
					$issue->update_last_activity();
					$this->model->issues->save($issue);
                    
                    $task->mail_notify_subscribents($template['issue'],
                        array('action' => $bezlang['mail_task_change_state']));
					
					$anchor = 'z'.$task->id;
					$redirect = true;
				} elseif ($action === 'task_edit') {
					$task = $this->model->tasks->get_one($template['tid']);
					$task->set_data($_POST);
					$this->model->tasks->save($task);
					
					$issue->add_participant($task->executor);
					$issue->add_subscribent($task->executor);
					
					//don't upgrade last activity!!!
					$anchor = 'z'.$task->id;
					$redirect = true;
				}
			}	
		}
		
		if ($redirect) {
			if ($anchor !== '') {
				$anchor = '#'.$anchor;
			}
			header("Location: ?id=bez:issue:id:$issue_id$anchor");
		}
	}

    
//} catch (ValidationException $e) {
//	$errors = $e->get_errors();
//	$value = $_POST;
//} catch (DBException $e) {
//	echo nl2br($e);
////	header("Location: ?id=bez:issue:id:$issue_id");
//}


