setData() public method

If $key is an array, the behaviour will be the same as calling the method multiple times for each (key, value) pair in the $key array. Note that the parameter $value will not be used if $key is an array. The $key can also use dot notation in order to set a value deeper inside the Data array. Works the same way if $addProperty is true, but uses objects instead of arrays.
See also: setvalr
public setData ( string | array $key, mixed $value = null, mixed $addProperty = false ) : mixed
$key string | array The key that identifies the data.
$value mixed The data. Will not be used if $key is an array
$addProperty mixed Whether or not to also set the data as a property of this object.
return mixed The $Value that was set.
 /**
  * The settings page for vanillicon.
  *
  * @param Gdn_Controller $sender
  */
 public function settingsController_vanillicon_create($sender)
 {
     $sender->permission('Garden.Settings.Manage');
     $cf = new ConfigurationModule($sender);
     $items = array('v1' => 'Vanillicon 1', 'v2' => 'Vanillicon 2');
     $cf->initialize(array('Plugins.Vanillicon.Type' => array('LabelCode' => 'Vanillicon Set', 'Control' => 'radiolist', 'Description' => 'Which vanillicon set do you want to use?', 'Items' => $items, 'Options' => array('display' => 'after'), 'Default' => 'v1')));
     $sender->setData('Title', sprintf(t('%s Settings'), 'Vanillicon'));
     $cf->renderAll();
 }
Example #2
0
 /**
  * Homepage of VanillaForums.org.
  *
  * @param Gdn_Controller $sender
  */
 public function homeController_homepage_create($sender)
 {
     try {
         $AddonModel = new AddonModel();
         $Addon = $AddonModel->getSlug('vanilla-core', true);
         $sender->setData('CountDownloads', val('CountDownloads', $Addon));
         $sender->setData('Version', val('Version', $Addon));
         $sender->setData('DateUploaded', val('DateInserted', $Addon));
     } catch (Exception $ex) {
     }
     $sender->title('The most powerful custom community solution in the world');
     $sender->setData('Description', "Vanilla is forum software that powers discussions on hundreds of thousands of sites. Built for flexibility and integration, Vanilla is the best, most powerful community solution in the world.");
     $sender->Head->addTag('meta', array('name' => 'description', 'content' => $sender->data('Description')));
     $sender->clearJsFiles();
     $sender->addJsFile('jquery.js', 'vforg');
     $sender->addJsFile('easySlider1.7.js', 'vforg');
     saveToConfig('Garden.Embed.Allow', false, false);
     // Prevent JS errors
     $sender->clearCssFiles();
     $sender->addCssFile('vforg-home.css', 'vforg');
     $sender->MasterView = 'empty';
     $sender->render('index', 'home', 'vforg');
 }
 /**
  *
  * @param Gdn_Controller $Sender
  * @param array $Args
  */
 public function base_connectData_handler($Sender, $Args)
 {
     if (val(0, $Args) != 'facebook') {
         return;
     }
     if (isset($_GET['error'])) {
         // TODO global nope x2
         throw new Gdn_UserException(val('error_description', $_GET, t('There was an error connecting to Facebook')));
     }
     $AppID = c('Plugins.Facebook.ApplicationID');
     $Secret = c('Plugins.Facebook.Secret');
     $Code = val('code', $_GET);
     // TODO nope
     $Query = '';
     if ($Sender->Request->get('display')) {
         $Query = 'display=' . urlencode($Sender->Request->get('display'));
     }
     $RedirectUri = concatSep('&', $this->redirectUri(), $Query);
     $AccessToken = $Sender->Form->getFormValue('AccessToken');
     // Get the access token.
     if (!$AccessToken && $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 = val('id', $Profile);
     $Form->setFormValue('UniqueID', $ID);
     $Form->setFormValue('Provider', self::ProviderKey);
     $Form->setFormValue('ProviderName', 'Facebook');
     $Form->setFormValue('FullName', val('name', $Profile));
     $Form->setFormValue('Email', val('email', $Profile));
     $Form->setFormValue('Photo', "//graph.facebook.com/{$ID}/picture?width=200&height=200");
     $Form->addHidden('AccessToken', $AccessToken);
     if (c('Plugins.Facebook.UseFacebookNames')) {
         $Form->setFormValue('Name', val('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);
 }
 /**
  *
  *
  * @param Gdn_Controller $Sender
  * @param array $Args
  */
 public function base_connectData_handler($Sender, $Args)
 {
     if (val(0, $Args) != 'twitter') {
         return;
     }
     $Form = $Sender->Form;
     //new Gdn_Form();
     $RequestToken = val('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' => val('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(val('oauth_token', $Data), val('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 = val('id', $Profile);
     $Form->setFormValue('UniqueID', $ID);
     $Form->setFormValue('Provider', self::ProviderKey);
     $Form->setFormValue('ProviderName', 'Twitter');
     $Form->setValue('ConnectName', val('screen_name', $Profile));
     $Form->setFormValue('Name', val('screen_name', $Profile));
     $Form->setFormValue('FullName', val('name', $Profile));
     $Form->setFormValue('Photo', val('profile_image_url_https', $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);
 }
 /**
  *
  *
  * @param Gdn_Controller $Controller
  * @param string $Type
  * @return void
  */
 protected function attachUploadsToComment($Controller, $Type = 'comment')
 {
     $RawType = ucfirst($Type);
     if (StringEndsWith($Controller->RequestMethod, 'Comment', true) && $Type != 'comment') {
         $Type = 'comment';
         $RawType = 'Comment';
         if (!isset($Controller->Comment)) {
             return;
         }
         $Controller->EventArguments['Comment'] = $Controller->Comment;
     }
     $MediaList = $this->mediaCache();
     if (!is_array($MediaList)) {
         return;
     }
     $Param = $Type == 'comment' ? 'CommentID' : 'DiscussionID';
     $MediaKey = $Type . '/' . val($Param, val($RawType, $Controller->EventArguments));
     if (array_key_exists($MediaKey, $MediaList)) {
         include_once $Controller->fetchViewLocation('fileupload_functions', '', 'plugins/FileUpload');
         $Controller->setData('CommentMediaList', $MediaList[$MediaKey]);
         $Controller->setData('GearImage', $this->getWebResource('images/gear.png'));
         $Controller->setData('Garbage', $this->getWebResource('images/trash.png'));
         $Controller->setData('CanDownload', $this->CanDownload);
         echo $Controller->fetchView($this->getView('link_files.php'));
     }
 }
Example #6
0
 /**
  * Render the email.
  *
  * @return string The rendered email.
  */
 public function toString()
 {
     if ($this->isPlaintext()) {
         return $this->plainTextEmail();
     }
     $controller = new Gdn_Controller();
     $controller->setData('email', $this->objectToArray($this));
     $email = $controller->fetchView($this->view);
     // Append plaintext version
     $email .= self::PLAINTEXT_START . $this->plainTextEmail();
     return $email;
 }
 /**
  * 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);
     // Make sure none of the selected discussions are ghost redirects.
     $discussionTypes = array_column($Discussions, 'Type');
     if (in_array('redirect', $discussionTypes)) {
         throw Gdn_UserException('You cannot merge redirects.', 400);
     }
     // 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 = val('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');
 }
 /**
  * Delete a Tag
  *
  * @param Gdn_Controller $Sender
  */
 public function controller_delete($Sender)
 {
     $Sender->permission('Garden.Settings.Manage');
     $TagID = val(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');
 }
 /**
  * The settings page for vanillicon.
  *
  * @param Gdn_Controller $sender
  */
 public function settingsController_vanillicon_create($sender)
 {
     $sender->permission('Garden.Settings.Manage');
     $cf = new ConfigurationModule($sender);
     $items = array('v1' => 'Vanillicon 1', 'v2' => 'Vanillicon 2 (beta)');
     $cachePath = self::getCachePath();
     $writable = is_writable($cachePath);
     $txtNotWritable = '<p style="color: #c00;">' . T('<b>Warning:</b> the cache directory is not writable. If you want to use the cache mechanism, you have to enable write permissions for') . '</p><code>' . $cachePath . '</code><br><br><br>';
     $txtProxyActive = '<p style="color: #090;">' . T('<b>Congratulations: The privacy of your users is respected!</b> All requests to vanillicon.com are made by your server and not by your users.') . '</p><br>';
     $cf->initialize(array('Plugins.Vanillicon.Type' => array('LabelCode' => 'Vanillicon Proxy', 'Control' => 'radiolist', 'Description' => $txtProxyActive . ($writable ? '' : $txtNotWritable) . ' ' . T('Which vanillicon set do you want to use?'), 'Items' => $items, 'Options' => array('list' => true, 'listclass' => 'icon-list', 'display' => 'after'), 'Default' => 'v1')));
     $sender->addSideMenu();
     $sender->setData('Title', sprintf(t('%s Settings'), 'Vanillicon'));
     $cf->renderAll();
 }
Example #10
0
 /**
  * Edit a Tag
  *
  * @param Gdn_Controller $Sender
  */
 public function controller_edit($Sender)
 {
     $Sender->addSideMenu('settings/tagging');
     $Sender->title(t('Edit Tag'));
     $TagID = val(1, $Sender->RequestArgs);
     // Set the model on the form.
     $TagModel = new TagModel();
     $Sender->Form->setModel($TagModel);
     $Tag = $TagModel->getID($TagID);
     $Sender->Form->setData($Tag);
     // Make sure the form knows which item we are editing.
     $Sender->Form->addHidden('TagID', $TagID);
     if ($Sender->Form->authenticatedPostBack()) {
         // Make sure the tag is valid
         $TagData = $Sender->Form->getFormValue('Name');
         if (!TagModel::validateTag($TagData)) {
             $Sender->Form->addError('@' . t('ValidateTag', 'Tags cannot contain commas.'));
         }
         // Make sure that the tag name is not already in use.
         if ($TagModel->getWhere(array('TagID <>' => $TagID, 'Name' => $TagData))->numRows() > 0) {
             $Sender->setData('MergeTagVisible', true);
             if (!$Sender->Form->getFormValue('MergeTag')) {
                 $Sender->Form->addError('The specified tag name is already in use.');
             }
         }
         if ($Sender->Form->Save()) {
             $Sender->informMessage(t('Your changes have been saved.'));
         }
     }
     $Sender->render('addedit', '', 'plugins/Tagging');
 }