本文整理汇总了PHP中CategoryModel::Categories方法的典型用法代码示例。如果您正苦于以下问题:PHP CategoryModel::Categories方法的具体用法?PHP CategoryModel::Categories怎么用?PHP CategoryModel::Categories使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CategoryModel
的用法示例。
在下文中一共展示了CategoryModel::Categories方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: DiscussionController_Render_Before
/**
* Deny access to private support discussions.
*/
public function DiscussionController_Render_Before($Sender, $Args)
{
// Get category & discussion data
$Category = CategoryModel::Categories($Sender->Data('CategoryID'));
$Discussion = CategoryModel::Categories($Sender->Data('CategoryID'));
// Evaluate conditions
$Private = GetValue('PrivateSupport', $Category) ? TRUE : FALSE;
$Mine = GetValue('InsertUserID', $Discussion) == Gdn::Session()->UserID ? TRUE : FALSE;
// Deny access to private support discussions
if (!$Mine && $Private) {
$Sender->Permission('Garden.Moderation.Manage');
}
}
示例2: ToString
/**
* Render the module.
*
* @return string
*/
public function ToString()
{
// Set CategoryID if we have one.
if ($this->CategoryID === NULL) {
$this->CategoryID = Gdn::Controller()->Data('Category.CategoryID', FALSE);
}
// Allow plugins and themes to modify parameters.
Gdn::Controller()->EventArguments['NewDiscussionModule'] =& $this;
Gdn::Controller()->FireEvent('BeforeNewDiscussionButton');
// Make sure the user has the most basic of permissions first.
$PermissionCategory = CategoryModel::PermissionCategory($this->CategoryID);
if ($this->CategoryID) {
$Category = CategoryModel::Categories($this->CategoryID);
$HasPermission = Gdn::Session()->CheckPermission('Vanilla.Discussions.Add', TRUE, 'Category', GetValue('CategoryID', $PermissionCategory));
} else {
$HasPermission = Gdn::Session()->CheckPermission('Vanilla.Discussions.Add', TRUE, 'Category', 'any');
}
// Determine if this is a guest & we're using "New Discussion" button as call to action.
$PrivilegedGuest = $this->ShowGuests && !Gdn::Session()->IsValid();
// No module for you!
if (!$HasPermission && !$PrivilegedGuest) {
return '';
}
// Grab the allowed discussion types.
$DiscussionTypes = CategoryModel::AllowedDiscussionTypes($PermissionCategory);
foreach ($DiscussionTypes as $Key => $Type) {
if (isset($Type['AddPermission']) && !Gdn::Session()->CheckPermission($Type['AddPermission'])) {
unset($DiscussionTypes[$Key]);
continue;
}
// If user !$HasPermission, they are $PrivilegedGuest so redirect to $GuestUrl.
$Url = $HasPermission ? GetValue('AddUrl', $Type) : $this->GuestUrl;
if (!$Url) {
continue;
}
if (isset($Category) && $HasPermission) {
$Url .= '/' . rawurlencode(GetValue('UrlCode', $Category));
}
$this->AddButton(T(GetValue('AddText', $Type)), $Url);
}
// Add QueryString to URL if one is defined.
if ($this->QueryString && $HasPermission) {
foreach ($this->Buttons as &$Row) {
$Row['Url'] .= (strpos($Row['Url'], '?') !== FALSE ? '&' : '?') . $this->QueryString;
}
}
return parent::ToString();
}
示例3: __construct
public function __construct($Sender = '', $ApplicationFolder = '')
{
$this->Data = FALSE;
$NoFollowing = TRUE;
if (C('Vanilla.Categories.Use') == TRUE) {
// Load categories with respect to view permissions
$Categories = CategoryModel::Categories();
$Categories2 = $Categories;
foreach ($Categories2 as $i => $Category) {
if (!$Category['PermsDiscussionsView']) {
unset($Categories[$i]);
} elseif (!$Category['Following']) {
$NoFollowing = FALSE;
}
}
// delete view filter if no categories are hidden
$Session = Gdn::Session();
if ($NoFollowing && $Session->IsValid()) {
$Session->SetPreference('ShowAllCategories', TRUE);
}
// set categories to data
$Data = new Gdn_DataSet($Categories);
$Data->DatasetType(DATASET_TYPE_ARRAY);
$Data->DatasetType(DATASET_TYPE_OBJECT);
$this->Data['Categories'] = $Data;
// calculate additional needed data
$this->Data['CategoryID'] = isset($Sender->CategoryID) ? $Sender->CategoryID : '';
$this->Data['OnCategories'] = strtolower($Sender->ControllerName) == 'categoriescontroller' && !is_numeric($this->Data['CategoryID']);
$this->Data['ShowAllCategoriesPref'] = $Session->GetPreference('ShowAllCategories');
$this->Data['Url'] = Gdn::Request()->Path();
if ($this->Data['Url'] == '') {
$this->Data['Url'] = '/';
}
$this->Data['ShowAllCategoriesUrl'] = Gdn::Request()->Url('categories/settoggle?ShowAllCategories=true&Target=' . $this->Data['Url']);
$this->Data['ShowFollowedCategoriesUrl'] = Gdn::Request()->Url('categories/settoggle?ShowAllCategories=false&Target=' . $this->Data['Url']);
$this->Data['TKey'] = urlencode(Gdn::Session()->TransientKey());
$this->Data['ValidSession'] = $Session->UserID > 0 && $Session->ValidateTransientKey($this->Data['TKey']);
$this->Data['MaxDepth'] = C('Vanilla.Categories.MaxDisplayDepth');
$this->Data['DoHeadings'] = C('Vanilla.Categories.DoHeadings');
}
parent::__construct($Sender, $ApplicationFolder);
}
示例4: __construct
public function __construct($Sender = '')
{
// Load categories
$this->Data = FALSE;
if (C('Vanilla.Categories.Use') == TRUE && !C('Vanilla.Categories.HideModule')) {
$Categories = CategoryModel::Categories();
$Categories2 = $Categories;
// Filter out the categories we aren't watching.
foreach ($Categories2 as $i => $Category) {
if (!$Category['PermsDiscussionsView'] || !$Category['Following']) {
unset($Categories[$i]);
}
}
$Data = new Gdn_DataSet($Categories);
$Data->DatasetType(DATASET_TYPE_ARRAY);
$Data->DatasetType(DATASET_TYPE_OBJECT);
$this->Data = $Data;
}
parent::__construct($Sender);
}
示例5: ToString
public function ToString()
{
if ($this->CategoryID === NULL) {
$this->CategoryID = Gdn::Controller()->Data('Category.CategoryID', FALSE);
}
Gdn::Controller()->EventArguments['NewDiscussionModule'] =& $this;
Gdn::Controller()->FireEvent('BeforeNewDiscussionButton');
// Make sure the user has the most basic of permissions first.
$PermissionCategory = CategoryModel::PermissionCategory($this->CategoryID);
if ($this->CategoryID) {
$Category = CategoryModel::Categories($this->CategoryID);
$HasPermission = Gdn::Session()->CheckPermission('Vanilla.Discussions.Add', TRUE, 'Category', GetValue('CategoryID', $PermissionCategory));
} else {
$HasPermission = Gdn::Session()->CheckPermission('Vanilla.Discussions.Add', TRUE, 'Category', 'any');
}
if (!$HasPermission) {
return '';
}
// Grab the allowed discussion types.
$DiscussionTypes = CategoryModel::AllowedDiscussionTypes($PermissionCategory);
foreach ($DiscussionTypes as $Key => $Type) {
if (isset($Type['AddPermission']) && !Gdn::Session()->CheckPermission($Type['AddPermission'])) {
unset($DiscussionTypes[$Key]);
continue;
}
$Url = GetValue('AddUrl', $Type);
if (!$Url) {
continue;
}
if (isset($Category)) {
$Url .= '/' . rawurlencode(GetValue('UrlCode', $Category));
}
$this->AddButton(T(GetValue('AddText', $Type)), $Url);
}
if ($this->QueryString) {
foreach ($this->Buttons as &$Row) {
$Row['Url'] .= (strpos($Row['Url'], '?') !== FALSE ? '&' : '?') . $this->QueryString;
}
}
return parent::ToString();
}
示例6: InCategory
protected function InCategory($NeedleCategoryID, $HaystackCategoryID, $IncludeSubcategories = FALSE)
{
if (!$HaystackCategoryID) {
return TRUE;
}
if ($NeedleCategoryID == $HaystackCategoryID) {
return TRUE;
}
if ($IncludeSubcategories) {
$Cat = CategoryModel::Categories($NeedleCategoryID);
for ($i = 0; $i < 10; $i++) {
if (!$Cat) {
break;
}
if ($Cat['CategoryID'] == $HaystackCategoryID) {
return TRUE;
}
$Cat = CategoryModel::Categories($Cat['ParentCategoryID']);
}
}
return FALSE;
}
示例7: PostController_BeforeBodyInput_Handler
public function PostController_BeforeBodyInput_Handler($Sender)
{
# If the script ID is passed in, it will be hardcoded to category 4.
if ($this->ScriptIDPassed($Sender)) {
return;
}
echo '<div class="P">';
echo '<div class="Category">';
echo $Sender->Form->Label('Category', 'CategoryID'), ' ';
echo '<br>';
$SelectedCategory = GetValue('CategoryID', $Sender->Category);
foreach (CategoryModel::Categories() as $c) {
# -1 is the root
if ($c['CategoryID'] != -1) {
#4 is Style Reviews, which should only by used when script id is passed (and skips this anyway) or by mods
if ($c['CategoryID'] != 4 || Gdn::Session()->CheckPermission('Vanilla.Discussions.Edit')) {
echo '<input name="CategoryID" id="category-' . $c['CategoryID'] . '" type="radio" value="' . $c['CategoryID'] . '"' . ($SelectedCategory == $c['CategoryID'] ? ' checked' : '') . '><label for="category-' . $c['CategoryID'] . '">' . $c['Name'] . ' - ' . $c['Description'] . '</label><br>';
}
}
}
#echo $Sender->Form->CategoryDropDown('CategoryID', array('Value' => GetValue('CategoryID', $this->Category)));
echo '</div>';
echo '</div>';
}
示例8: 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');
}
示例9: WriteDiscussionRow
/**
* Writes a discussion in table row format.
*/
function WriteDiscussionRow($Discussion, &$Sender, &$Session, $Alt2)
{
if (!property_exists($Sender, 'CanEditDiscussions')) {
$Sender->CanEditDiscussions = GetValue('PermsDiscussionsEdit', CategoryModel::Categories($Discussion->CategoryID)) && C('Vanilla.AdminCheckboxes.Use');
}
$CssClass = CssClass($Discussion);
$DiscussionUrl = $Discussion->Url;
if ($Session->UserID) {
$DiscussionUrl .= '#latest';
}
$Sender->EventArguments['DiscussionUrl'] =& $DiscussionUrl;
$Sender->EventArguments['Discussion'] =& $Discussion;
$Sender->EventArguments['CssClass'] =& $CssClass;
$First = UserBuilder($Discussion, 'First');
if ($Discussion->LastUserID) {
$Last = UserBuilder($Discussion, 'Last');
} else {
$Last = $First;
}
// $Sender->EventArguments['FirstUser'] = &$First;
// $Sender->EventArguments['LastUser'] = &$Last;
//
// $Sender->FireEvent('BeforeDiscussionName');
$DiscussionName = $Discussion->Name;
if ($DiscussionName == '') {
$DiscussionName = T('Blank Discussion Topic');
}
$Sender->EventArguments['DiscussionName'] =& $DiscussionName;
$Discussion->CountPages = ceil($Discussion->CountComments / $Sender->CountCommentsPerPage);
$FirstPageUrl = DiscussionUrl($Discussion, 1);
$LastPageUrl = DiscussionUrl($Discussion, FALSE) . '#latest';
?>
<tr id="Discussion_<?php
echo $Discussion->DiscussionID;
?>
" class="<?php
echo $CssClass;
?>
">
<?php
echo AdminCheck($Discussion, array('<td class="CheckBoxColumn"><div class="Wrap">', '</div></td>'));
?>
<td class="DiscussionName">
<div class="Wrap">
<span class="Options">
<?php
echo OptionsList($Discussion);
echo BookmarkButton($Discussion);
?>
</span>
<?php
echo Anchor($DiscussionName, $DiscussionUrl, 'Title') . ' ';
$Sender->FireEvent('AfterDiscussionTitle');
WriteMiniPager($Discussion);
echo NewComments($Discussion);
if ($Sender->Data('_ShowCategoryLink', TRUE)) {
echo CategoryLink($Discussion, ' ' . T('in') . ' ');
}
// Other stuff that was in the standard view that you may want to display:
echo '<div class="Meta Meta-Discussion">';
WriteTags($Discussion);
echo '</div>';
// if ($Source = GetValue('Source', $Discussion))
// echo ' '.sprintf(T('via %s'), T($Source.' Source', $Source));
//
?>
</div>
</td>
<td class="BlockColumn BlockColumn-User FirstUser">
<div class="Block Wrap">
<?php
echo UserPhoto($First, array('Size' => 'Small'));
echo UserAnchor($First, 'UserLink BlockTitle');
echo '<div class="Meta">';
echo Anchor(Gdn_Format::Date($Discussion->FirstDate, 'html'), $FirstPageUrl, 'CommentDate MItem');
echo '</div>';
?>
</div>
</td>
<td class="BigCount CountComments">
<div class="Wrap">
<?php
// Exact Number
// echo number_format($Discussion->CountComments);
// Round Number
echo BigPlural($Discussion->CountComments, '%s comment');
?>
</div>
</td>
<td class="BigCount CountViews">
<div class="Wrap">
<?php
// Exact Number
// echo number_format($Discussion->CountViews);
// Round Number
echo BigPlural($Discussion->CountViews, '%s view');
?>
//.........这里部分代码省略.........
示例10: array
// $CommentOptions = array('MultiLine' => TRUE, 'format' => GetValueR('Comment.Format', $this));
$this->FireEvent('BeforeBodyField');
echo $this->Form->BodyBox('Body', array('Table' => 'Comment', 'tabindex' => 1));
$this->FireEvent('AfterBodyField');
echo "<div class=\"Buttons\">\n";
$this->FireEvent('BeforeFormButtons');
$CancelText = T('Home');
$CancelClass = 'Back';
if (!$NewOrDraft || $Editing) {
$CancelText = T('Cancel');
$CancelClass = 'Cancel';
}
echo '<span class="' . $CancelClass . '">';
echo Anchor($CancelText, '/');
if ($CategoryID = $this->Data('Discussion.CategoryID')) {
$Category = CategoryModel::Categories($CategoryID);
if ($Category) {
echo ' <span class="Bullet">•</span> ' . Anchor($Category['Name'], $Category['Url']);
}
}
echo '</span>';
$ButtonOptions = array('class' => 'Button Primary CommentButton');
$ButtonOptions['tabindex'] = 2;
/*
Caused non-root users to not be able to add comments. Must take categories
into account. Look at CheckPermission for more information.
if (!Gdn::Session()->CheckPermission('Vanilla.Comment.Add'))
$ButtonOptions['Disabled'] = 'disabled';
*/
if (!$Editing && $Session->IsValid()) {
echo Anchor(T('Preview'), '#', 'PreviewButton') . "\n";
示例11: DiscussionsController_Tagged_Create
/**
* Load discussions for a specific tag.
* @param DiscussionsController $Sender
*/
public function DiscussionsController_Tagged_Create($Sender)
{
Gdn_Theme::Section('DiscussionList');
$Args = $Sender->RequestArgs;
$Get = array_change_key_case($Sender->Request->Get());
if ($UseCategories = C('Plugins.Tagging.UseCategories')) {
// The url is in the form /category/tag/p1
$CategoryCode = GetValue(0, $Args);
$Tag = GetValue(1, $Args);
$Page = GetValue(2, $Args);
} else {
// The url is in the form /tag/p1
$CategoryCode = '';
$Tag = GetValue(0, $Args);
$Page = GetValue(1, $Args);
}
// Look for explcit values.
$CategoryCode = GetValue('category', $Get, $CategoryCode);
$Tag = GetValue('tag', $Get, $Tag);
$Page = GetValue('page', $Get, $Page);
$Category = CategoryModel::Categories($CategoryCode);
$Tag = StringEndsWith($Tag, '.rss', TRUE, TRUE);
list($Offset, $Limit) = OffsetLimit($Page, C('Vanilla.Discussions.PerPage', 30));
$MultipleTags = strpos($Tag, ',') !== FALSE;
$Sender->SetData('Tag', $Tag, TRUE);
$TagModel = TagModel::instance();
$RecordCount = FALSE;
if (!$MultipleTags) {
$Tags = $TagModel->GetWhere(array('Name' => $Tag))->ResultArray();
if (count($Tags) == 0) {
throw NotFoundException('Page');
}
if (count($Tags) > 1) {
foreach ($Tags as $TagRow) {
if ($TagRow['CategoryID'] == GetValue('CategoryID', $Category)) {
break;
}
}
} else {
$TagRow = array_pop($Tags);
}
$Tags = $TagModel->getRelatedTags($TagRow);
$RecordCount = $TagRow['CountDiscussions'];
$Sender->SetData('CountDiscussions', $RecordCount);
$Sender->SetData('Tags', $Tags);
$Sender->SetData('Tag', $TagRow);
$ChildTags = $TagModel->getChildTags($TagRow['TagID']);
$Sender->SetData('ChildTags', $ChildTags);
}
$Sender->Title(htmlspecialchars($TagRow['FullName']));
$UrlTag = rawurlencode($Tag);
if (urlencode($Tag) == $Tag) {
$Sender->CanonicalUrl(Url(ConcatSep('/', "/discussions/tagged/{$UrlTag}", PageNumber($Offset, $Limit, TRUE)), TRUE));
$FeedUrl = Url(ConcatSep('/', "/discussions/tagged/{$UrlTag}/feed.rss", PageNumber($Offset, $Limit, TRUE, FALSE)), '//');
} else {
$Sender->CanonicalUrl(Url(ConcatSep('/', 'discussions/tagged', PageNumber($Offset, $Limit, TRUE)) . '?Tag=' . $UrlTag, TRUE));
$FeedUrl = Url(ConcatSep('/', 'discussions/tagged', PageNumber($Offset, $Limit, TRUE, FALSE), 'feed.rss') . '?Tag=' . $UrlTag, '//');
}
if ($Sender->Head) {
$Sender->AddJsFile('discussions.js');
$Sender->Head->AddRss($FeedUrl, $Sender->Head->Title());
}
if (!is_numeric($Offset) || $Offset < 0) {
$Offset = 0;
}
// Add Modules
$Sender->AddModule('NewDiscussionModule');
$Sender->AddModule('DiscussionFilterModule');
$Sender->AddModule('BookmarkedModule');
$Sender->SetData('Category', FALSE, TRUE);
$Sender->AnnounceData = FALSE;
$Sender->SetData('Announcements', array(), TRUE);
$DiscussionModel = new DiscussionModel();
$TagModel->SetTagSql($DiscussionModel->SQL, $Tag, $Limit, $Offset, $Sender->Request->Get('op', 'or'));
$Sender->DiscussionData = $DiscussionModel->Get($Offset, $Limit, array('Announce' => 'all'));
$Sender->SetData('Discussions', $Sender->DiscussionData, TRUE);
$Sender->SetJson('Loading', $Offset . ' to ' . $Limit);
// Build a pager.
$PagerFactory = new Gdn_PagerFactory();
$Sender->Pager = $PagerFactory->GetPager('Pager', $Sender);
$Sender->Pager->ClientID = 'Pager';
$Sender->Pager->Configure($Offset, $Limit, $RecordCount, '');
$Sender->View = C('Vanilla.Discussions.Layout');
/*
// If these don't equal, then there is a category that should be inserted.
if ($UseCategories && $Category && $TagRow['FullName'] != GetValue('Name', $Category)) {
$Sender->Data['Breadcrumbs'][] = array('Name' => $Category['Name'], 'Url' => TagUrl($TagRow));
}
$Sender->Data['Breadcrumbs'][] = array('Name' => $TagRow['FullName'], 'Url' => '');
*/
// Render the controller.
$this->View = C('Vanilla.Discussions.Layout') == 'table' ? 'table' : 'index';
$Sender->Render($this->View, 'discussions', 'vanilla');
}
示例12: setCache
/**
* Grab and update the category cache
*
* @since 2.0.18
* @access public
* @param int $ID
* @param array $Data
*/
public static function setCache($ID = false, $Data = false)
{
self::instance()->collection->refreshCache((int) $ID);
$Categories = Gdn::cache()->get(self::CACHE_KEY);
self::$Categories = null;
if (!$Categories) {
return;
}
// Extract actual category list, remove key if malformed
if (!$ID || !is_array($Categories) || !array_key_exists('categories', $Categories)) {
Gdn::cache()->remove(self::CACHE_KEY);
return;
}
$Categories = $Categories['categories'];
// Check for category in list, otherwise remove key if not found
if (!array_key_exists($ID, $Categories)) {
Gdn::cache()->remove(self::CACHE_KEY);
return;
}
$Category = $Categories[$ID];
$Category = array_merge($Category, $Data);
$Categories[$ID] = $Category;
// Update memcache entry
self::$Categories = $Categories;
unset($Categories);
self::BuildCache($ID);
self::JoinUserData(self::$Categories, true);
}
示例13: Delete
/**
* Delete a comment.
*
* This is a hard delete that completely removes it from the database.
* Events: DeleteComment.
*
* @since 2.0.0
* @access public
*
* @param int $CommentID Unique ID of the comment to be deleted.
* @param array $Options Additional options for the delete.
* @param bool Always returns TRUE.
*/
public function Delete($CommentID, $Options = array())
{
$this->EventArguments['CommentID'] = $CommentID;
$Comment = $this->GetID($CommentID, DATASET_TYPE_ARRAY);
if (!$Comment) {
return FALSE;
}
$Discussion = $this->SQL->GetWhere('Discussion', array('DiscussionID' => $Comment['DiscussionID']))->FirstRow(DATASET_TYPE_ARRAY);
// Decrement the UserDiscussion comment count if the user has seen this comment
$Offset = $this->GetOffset($CommentID);
$this->SQL->Update('UserDiscussion')->Set('CountComments', 'CountComments - 1', FALSE)->Where('DiscussionID', $Comment['DiscussionID'])->Where('CountComments >', $Offset)->Put();
$this->FireEvent('DeleteComment');
// Log the deletion.
$Log = GetValue('Log', $Options, 'Delete');
LogModel::Insert($Log, 'Comment', $Comment, GetValue('LogOptions', $Options, array()));
// Delete the comment.
$this->SQL->Delete('Comment', array('CommentID' => $CommentID));
// Update the comment count
$this->UpdateCommentCount($Discussion);
// Update the user's comment count
$this->UpdateUser($Comment['InsertUserID']);
// Update the category.
$Category = CategoryModel::Categories(GetValue('CategoryID', $Discussion));
if ($Category && $Category['LastCommentID'] == $CommentID) {
$CategoryModel = new CategoryModel();
$CategoryModel->SetRecentPost($Category['CategoryID']);
}
// Clear the page cache.
$this->RemovePageCache($Comment['DiscussionID']);
return TRUE;
}
示例14: SetCache
/**
* Grab and update the category cache
*
* @since 2.0.18
* @access public
* @param int $ID
* @param array $Data
*/
public static function SetCache($ID = FALSE, $Data = FALSE)
{
$Categories = Gdn::Cache()->Get(self::CACHE_KEY);
self::$Categories = NULL;
if (!$Categories) {
return;
}
if (!$ID || !is_array($Categories)) {
Gdn::Cache()->Remove(self::CACHE_KEY);
return;
}
if (!array_key_exists($ID, $Categories)) {
Gdn::Cache()->Remove(self::CACHE_KEY);
return;
}
$Category = $Categories[$ID];
$Category = array_merge($Category, $Data);
$Categories[$ID] = $Category;
self::$Categories = $Categories;
unset($Categories);
self::BuildCache();
self::JoinUserData(self::$Categories, TRUE);
}
示例15: EditCategory
/**
* Editing a category.
*
* @since 2.0.0
* @access public
*
* @param int $CategoryID Unique ID of the category to be updated.
*/
public function EditCategory($CategoryID = '')
{
// Check permission
$this->Permission('Garden.Settings.Manage');
// Set up models
$RoleModel = new RoleModel();
$PermissionModel = Gdn::PermissionModel();
$this->Form->SetModel($this->CategoryModel);
if (!$CategoryID && $this->Form->IsPostBack()) {
if ($ID = $this->Form->GetFormValue('CategoryID')) {
$CategoryID = $ID;
}
}
// Get category data
$this->Category = $this->CategoryModel->GetID($CategoryID);
$this->Category->CustomPermissions = $this->Category->CategoryID == $this->Category->PermissionCategoryID;
// Set up head
$this->AddJsFile('jquery.alphanumeric.js');
$this->AddJsFile('categories.js');
$this->AddJsFile('jquery.gardencheckboxgrid.js');
$this->Title(T('Edit Category'));
$this->AddSideMenu('vanilla/settings/managecategories');
// Make sure the form knows which item we are editing.
$this->Form->AddHidden('CategoryID', $CategoryID);
$this->SetData('CategoryID', $CategoryID);
// Load all roles with editable permissions
$this->RoleArray = $RoleModel->GetArray();
$this->FireEvent('AddEditCategory');
if ($this->Form->IsPostBack() == FALSE) {
$this->Form->SetData($this->Category);
$this->SetupDiscussionTypes($this->Category);
$this->Form->SetValue('CustomPoints', $this->Category->PointsCategoryID == $this->Category->CategoryID);
} else {
$this->SetupDiscussionTypes($this->Category);
$Upload = new Gdn_Upload();
$TmpImage = $Upload->ValidateUpload('PhotoUpload', FALSE);
if ($TmpImage) {
// Generate the target image name
$TargetImage = $Upload->GenerateTargetName(PATH_UPLOADS);
$ImageBaseName = pathinfo($TargetImage, PATHINFO_BASENAME);
// Save the uploaded image
$Parts = $Upload->SaveAs($TmpImage, $ImageBaseName);
$this->Form->SetFormValue('Photo', $Parts['SaveName']);
}
$this->Form->SetFormValue('CustomPoints', (bool) $this->Form->GetFormValue('CustomPoints'));
if ($this->Form->Save()) {
$Category = CategoryModel::Categories($CategoryID);
$this->SetData('Category', $Category);
if ($this->DeliveryType() == DELIVERY_TYPE_ALL) {
Redirect('vanilla/settings/managecategories');
}
}
}
// Get all of the currently selected role/permission combinations for this junction.
$Permissions = $PermissionModel->GetJunctionPermissions(array('JunctionID' => $CategoryID), 'Category', '', array('AddDefaults' => !$this->Category->CustomPermissions));
$Permissions = $PermissionModel->UnpivotPermissions($Permissions, TRUE);
if ($this->DeliveryType() == DELIVERY_TYPE_ALL) {
$this->SetData('PermissionData', $Permissions, TRUE);
}
// Render default view
$this->Render();
}