summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2014-04-17 16:49:28 -0700
committerMerov Linden <merov@lindenlab.com>2014-04-17 16:49:28 -0700
commit18da8170a7fc635281fae370e7fb43a361a5cc91 (patch)
tree36b868782822095389389b937c4b600ea395b62c
parentccdffd9794229b59b7d022760540ce5f8d8ea133 (diff)
DD-54 : WIP : Improved validation to wrap items and stock items within version folders if necessary. Also hooked up the audit button with the validation code though all printout happens in the log
-rwxr-xr-xindra/newview/llfloatermarketplacelistings.cpp12
-rwxr-xr-xindra/newview/llfloatermarketplacelistings.h1
-rwxr-xr-xindra/newview/llinventoryfunctions.cpp38
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_marketplace_listings.xml1
4 files changed, 35 insertions, 17 deletions
diff --git a/indra/newview/llfloatermarketplacelistings.cpp b/indra/newview/llfloatermarketplacelistings.cpp
index 869b911310..7db78ff290 100755
--- a/indra/newview/llfloatermarketplacelistings.cpp
+++ b/indra/newview/llfloatermarketplacelistings.cpp
@@ -34,6 +34,7 @@
#include "llinventorybridge.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llinventoryobserver.h"
+#include "llinventoryfunctions.h"
#include "llmarketplacefunctions.h"
#include "llnotificationhandler.h"
#include "llnotificationmanager.h"
@@ -60,6 +61,7 @@ BOOL LLPanelMarketplaceListings::postBuild()
{
mAllPanel = getChild<LLInventoryPanel>("All Items");
childSetAction("add_btn", boost::bind(&LLPanelMarketplaceListings::onAddButtonClicked, this));
+ childSetAction("audit_btn", boost::bind(&LLPanelMarketplaceListings::onAuditButtonClicked, this));
// Set the sort order newest to oldest
LLInventoryPanel* panel = getChild<LLInventoryPanel>("All Items");
@@ -99,7 +101,7 @@ void LLPanelMarketplaceListings::onSelectionChange(LLInventoryPanel *panel, cons
void LLPanelMarketplaceListings::onAddButtonClicked()
{
- LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, true);
+ LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
llassert(marketplacelistings_id.notNull());
LLFolderType::EType preferred_type = LLFolderType::lookup("category");
LLUUID category = gInventory.createNewCategory(marketplacelistings_id, preferred_type, LLStringUtil::null);
@@ -107,6 +109,14 @@ void LLPanelMarketplaceListings::onAddButtonClicked()
mAllPanel->setSelectionByID(category, TRUE);
}
+void LLPanelMarketplaceListings::onAuditButtonClicked()
+{
+ LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, true);
+ llassert(marketplacelistings_id.notNull());
+ LLViewerInventoryCategory* cat = gInventory.getCategory(marketplacelistings_id);
+ validate_marketplacelistings(cat);
+}
+
void LLPanelMarketplaceListings::onViewSortMenuItemClicked(const LLSD& userdata)
{
std::string chosen_item = userdata.asString();
diff --git a/indra/newview/llfloatermarketplacelistings.h b/indra/newview/llfloatermarketplacelistings.h
index c9fe68a70c..960b6c55e0 100755
--- a/indra/newview/llfloatermarketplacelistings.h
+++ b/indra/newview/llfloatermarketplacelistings.h
@@ -55,6 +55,7 @@ private:
void onViewSortMenuItemClicked(const LLSD& userdata);
bool onViewSortMenuItemCheck(const LLSD& userdata);
void onAddButtonClicked();
+ void onAuditButtonClicked();
void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
LLInventoryPanel* mAllPanel;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index e6f863d46e..f4b66d82a4 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -1051,15 +1051,18 @@ bool has_correct_permissions_for_sale(LLInventoryCategory* cat)
// *TODO : Add the rest of the SLM/AIS business logic (limit of nesting depth, stock folder consistency, overall limit on listings, etc...)
void validate_marketplacelistings(LLInventoryCategory* cat)
{
- // Special case a stock folder depth issue
+ llinfos << "Merov : Validation log: validating folder : " << cat->getName() << llendl;
+ // Special case a stock folder depth issue
LLViewerInventoryCategory * viewer_cat = (LLViewerInventoryCategory *) (cat);
const LLFolderType::EType folder_type = cat->getPreferredType();
S32 depth = depth_nesting_in_marketplace(cat->getUUID());
- if ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth == 1))
+ if ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth <= 2))
{
// Nest the stock folder one level deeper in a normal folder and restart from there
- LLUUID parent_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+ //LLUUID parent_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+ LLUUID parent_uuid = cat->getParentUUID();
LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, LLFolderType::FT_NONE, cat->getName());
+ llinfos << "Merov : Validation warning: creating wrapping folder for stock folder : " << cat->getName() << llendl;
LLInventoryCategory* new_cat = gInventory.getCategory(folder_uuid);
gInventory.changeCategoryParent(viewer_cat, folder_uuid, false);
validate_marketplacelistings(new_cat);
@@ -1090,12 +1093,12 @@ void validate_marketplacelistings(LLInventoryCategory* cat)
// Skip items that shouldn't be there to start with, raise an error message for those
if (linked_category || linked_item)
{
- llinfos << "Merov : Validation error: skipping linked item : " << viewer_inv_item->getName() << llendl;
+ llinfos << "Merov : Validation error: linked item are not allowed in listings : " << viewer_inv_item->getName() << llendl;
continue;
}
if (!viewer_inv_item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID(), gAgent.getGroupID()))
{
- llinfos << "Merov : Validation error: skipping item with incorrect permissions : " << viewer_inv_item->getName() << llendl;
+ llinfos << "Merov : Validation error: item with incorrect permissions in listing : " << viewer_inv_item->getName() << llendl;
continue;
}
// Update the appropriate vector item for that type
@@ -1118,29 +1121,34 @@ void validate_marketplacelistings(LLInventoryCategory* cat)
type = (LLInventoryType::EType)(i);
}
}
+ // If we have no items in there (only folders) -> all OK
+ if (count == 0)
+ {
+ llinfos << "Merov : Validation log: folder validates: doesn't contain any item" << llendl;
+ }
// If we have one kind only, in the correct folder type at the right depth -> all OK
- if ((count <= 1) && ((type == LLInventoryType::IT_COUNT) || ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth >= 2))))
+ else if ((count == 1) && (((type == LLInventoryType::IT_COUNT) && (depth > 1)) || ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth > 2))))
{
// Done with that folder!
- llinfos << "Merov : Validation log: folder validates : " << viewer_cat->getName() << llendl;
+ llinfos << "Merov : Validation log: folder validates: all items of type : " << type << llendl;
}
else
{
- // Create one folder per vector of the stock kind at the right depth
- // Note: we *intentionally* skip the non stock items at the end, those should not be moved around
- for (S32 i = 0; i < LLInventoryType::IT_COUNT; i++)
+ // Create one folder per vector at the right depth and of the right type
+ for (S32 i = 0; i <= LLInventoryType::IT_COUNT; i++)
{
if (!items_vector[i].empty())
{
// Create a new folder
- llinfos << "Merov : Validation log: creating stock folder : " << viewer_cat->getName() << ", type = " << i << llendl;
- LLUUID parent_uuid = (depth >=2 ? viewer_cat->getParentUUID() : viewer_cat->getUUID());
- LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, LLFolderType::FT_MARKETPLACE_STOCK, viewer_cat->getName());
+ llinfos << "Merov : Validation warning: creating stock folder : " << viewer_cat->getName() << ", type = " << i << llendl;
+ LLUUID parent_uuid = (depth > 2 ? viewer_cat->getParentUUID() : viewer_cat->getUUID());
+ LLFolderType::EType new_folder_type = (i == LLInventoryType::IT_COUNT ? LLFolderType::FT_NONE : LLFolderType::FT_MARKETPLACE_STOCK);
+ LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, new_folder_type, viewer_cat->getName());
// Move each item to the new folder
while (!items_vector[i].empty())
{
LLViewerInventoryItem* viewer_inv_item = items_vector[i].back();
- llinfos << "Merov : Validation log: moving item : " << viewer_inv_item->getName() << llendl;
+ llinfos << "Merov : Validation warning: moving item : " << viewer_inv_item->getName() << llendl;
gInventory.changeItemParent(viewer_inv_item, folder_uuid, false);
items_vector[i].pop_back();
}
@@ -1151,7 +1159,7 @@ void validate_marketplacelistings(LLInventoryCategory* cat)
if (viewer_cat->getDescendentCount() == 0)
{
// Remove the current folder if it ends up empty
- llinfos << "Merov : Validation warning : folder content completely moved to stock folder -> remove empty folder!" << llendl;
+ llinfos << "Merov : Validation warning : folder content completely moved to stock folder -> removing empty folder" << llendl;
gInventory.removeCategory(cat->getUUID());
gInventory.notifyObservers();
return;
diff --git a/indra/newview/skins/default/xui/en/panel_marketplace_listings.xml b/indra/newview/skins/default/xui/en/panel_marketplace_listings.xml
index acbb428422..0ebb7a5f48 100755
--- a/indra/newview/skins/default/xui/en/panel_marketplace_listings.xml
+++ b/indra/newview/skins/default/xui/en/panel_marketplace_listings.xml
@@ -94,7 +94,6 @@
background_visible="true"
border="false"
bevel_style="none"
- sort_order_setting="InventorySortOrder"
show_item_link_overlays="true">
</inventory_panel>
<inventory_panel