public function run() { // 前回のデータを取得 $oldCards = $this->converter->convert($this->reader->read(storage_path() . $this->lastDataFile, '[]')); if (is_null($oldCards)) { return false; } // URL生成 $url = 'https://trello.com/1/lists/' . env('TRELLO_LIST_ID') . '/cards' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN'); // Trelloよりカード情報取得 if (false === ($json = $this->getter->get($url))) { return false; } // 取得したカード情報(JSON形式)を配列へ変換 if (is_null($cards = $this->converter->convert($json))) { return false; } $created = new CardCreated(); $updated = new CardUpdated(); $currentCards = []; foreach ($cards as $card) { // 保存用データ作成 $id = $card['id']; // 日本時間で保存したほうが分かりやすい $carbonTime = (new Carbon($card['dateLastActivity']))->timezone('Asia/Tokyo'); $timeString = $carbonTime->toDateTimeString(); $currentCards[$id] = $timeString; // 直前のデーターに存在していなければ新規カード if (!array_key_exists($id, $oldCards)) { $created->id = $id; $created->name = $card['name']; $created->time = $carbonTime; $this->dispatcher->fire($created); continue; } // IDが一致するのに最終更新時間が異なっていれば更新 if ($timeString !== $oldCards[$id]) { $updated->id = $id; $updated->name = $card['name']; $updated->time = $carbonTime; $this->dispatcher->fire($updated); } } $deleted = new CardDeleted(); // 削除されたカードを選択 $deletedCards = array_diff_key($oldCards, $currentCards); foreach ($deletedCards as $deletedId => $time) { $deleted->id = $deletedId; $this->dispatcher->fire($deleted); } // 今回の取得データをファイルへ保存 $this->file->put(storage_path() . $this->lastDataFile, json_encode($currentCards)); return true; }
/** * 元のタスクへリマインダー設定されていれば * 日付を今日に変更し、新しく設定する * * @param array $baseTask * @param array $newTask */ private function createRemeinderFromOriginal($baseTask, $newTask) { // ベースタスクのリマインダー取得 $url = 'a.wunderlist.com/api/v1/reminders' . '?task_id=' . $baseTask['id']; $jsonReminder = $this->getter->get($url, $this->tokens); $reminder = $this->converter->convert($jsonReminder); // リマインダー設定なし if (empty($reminder)) { return; } // リマインダーはタスクに一つしか取得できないが、 // APIがリストのリマインダー取得と共有のため、多重配列で返ってくる $reminderTime = Carbon::parse($reminder[0]['date']); // 生成したタスクに今日の日付の同時刻でリマインダー設定 $this->createReminder($newTask, $this->todayAtSameTime($reminderTime)); }
private function getAllCards() { $lists = $this->getAllLists(); $this->initializeGentlyAPICall(); $this->myCards = []; foreach ($lists as $listId => $list) { $this->gentlyAPICall(); $url = 'https://trello.com/1/lists/' . $listId . '/cards' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN'); if (false === ($result = $this->getter->get($url))) { continue; } $cards = $this->converter->convert($result); foreach ($cards as $card) { $this->myCards[$card['id']] = ['name' => $card['name'], 'listId' => $listId, 'listName' => $list['name'], 'boardId' => $list['boardId'], 'boardName' => $list['boardName']]; } } return $this->myCards; }