public function getPeople($userId, $groupId, CollectionOptions $options, $fields, SecurityToken $token)
 {
     $ids = $this->getIdSet($userId, $groupId, $token);
     $first = $options->getStartIndex();
     $max = $options->getCount();
     $ret = array();
     $members = array();
     if (count($ids)) {
         if (CollectionOptions::HAS_APP_FILTER === $options->getFilterBy() && $token->getAppId()) {
             $memberApplications = Doctrine::getTable('MemberApplication')->createQuery()->where('application_id', $token->getAppId())->execute();
             if (count($memberApplications)) {
                 $ids = array_intersect($ids, $memberApplications->toKeyValueArray('id', 'member_id'));
             } else {
                 $ids = array();
             }
         }
     }
     if (count($ids)) {
         $query = Doctrine::getTable('Member')->createQuery()->whereIn('id', $ids);
         $totalSize = $query->count();
         $query->orderBy('id');
         if (!($first !== false && is_numeric($first) && $first >= 0)) {
             $first = 0;
         }
         if (!($max !== false && is_numeric($max) && $max > 0)) {
             $max = 20;
         }
         $query->offset($first);
         $query->limit($max);
         $members = $query->execute();
     }
     $people = array();
     $viewer = !$token->isAnonymous() ? Doctrine::getTable('Member')->find($token->getViewerId()) : null;
     $application = $token->getAppId() ? Doctrine::getTable('Application')->find($token->getAppId()) : null;
     $export = new opOpenSocialProfileExport();
     $export->setViewer($viewer);
     foreach ($members as $member) {
         $p = array();
         $p['id'] = $member->getId();
         $p['isOwner'] = !$token->isAnonymous() && $member->getId() == $token->getOwnerId() ? true : false;
         $p['isViewer'] = !$token->isAnonymous() && $member->getId() == $token->getViewerId() ? true : false;
         if ($application) {
             $p['hasApp'] = $application->isHadByMember($member->getId());
         }
         $export->member = $member;
         $people[] = $p + $export->getData($fields);
     }
     $collection = new RestfulCollection($people, $first, $totalSize);
     $collection->setItemsPerPage($max);
     return $collection;
 }
 /**
  * generate a configutaion
  *
  * @param string $containerName
  * @param string $snsUrl
  * @param string $shindigUrl
  * @param string $apiUrl
  * @return string
  */
 public function generate($snsUrl = null, $shindigUrl = null, $apiUrl = null, $templateFile = null)
 {
     sfContext::getInstance()->getConfiguration()->loadHelpers(array('Asset'));
     if (null === $templateFile) {
         $templateFile = dirname(__FILE__) . '/../vendor/Shindig/config/container.js';
     }
     $containerTemplate = $this->loadTemplate($templateFile);
     $request = sfContext::getInstance()->getRequest();
     $snsBaseUrl = $this->addSlashToUrl(sfConfig::get('op_base_url'));
     if (null === $snsUrl) {
         if (!($snsUrl = sfConfig::get('op_opensocial_sns_url'))) {
             $snsUrl = $snsBaseUrl;
             if ($this->isDevEnvironment) {
                 $snsUrl .= 'pc_frontend_dev.php/';
             }
         }
     }
     $snsUrl = $this->addSlashToUrl($snsUrl);
     if (null === $apiUrl) {
         if (!($apiUrl = sfConfig::get('op_opensocial_api_url'))) {
             if (Doctrine::getTable('SnsConfig')->get('is_use_outer_shindig')) {
                 $apiUrl = Doctrine::getTable('SnsConfig')->get('shindig_url');
             } else {
                 $apiUrl = $snsBaseUrl . 'api';
                 if ($this->isDevEnvironment) {
                     $apiUrl .= '_dev';
                 }
                 $apiUrl .= '.php/';
             }
         }
     }
     $apiUrl = $this->addSlashToUrl($apiUrl);
     if (null === $shindigUrl) {
         if (Doctrine::getTable('SnsConfig')->get('is_use_outer_shindig')) {
             $shindigUrl = $apiUrl;
         } else {
             $shindigUrl = $snsUrl;
         }
     }
     $shindigUrl = $this->addSlashToUrl($shindigUrl);
     // override container template
     $containerTemplate['gadgets.container'] = array($this->containerName);
     $containerTemplate['gadgets.jsUriTemplate'] = $shindigUrl . 'gadgets/js/%js%';
     $jsUrl = parse_url($shindigUrl . 'gadgets/js');
     $containerTemplate['gadgets.uri.js.host'] = $jsUrl['scheme'] . '://' . $jsUrl['host'] . (isset($jsUrl['port']) ? $jsUrl['port'] : '') . '/';
     $containerTemplate['gadgets.uri.js.path'] = $jsUrl['path'];
     $containerTemplate['gadgets.securityTokenType'] = 'secure';
     $containerTemplate['gadgets.osDataUri'] = $apiUrl . 'social/rpc';
     $features =& $containerTemplate['gadgets.features'];
     $features['core.io']['proxyUrl'] = $shindigUrl . 'gadgets/proxy?refresh=%refresh%&url=%url%';
     $features['core.io']['jsonProxyUrl'] = $shindigUrl . 'gadgets/makeRequest';
     $features['views']['profile']['urlTemplate'] = $snsUrl . 'member/{var}';
     $features['views']['canvas']['urlTemplate'] = $snsUrl . 'application/canvas/id/{var}';
     $features['views']['home'] = array('isOnlyVisible' => false, 'urlTemplate' => $snsUrl, 'aliases' => array());
     $features['rpc']['parentRelayUr'] = $snsUrl . 'opOpenSocialPlugin/js/rpc_relay.html';
     $features['opensocial']['path'] = $apiUrl . 'social/rpc';
     $features['opensocial']['invalidatePath'] = $shindigUrl . 'gadgets/api/rpc';
     $export = new opOpenSocialProfileExport();
     $supportedFields = $export->getSupportedFields();
     $supportedFields = array_merge($supportedFields, array('activity' => array('id', 'title', 'userId', 'postedTime', 'streamUrl', 'appId', 'mediaItems'), 'mediaItem' => array('id', 'albumId', 'created', 'description', 'fileSize', 'lastUpdated', 'thumbnailUrl', 'title', 'type', 'url')));
     $features['opensocial']['supportedFields'] = $supportedFields;
     $features['osapi.services'][$apiUrl . 'social/rpc'] = array('system.listMethods', 'people.get', 'appdata.get', 'appdata.update', 'appdata.delete');
     $features['oapi']['endPoint'] = array($apiUrl . '/social/rpc');
     $json = json_encode($containerTemplate);
     return $json;
 }
 /**
  * generate a configutaion
  *
  * @param string $containerName
  * @param string $snsUrl
  * @param string $shindigUrl
  * @param string $apiUrl
  * @return string 
  */
 public function generate($snsUrl = null, $shindigUrl = null, $apiUrl = null)
 {
     sfContext::getInstance()->getConfiguration()->loadHelpers(array('Asset'));
     //Template
     $containerTemplate = array('gadgets.container' => array(), 'gadgets.parent' => null, 'gadgets.lockedDomainRequired' => false, 'gadgets.lockedDomainSuffix' => '-a.example.com:8080', 'gadgets.iframeBaseUri' => '/gadgets/ifr', 'gadgets.jsUriTemplate' => '#shindig_url#gadgets/js/%js%', 'gadgets.oauthGadgetCallbackTemplate' => '#shindig_url#/gadgets/oauthcallback', 'gadgets.securityTokenType' => 'secure', 'gadgets.osDataUri' => '#api_url#social/rpc', 'gadgets.features' => array('core.io' => array('proxyUrl' => '#shindig_url#gadgets/proxy?refresh=%refresh%&url=%url%', 'jsonProxyUrl' => '#shindig_url#gadgets/makeRequest'), 'views' => array('profile' => array('isOnlyVisible' => false, 'urlTemplate' => '#sns_url#member/{var}', 'aliases' => array('DASHBOARD', 'default')), 'canvas' => array('isOnlyVisible' => true, 'urlTemplate' => '#sns_url#application/canvas/id/{var}')), 'rpc' => array('parentRelayUrl' => '#sns_url#opOpenSocialPlugin/js/rpc_relay.html', 'useLegacyProtocol' => false), 'skins' => array('properties' => array('BG_COLOR' => '', 'BG_IMAGE' => '', 'BG_POSITION' => '', 'BG_REPEAT' => '', 'FONT_COLOR' => '', 'ANCHOR_COLOR' => '')), 'opensocial' => array('path' => '#api_url#social/rpc', 'invalidatePath' => '#shindig_url#gadgets/api/rpc', 'domain' => 'shindig', 'enableCaja' => false, 'supportedFields' => array()), 'osapi.services' => array('gadgets.rpc' => array('container.listMethods'), '#api_url#social/rpc' => array('system.listMethods', 'people.get', 'appdata.get', 'appdata.update', 'appdata.delete'), '#shindig_url#gadgets/api/rpc' => array('cache.invalidate')), 'osapi' => array('endPoint' => array('#api_url#social/rpc', '#shindig_url#gadgets/api/rpc')), 'osml' => array('library' => 'config/OSML_library.xml')));
     $containerTemplate['gadgets.container'][] = $this->containerName;
     $request = sfContext::getInstance()->getRequest();
     if ($snsUrl === null) {
         $snsUrl = $request->getUriPrefix() . $request->getRelativeUrlRoot() . '/';
         if ($this->isDevEnvironment) {
             $snsUrl .= 'pc_frontend_dev.php/';
         }
     }
     if ($apiUrl === null) {
         if (Doctrine::getTable('SnsConfig')->get('is_use_outer_shindig')) {
             $apiUrl = Doctrine::getTable('SnsConfig')->get('shindig_url');
             if (substr($apiUrl, -1) !== '/') {
                 $apiUrl .= '/';
             }
         } else {
             $apiUrl = $request->getUriPrefix() . $request->getRelativeUrlRoot() . '/api';
             if ($this->isDevEnvironment) {
                 $apiUrl .= '_dev';
             }
             $apiUrl .= '.php/';
         }
     }
     if ($shindigUrl === null) {
         if (Doctrine::getTable('SnsConfig')->get('is_use_outer_shindig')) {
             $shindigUrl = $apiUrl;
         } else {
             $shindigUrl = $snsUrl;
         }
     }
     $export = new opOpenSocialProfileExport();
     $supportedFields = $export->getSupportedFields();
     $supportedFields = array_merge($supportedFields, array('activity' => array('id', 'title', 'userId', 'postedTime', 'streamUrl', 'appId', 'mediaItems'), 'mediaItem' => array('id', 'albumId', 'created', 'description', 'fileSize', 'lastUpdated', 'thumbnailUrl', 'title', 'type', 'url')));
     $containerTemplate['gadgets.features']['opensocial']['supportedFields'] = $supportedFields;
     $json = json_encode($containerTemplate);
     $replace = array('/#sns_url#/' => addcslashes($snsUrl, '/'), '/#shindig_url#/' => addcslashes($shindigUrl, '/'), '/#api_url#/' => addcslashes($apiUrl, '/'));
     return preg_replace(array_keys($replace), $replace, $json);
 }