setChart
, так как записи в нем копились раз за разом. Также переделал структуру добавления новых записей в функцииclass HomeViewController: UIViewController {
var pieChart = PieChartView()
var entries: [ChartDataEntry] = []
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setChart()
}
func setChart() {
entries.removeAll()
let entries = self.cellArr.map { PieChartDataEntry(value: Double($0.amount), label: String($0.type))) }
updateSorting(values: entries)
}
}
sendNewOperation
, теперь она выглядит таким образом:func sendNewOperation(id: Int?, amount: Float, description: String, category: String,
image: String, date: Date, switcher: String) {
if let oldCellId = id {
if let ix = self.cellArr.firstIndex(where: { searchedRecord in
searchedRecord.id == oldCellId
}) {
self.cellArr[ix] = Record(amount: amount, descriptionText: description, categoryText: category, categoryImage: image, date: date, id: oldCellId)
self.tableView.reloadRows(at: [IndexPath(row: ix, section: 0)], with: .automatic)
} else {
fatalError("couldn't edit old cell #\(oldCellId)")
} // Создается новая ячейка
} else {
let operationID = Int.random(in: 0...10000)
print("id: \(operationID)")
self.cellArr.append(Record(amount: amount, descriptionText: description, categoryText: category, categoryImage: image, date: date, id: operationID)) // Добавление в массив нового элемента
self.tableView.insertRows(at: [IndexPath(row: self.cellArr.count - 1, section: 0)], with: .automatic)
}
}
var operationID: Int?
let homeViewController: HomeViewController
init(homeViewController: HomeViewController, operationID: Int?) {
self.homeViewController = homeViewController
self.operationID = operationID
super.init(nibName: nil, bundle: nil)
}
@objc func saveButtonAction(sender: AnyObject) {
addNewOpDelegate?.sendNewOperation(id: operationID, amount: abs(amount), description: descriptionTextField.text!, category: categoryButton.titleLabel!.text!, image: categoryImage, date: datePicker.date, switcher: segment)
self.navigationController?.popToRootViewController(animated: true) // Закрыть AddNewOperationVC
}
// Протокол отправки всех введенных значений операции
protocol AddNewOpSendData: AnyObject {
func sendNewOperation(id: Int?, amount: Float, description: String, category: String, image: String, date: Date, switcher: String)
}
@objc func AddNewOperation() {
let vc = AddNewOperationVC(homeViewController: self, operationID: nil)
vc.addNewOpDelegate = self
navigationController?.pushViewController(vc, animated: true)
}
sendRequest
проверку на ошибки в http-запросах:if (!curl_errno($ch)) {
global $http_code;
$http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
}
switch ($http_code) {
case 200: // OK
break;
case 403: // Forbidden
$blocked_users = $blocked_users + 1;
break;
}
$rows = $array_count;
$columns = 1;
$keyboard = [];
for ($i = 0; $i <= $array_count; $i++) {
$rowKeys = [];
for ($j = 1; $j <= $columns; $j++) {
$token_get = secret_token_get($user_id)[$i];
$token_symbols = substr($token_get['token'], -5);
$rowKeys[] = ['text' => $token_symbols, 'callback_data' => $token_symbols];
}
$keyboard[] = $rowKeys;
}
function reply_keyboard($array) {
return json_encode(['keyboard' => $array]);
}
if (strpos($message, "/start") === 0) { // Команда /start, вызов кнопки под чатом
$post = [
'chat_id' => $chat_id,
'text' => 'Напиши любое сообщение или нажми на кнопку ниже, чтобы начать!',
$cocktails_button = [[['text' => 'Открыть список коктейлей ']]],
'reply_markup' => reply_keyboard($cocktails_button),
'resize_keyboard' => true,
'one_time_keyboard' => true
];
sendRequest('sendMessage', $post);
}
function sendRequest($method, $post = '') {
$ch = curl_init('https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
<?php
$data = json_decode(file_get_contents('php://input'));
$callback_query = $data->callback_query;
$callback_query_id = $callback_query->id;
$callback_data = $callback_query->data;
$from = $callback_query->from;
$user_id = $from->id;
$username = $from->username;
$message = $callback_query->message;
$message_id = $message->message_id;
$callback_message_text = $message->text;
$chat = $message->chat;
$chat_id = $chat->id;
$inline_message_id = $callback_query->inline_message_id;
<?php
include 'config.php'; // Токен бота
include 'functions.php'; // Основные функции
include 'data.php'; // Получение данных
// Делается запрос
$method = 'setWebhook';
$url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method;
$options = [
'url' => 'https://example.ru/bot.php'
];
// То, что возвращается из запроса
$response = file_get_contents($url . '?' . http_build_query($options));
var_dump($response);
if (strpos($message, "/help") === 0) { // Команда /help
$post = [
'chat_id' => $chat_id,
'text' => 'Эта памятка создана для объяснения различных барменских
терминов, посуды',
$help_buttons = [
[['text' => 'Термины ', 'callback_data' => 'terms']],
[['text' => 'Посуда / Штучки ', 'callback_data' => 'dishes']]
],
'reply_markup' => inline_keyboard($help_buttons)
];
sendRequest('sendMessage', $post);
} else {
// Начальное сообщение
$post = [
'chat_id' => $chat_id,
'text' => 'Давай определимся с категорией коктейлей:',
$main_menu = [
[['text' => 'Незабываемые ♾', 'callback_data' => 'the_unforgettables']],
[['text' => 'Современная Классика ', 'callback_data' => 'contemporary_classic']],
[['text' => 'Напитки Новой Эры ', 'callback_data' => 'new_era_drinks']]
],
'reply_markup' => inline_keyboard($main_menu)
];
sendRequest('sendMessage', $post);
}
include 'callback_query.php'; // Получение обратных запросов
switch ($callback_data) {
case 'the_unforgettables':
$post = [
'chat_id' => $chat_id,
'message_id' => $message_id,
'text' => 'Отлично, теперь выбери любой коктейль из списка:',
$InlineTheUnforgettables = [
[['text' => 'Negroni', 'callback_data' => 'negroni']],
[['text' => 'Manhattan', 'callback_data' => 'manhattan']],
[['text' => 'Americano', 'callback_data' => 'americano']],
[['text' => 'Daikiri', 'callback_data' => 'daiqiri']],
[['text' => 'Old Fashioned', 'callback_data' => 'old_fashioned']],
[['text' => 'Ramos Fizz', 'callback_data' => 'ramos_fizz']],
[['text' => 'Clover Club', 'callback_data' => 'clover_club']],
[['text' => 'Gin Fizz', 'callback_data' => 'gin_fizz']],
[['text' => 'Vieux Carre', 'callback_data' => 'vieux_carre']],
[['text' => 'Sazerac', 'callback_data' => 'sazerac']]
],
'reply_markup' => inline_keyboard($InlineTheUnforgettables),
];
sendRequest('editMessageText', $post);
break;
}