summaryrefslogblamecommitdiffstats
path: root/app/model/issue.php
blob: 76ae9a9ec7e230927e7f1b8918f6e687582dd06b (plain) (tree)
























                                                                         
                               
                            
                         











                                                                   
                                                
     




                                                                                
 
                                                          
 
                                               


                                                                        
     
 
















                                                                                              
                                           



                                                                      








                                                                               
 









                                                                                                                   

     
                                          
     





                                                                              
                                       
                             
                                                                  
     
 











                                                                            
                                             

                                                    


  
<?php

/*
 * SCROTT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * For more information, please refer to UNLICENSE
 */

require_once "class/form.class.php";
require_once "class/issue.class.php";
require_once "class/mesg.class.php";

/*
 * Action: iss-mesg-add - Post new issue message
 */
if (isAction("iss-mesg-add"))
{
    $form = new form();
    $form->text("issue");
    $form->text("mesg", false);
    $form->text("assignee");
    $form->flag("nopop");

    if (!$form->populate(input()))
        return;

    $issue = new issue($form->issue);

    if (!($user = user::getCurrent()))
    {
        logError(ERROR, "You must be logged in to post a message");
        return;
    }

    if (isset($form->mesg) && $form->mesg != "")
    {
        if (!$user->canCreateSub($issue))
        {
            logError(ERROR, "You do not have permission to post to this issue");
            return;
        }

        $mesg = mesg::initNew($form->mesg, $user, $issue);

        if ($mesg->setAttachment("attachment"))
        {
            //logError(NOTICE, "Saved attachment " . $mesg->attachment);
        }
    }

    if (isset(input()['advIssue']))
    {
        if (!$user->canModify($issue))
        {
            logError(ERROR, "You do not have permission to move this issue");
            return;
        }

        $issue->advance($user);

        if ($issue->isOpen())
        {
            $sgename = $issue->getParent()->name;
            $log = mesg::initNewLog("%s advanced issue to '" . $sgename . "'", $user, $issue);
        }
        else
        {
            $issue->signoffAssignee($user);
            $log = mesg::initNewLog("%s closed issue", $user, $issue);
        }
    }

    else if (isset(input()['assIssue']))
    {
        if (!$user->canModify($issue))
        {
            logError(ERROR, "You do not have permission to assign this issue");
            return;
        }

        $assignee = new user($form->assignee);

        if (!$assignee->isAssignedTo($issue))
        {
            $stat = $issue->addAssignee($assignee, $user);
            $mesg = ($assignee->guid == $user->guid ? "%s claimed" : "%s assigned " . $assignee->getDisplayName());

            if (!$stat)
                logError(ERROR, "Failed to assign issue");
            else
                $log = mesg::initNewLog($mesg, $user, $issue);
        }
    }

    else if (isset(input()['closeIssue']))
    {
        if (!$user->canModify($issue))
        {
            logError(ERROR, "You do not have permission to close this issue");
            return;
        }

        $issue->signoffAssignee($user);
        $issue->close($user);
        $log = mesg::initNewLog("%s closed issue", $user, $issue);
    }

    else if (isset(input()['signoff']))
    {
        if (!$user->isAssignedTo($issue))
        {
            logError(ERROR, "You are not an active assignee of this issue");
            return;
        }

        $issue->signoffAssignee($user);
        $log = mesg::initNewLog("%s signed off", $user, $issue);
    }

    /* automatically redisplay issue modal */
    if ($form->nopop != "1")
        setAutoModal("#issueModal-" . $issue->guid);
}

?>