/** * Ребенок пришел/ушел в/из школу - на вход получаешь id ребенка и тип действия * (0-пришел в школу, 1-ушел из школы)Находишь всех родителей ребенка, * и делаешь запрос к серверу GCM как написано вот тут * https://developers.google.com/cloud-messaging/ * @param $childId * @return integer ResponseCode::consts */ public function event($childId, $data) { $child = Children::find($childId); if (!$child) { return ResponseCode::CHILDREN_NOT_FOUND; } $dataArray = json_decode($data, true); $responses = []; $parents = $child->getParents(); foreach ($parents as $parent) { /** * @var $parent Parents */ $tokens = $parent->getTokens(); if ($tokens === null) { $responses[] = ResponseCode::PARENT_NOT_HAVE_TOKEN; continue; } foreach ($tokens as $token) { /** @var $token Tokens */ $resp = CloudMessaging::send($token->token, $dataArray); $code = ResponseCode::fromResponse($resp); if ($code === ResponseCode::NOT_REGISTERED || $code === ResponseCode::UNKNOWN_ERROR) { $token->delete(); } if ($code === ResponseCode::OK) { $message = new Message(); $message->message = $dataArray['message']; $message->child_id = $child->id; $message->parent_id = $parent->id; $message->date = date("Y-m-d H:i:s"); $message->save(); } $responses[] = $code; } } return $responses; }
$app->register(new Silex\Provider\DoctrineServiceProvider(), ['db.options' => $config->get('db')]); \Sasik\Db\DbSingleton::setDb($app['db']); $db = \Sasik\Db\DbSingleton::getDb(); /** * ОСТОРОЖНО */ foreach (['children', 'parents', 'tokens', 'children_to_parents'] as $table) { $query = $db->createQueryBuilder(); $query->delete($table)->execute(); // $db->fetchAll('DELETE FROM ' . $table ); } //$db->delete('children', []); //$db->delete('parents', []); //$db->delete('tokens', []); //$db->delete('children_to_parents', []); $childrens = [Children::createObj(['name' => 'Children' . uniqid()]), Children::createObj(['name' => 'TestChildren']), Children::createObj(['name' => 'Children' . uniqid()]), Children::createObj(['name' => 'Children' . uniqid()]), Children::createObj(['name' => 'Children' . uniqid()])]; saveAll($childrens); $parents = [Parents::createObj(['login' => 'Parent' . uniqid(), 'password' => uniqid()]), Parents::createObj(['login' => 'TestParent', 'password' => 'ParentPass']), Parents::createObj(['login' => 'Parent' . uniqid(), 'password' => uniqid()]), Parents::createObj(['login' => 'Parent' . uniqid(), 'password' => uniqid()])]; saveAll($parents); $tokens = addTokens($parents); saveAll($tokens); addRelation($parents, $childrens); function addTokens($parents) { $tokens = []; foreach ($parents as $parent) { $tokens[] = Tokens::createObj(['parent_id' => $parent->id, 'token' => uniqid('token-'), 'type' => rand(0, 1)]); } return $tokens; } function saveAll(array $collection)
public function addChildren(Children $children) { $children->save(); $this->childrens[] = $children; $mapper = DbSingleton::getParentChildrenMapper(); $mapper->addRelation($this, $children); }