/** * Обрабатывает POST переменную action и возвращает null или данные. * * @return string */ public function processRequest() { $expire = 1; //3600; $action = __paramInit('string', '', 'action'); switch ($action) { case 'getdays': $days = array(1 => iconv('WINDOWS-1251', 'UTF-8//IGNORE', '1 день')); $max = __paramInit('integer', '', 'max', 1); $all = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 21, 30, 45, 60, 90); if ($max > 1) { $days = array(); foreach ($all as $day) { if ($day >= $max) { break; } $days[$day] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $day . ending($day, ' день', ' дня', ' дней')); } } $days = array(array('parentId' => '0'), $days); return json_encode($days); break; case 'gettucategories': $expire = 300; //3600; $membuf = new memBuff(); $memkey = 'b-combo-gettucategories'; $result = $membuf->get($memkey); if (!$result) { /* * Получаем из базы иерархию категорий для * типовой услуги */ $DB = new DB('master'); $sql = 'SELECT g.id AS gid, g.title AS gname, g.ucnt AS gucnt, p.id AS pid, p.title AS name, p.ucnt AS pucnt FROM tservices_categories AS g INNER JOIN tservices_categories AS p ON p.parent_id = g.id ORDER BY g.ucnt DESC, p.ucnt DESC --gid, pid --g.n_order, p.n_order'; $rows = $DB->rows($sql); $result = array(); if (count($rows)) { foreach ($rows as $k => $i) { if ($result[$i['gid']] === null) { $result[$i['gid']] = array('0' => array(iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['gname']), $i['gucnt'])); if ($i['pid'] !== null) { $result[$i['gid']][$i['pid']] = array(iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']), $i['pucnt']); } else { $result[$i['gid']] = array(iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['gname']), $i['gucnt']); } } elseif (is_array($result[$i['gid']])) { $result[$i['gid']][$i['pid']] = array(iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']), $i['pucnt']); } } } //print_r($result); //exit; $result = json_encode($result); $membuf->add($memkey, $result, $expire); } return $result; break; case 'getlettergrouplist': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/letters.php'; $lettergroups = letters::getGroups($_POST['word'], (int) $_POST['limit']); $result = array(); $n = 0; foreach ($lettergroups as $k => $i) { $result[$n]['uid'] = $i['id']; $result[$n]['uname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['title']); $result[$n]['usurname'] = ''; $result[$n]['login'] = ''; $result[$n]['photo'] = ''; $result[$n]['path'] = ''; $result[$n]['isContacts'] = ''; ++$n; } $list = array(); $list['list'] = $result; $list['counters']['moreContacts'] = 0; $list['counters']['moreUsers'] = 0; $list['dav'] = WDCPREFIX; return json_encode($list); break; case 'getlettergroupinfo': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/letters.php'; $group = letters::getGroup($_POST['uid']); if ($group) { $data = array('record' => array('uid' => $group['id'], 'uname' => iconv('WINDOWS-1251', 'UTF-8//IGNORE', $group['title']), 'usurname' => '', 'login' => '', 'photo' => '', 'path' => '', 'isContacts' => ''), 'found' => 1, 'dav' => WDCPREFIX); } return json_encode($data); break; case 'getletterdocinfo': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/letters.php'; $doc = letters::getDocument($_POST['uid']); if ($doc) { $data = array('record' => array('uid' => $doc['id'], 'uname' => iconv('WINDOWS-1251', 'UTF-8//IGNORE', $doc['id'] . ' ' . htmlspecialchars($doc['group_title']) . ' - ' . htmlspecialchars($doc['title'])), 'usurname' => '', 'login' => '', 'photo' => '', 'path' => '', 'isContacts' => ''), 'found' => 1, 'dav' => WDCPREFIX); } return json_encode($data); break; case 'getletterdoclist': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/letters.php'; $letterdocs = letters::getDocuments($_POST['word'], (int) $_POST['limit']); $result = array(); $n = 0; foreach ($letterdocs as $k => $i) { $result[$n]['uid'] = $i['id']; $result[$n]['uname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['id'] . ' ' . htmlspecialchars($i['group_title']) . ' - ' . htmlspecialchars($i['title'])); $result[$n]['usurname'] = ''; $result[$n]['login'] = ''; $result[$n]['photo'] = ''; $result[$n]['path'] = ''; $result[$n]['isContacts'] = ''; ++$n; } $list = array(); $list['list'] = $result; $list['counters']['moreContacts'] = 0; $list['counters']['moreUsers'] = 0; $list['dav'] = WDCPREFIX; return json_encode($list); break; case 'getletterdocsearch': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/letters.php'; $letterdocs = letters::getSearchDocuments($_POST['word'], (int) $_POST['limit']); $result = array(); $n = 0; foreach ($letterdocs as $k => $i) { $result[$n]['uid'] = $i['id']; $result[$n]['uname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['id'] . ' ' . htmlspecialchars($i['group_title']) . ' - ' . htmlspecialchars($i['title'])); $result[$n]['usurname'] = ''; $result[$n]['login'] = ''; $result[$n]['photo'] = ''; $result[$n]['path'] = ''; $result[$n]['isContacts'] = ''; ++$n; } $list = array(); $list['list'] = $result; $list['counters']['moreContacts'] = 0; $list['counters']['moreUsers'] = 0; $list['dav'] = WDCPREFIX; return json_encode($list); break; case 'getdate': return date('Y-m-d'); case 'getprofgroups': $membuf = new memBuff(); $memkey = 'b-combo-getprofgroups'; $result = $membuf->get($memkey); if (!$result) { $rows = professions::GetAllGroupsLite(); $result = array(); foreach ($rows as $k => $i) { $result[$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']); } $membuf->add($memkey, $result, $expire); } return json_encode($result); case 'getprofessionsandgroups': $membuf = new memBuff(); $memkey = 'b-combo-getprofandgroups'; $result = $membuf->get($memkey); if (!$result) { $rows = professions::GetProfessionsAndGroup(); $result = array(); foreach ($rows as $k => $i) { if ($result[$i['gid']] === null) { $result[$i['gid']] = array($i['gid'] => iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['gname'])); if ($i['id'] !== null) { $result[$i['gid']][$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']); } else { $result[$i['gid']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['gname']); } } elseif (is_array($result[$i['gid']])) { $result[$i['gid']][$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']); } } $membuf->add($memkey, $result, $expire); } return json_encode($result); case 'getprofessions': $n = __paramInit('integer', '', 'id'); if ($n !== false) { $membuf = new memBuff(); $memkey = "b-combo-getprofbygroup{$n}"; $result = $membuf->get($memkey); if (!$result) { $rows = professions::GetProfs($n); $result = array(0 => iconv('WINDOWS-1251', 'UTF-8//IGNORE', 'Все специальности')); foreach ($rows as $k => $i) { $result[$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']); } $membuf->add($memkey, $result, $expire); } $data = array(array('parentId' => "{$n}"), $result); return json_encode($data); } case 'get_pro_types': $membuf = new memBuff(); $memkey = 'b-combo-get_pro_type'; $result = $membuf->get($memkey); if (!$result) { $rows = op_codes::getCodes(array(47, 48, 49, 50, 51)); $result = array(); foreach ($rows as $k => $i) { $result[$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['op_name']); } $result[76] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', 'На несколько недель'); $membuf->add($memkey, $result, $expire); } return json_encode($result); case 'getcountries': case 'getrelevantcountries': $membuf = new memBuff(); $memkey = 'b-combo-getcountriesr'; $result = $membuf->get($memkey); if (!$result) { $rows = country::GetCountriesByCountUser(); $result = array(); foreach ($rows as $k => $i) { $result[$i['id']] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i['name']); } $membuf->add($memkey, $result, $expire); } return json_encode($result); case 'getcities': $n = __paramInit('integer', '', 'id'); if ($n !== false) { $membuf = new memBuff(); $memkey = "b-combo-getcitybycountry{$n}"; $result = $membuf->get($memkey); if (!$result) { $rows = city::GetCities($n); $result = array('0' => iconv('WINDOWS-1251', 'UTF-8//IGNORE', 'Все города')); if (is_array($rows)) { foreach ($rows as $k => $i) { $result[$k] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i); } } $membuf->add($memkey, $result, $expire); } $data = array(array('parentId' => "{$n}"), $result); return json_encode($data); } case 'getcitiesbyid': $n = __paramInit('integer', '', 'id'); if ($n !== false) { $membuf = new memBuff(); $memkey = "b-combo-getcitybycountry{$n}"; $result = $membuf->get($memkey); if (!$result) { $rows = city::GetCities($n); $result = array('0' => iconv('WINDOWS-1251', 'UTF-8//IGNORE', 'Все города')); foreach ($rows as $k => $i) { $result[$k] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $i); } $membuf->add($memkey, $result, $expire); } return json_encode($result); } case 'getuserlistbysbr': case 'getuserlistold': case 'getuserlist': return $this->getUsersList($_POST['word'], (int) $_POST['limit'], (int) $_POST['userType'], (int) $_POST['scope']); case 'get_user_info': return json_encode(users::GetUserShortInfo((int) $_POST['uid'])); case 'getusersandcompanies': return $this->getUsersAndCompany($_POST['word'], (int) $_POST['limit'], (int) $_POST['userType'], (int) $_POST['scope'], false); case 'get_user_or_company_info': return $this->getUserOrCompanyRecord(); case 'getsms': require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/registration.php'; $registration = new registration(); $registration->listenerAction(__paramInit('string', null, 'action')); } return false; }
/** * Запись истории изменения документа * * @param integer $id ID документа * @param array $new_data Новые данные документа */ function saveHistory($id, $new_data) { global $DB; $old_data = letters::getDocument($id); $changed = array(); if ($new_data) { foreach ($new_data as $key => $new_val) { if ($key == 'user_status_date_1' || $key == 'user_status_date_2' || $key == 'user_status_date_3') { $old_data = preg_replace("/ .*\$/", "", $old_data); } if ($key == 'is_user_1_company' || $key == 'is_user_2_company' || $key == 'is_user_3_company') { continue; } if ($key == 'user_1' || $key == 'user_2' || $key == 'user_3') { $oldIsCompany = $old_data["is_{$key}_company"] === 't' ? 't' : 'f'; // избавляемся от null $newIsCompany = $new_data["is_{$key}_company"] === 't' ? 't' : 'f'; if ($new_val != $old_data[$key] || ($new_val || $old_data[$key]) && $newIsCompany != $oldIsCompany) { $changed[] = $key; } } else { if ($new_val != $old_data[$key]) { $changed[] = $key; } } } } if ($changed) { $qgroups = $DB->rows("SELECT * FROM letters_group"); foreach ($qgroups as $v) { $groups[$v['id']] = $v['title']; } $qdeliveries = $DB->rows("SELECT * FROM letters_delivery"); foreach ($qdeliveries as $v) { $deliveries[$v['id']] = $v['title']; } $qstatuses = $DB->rows("SELECT * FROM letters_status"); foreach ($qstatuses as $v) { $statuses[$v['id']] = $v['title']; } $statuses[0] = 'Не выбрано'; foreach ($changed as $change_type) { switch ($change_type) { case 'title': $type_field = 1; $old_val = $old_data['title']; $new_val = $new_data['title']; break; case 'group_id': $type_field = 2; $old_val = $groups[$old_data['group_id']]; $new_val = $groups[$new_data['group_id']]; break; case 'user_1': $type_field = 3; $old_val = $old_data['user_1'] . '-' . ($old_data['is_user_1_company'] === 't' ? '1' : '0'); $new_val = $new_data['user_1'] . '-' . ($new_data['is_user_1_company'] === 't' ? '1' : '0'); break; case 'user_2': $type_field = 4; $old_val = $old_data['user_2'] . '-' . ($old_data['is_user_2_company'] === 't' ? '1' : '0'); $new_val = $new_data['user_2'] . '-' . ($new_data['is_user_2_company'] === 't' ? '1' : '0'); break; case 'user_3': $type_field = 5; $old_val = $old_data['user_3'] . '-' . ($old_data['is_user_3_company'] === 't' ? '1' : '0'); $new_val = $new_data['user_3'] . '-' . ($new_data['is_user_3_company'] === 't' ? '1' : '0'); break; case 'user_status_1': case 'user_status_date_1': $type_field = 6; $old_val = $statuses[$old_data['user_status_1']]; $new_val = $statuses[$new_data['user_status_1']]; if ($old_data['user_status_1'] == 2 || $old_data['user_status_1'] == 3) { $old_val .= ' ' . dateFormat("d.m.Y", $old_data['user_status_date_1']); } if ($new_data['user_status_1'] == 2 || $new_data['user_status_1'] == 3) { $new_val .= ' ' . dateFormat("d.m.Y", $new_data['user_status_date_1']); } break; case 'user_status_2': case 'user_status_date_2': $type_field = 7; $old_val = $statuses[$old_data['user_status_2']]; $new_val = $statuses[$new_data['user_status_2']]; if ($old_data['user_status_2'] == 2 || $old_data['user_status_2'] == 3) { $old_val .= ' ' . dateFormat("d.m.Y", $old_data['user_status_date_2']); } if ($new_data['user_status_2'] == 2 || $new_data['user_status_2'] == 3) { $new_val .= ' ' . dateFormat("d.m.Y", $new_data['user_status_date_2']); } break; case 'user_status_3': case 'user_status_date_3': $type_field = 8; $old_val = $statuses[$old_data['user_status_3']]; $new_val = $statuses[$new_data['user_status_3']]; if ($old_data['user_status_3'] == 2 || $old_data['user_status_3'] == 3) { $old_val .= ' ' . dateFormat("d.m.Y", $old_data['user_status_date_3']); } if ($new_data['user_status_3'] == 2 || $new_data['user_status_3'] == 3) { $new_val .= ' ' . dateFormat("d.m.Y", $new_data['user_status_date_3']); } break; case 'delivery': $type_field = 9; $old_val = $deliveries[$old_data['delivery']]; $new_val = $deliveries[$new_data['delivery']]; break; case 'delivery_cost': $type_field = 10; $old_val = $old_data['delivery_cost']; $new_val = $new_data['delivery_cost']; break; case 'parent': $type_field = 11; if ($old_data['parent']) { $old_doc = letters::getDocument($old_data['parent']); $old_val = "ID{$old_doc['id']} {$old_doc['title']}"; } else { $old_val = "Нет"; } if ($new_data['parent']) { $new_doc = letters::getDocument($new_data['parent']); $new_val = "ID{$new_doc['id']} {$new_doc['title']}"; } else { $new_val = "Нет"; } break; case 'comment': $type_field = 12; $old_val = $old_data['comment']; $new_val = $new_data['comment']; break; default: $type_field = null; break; } if ($type_field) { $sql = "INSERT INTO letters_history(\n doc_id, \n type_field, \n val_old, \n val_new, \n change_date, \n user_id\n ) VALUES (\n ?i,\n ?i,\n ?,\n ?,\n NOW(),\n ?i\n ); "; $DB->query($sql, $id, $type_field, $old_val, $new_val, get_uid(false)); } } } }