aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPUserManagerDelegate.m
diff options
context:
space:
mode:
authorMax <post@wickenrode.com>2018-01-20 03:09:01 +0100
committerMax <post@wickenrode.com>2018-01-20 03:09:01 +0100
commitd403528b2e2be083fe80f5a915d1f6867ec9074e (patch)
treecd4daf91b4dc49c46a07d9223576995c48aaeadd /Source/SPUserManagerDelegate.m
parentef21bc5c3749756c21804d1592f3a3fe2faf7cab (diff)
parentb04243d4d7befb33383d434fe05ea3d7915ef27d (diff)
downloadsequelpro-d403528b2e2be083fe80f5a915d1f6867ec9074e.tar.gz
sequelpro-d403528b2e2be083fe80f5a915d1f6867ec9074e.tar.bz2
sequelpro-d403528b2e2be083fe80f5a915d1f6867ec9074e.zip
Merge remote-tracking branch 'origin/mergeclasses'
Conflicts: Source/SPQueryControllerInitializer.m Source/SPQueryDocumentsController.m Source/SPQueryFavoriteManager.m
Diffstat (limited to 'Source/SPUserManagerDelegate.m')
-rw-r--r--Source/SPUserManagerDelegate.m335
1 files changed, 0 insertions, 335 deletions
diff --git a/Source/SPUserManagerDelegate.m b/Source/SPUserManagerDelegate.m
deleted file mode 100644
index cefe7f2e..00000000
--- a/Source/SPUserManagerDelegate.m
+++ /dev/null
@@ -1,335 +0,0 @@
-//
-// SPUserManagerDelegate.m
-// sequel-pro
-//
-// Created by Mark Townsend on Jan 1, 2009.
-// Copyright (c) 2009 Mark Townsend. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-//
-// More info at <https://github.com/sequelpro/sequelpro>
-
-#import "SPUserManagerDelegate.h"
-#import "SPUserMO.h"
-#import "SPServerSupport.h"
-#import "ImageAndTextCell.h"
-
-static NSString *SPGeneralTabIdentifier = @"General";
-static NSString *SPGlobalPrivilegesTabIdentifier = @"Global Privileges";
-static NSString *SPResourcesTabIdentifier = @"Resources";
-static NSString *SPSchemaPrivilegesTabIdentifier = @"Schema Privileges";
-
-@interface SPUserManager (DeclaredAPI)
-
-- (void)_initializeAvailablePrivs;
-- (void)_selectParentFromSelection;
-- (void)_selectFirstChildOfParentNode;
-- (NSArray *)_fetchUserWithUserName:(NSString *)username;
-
-- (NSArray *)_fetchPrivsWithUser:(NSString *)username schema:(NSString *)selectedSchema host:(NSString *)host;
-
-@end
-
-@implementation SPUserManager (SPUserManagerDelegate)
-
-#pragma mark -
-#pragma mark TableView Delegate Methods
-
-- (void)tableViewSelectionDidChange:(NSNotification *)notification
-{
- id object = [notification object];
-
- if (object == schemasTableView) {
- [grantedSchemaPrivs removeAllObjects];
- [grantedTableView reloadData];
-
- [self _initializeAvailablePrivs];
-
- if ([[treeController selectedObjects] count] > 0 && [[schemasTableView selectedRowIndexes] count] > 0) {
- SPUserMO *user = [[treeController selectedObjects] objectAtIndex:0];
-
- // Check to see if the user host node was selected
- if ([user valueForKey:@"host"]) {
- NSString *selectedSchema = [schemas objectAtIndex:[schemasTableView selectedRow]];
-
- NSArray *results = [self _fetchPrivsWithUser:[[user parent] valueForKey:@"user"]
- schema:[selectedSchema stringByReplacingOccurrencesOfString:@"_" withString:@"\\_"]
- host:[user valueForKey:@"host"]];
-
- if ([results count] > 0) {
- NSManagedObject *priv = [results objectAtIndex:0];
-
- for (NSPropertyDescription *property in [priv entity])
- {
- if ([[property name] hasSuffix:@"_priv"] && [[priv valueForKey:[property name]] boolValue])
- {
- NSString *displayName = [[[property name] stringByReplacingOccurrencesOfString:@"_priv" withString:@""] replaceUnderscoreWithSpace];
- NSDictionary *newDict = [NSDictionary dictionaryWithObjectsAndKeys:displayName, @"displayName", [property name], @"name", nil];
- [grantedController addObject:newDict];
-
- // Remove items from available so they can't be added twice.
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"displayName like[cd] %@", displayName];
- NSArray *previousObjects = [[availableController arrangedObjects] filteredArrayUsingPredicate:predicate];
-
- for (NSDictionary *dict in previousObjects)
- {
- [availableController removeObject:dict];
- }
- }
- }
- }
-
- [availableTableView setEnabled:YES];
- }
- }
- else {
- [availableTableView setEnabled:NO];
- }
- }
- else if (object == grantedTableView) {
- [removeSchemaPrivButton setEnabled:[[grantedController selectedObjects] count] > 0];
- }
- else if (object == availableTableView) {
- [addSchemaPrivButton setEnabled:[[availableController selectedObjects] count] > 0];
- }
-}
-
-- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex
-{
- if (tableView == schemasTableView) {
- NSString *schemaName = [schemas objectAtIndex:rowIndex];
-
- // Gray out the "all database" entries
- if ([schemaName isEqualToString:@""] || [schemaName isEqualToString:@"%"]) {
- [cell setTextColor:[NSColor lightGrayColor]];
- } else {
- [cell setTextColor:[NSColor blackColor]];
- }
-
- // If the schema has permissions set, highlight with a yellow background
- BOOL enabledPermissions = NO;
- SPUserMO *user = [[treeController selectedObjects] objectAtIndex:0];
- NSArray *results = [self _fetchPrivsWithUser:[[user parent] valueForKey:@"user"]
- schema:[schemaName stringByReplacingOccurrencesOfString:@"_" withString:@"\\_"]
- host:[user valueForKey:@"host"]];
- if ([results count]) {
- NSManagedObject *schemaPrivs = [results objectAtIndex:0];
- for (NSString *itemKey in [[[schemaPrivs entity] attributesByName] allKeys]) {
- if ([itemKey hasSuffix:@"_priv"] && [[schemaPrivs valueForKey:itemKey] boolValue]) {
- enabledPermissions = YES;
- break;
- }
- }
- }
-
- if (enabledPermissions) {
- [cell setDrawsBackground:YES];
- [cell setBackgroundColor:[NSColor colorWithDeviceRed:1.f green:1.f blue:0.f alpha:0.2]];
- } else {
- [cell setDrawsBackground:NO];
- }
- }
-}
-
-#pragma mark -
-#pragma mark Tab View Delegate methods
-
-- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem
-{
- BOOL retVal = YES;
-
- if ([[treeController selectedObjects] count] == 0) return NO;
-
- if (![treeController commitEditing]) {
- return NO;
- }
-
- // Currently selected object in tree
- id selectedObject = [[treeController selectedObjects] objectAtIndex:0];
-
- // If we are selecting a tab view that requires there be a child,
- // make sure there is a child to select. If not, don't allow it.
- if ([[tabViewItem identifier] isEqualToString:SPGlobalPrivilegesTabIdentifier] ||
- [[tabViewItem identifier] isEqualToString:SPResourcesTabIdentifier] ||
- [[tabViewItem identifier] isEqualToString:SPSchemaPrivilegesTabIdentifier]) {
-
- id parent = [selectedObject parent];
-
- retVal = parent ? ([[parent children] count] > 0) : ([[selectedObject children] count] > 0);
-
- if (!retVal) {
- NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"User has no hosts", @"user has no hosts message")
- defaultButton:NSLocalizedString(@"Add Host", @"Add Host")
- alternateButton:NSLocalizedString(@"Cancel", @"cancel button")
- otherButton:nil
- informativeTextWithFormat:NSLocalizedString(@"This user doesn't have any hosts associated with it. It will be deleted unless one is added", @"user has no hosts informative message")];
-
- if ([alert runModal] == NSAlertDefaultReturn) {
- [self addHost:nil];
- }
- }
-
- // If this is the resources tab, enable or disable the controls based on the server's support for them
- if ([[tabViewItem identifier] isEqualToString:SPResourcesTabIdentifier]) {
-
- BOOL serverSupportsUserMaxVars = [serverSupport supportsUserMaxVars];
-
- // Disable the fields according to the version
- [maxUpdatesTextField setEnabled:serverSupportsUserMaxVars];
- [maxConnectionsTextField setEnabled:serverSupportsUserMaxVars];
- [maxQuestionsTextField setEnabled:serverSupportsUserMaxVars];
- }
- }
-
- return retVal;
-}
-
-- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem
-{
- if ([[treeController selectedObjects] count] == 0) return;
-
- id selectedObject = [[treeController selectedObjects] objectAtIndex:0];
-
- // If the selected tab is General and a child is selected, select the
- // parent (user info).
- if ([[tabViewItem identifier] isEqualToString:SPGeneralTabIdentifier]) {
- if ([selectedObject parent]) {
- [self _selectParentFromSelection];
- }
- }
- else if ([[tabViewItem identifier] isEqualToString:SPGlobalPrivilegesTabIdentifier] ||
- [[tabViewItem identifier] isEqualToString:SPResourcesTabIdentifier] ||
- [[tabViewItem identifier] isEqualToString:SPSchemaPrivilegesTabIdentifier]) {
- // If the tab is either Global Privs or Resources and we have a user
- // selected, then open tree and select first child node.
- [self _selectFirstChildOfParentNode];
- }
-}
-
-#pragma mark -
-#pragma mark Outline view Delegate Methods
-
-- (void)outlineView:(NSOutlineView *)olv willDisplayCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
-{
- if ([cell isKindOfClass:[ImageAndTextCell class]])
- {
- // Determines which Image to display depending on parent or child object
- NSImage *image = [[NSImage imageNamed:[(SPUserMO *)[item representedObject] parent] ? NSImageNameNetwork : NSImageNameUser] retain];
-
- [image setSize:(NSSize){16, 16}];
- [(ImageAndTextCell *)cell setImage:image];
- [image release];
- }
-}
-
-- (BOOL)outlineView:(NSOutlineView *)olv isGroupItem:(id)item
-{
- return NO;
-}
-
-- (BOOL)outlineView:(NSOutlineView *)olv shouldSelectItem:(id)item
-{
- return YES;
-}
-
-- (BOOL)outlineView:(NSOutlineView *)olv shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item
-{
- return ([[[item representedObject] children] count] == 0);
-}
-
-- (void)outlineViewSelectionDidChange:(NSNotification *)notification
-{
- if ([[treeController selectedObjects] count] == 0) return;
-
- id selectedObject = [[treeController selectedObjects] objectAtIndex:0];
-
- if ([selectedObject parent] == nil && !([[[tabView selectedTabViewItem] identifier] isEqualToString:@"General"])) {
- [tabView selectTabViewItemWithIdentifier:SPGeneralTabIdentifier];
- }
- else {
- if ([selectedObject parent] != nil && [[[tabView selectedTabViewItem] identifier] isEqualToString:@"General"]) {
- [tabView selectTabViewItemWithIdentifier:SPGlobalPrivilegesTabIdentifier];
- }
- }
-
- if ([selectedObject parent] != nil && [selectedObject host] == nil)
- {
- [selectedObject setValue:@"%" forKey:@"host"];
- [outlineView reloadItem:selectedObject];
- }
-
- [schemasTableView deselectAll:nil];
- [schemasTableView setNeedsDisplay:YES];
- [grantedTableView deselectAll:nil];
- [availableTableView deselectAll:nil];
-}
-
-- (BOOL)selectionShouldChangeInOutlineView:(NSOutlineView *)olv
-{
- if ([[treeController selectedObjects] count] > 0)
- {
- id selectedObject = [[treeController selectedObjects] objectAtIndex:0];
-
- // Check parents
- if ([selectedObject valueForKey:@"parent"] == nil)
- {
- NSString *name = [selectedObject valueForKey:@"user"];
- NSArray *results = [self _fetchUserWithUserName:name];
-
- if ([results count] > 1) {
- NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Duplicate User", @"duplicate user message")
- defaultButton:NSLocalizedString(@"OK", @"OK button")
- alternateButton:nil
- otherButton:nil
- informativeTextWithFormat:NSLocalizedString(@"A user with the name '%@' already exists", @"duplicate user informative message"), name];
- [alert runModal];
-
- return NO;
- }
- }
- else
- {
- NSArray *children = [selectedObject valueForKeyPath:@"parent.children"];
- NSString *host = [selectedObject valueForKey:@"host"];
-
- for (NSManagedObject *child in children)
- {
- if (![selectedObject isEqual:child] && [[child valueForKey:@"host"] isEqualToString:host])
- {
- NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Duplicate Host", @"duplicate host message")
- defaultButton:NSLocalizedString(@"OK", @"OK button")
- alternateButton:nil
- otherButton:nil
- informativeTextWithFormat:NSLocalizedString(@"A user with the host '%@' already exists", @"duplicate host informative message"), host];
-
- [alert runModal];
-
- return NO;
- }
- }
- }
- }
-
- return YES;
-}
-
-@end