本文整理汇总了PHP中Gdn_Controller::SetData方法的典型用法代码示例。如果您正苦于以下问题:PHP Gdn_Controller::SetData方法的具体用法?PHP Gdn_Controller::SetData怎么用?PHP Gdn_Controller::SetData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Gdn_Controller
的用法示例。
在下文中一共展示了Gdn_Controller::SetData方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: UtilityController_SiteMapIndex_Create
/**
* @param Gdn_Controller $Sender
* @param type $Args
*/
public function UtilityController_SiteMapIndex_Create($Sender)
{
// Clear the session to mimic a crawler.
Gdn::Session()->Start(0, FALSE, FALSE);
$Sender->DeliveryMethod(DELIVERY_METHOD_XHTML);
$Sender->DeliveryType(DELIVERY_TYPE_VIEW);
$Sender->SetHeader('Content-Type', 'text/xml');
$SiteMaps = array();
if (class_exists('CategoryModel')) {
$Categories = CategoryModel::Categories();
foreach ($Categories as $Category) {
if (!$Category['PermsDiscussionsView'] || $Category['CategoryID'] < 0 || $Category['CountDiscussions'] == 0) {
continue;
}
$SiteMap = array('Loc' => Url('/sitemap-category-' . rawurlencode($Category['UrlCode'] ? $Category['UrlCode'] : $Category['CategoryID']) . '.xml', TRUE), 'LastMod' => $Category['DateLastComment'], 'ChangeFreq' => '', 'Priority' => '');
$SiteMaps[] = $SiteMap;
}
}
$Sender->SetData('SiteMaps', $SiteMaps);
$Sender->Render('SiteMapIndex', '', 'plugins/Sitemaps');
}
示例2: ModerationController_MergeDiscussions_Create
/**
* Add a method to the ModerationController to handle merging discussions.
* @param Gdn_Controller $Sender
*/
public function ModerationController_MergeDiscussions_Create($Sender)
{
$Session = Gdn::Session();
$Sender->Form = new Gdn_Form();
$Sender->Title(T('Merge Discussions'));
$DiscussionModel = new DiscussionModel();
$CheckedDiscussions = Gdn::UserModel()->GetAttribute($Session->User->UserID, 'CheckedDiscussions', array());
if (!is_array($CheckedDiscussions)) {
$CheckedDiscussions = array();
}
$DiscussionIDs = $CheckedDiscussions;
$Sender->SetData('DiscussionIDs', $DiscussionIDs);
$CountCheckedDiscussions = count($DiscussionIDs);
$Sender->SetData('CountCheckedDiscussions', $CountCheckedDiscussions);
$Discussions = $DiscussionModel->SQL->WhereIn('DiscussionID', $DiscussionIDs)->Get('Discussion')->ResultArray();
$Sender->SetData('Discussions', $Discussions);
// Perform the merge
if ($Sender->Form->AuthenticatedPostBack()) {
// Create a new discussion record
$MergeDiscussion = FALSE;
$MergeDiscussionID = $Sender->Form->GetFormValue('MergeDiscussionID');
foreach ($Discussions as $Discussion) {
if ($Discussion['DiscussionID'] == $MergeDiscussionID) {
$MergeDiscussion = $Discussion;
break;
}
}
if ($MergeDiscussion) {
$ErrorCount = 0;
// Verify that the user has permission to perform the merge.
$Category = CategoryModel::Categories($MergeDiscussion['CategoryID']);
if ($Category && !$Category['PermsDiscussionsEdit']) {
throw PermissionException('Vanilla.Discussions.Edit');
}
// Assign the comments to the new discussion record
$DiscussionModel->SQL->Update('Comment')->Set('DiscussionID', $MergeDiscussionID)->WhereIn('DiscussionID', $DiscussionIDs)->Put();
$CommentModel = new CommentModel();
foreach ($Discussions as $Discussion) {
if ($Discussion['DiscussionID'] == $MergeDiscussionID) {
continue;
}
// Create a comment out of the discussion.
$Comment = ArrayTranslate($Discussion, array('Body', 'Format', 'DateInserted', 'InsertUserID', 'InsertIPAddress', 'DateUpdated', 'UpdateUserID', 'UpdateIPAddress', 'Attributes', 'Spam', 'Likes', 'Abuse'));
$Comment['DiscussionID'] = $MergeDiscussionID;
$CommentModel->Validation->Results(TRUE);
$CommentID = $CommentModel->Save($Comment);
if ($CommentID) {
// Move any attachments (FileUpload plugin awareness)
if (class_exists('MediaModel')) {
$MediaModel = new MediaModel();
$MediaModel->Reassign($Discussion['DiscussionID'], 'discussion', $CommentID, 'comment');
}
// Delete discussion that was merged
$DiscussionModel->Delete($Discussion['DiscussionID']);
} else {
$Sender->InformMessage($CommentModel->Validation->ResultsText());
$ErrorCount++;
}
}
// Update counts on all affected discussions.
$CommentModel->UpdateCommentCount($MergeDiscussionID);
$CommentModel->RemovePageCache($MergeDiscussionID);
// Clear selections
Gdn::UserModel()->SaveAttribute($Session->UserID, 'CheckedDiscussions', FALSE);
ModerationController::InformCheckedDiscussions($Sender);
if ($ErrorCount == 0) {
$Sender->RedirectUrl = Url("/discussion/{$MergeDiscussionID}/" . Gdn_Format::Url($MergeDiscussion['Name']));
}
}
}
$Sender->Render('MergeDiscussions', '', 'plugins/SplitMerge');
}
示例3: ModerationController_MergeDiscussions_Create
/**
* Add a method to the ModerationController to handle merging discussions.
* @param Gdn_Controller $Sender
*/
public function ModerationController_MergeDiscussions_Create($Sender)
{
$Session = Gdn::Session();
$Sender->Form = new Gdn_Form();
$Sender->Title(T('Merge Discussions'));
$DiscussionModel = new DiscussionModel();
$CheckedDiscussions = Gdn::UserModel()->GetAttribute($Session->User->UserID, 'CheckedDiscussions', array());
if (!is_array($CheckedDiscussions)) {
$CheckedDiscussions = array();
}
$DiscussionIDs = $CheckedDiscussions;
$Sender->SetData('DiscussionIDs', $DiscussionIDs);
$CountCheckedDiscussions = count($DiscussionIDs);
$Sender->SetData('CountCheckedDiscussions', $CountCheckedDiscussions);
$Discussions = $DiscussionModel->SQL->WhereIn('DiscussionID', $DiscussionIDs)->Get('Discussion')->ResultArray();
$Sender->SetData('Discussions', $Discussions);
// Perform the merge
if ($Sender->Form->AuthenticatedPostBack()) {
// Create a new discussion record
$MergeDiscussion = FALSE;
$MergeDiscussionID = $Sender->Form->GetFormValue('MergeDiscussionID');
foreach ($Discussions as $Discussion) {
if ($Discussion['DiscussionID'] == $MergeDiscussionID) {
$MergeDiscussion = $Discussion;
break;
}
}
$RedirectLink = $Sender->Form->GetFormValue('RedirectLink');
if ($MergeDiscussion) {
$ErrorCount = 0;
// Verify that the user has permission to perform the merge.
$Category = CategoryModel::Categories($MergeDiscussion['CategoryID']);
if ($Category && !$Category['PermsDiscussionsEdit']) {
throw PermissionException('Vanilla.Discussions.Edit');
}
$DiscussionModel->DefineSchema();
$MaxNameLength = GetValue('Length', $DiscussionModel->Schema->GetField('Name'));
// Assign the comments to the new discussion record
$DiscussionModel->SQL->Update('Comment')->Set('DiscussionID', $MergeDiscussionID)->WhereIn('DiscussionID', $DiscussionIDs)->Put();
$CommentModel = new CommentModel();
foreach ($Discussions as $Discussion) {
if ($Discussion['DiscussionID'] == $MergeDiscussionID) {
continue;
}
// Create a comment out of the discussion.
$Comment = ArrayTranslate($Discussion, array('Body', 'Format', 'DateInserted', 'InsertUserID', 'InsertIPAddress', 'DateUpdated', 'UpdateUserID', 'UpdateIPAddress', 'Attributes', 'Spam', 'Likes', 'Abuse'));
$Comment['DiscussionID'] = $MergeDiscussionID;
$CommentModel->Validation->Results(TRUE);
$CommentID = $CommentModel->Save($Comment);
if ($CommentID) {
// Move any attachments (FileUpload plugin awareness)
if (class_exists('MediaModel')) {
$MediaModel = new MediaModel();
$MediaModel->Reassign($Discussion['DiscussionID'], 'discussion', $CommentID, 'comment');
}
if ($RedirectLink) {
// The discussion needs to be changed to a moved link.
$RedirectDiscussion = array('Name' => SliceString(sprintf(T('Merged: %s'), $Discussion['Name']), $MaxNameLength), 'Type' => 'redirect', 'Body' => FormatString(T('This discussion has been <a href="{url,html}">merged</a>.'), array('url' => DiscussionUrl($MergeDiscussion))), 'Format' => 'Html');
$DiscussionModel->SetField($Discussion['DiscussionID'], $RedirectDiscussion);
$CommentModel->UpdateCommentCount($Discussion['DiscussionID']);
$CommentModel->RemovePageCache($Discussion['DiscussionID']);
} else {
// Delete discussion that was merged.
$DiscussionModel->Delete($Discussion['DiscussionID']);
}
} else {
$Sender->InformMessage($CommentModel->Validation->ResultsText());
$ErrorCount++;
}
}
// Update counts on all affected discussions.
$CommentModel->UpdateCommentCount($MergeDiscussionID);
$CommentModel->RemovePageCache($MergeDiscussionID);
// Clear selections
Gdn::UserModel()->SaveAttribute($Session->UserID, 'CheckedDiscussions', FALSE);
ModerationController::InformCheckedDiscussions($Sender);
if ($ErrorCount == 0) {
$Sender->JsonTarget('', '', 'Refresh');
}
}
}
$Sender->Render('MergeDiscussions', '', 'plugins/SplitMerge');
}
示例4: Base_ConnectData_Handler
/**
*
* @param Gdn_Controller $Sender
* @param array $Args
*/
public function Base_ConnectData_Handler($Sender, $Args)
{
if (GetValue(0, $Args) != 'sinaconnect') {
return;
}
$RequestToken = GetValue('oauth_token', $_GET);
// Get the access token.
if ($RequestToken || !($AccessToken = $this->AccessToken())) {
// Get the request secret.
$RequestToken = $this->GetOAuthToken($RequestToken);
$Consumer = new OAuthConsumer(C('Plugins.SinaConnect.ConsumerKey'), C('Plugins.SinaConnect.Secret'));
$Url = 'http://api.t.sina.com.cn/oauth/access_token';
$Params = array('oauth_verifier' => GetValue('oauth_verifier', $_GET));
$Request = OAuthRequest::from_consumer_and_token($Consumer, $RequestToken, 'POST', $Url, $Params);
$SignatureMethod = new OAuthSignatureMethod_HMAC_SHA1();
$Request->sign_request($SignatureMethod, $Consumer, $RequestToken);
$Post = $Request->to_postdata();
$Curl = $this->_Curl($Request);
$Response = curl_exec($Curl);
if ($Response === FALSE) {
$Response = curl_error($Curl);
}
$HttpCode = curl_getinfo($Curl, CURLINFO_HTTP_CODE);
curl_close($Curl);
if ($HttpCode == '200') {
$Data = OAuthUtil::parse_parameters($Response);
$AccessToken = $this->AccessToken(GetValue('oauth_token', $Data), GetValue('oauth_token_secret', $Data));
// Save the access token to the database.
$this->SetOAuthToken($AccessToken);
// Delete the request token.
$this->DeleteOAuthToken($RequestToken);
} else {
// There was some sort of error.
}
$NewToken = TRUE;
}
// Get the profile.
try {
$Profile = $this->GetProfile($AccessToken);
} catch (Exception $Ex) {
if (!isset($NewToken)) {
// There was an error getting the profile, which probably means the saved access token is no longer valid. Try and reauthorize.
if ($Sender->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect($this->_AuthorizeHref());
} else {
$Sender->SetHeader('Content-type', 'application/json');
$Sender->DeliveryMethod(DELIVERY_METHOD_JSON);
$Sender->RedirectUrl = $this->_AuthorizeHref();
}
} else {
$Sender->Form->AddError($Ex);
}
}
//print_r($Profile);
$Form = $Sender->Form;
//new Gdn_Form();
$ID = GetValue('id', $Profile);
$Form->SetFormValue('UniqueID', $ID);
$Form->SetFormValue('Provider', self::$ProviderKey);
$Form->SetFormValue('ProviderName', 'Sina');
$Form->SetFormValue('Name', GetValue('screen_name', $Profile));
$Form->SetFormValue('FullName', GetValue('name', $Profile));
$Form->SetFormValue('Email', GetValue('id', $Profile) . '@weibo.com');
$Form->SetFormValue('Photo', GetValue('profile_image_url', $Profile));
$Sender->SetData('Verified', TRUE);
}
示例5: ProfileController_AddProfileTabs_Handler
/**
* Handling the event fired at the end of the BuildProfile method of the Profile controller
* If a valid Steam ID is found, load the profile and add it to the profile sidebar.
* If no valid Steam ID is found, do nothing.
*
* @param Gdn_Controller $Sender
*/
public function ProfileController_AddProfileTabs_Handler(&$Sender)
{
// Instantiating our SteamProfile model and attempting to retrieve the profile data
$this->SteamProfileModel = new SteamProfileModel();
// Rustling up the SteamID64 data associated with the user, if available
$UserMetaSteamID64 = $this->GetUserMeta($Sender->User->UserID, 'SteamID64');
$SteamID64 = GetValue('Plugin.steamprofile.SteamID64', $UserMetaSteamID64, '');
// Attempting to retrieve the profile data associated with the SteamID64 field
$Sender->SetData('SteamProfile', $this->SteamProfileModel->GetByID($SteamID64));
// Did we get back a valid profile?
if ($Sender->Data('SteamProfile', FALSE)) {
// Is there a record(s) for this user's "Most Played Games"?
if (isset($Sender->Data('SteamProfile')->mostPlayedGames->mostPlayedGame)) {
// If there are several results, there will be an array of elements. Is there an array of elements?
if (is_array($Sender->Data('SteamProfile')->mostPlayedGames->mostPlayedGame)) {
// ...if so, grab the first one.
$Sender->SetData('MostPlayedGame', $Sender->Data('SteamProfile')->mostPlayedGames->mostPlayedGame[0]);
} else {
// ...if not, grab the single element.
$Sender->SetData('MostPlayedGame', $Sender->Data('SteamProfile')->mostPlayedGames->mostPlayedGame);
}
}
// Attach the style sheet, load up the view, attach it all to the panel
$Sender->AddCssFile('style.css', 'plugins/steamprofile');
$Sender->AddAsset('Panel', $Sender->FetchView($this->GetView('panel.php')), 'Steam');
}
}
示例6: Controller_Delete
/**
* Delete a Tag
*
* @param Gdn_Controller $Sender
*/
public function Controller_Delete($Sender)
{
$Sender->Permission('Garden.Settings.Manage');
$TagID = GetValue(1, $Sender->RequestArgs);
$TagModel = new TagModel();
$Tag = $TagModel->GetID($TagID, DATASET_TYPE_ARRAY);
if ($Sender->Form->AuthenticatedPostBack()) {
// Delete tag & tag relations.
$SQL = Gdn::SQL();
$SQL->Delete('TagDiscussion', array('TagID' => $TagID));
$SQL->Delete('Tag', array('TagID' => $TagID));
$Sender->InformMessage(FormatString(T('<b>{Name}</b> deleted.'), $Tag));
$Sender->JsonTarget("#Tag_{$Tag['TagID']}", NULL, 'Remove');
}
$Sender->SetData('Title', T('Delete Tag'));
$Sender->Render('delete', '', 'plugins/Tagging');
}
示例7: Settings_AddEdit
/**
* @param Gdn_Controller $Sender
* @param array $Args
*/
protected function Settings_AddEdit($Sender, $Args)
{
$client_id = $Sender->Request->Get('client_id');
Gdn::Locale()->SetTranslation('AuthenticationKey', 'Client ID');
Gdn::Locale()->SetTranslation('AssociationSecret', 'Secret');
Gdn::Locale()->SetTranslation('AuthenticateUrl', 'Authentication Url');
$Form = new Gdn_Form();
$Sender->Form = $Form;
if ($Form->AuthenticatedPostBack()) {
if ($Form->GetFormValue('Generate') || $Sender->Request->Post('Generate')) {
$Form->SetFormValue('AuthenticationKey', mt_rand());
$Form->SetFormValue('AssociationSecret', md5(mt_rand()));
$Sender->SetFormSaved(FALSE);
} else {
$Form->ValidateRule('AuthenticationKey', 'ValidateRequired');
// $Form->ValidateRule('AuthenticationKey', 'regex:`^[a-z0-9_-]+$`i', T('The client id must contain only letters, numbers and dashes.'));
$Form->ValidateRule('AssociationSecret', 'ValidateRequired');
$Form->ValidateRule('AuthenticateUrl', 'ValidateRequired');
$Values = $Form->FormValues();
// $Values = ArrayTranslate($Values, array('Name', 'AuthenticationKey', 'URL', 'AssociationSecret', 'AuthenticateUrl', 'SignInUrl', 'RegisterUrl', 'SignOutUrl', 'IsDefault'));
$Values['AuthenticationSchemeAlias'] = 'jsconnect';
$Values['AssociationHashMethod'] = 'md5';
$Values['Attributes'] = serialize(array('HashType' => $Form->GetFormValue('HashType'), 'TestMode' => $Form->GetFormValue('TestMode'), 'Trusted' => $Form->GetFormValue('Trusted', 0)));
if ($Form->ErrorCount() == 0) {
if ($client_id) {
Gdn::SQL()->Put('UserAuthenticationProvider', $Values, array('AuthenticationKey' => $client_id));
} else {
Gdn::SQL()->Options('Ignore', TRUE)->Insert('UserAuthenticationProvider', $Values);
}
$Sender->RedirectUrl = Url('/settings/jsconnect');
}
}
} else {
if ($client_id) {
$Provider = self::GetProvider($client_id);
TouchValue('Trusted', $Provider, 1);
} else {
$Provider = array();
}
$Form->SetData($Provider);
}
$Sender->SetData('Title', sprintf(T($client_id ? 'Edit %s' : 'Add %s'), T('Connection')));
$Sender->Render('Settings_AddEdit', '', 'plugins/jsconnect');
}
示例8: Base_ConnectData_Handler
/**
*
* @param Gdn_Controller $Sender
* @param array $Args
*/
public function Base_ConnectData_Handler($Sender, $Args)
{
if (GetValue(0, $Args) != 'twitter') {
return;
}
$Form = $Sender->Form;
//new Gdn_Form();
$RequestToken = GetValue('oauth_token', $_GET);
$AccessToken = $Form->GetFormValue('AccessToken');
if ($AccessToken) {
$AccessToken = $this->GetOAuthToken($AccessToken);
$this->AccessToken($AccessToken);
}
// Get the access token.
if ($RequestToken && !$AccessToken) {
// Get the request secret.
$RequestToken = $this->GetOAuthToken($RequestToken);
$Consumer = new OAuthConsumer(C('Plugins.Twitter.ConsumerKey'), C('Plugins.Twitter.Secret'));
$Url = 'https://api.twitter.com/oauth/access_token';
$Params = array('oauth_verifier' => GetValue('oauth_verifier', $_GET));
$Request = OAuthRequest::from_consumer_and_token($Consumer, $RequestToken, 'POST', $Url, $Params);
$SignatureMethod = new OAuthSignatureMethod_HMAC_SHA1();
$Request->sign_request($SignatureMethod, $Consumer, $RequestToken);
$Post = $Request->to_postdata();
$Curl = $this->_Curl($Request);
$Response = curl_exec($Curl);
if ($Response === FALSE) {
$Response = curl_error($Curl);
}
$HttpCode = curl_getinfo($Curl, CURLINFO_HTTP_CODE);
curl_close($Curl);
if ($HttpCode == '200') {
$Data = OAuthUtil::parse_parameters($Response);
$AccessToken = new OAuthToken(GetValue('oauth_token', $Data), GetValue('oauth_token_secret', $Data));
// Save the access token to the database.
$this->SetOAuthToken($AccessToken->key, $AccessToken->secret, 'access');
$this->AccessToken($AccessToken->key, $AccessToken->secret);
// Delete the request token.
$this->DeleteOAuthToken($RequestToken);
} else {
// There was some sort of error.
throw new Exception('There was an error authenticating with twitter.', 400);
}
$NewToken = TRUE;
}
// Get the profile.
try {
$Profile = $this->GetProfile($AccessToken);
} catch (Exception $Ex) {
if (!isset($NewToken)) {
// There was an error getting the profile, which probably means the saved access token is no longer valid. Try and reauthorize.
if ($Sender->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect($this->_AuthorizeHref());
} else {
$Sender->SetHeader('Content-type', 'application/json');
$Sender->DeliveryMethod(DELIVERY_METHOD_JSON);
$Sender->RedirectUrl = $this->_AuthorizeHref();
}
} else {
throw $Ex;
}
}
$ID = GetValue('id', $Profile);
$Form->SetFormValue('UniqueID', $ID);
$Form->SetFormValue('Provider', self::ProviderKey);
$Form->SetFormValue('ProviderName', 'Twitter');
$Form->SetValue('ConnectName', GetValue('screen_name', $Profile));
$Form->SetFormValue('Name', GetValue('screen_name', $Profile));
$Form->SetFormValue('FullName', GetValue('name', $Profile));
$Form->SetFormValue('Photo', GetValue('profile_image_url', $Profile));
$Form->AddHidden('AccessToken', $AccessToken->key);
// Save some original data in the attributes of the connection for later API calls.
$Attributes = array(self::ProviderKey => array('AccessToken' => array($AccessToken->key, $AccessToken->secret), 'Profile' => $Profile));
$Form->SetFormValue('Attributes', $Attributes);
$Sender->SetData('Verified', TRUE);
}
示例9: Base_ConnectData_Handler
/**
*
* @param Gdn_Controller $Sender
* @param array $Args
*/
public function Base_ConnectData_Handler($Sender, $Args)
{
if (GetValue(0, $Args) != 'facebook') {
return;
}
if (isset($_GET['error'])) {
throw new Gdn_UserException(GetValue('error_description', $_GET, T('There was an error connecting to Facebook')));
}
$AppID = C('Plugins.Facebook.ApplicationID');
$Secret = C('Plugins.Facebook.Secret');
$Code = GetValue('code', $_GET);
$Query = '';
if ($Sender->Request->Get('display')) {
$Query = 'display=' . urlencode($Sender->Request->Get('display'));
}
$RedirectUri = ConcatSep('&', $this->RedirectUri(), $Query);
$RedirectUri = urlencode($RedirectUri);
// Get the access token.
if ($Code || !($AccessToken = $this->AccessToken())) {
// Exchange the token for an access token.
$Code = urlencode($Code);
$Url = "https://graph.facebook.com/oauth/access_token?client_id={$AppID}&client_secret={$Secret}&code={$Code}&redirect_uri={$RedirectUri}";
// Get the redirect URI.
$C = curl_init();
curl_setopt($C, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($C, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($C, CURLOPT_URL, $Url);
$Contents = curl_exec($C);
// $Contents = ProxyRequest($Url);
$Info = curl_getinfo($C);
if (strpos(GetValue('content_type', $Info, ''), '/javascript') !== FALSE) {
$Tokens = json_decode($Contents, TRUE);
} else {
parse_str($Contents, $Tokens);
}
if (GetValue('error', $Tokens)) {
throw new Gdn_UserException('Facebook returned the following error: ' . GetValueR('error.message', $Tokens, 'Unknown error.'), 400);
}
$AccessToken = GetValue('access_token', $Tokens);
$Expires = GetValue('expires', $Tokens, NULL);
setcookie('fb_access_token', $AccessToken, time() + $Expires, C('Garden.Cookie.Path', '/'), C('Garden.Cookie.Domain', ''), NULL, TRUE);
$NewToken = TRUE;
}
// Get the profile.
try {
$Profile = $this->GetProfile($AccessToken);
} catch (Exception $Ex) {
if (!isset($NewToken)) {
// There was an error getting the profile, which probably means the saved access token is no longer valid. Try and reauthorize.
if ($Sender->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect($this->AuthorizeUri());
} else {
$Sender->SetHeader('Content-type', 'application/json');
$Sender->DeliveryMethod(DELIVERY_METHOD_JSON);
$Sender->RedirectUrl = $this->AuthorizeUri();
}
} else {
$Sender->Form->AddError('There was an error with the Facebook connection.');
}
}
$Form = $Sender->Form;
//new Gdn_Form();
$ID = GetValue('id', $Profile);
$Form->SetFormValue('UniqueID', $ID);
$Form->SetFormValue('Provider', 'facebook');
$Form->SetFormValue('ProviderName', 'Facebook');
$Form->SetFormValue('FullName', GetValue('name', $Profile));
$Form->SetFormValue('Email', GetValue('email', $Profile));
$Form->SetFormValue('Photo', "http://graph.facebook.com/{$ID}/picture");
if (C('Plugins.Facebook.UseFacebookNames')) {
$Form->SetFormValue('Name', GetValue('name', $Profile));
SaveToConfig(array('Garden.User.ValidationRegex' => UserModel::USERNAME_REGEX_MIN, 'Garden.User.ValidationLength' => '{3,50}', 'Garden.Registration.NameUnique' => FALSE), '', FALSE);
}
// Save some original data in the attributes of the connection for later API calls.
$Attributes = array('Facebook.Profile' => $Profile);
$Form->SetFormValue('Attributes', $Attributes);
$Sender->SetData('Verified', TRUE);
}
示例10: Base_ConnectData_Handler
/**
*
* @param Gdn_Controller $Sender
* @param array $Args
*/
public function Base_ConnectData_Handler($Sender, $Args)
{
if (GetValue(0, $Args) != 'facebook') {
return;
}
if (isset($_GET['error'])) {
throw new Gdn_UserException(GetValue('error_description', $_GET, T('There was an error connecting to Facebook')));
}
$AppID = C('Plugins.Facebook.ApplicationID');
$Secret = C('Plugins.Facebook.Secret');
$Code = GetValue('code', $_GET);
$Query = '';
if ($Sender->Request->Get('display')) {
$Query = 'display=' . urlencode($Sender->Request->Get('display'));
}
$RedirectUri = ConcatSep('&', $this->RedirectUri(), $Query);
// $RedirectUri = urlencode($RedirectUri);
// Get the access token.
if ($Code) {
// Exchange the token for an access token.
$Code = urlencode($Code);
$AccessToken = $this->GetAccessToken($Code, $RedirectUri);
$NewToken = TRUE;
}
// Get the profile.
try {
$Profile = $this->GetProfile($AccessToken);
} catch (Exception $Ex) {
if (!isset($NewToken)) {
// There was an error getting the profile, which probably means the saved access token is no longer valid. Try and reauthorize.
if ($Sender->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect($this->AuthorizeUri());
} else {
$Sender->SetHeader('Content-type', 'application/json');
$Sender->DeliveryMethod(DELIVERY_METHOD_JSON);
$Sender->RedirectUrl = $this->AuthorizeUri();
}
} else {
$Sender->Form->AddError('There was an error with the Facebook connection.');
}
}
$Form = $Sender->Form;
//new Gdn_Form();
$ID = GetValue('id', $Profile);
$Form->SetFormValue('UniqueID', $ID);
$Form->SetFormValue('Provider', self::ProviderKey);
$Form->SetFormValue('ProviderName', 'Facebook');
$Form->SetFormValue('FullName', GetValue('name', $Profile));
$Form->SetFormValue('Email', GetValue('email', $Profile));
$Form->SetFormValue('Photo', "http://graph.facebook.com/{$ID}/picture");
if (C('Plugins.Facebook.UseFacebookNames')) {
$Form->SetFormValue('Name', GetValue('name', $Profile));
SaveToConfig(array('Garden.User.ValidationRegex' => UserModel::USERNAME_REGEX_MIN, 'Garden.User.ValidationLength' => '{3,50}', 'Garden.Registration.NameUnique' => FALSE), '', FALSE);
}
// Save some original data in the attributes of the connection for later API calls.
$Attributes = array();
$Attributes[self::ProviderKey] = array('AccessToken' => $AccessToken, 'Profile' => $Profile);
$Form->SetFormValue('Attributes', $Attributes);
$Sender->SetData('Verified', TRUE);
}
示例11: SettingsController_CustomizeText_Create
/**
* Add the customize text page to the dashboard.
*
* @param Gdn_Controller $Sender
*/
public function SettingsController_CustomizeText_Create($Sender)
{
$Sender->Permission('Garden.Settings.Manage');
$Sender->AddSideMenu('settings/customizetext');
$Sender->AddJsFile('jquery.autogrow.js');
$Sender->Title('Customize Text');
$Directive = GetValue(0, $Sender->RequestArgs, '');
$View = 'customizetext';
if ($Directive == 'rebuild') {
$View = 'rebuild';
} elseif ($Directive == 'rebuildcomplete') {
$View = 'rebuildcomplete';
}
$Method = 'none';
if ($Sender->Form->IsPostback()) {
$Method = 'search';
if ($Sender->Form->GetValue('Save_All')) {
$Method = 'save';
}
}
$Matches = array();
$Keywords = NULL;
switch ($Method) {
case 'none':
break;
case 'search':
case 'save':
$Keywords = strtolower($Sender->Form->GetValue('Keywords'));
if ($Method == 'search') {
$Sender->Form->ClearInputs();
$Sender->Form->SetFormValue('Keywords', $Keywords);
}
$Definitions = Gdn::Locale()->GetDeveloperDefinitions();
$CountDefinitions = sizeof($Definitions);
$Sender->SetData('CountDefinitions', $CountDefinitions);
$Changed = FALSE;
foreach ($Definitions as $Key => $BaseDefinition) {
$KeyHash = md5($Key);
$ElementName = "def_{$KeyHash}";
// Look for matches
$k = strtolower($Key);
$d = strtolower($BaseDefinition);
// If this key doesn't match, skip it
if ($Keywords != '*' && !(strlen($Keywords) > 0 && (strpos($k, $Keywords) !== FALSE || strpos($d, $Keywords) !== FALSE))) {
continue;
}
$Modified = FALSE;
// Found a definition, look it up in the real locale first, to see if it has been overridden
$CurrentDefinition = Gdn::Locale()->Translate($Key, FALSE);
if ($CurrentDefinition !== FALSE && $CurrentDefinition != $BaseDefinition) {
$Modified = TRUE;
} else {
$CurrentDefinition = $BaseDefinition;
}
$Matches[$Key] = array('def' => $CurrentDefinition, 'mod' => $Modified);
if ($CurrentDefinition[0] == "\r\n") {
$CurrentDefinition = "\r\n{$CurrentDefinition}";
} else {
if ($CurrentDefinition[0] == "\r") {
$CurrentDefinition = "\r{$CurrentDefinition}";
} else {
if ($CurrentDefinition[0] == "\n") {
$CurrentDefinition = "\n{$CurrentDefinition}";
}
}
}
if ($Method == 'save') {
$SuppliedDefinition = $Sender->Form->GetValue($ElementName);
// Has this field been changed?
if ($SuppliedDefinition != FALSE && $SuppliedDefinition != $CurrentDefinition) {
// Changed from what it was, but is it a change from the *base* value?
$SaveDefinition = $SuppliedDefinition != $BaseDefinition ? $SuppliedDefinition : NULL;
if (!is_null($SaveDefinition)) {
$CurrentDefinition = $SaveDefinition;
$SaveDefinition = str_replace("\r\n", "\n", $SaveDefinition);
}
Gdn::Locale()->SetTranslation($Key, $SaveDefinition, array('Save' => TRUE, 'RemoveEmpty' => TRUE));
$Matches[$Key] = array('def' => $SuppliedDefinition, 'mod' => !is_null($SaveDefinition));
$Changed = TRUE;
}
}
$Sender->Form->SetFormValue($ElementName, $CurrentDefinition);
}
if ($Changed) {
$Sender->InformMessage("Locale changes have been saved!");
}
break;
}
$Sender->SetData('Matches', $Matches);
$CountMatches = sizeof($Matches);
$Sender->SetData('CountMatches', $CountMatches);
$Sender->Render($View, '', 'plugins/CustomizeText');
}
示例12: SettingsController_Tagging_Create
/**
* Tag management (let admins rename tags, remove tags, etc).
* TODO: manage the Plugins.Tagging.Required boolean setting that makes tagging required or not.
* @param Gdn_Controller $Sender
*/
public function SettingsController_Tagging_Create($Sender, $Args) {
$Sender->Permission('Garden.Settings.Manage');
$Sender->Title('Tagging');
$Sender->AddSideMenu('settings/tagging');
$Sender->AddCSSFile('plugins/Tagging/design/tagadmin.css');
$Sender->AddJSFile('plugins/Tagging/admin.js');
$SQL = Gdn::SQL();
list($Offset, $Limit) = OffsetLimit($Sender->Request->Get('Page'), 100);
$Sender->SetData('_Limit', $Limit);
$Sender->SetData('Tags', $SQL
->Select('t.*')
->From('Tag t')
->OrderBy('t.Name', 'asc')
->OrderBy('t.CountDiscussions', 'desc')
->Limit($Limit, $Offset)
->Get()->ResultArray());
$Sender->SetData('RecordCount', $SQL->GetCount('Tag'));
$Sender->Render('Tagging', '', 'plugins/Tagging');
}
示例13: Base_ConnectData_Handler
/**
*
* @param Gdn_Controller $Sender
* @param array $Args
*/
public function Base_ConnectData_Handler($Sender, $Args)
{
if (GetValue(0, $Args) != 'accounts9') {
return;
}
if (isset($_GET['error'])) {
throw new Gdn_UserException(GetValue('error_description', $_GET, T('There was an error connecting to Accounts9')));
}
$AppID = C('Plugins.Accounts9.ApplicationID');
$Secret = C('Plugins.Accounts9.Secret');
if (!$Code) {
if (!isset($_GET['code'])) {
throw new Gdn_UserException('could not retrieve code out of callback request and no code given');
}
$Code = $_GET['code'];
}
$Code = GetValue('code', $_GET);
/* $Query = '';
if ($Sender->Request->Get('display'))
$Query = 'display='.urlencode($Sender->Request->Get('display'));
*/
$RedirectUri = ConcatSep('&', $this->RedirectUri(), $Query);
$RedirectUri = urlencode($RedirectUri);
// Get the access token.
if ($Code || !($AccessToken = $this->AccessToken())) {
// Exchange the token for an access token.
$Code = urlencode($Code);
$Url = "https://accounts.net9.org/api/access_token?client_id={$AppID}&client_secret={$Secret}&code={$Code}&redirect_uri={$RedirectUri}";
// Get the redirect URI.
$C = curl_init();
curl_setopt($C, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($C, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($C, CURLOPT_URL, $Url);
$Contents = curl_exec($C);
// $Contents = ProxyRequest($Url);
$Info = curl_getinfo($C);
// if (strpos(GetValue('content_type', $Info, ''), '/javascript') !== FALSE) {
$Tokens = json_decode($Contents, TRUE);
/* } else {
parse_str($Contents, $Tokens);
}*/
if (GetValue('error', $Tokens)) {
throw new Gdn_UserException('Accounts9 returned the following error: ' . GetValueR('error.message', $Tokens, 'Unknown error.'), 400);
}
$AccessToken = GetValue('access_token', $Tokens);
$Expires = GetValue('expires_in', $Tokens, NULL);
setcookie('accounts9_access_token', $AccessToken, time() + $Expires, C('Garden.Cookie.Path', '/'), C('Garden.Cookie.Domain', ''));
$NewToken = TRUE;
}
// Get the profile.
try {
$Profile = $this->GetProfile($AccessToken);
} catch (Exception $Ex) {
if (!isset($NewToken)) {
// There was an error getting the profile, which probably means the saved access token is no longer valid. Try and reauthorize.
if ($Sender->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect($this->AuthorizeUri());
} else {
$Sender->SetHeader('Content-type', 'application/json');
$Sender->DeliveryMethod(DELIVERY_METHOD_JSON);
$Sender->RedirectUrl = $this->AuthorizeUri();
}
} else {
$Sender->Form->AddError('There was an error with the Accounts9 connection.');
}
}
//throw new Gdn_UserException($Profile);
$User = GetValue("user", $Profile);
// throw new Gdn_UserException($User['uid']);
// $User = json_decode($UContents,TRUE);
$Form = $Sender->Form;
//new Gdn_Form();
$ID = GetValue('uid', $User);
$Form->SetFormValue('UniqueID', $ID);
$Form->SetFormValue('Provider', 'accounts9');
$Form->SetFormValue('ProviderName', 'Accounts9');
$Form->SetFormValue('Name', GetValue('name', $User));
$Form->SetFormValue('NickName', GetValue('nickname', $User));
$Form->SetFormValue('FullName', GetValue('username', $User));
$Form->SetFormValue('Email', GetValue('email', $User));
// $Form->SetFormValue('Photo', "http://graph.facebook.com/$ID/picture");
$Sender->SetData('Verified', TRUE);
}