* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Rapsys\AirBundle\Repository; use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\Query\ResultSetMapping; use Rapsys\AirBundle\Repository; /** * GoogleTokenRepository */ class GoogleTokenRepository extends Repository { /** * Find google tokens indexed by id * * @return array The google tokens array */ public function findAllIndexed(): array { //Set the request $req = <<tableKeys, $this->tableValues, $req); //Get result set mapping instance //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php $rsm = new ResultSetMapping(); //Declare all fields //XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php //addScalarResult($sqlColName, $resColName, $type = 'string'); $rsm ->addScalarResult('tid', 'tid', 'integer') ->addScalarResult('gmail', 'gmail', 'string') ->addScalarResult('uid', 'uid', 'integer') ->addScalarResult('access', 'access', 'string') ->addScalarResult('refresh', 'refresh', 'string') ->addScalarResult('created', 'created', 'datetime') ->addScalarResult('expired', 'expired', 'datetime') ->addScalarResult('cids', 'cids', 'string') ->addScalarResult('cmails', 'cmails', 'string') ->addScalarResult('csummaries', 'csummaries', 'string') ->addScalarResult('csynchronizeds', 'csynchronizeds', 'string') ->addScalarResult('dids', 'dids', 'string') ->addScalarResult('sids', 'sids', 'string') ->addIndexByScalar('tid'); //Set result array $result = []; //Get tokens $tokens = $this->_em ->createNativeQuery($req, $rsm) ->getArrayResult(); //Iterate on tokens foreach($tokens as $tid => $token) { //Set cids $cids = explode("\n", $token['cids']); //Set cmails $cmails = explode("\n", $token['cmails']); //Set csummaries $csummaries = explode("\n", $token['csummaries']); //Set csynchronizeds $csynchronizeds = array_map(function($v){return new \DateTime($v);}, explode("\n", $token['csynchronizeds'])); //Set result $result[$tid] = [ 'id' => $tid, 'mail' => $token['gmail'], 'uid' => $token['uid'], 'access' => $token['access'], 'refresh' => $token['refresh'], 'created' => $token['created'], 'expired' => $token['expired'], 'calendars' => [], 'dances' => [], 'subscriptions' => [] ]; //Iterate on calendars foreach($cids as $k => $cid) { $result[$tid]['calendars'][$cid] = [ 'id' => $cid, 'mail' => $cmails[$k], 'summary' => $csummaries[$k], 'synchronized' => $csynchronizeds[$k] ]; } //Set dids $dids = explode("\n", $token['dids']); //Iterate on dances foreach($dids as $k => $did) { $result[$tid]['dances'][$did] = [ 'id' => $did ]; } //Set sids $sids = explode("\n", $token['sids']); //Iterate on subscriptions foreach($sids as $k => $sid) { $result[$tid]['subscriptions'][$sid] = [ 'id' => $sid ]; } } //Return result return $result; } }