<?php
/**
 * phpaga
 *
 * add operation
 *
 * Add operations to an open project
 *
 * @author Florian Lanthaler <florian@phpaga.net>
 * @version $Id: add_operation.php 753 2006-10-25 21:52:28Z florian $
 *
 * Copyright (c) 2002, Florian Lanthaler <florian@phpaga.net>
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *    * Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in
 *      the documentation and/or other materials provided with the
 *      distribution.
 *
 *    * Neither the name of Florian Lanthaler nor the names of his
 *      contributors may be used to endorse or promote products derived
 *      from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

include_once("./config.php");

$status = "";
$userInfo = array();
$users = array();
$select_user = array();
$opInfo = array("prj_id" => "");
$prj_id = "";
$ismember = false;
$prjInfo = array();
$op_id = null;

$can_manage = false;

if (isset($_REQUEST["prj_id"]) && is_numeric($_REQUEST["prj_id"]))
{
    $prj_id = $_REQUEST["prj_id"];
}

$result = phpaga_project_is_member($prj_id, $_SESSION["auth_user"]["pe_id"], $ismember);
if ($result != PHPAGA_ERR_NONE)
{
    phpaga_error($result);
}

$can_manage = phpaga_project_canmanage($prj_id);

/* user can add tasks if she is a project member, if she has the right
 * to manage this project */

if (!$ismember && !$can_manage)
{
    phpaga_header(array("menuitem" => "core"));
    phpaga_message (_("No access"),
                    _("You can't file tasks for this project because you are not a project member."));
    phpaga_footer();
    exit;
}

/* if we're invoked by post, we have to save the modifications */
if ($_SERVER["REQUEST_METHOD"] == "POST")
{

    $opInfo["prj_id"] = $prj_id;

    /* only the project owner and overall project managers can set an
     * operation's user */

    if (!$can_manage)
        $opInfo["pe_id"] = $_SESSION["auth_user"]["pe_id"];
    else
        $opInfo["pe_id"] = $_POST["pe_id"];

    if (isset($_REQUEST["op_billabletype"]) && ($_REQUEST["op_billabletype"] == 0)) {

        $opInfo["op_billabletype"] = 0;
        $opInfo["billable_checked"] = true;
    } else {
        $opInfo["op_billabletype"] = 10;
        $opInfo["billable_checked"] = false;
    }

    $opInfo["opcat_id"] = $_POST["opcat_id"];
    $opInfo["op_desc"] = $_POST["op_desc"];
    $opInfo["op_duration"] = $_POST["op_duration"];

	/* if the duration is numeric, convert it from fractional hours into hours:minutes */

	if (is_numeric($opInfo["op_duration"]))
	{
	// Under 24 - assume the duration was given in hours
		if ($opInfo["op_duration"] < 24)
			$opInfo["op_duration"] = (int)$opInfo["op_duration"].':'.sprintf('%02d', 60 * ($opInfo["op_duration"] - (int)$opInfo["op_duration"]));
	// More than 60 minutes, different calculation
		elseif ($opInfo["op_duration"] >= 60)
			$opInfo["op_duration"] = (int)($opInfo["op_duration"] / 60).':'.sprintf('%02d', $opInfo["op_duration"] % 60);
	// duration given in minutes
		else
			$opInfo["op_duration"] = '0:'.(int)$opInfo["op_duration"];
	}

    /* if there is a valid start date and time then convert it to a timestamp */

    $opInfo["op_startdate"]  = $_POST["op_startdate"];
    $opInfo["op_starthours"] = $_POST["op_starthours"];

    $start_tmp = "";

    if ($opInfo["op_startdate"] != "")
    {
        $start_tmp = $opInfo["op_startdate"];

        if ($opInfo["op_starthours"] != "")
			$start_tmp .= " ".$opInfo["op_starthours"];

        $opInfo["op_timestamp_start"] = strtotime($start_tmp);
    }
    else
        $opInfo["op_timestamp_start"] = "";

    /* if there is a valid end date and time then convert it to a timestamp */

    $opInfo["op_enddate"]  = $_POST["op_enddate"];
    $opInfo["op_endhours"] = $_POST["op_endhours"];

    $end_tmp = "";

    if ($opInfo["op_enddate"] != "")
    {
        $end_tmp = $opInfo["op_enddate"];

        if ($opInfo["op_endhours"] != "")
            $end_tmp .= " ".$opInfo["op_endhours"];

        $opInfo["op_timestamp_end"] = strtotime($end_tmp);
    }
    else
        $opInfo["op_timestamp_end"] = "";

    /* check if operation data is valid and add the operation */

    $result = phpaga_operations_validdata($opInfo);

    if (phpaga_errorhappened($result))
        $status = phpaga_returnerror($result);
    else
    {
        $add_result = phpaga_operations_add($opInfo, $op_id);

        if (phpaga_errorhappened($add_result))
            $status = phpaga_returnerror($phpaga_error[$add_result]);
        else
        {
            $status =
                phpaga_returnmessage(_("Information"),
                                     _("The task has been inserted successfully."));

            $opInfo["opcat_id"] = "";
            $opInfo["op_desc"] = "";
            $opInfo["op_duration"] = "";
            $opInfo["op_startdate"] = date("Y-m-d");
            $opInfo["op_starthours"] = "";
            $opInfo["op_enddate"] = "";
            $opInfo["op_endhours"] = "";
        }
    }
}
else {

    $opInfo = array("prj_id" => $prj_id,
                    "pe_id" => $_SESSION["auth_user"]["pe_id"],
                    "opcat_id" => "",
                    "op_desc" => "",
                    "op_duration" => "",
                    "op_startdate" => date("Y-m-d"),
                    "op_starthours" => "",
                    "op_enddate" => "",
                    "op_endhours" => "");

}

$result = phpaga_projects_getInfo($prj_id, $prjInfo);

if ($_SERVER["REQUEST_METHOD"] != "POST") {
    if (isset($prjInfo["prj_billabletype"]) && ($prjInfo["prj_billabletype"] != 10))
        $opInfo["billable_checked"] = true;
    else
        $opInfo["billable_checked"] = false;
}

if (phpaga_errorhappened($result))
    phpaga_error($result);

phpaga_header(array("calendar" => true, "menuitem" => "core"));

phpaga_projects_getDuration($prjInfo["prj_id"], $duration);
phpaga_operations_getCategoryList($select_opcat);
phpaga_arrayAddOption($select_opcat, PHPAGA_OPTION_SELECT);

/* only the project owner and overall project managers can set an
 * operation's user */
if (!$can_manage)
{
    $result = phpaga_persons_getInfo(
        $_SESSION["auth_user"]["pe_id"],
        $peInfo);

    $select_user[$peInfo["pe_id"]] =
        $peInfo["pe_person"]
        ." ("
        .$_SESSION["auth_user"]["usr_login"]
        .")";
}
else
{
    $userInfo["prj_id"] = $prj_id;
    $result = phpaga_user_search($users, $userInfo);

    foreach ($users as $u)
        $select_user[$u["pe_id"]] = $u["pe_name"]." (".$u["usr_login"].")";
}

$opInfo["op_desc"] = stripslashes($opInfo["op_desc"]);

$tpl = new psmarty;

$tpl->assign("PRJ_OPERATION", _("Add task"));
$tpl->assign("FORM_ACTION", basename($_SERVER["PHP_SELF"]));

$tpl->assign("is_owner_or_manager", $can_manage);
$tpl->assign("prjInfo", $prjInfo);
$tpl->assign("opInfo", $opInfo);
$tpl->assign("HOURS_SO_FAR", $duration);
$tpl->assign("STATUSMSG", $status);
$tpl->assign("select_person", $select_user);
$tpl->assign("select_opcat", $select_opcat);
$tpl->display("edit_operation.tpl.html");

phpaga_footer();

?>