scope('manage', _t('@contacts', 'Contacts Management')) ->methods(['listing', 'ajax']) ->seoTemplates() ; } public function listing() { if (! $this->haveAccessTo('manage')) { return $this->showAccessDenied(); } $data = $this->input->postgetm([ 'page' => TYPE_UINT, 'ctype' => TYPE_UINT, ]); $data['ctypes'] = $this->getContactTypes(); $filter = []; if (! $data['ctype']) { $data['ctype'] = key($data['ctypes']); } foreach ($data['ctypes'] as &$v) { $v['cnt'] = config::get('contacts_new_' . $v['id'], 0); } unset($v); $filter['ctype'] = $data['ctype']; $total = $this->model->contactsListing($filter, true); $pages = new Pagination($total, 15, '#', 'jContacts.page(' . Pagination::PAGE_ID . '); return false;'); $data['pgn'] = $pages->view(); $data['list'] = $this->model->contactsListing($filter, false, $pages->getLimitOffset()); $data['list'] = $this->template('admin/listing.ajax', $data); if ($this->isAJAX()) { return $this->ajaxResponse([ 'list' => $data['list'], 'pgn' => $data['pgn'], ]); } return $this->template('admin/listing', $data); } public function ajax() { if (! $this->haveAccessTo('manage')) { return $this->ajaxResponse(Errors::ACCESSDENIED); } $action = $this->input->get('act', TYPE_STR); switch ($action) { case 'delete': # удаление { $id = $this->input->get('id', TYPE_UINT); if (! $id) { return $this->ajaxResponse(Errors::IMPOSSIBLE); } $contact = $this->model->contact($id); if (! $contact) { return $this->ajaxResponse(Errors::IMPOSSIBLE); } $deleted = $contact->delete(); if ($deleted && ! $contact->viewed) { $this->updateCounter($contact->ctype, -1); } return $this->ajaxResponse(Errors::SUCCESS); } case 'view': # просмотр, popup { $id = $this->input->get('id', TYPE_UINT); if (! $id) { return $this->ajaxResponse(Errors::IMPOSSIBLE); } $contact = $this->model->contact($id, null, ['user' => ['email']]); if (! $contact) { return $this->ajaxResponse(Errors::IMPOSSIBLE); } $data = $contact->toArray(); $data['ctypes'] = $this->getContactTypes(); $data['ctype'] = $data['ctypes'][$data['ctype']]; if (! $data['viewed']) { if ($contact->markViewed()) { $this->updateCounter($data['ctype']['id'], -1); } } return $this->adminModal($data, 'admin/view'); } case 'counters-refresh': { $this->countersRefresh(); return $this->adminRedirect(Errors::SUCCESS, 'listing'); } } return $this->ajaxResponse(Errors::IMPOSSIBLE); } }