uawdijnntqw1x1x1
IP : 3.16.1.194
Hostname : axolotl
Kernel : Linux axolotl 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,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,
OS : Linux
PATH:
/
var
/
www
/
axolotl
/
data
/
www
/
yar.axolotls.ru
/
bitrix
/
modules
/
timeman
/
lib
/
controller
/
worktime.php
/
/
<?php namespace Bitrix\Timeman\Controller; use Bitrix\Main\Engine\ActionFilter\Scope; use Bitrix\Main\Error; use Bitrix\Timeman\Form\Worktime\WorktimeRecordForm; use Bitrix\Timeman\Helper\TimeHelper; use Bitrix\Timeman\Model\Worktime\EventLog\WorktimeEventTable; use Bitrix\Timeman\Model\Worktime\Record\WorktimeRecord; use Bitrix\Timeman\Model\Worktime\Record\WorktimeRecordTable; use Bitrix\Timeman\UseCase\Worktime\Manage; use Bitrix\Timeman\Service\Worktime\Result\WorktimeServiceResult; use Bitrix\Main\Engine\Controller; class Worktime extends Controller { public function configureActions() { $configureActions = parent::configureActions(); $restOnlyScope = new Scope(Scope::REST); $actionsForRest = [ 'start', 'stop', 'relaunch', 'pause', ]; foreach ($actionsForRest as $name) { $configureActions[$name] = [ '-prefilters' => [Scope::class], '+prefilters' => [$restOnlyScope,], ]; } return $configureActions; } protected function getDefaultPreFilters() { return array_merge( parent::getDefaultPreFilters(), [ new Scope(Scope::AJAX), ] ); } public function pauseAction($userId, $latitudeClose = null, $longitudeClose = null, $ipClose = null, $device = null) { $recordForm = WorktimeRecordForm::createWithEventForm(); $recordForm->userId = $userId; $recordForm->latitudeClose = $latitudeClose; $recordForm->longitudeClose = $longitudeClose; $recordForm->ipClose = $ipClose; $recordForm->device = $device; if (!$recordForm->validate()) { return $recordForm->getErrors(); } $result = (new Manage\Pause\Handler())->handle($recordForm); return $this->decorateServiceResult($result); } public function startAction($userId, $startSeconds = null, $startDate = null, $reason = null, $latitudeOpen = null, $longitudeOpen = null, $ipOpen = null, $device = null) { $recordForm = WorktimeRecordForm::createWithEventForm(); $recordForm->userId = $userId; $recordForm->recordedStartSeconds = $startSeconds; $recordForm->getFirstEventForm()->reason = $reason; $recordForm->latitudeOpen = $latitudeOpen; $recordForm->longitudeOpen = $longitudeOpen; $recordForm->ipOpen = $ipOpen; $recordForm->device = $device; $recordForm->recordedStartDateFormatted = $startDate; if (!$recordForm->validate()) { return $recordForm->getErrors(); } $result = (new Manage\Start\Handler())->handle($recordForm); return $this->decorateServiceResult($result); } public function stopAction($userId, $stopSeconds = null, $stopDate = null, $reason = null, $latitudeClose = null, $longitudeClose = null, $ipClose = null, $device = null) { $recordForm = WorktimeRecordForm::createWithEventForm(); $recordForm->userId = $userId; $recordForm->recordedStopSeconds = $stopSeconds; $recordForm->getFirstEventForm()->reason = $reason; $recordForm->latitudeClose = $latitudeClose; $recordForm->longitudeClose = $longitudeClose; $recordForm->ipClose = $ipClose; $recordForm->device = $device; $recordForm->recordedStopDateFormatted = $stopDate; if (!$recordForm->validate()) { return $recordForm->getErrors(); } $result = (new Manage\Stop\Handler())->handle($recordForm); return $this->decorateServiceResult($result); } public function relaunchAction($userId, $device = null) { $recordForm = WorktimeRecordForm::createWithEventForm(); $recordForm->userId = $userId; $recordForm->device = $device; if (!$recordForm->validate()) { return $recordForm->getErrors(); } $result = (new Manage\Relaunch\Handler())->handle($recordForm); return $this->decorateServiceResult($result); } ##### AJAX public function approveRecordAction() { $worktimeForm = WorktimeRecordForm::createWithEventForm(WorktimeEventTable::EVENT_TYPE_APPROVE); $worktimeForm->approvedBy = $this->getCurrentUser()->getId(); $worktimeForm->load($this->getRequest()); if ($worktimeForm->validate()) { $oldStart = WorktimeRecordTable::query() ->addSelect('ID') ->addSelect('RECORDED_START_TIMESTAMP') ->where('ID', $worktimeForm->id) ->exec() ->fetchObject(); $result = (new Manage\Approve\Handler())->handle($worktimeForm); if (WorktimeServiceResult::isSuccessResult($result)) { return $this->makeAjaxResult($result, $worktimeForm, $oldStart); } $this->addErrors($result->getErrors()); return []; } $this->addError($worktimeForm->getFirstError()); return []; } /** * @param WorktimeServiceResult $serviceResult * @param WorktimeRecordForm $worktimeForm * @param WorktimeRecord $oldRecord * @return array */ private function makeAjaxResult($serviceResult, $worktimeForm, $oldRecord) { /** @var array $result */ $result = $this->convertKeysToCamelCase($serviceResult->getWorktimeRecord()->collectValues()); $updatedRecord = $serviceResult->getWorktimeRecord(); $startTimestampBefore = $oldRecord ? $oldRecord->getRecordedStartTimestamp() : $updatedRecord->getRecordedStartTimestamp(); $startTimestampAfter = $updatedRecord->getRecordedStartTimestamp(); if ($worktimeForm->useEmployeesTimezone) { $offset = $updatedRecord->getStartOffset(); } else { $offset = TimeHelper::getInstance()->getUserUtcOffset($this->getCurrentUser()->getId()); } $dateBefore = TimeHelper::getInstance()->createDateTimeFromFormat('U', $startTimestampBefore, $offset); $dateAfter = TimeHelper::getInstance()->createDateTimeFromFormat('U', $startTimestampAfter, $offset); $dates = []; $dates[$dateBefore->format('d.m.Y')] = $dateBefore; $dates[$dateAfter->format('d.m.Y')] = $dateAfter; global $APPLICATION; $result['dayCellsHtml'] = []; foreach ($dates as $date) { ob_start(); $APPLICATION->includeComponent( 'bitrix:timeman.worktime.grid', '.default', [ 'PARTIAL_ITEM' => 'shiftCell', 'DRAWING_TIMESTAMP' => $date->getTimestamp(), 'INCLUDE_CSS' => false, 'IS_SHIFTPLAN' => $this->getRequest()->get('isShiftplan') === 'true', 'USER_ID' => $serviceResult->getWorktimeRecord()->getUserId(), ] ); $result['dayCellsHtml'][] = ob_get_clean(); } return ['record' => $result]; } private function decorateServiceResult(WorktimeServiceResult $result) { if (!$result->isSuccess()) { $error = $result->getFirstError(); if ($error && !empty($error->getCustomData()) && !empty($error->getCustomData()['reasonCode'])) { $code = $error->getCustomData()['reasonCode']; if ($code === WorktimeServiceResult::ERROR_EMPTY_ACTIONS) { return new Error('Can not perform such an action for this user'); } return new Error('', $code); } return $result->getErrors(); } return $this->convertKeysToCamelCase($result->getWorktimeRecord()->collectRawValues()); } }
/var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/timeman/lib/controller/worktime.php