HEX
Server: nginx/1.22.1
System: Linux VM-16-9-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: www (1001)
PHP: 7.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/oa.sanjiangapp.com/app/sys/todo/view/calendar.html.php
<?php
/**
 * The calendar view file of todo module of ZenTaoPMS.
 *
 * @copyright   Copyright 2009-2018 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
 * @license     ZPL (http://zpl.pub/page/zplv12.html)
 * @author      chujilu <chujilu@cnezsoft.com>
 * @package     todo
 * @version     $Id$
 * @link        http://www.zdoo.com
 */
?>
<?php include '../../../sys/my/view/header.html.php';?>
<?php include '../../../sys/common/view/calendar.html.php';?>
<?php js::set('account', $this->app->user->account);?>
<?php js::set('settings', new stdclass());?>
<?php js::set('settings.startDate', $date == 'future' ? date('Y-m-d') : date('Y-m-d', strtotime($date)));?>
<?php js::set('settings.data', $data);?>
<?php js::set('users', $users);?>
<?php js::set('zentaoEntryList', array_keys($zentaoEntryList));?>
<?php js::set('mainPaddingRight', $lang->todo->mainPaddingRight);?>

<div class="main-row fade<?php if($this->cookie->todoCalendarSide == 'hide') echo ' hide-side';?>" id='mainRow'>
  <div class="main-col">
    <div class="cell">
      <div id="todoCalendar" class="calendar">
        <header class="calender-header table-row">
          <div class="btn-toolbar col-4 table-col text-middle">
            <button type="button" class="btn btn-primary btn-sm btn-today"><?php echo $lang->today;?></button>
            <div class='btn-group'>
              <button type="button" class="btn btn-sm btn-prev"><i class="icon-angle-left"></i></button>
              <button type="button" class="btn btn-sm btn-next"><i class="icon-angle-right"></i></button>
            </div>
            <span class="calendar-caption"></span>
          </div>
          <div class="col-4 table-col"></div>
          <div class="col-4 table-col text-right">
            <div class='day trash' data-date='1970-01-01' title='<?php echo $lang->delete?>'>
              <span class="tip"><?php echo $lang->todo->deleteTip;?></span>
              <span class='btn'><i class="icon icon-delete"></i></span>
            </div>
            <div class='side-handle'>
              <?php $class = $this->cookie->todoCalendarSide == 'hide' ? 'icon-collapse-full' : 'icon-expand-full'?>
              <?php echo html::a('###', "<i class='icon $class'></i>", "class='btn' id='sidebarToggleBtn'")?>
            </div>
          </div>
        </header>
      </div>
    </div>
  </div>
  <div class="side-col">
    <div class="cell" id='sidebar'>
      <ul id='myTab' class='nav nav-secondary nav-justified'>
        <li class='active'><a href='#tab_undone' data-toggle='tab'><?php echo $lang->todo->periods['before']?></a></li>
        <li><a href='#tab_custom' data-toggle='tab'><?php echo $lang->todo->periods['future']?></a></li>
        <li><a href='#tab_task' data-toggle='tab'><?php echo $lang->task->common;?></a></li>
        <li><a href='#tab_order' data-toggle='tab'><?php echo $lang->order->common;?></a></li>
        <li><a href='#tab_customer' data-toggle='tab'><?php echo $lang->customer->common;?></a></li>
        <?php if(!empty($zentaoEntryList)):?>
        <li class='dropdown'>
          <a data-toggle='dropdown' class='dropdown-toggle' href='#'><?php echo $lang->entry->common;?><b class='caret'></b></a>
          <ul aria-labelledby='myTabDrop1' role='menu' class='dropdown-menu pull-right'>
            <?php foreach($zentaoEntryList as $code => $name):?>
            <li><a data-toggle='tab' tabindex='-1' href="<?php echo "#tab_{$code}";?>" data-url="<?php echo $this->createLink('sso', 'getTodoList', "code={$code}");?>"><?php echo $name;?></a></li>
            <?php endforeach;?>
          </ul>
        </li>
        <?php endif;?>
      </ul>
      <div class='tab-content' id="todoLists">
        <?php if(!empty($todoList)):?>
        <?php foreach($todoList as $type => $todoSides):?>
        <div class='tab-pane fade <?php if($type == 'undone') echo 'active in';?>' id='tab_<?php echo $type;?>'>
          <?php if(!empty($todoSides)):?>
          <ul class='todo-list'>
          <?php $i = 1;?>
          <?php foreach($todoSides as $id => $todo):?>
            <?php if($type == 'custom' or $type == 'undone'):?>
            <li data-index='<?php echo $i++;?>'>
              <?php
              $viewLink = $this->createLink('todo', 'view', "id=$todo->id");
              echo html::a("javascript:void(0)", $todo->name, "class='iframe todo-item' data-id='$id' data-type='$todo->type' data-remote='$viewLink' data-todo-name='$todo->name' data-begin='$todo->begin' data-end='$todo->end' data-action='edit' data-target='.day' data-toggle='droppable' data-width='1060px'");
              ?>
            </li>
            <?php endif;?>
          <?php endforeach;?>
          </ul>
          <?php endif;?>
        </div>
        <?php endforeach;?>
        <?php endif;?>
      </div>
    </div>
  </div>
</div>
<script>
function updateCalendar(todoID)
{
    var $calendar = $('#todoCalendar');

    if(todoID)
    {
        $('#todoLists .todo-item[data-id="' + todoID + '"]').remove();
        if(!$calendar.find('.event[data-id="' + todoID + '"]').length) return;
    }

    var calendar = $calendar.data('zui.calendar');

    $calendar.find('.label-rest').remove();

    var date = calendar.date.format('yyyyMMdd');
    $.get(createLink('todo', 'calendar', 'date=' + date, 'json'), function(response)
    {
        if(response.status == 'success')
        {
            var data = JSON.parse(response.data);
            for(e in data.data.events)
            {
                data.data.events[e]['start'] = new Date(data.data.events[e]['start']);
                data.data.events[e]['end']   = new Date(data.data.events[e]['end']);
            }
            calendar.events = data.data.events;
            calendar.sortEvents();
            v.settings.data.events = data.data.events;
            calendar.display();
        }
    }, 'json');
}

/* Finish a todo. */
function finishTodo(id)
{
    $.get(createLink('todo', 'finish', 'todoId=' + id, 'json'),function(response)
    {
        if(response.result == 'success')
        {
            if(response.confirm)
            {
                if(confirm(response.confirm.note))
                {
                    $.openEntry(response.confirm.entry, response.confirm.url);
                }
            }
        }
        else
        {
            if(response.message) $.zui.messager.show(response.message);
        }
        updateCalendar();
        return false;
    }, 'json');
}

/* Add calendar event handler. */
v.date = new Date();
v.d    = v.date.getDate();
v.m    = v.date.getMonth();
v.y    = v.date.getFullYear();

if(typeof(v.settings) == 'undefined') v.settings = {};
if(typeof(v.settings.data) == 'undefined') v.settings.data = {};
var handleClickCell = function(event)
{
    if(event.view == 'month')
    {
        var date  = event.date;
        var year  = date.getFullYear();
        var month = date.getMonth();
        var day   = date.getDate();
        if(year > v.y || (year == v.y && month > v.m) || (year == v.y && month == v.m && day >= v.d))
        {
            month = month + 1;
            if(day <= 9)   day   = '0' + day;
            if(month <= 9) month = '0' + month;
            var todourl = createLink('todo', 'batchCreate', "date=" + year + '' + month + '' + day, '', true);

            $.zui.modalTrigger.show({width: '85%', url: todourl, backdrop: 'static'});
        }
    }
};

var handleBeforeChange = function(event)
{
    if(event.change == 'start')
    {
        var data = {
            'date': event.to.format('yyyy-MM-dd'),
            'name': event.event.title,
            'type': event.event.calendar
        }
        if(!event.event.allDay)
        {
            data.begin = event.event.start.format('hh:mm');
            data.end = event.event.end.format('hh:mm');
        }
        if(data.date == '1970-01-01')
        {
            /* Delete. */
            var link = createLink('todo', 'delete', 'id=' + event.event.id);
        }
        else
        {
            /* Edit. */
            var link = createLink('todo', 'edit', 'id=' + event.event.id);
        }

        $.post(link, data, function(response)
        {
            updateCalendar();
        }, 'json');
    }
};

var handleEventCreator = function(event, $cell, calendar)
{
    var finish = event.data.status == 'done' || event.data.status == 'closed';
    var canFinish = (event.data.status != 'done' && event.data.status != 'closed') && (event.data.assignedTo == '' || event.data.assignedTo == v.account) && (event.calendar != 'trip' && event.calendar != 'leave' );
    var $event = $('<div title="' + event.title + '" data-id="' + (event.id || '') + '" class="event"><span class="title">' + event.title + '</span>' + (event.allDay ? '' : '<span class="time">' + event.start.format('hh:mm') + '</span>') + (canFinish ? '<span class="todo-finish event-btn"><?php echo $lang->todo->finish?></span>' : '') + '</div>');
    $event.toggleClass('wait', !finish).toggleClass('can-finish', !!canFinish).toggleClass('finish', !!finish).toggleClass('has-time', !event.allDay).toggleClass('expired', !finish && !$cell.hasClass('future'));

    var $assignTo;
    if(typeof(event.data.assignedBy) != 'undefined' && event.data.assignedBy != '' && event.data.assignedBy != v.account && event.data.assignedTo == v.account)
    {
        $assignTo = $("<span title='<?php echo $lang->todo->assignedBy;?>' class='assign'>" + v.users[event.data.assignedBy] + "<\/span>");
    }
    if(event.data.assignedTo != '' && event.data.assignedTo != v.account)
    {
        $assignTo = $("<span title='<?php echo $lang->todo->assignedTo;?>' class='assign'>" + v.users[event.data.assignedTo] + "<\/span>");
    }
    if($assignTo)
    {
        $assignTo.prependTo($event.children('.title'));
        $event.addClass('assigned').removeClass('wait');
    }
    return $event;
};

var handleFormatDay = function($cell, date, events, calendar)
{
    $cell.toggleClass('with-plus-sign', $cell.hasClass('future'));
};

var sortTodoEvents = function(a, b)
{
    var result = ((a.data.status == 'done' || a.data.status == 'closed') ? 1 : 0) - ((b.data.status == 'done' || b.data.status == 'closed') ? 1 : 0);
    if (result === 0) result = (a.allDay ? 1 : 0) - (b.allDay ? 1 : 0);
    if (result === 0) result = a.start > b.start ? 1 : (a.start < b.start ? (-1) : 0);
    if (result === 0) result = a.id < b.id ? (-1) : 1;
    return result;
};

$.extend(v.settings,
{
    clickCell: handleClickCell,
    beforeChange: handleBeforeChange,
    eventCreator: handleEventCreator,
    dayFormater: handleFormatDay,
    clickNextBtn: updateCalendar,
    clickPrevBtn: updateCalendar,
    clickTodayBtn: updateCalendar,
    hideEmptyWeekends: true,
    eventSorter: sortTodoEvents
});

$(function()
{
    $('#todoCalendar').on('click', '.event .todo-finish', function()
    {
          var id = $(this).closest('.event').data('id');
          finishTodo(id);
    });
});
</script>
<?php include '../../common/view/footer.html.php';?>