Browse Source

Even more operations...

Yentl Van Tendeloo 8 years ago
parent
commit
6946dac949
1 changed files with 180 additions and 10 deletions
  1. 180 10
      core/core_algorithm.alc

+ 180 - 10
core/core_algorithm.alc

@@ -31,7 +31,7 @@ Void function main():
 	core_model = instantiate_node(core, "Model", "")
 	instantiate_attribute(core, core_model, "name", "CoreFormalism")
 	instantiate_attribute(core, core_model, "location", core_location)
-	instantiate_attribute(core, core_model, "permissions", "330")
+	instantiate_attribute(core, core_model, "permissions", "220")
 
 	// Make necessary links for the formalism to the owners
 	instantiate_link(core, "group", "", core_model, admin_group)
@@ -80,7 +80,7 @@ Boolean function allow_read(user_id : String, model_id : String):
 		// Check permissions
 		String permission
 		permission = string_get(read_attribute(core, model_id, "permissions"), get_relation_to_model(user_id, model_id))
-		if (bool_or(permission == "1", permission == "3")):
+		if (bool_or(permission == "1", permission == "2")):
 			return True!
 		else:
 			return False!
@@ -93,7 +93,7 @@ Boolean function allow_write(user_id : String, model_id : String):
 		// Check permissions
 		String permission
 		permission = string_get(read_attribute(core, model_id, "permissions"), get_relation_to_model(user_id, model_id))
-		if (bool_or(permission == "2", permission == "3")):
+		if (permission == "2"):
 			return True!
 		else:
 			return False!
@@ -166,14 +166,15 @@ Void function user_function_skip_init(user_id : String)
 			output("    transformation_execute			-- TODO")
 			output("")
 			output("Model permission operations")
-			output("    permission_modify				-- TODO")
-			output("    permission_owner				-- TODO")
-			output("    permission_group				-- TODO")
+			output("    permission_modify				-- Change model permissions")
+			output("    permission_owner				-- Change model owner")
+			output("    permission_group				-- Change model group")
 			output("")
 			output("Group operations")
-			output("    group_create					-- TODO")
-			output("    group_delete					-- TODO")
-			output("    group_owner						-- Change group owner")
+			output("    group_create					-- Create a group"))
+			output("    group_delete					-- Delete a group")
+			output("    group_owner_add					-- Add group owner")
+			output("    group_owner_delete				-- Remove group owner")
 			output("    group_join						-- Add someone to your group")
 			output("    group_kick						-- Kick someone from your group")
 			output("    group_list						-- List all groups you are a member of")
@@ -214,7 +215,7 @@ Void function user_function_skip_init(user_id : String)
 						new_model_id = instantiate_node(core, "Model", "")
 						instantiate_attribute(core, new_model_id, "name", name)
 						instantiate_attribute(core, new_model_id, "location", location)
-						instantiate_attribute(core, new_model_id, "permissions", "300")
+						instantiate_attribute(core, new_model_id, "permissions", "200")
 						instantiate_link(core, "owner", "", new_model_id, user_id)
 						instantiate_link(core, "instanceOf", "", new_model_id, type_id)
 						output("Meta-info correctly set!")
@@ -284,6 +285,175 @@ Void function user_function_skip_init(user_id : String)
 				type = read_attribute(core, set_pop(allAssociationDestinations(core, m, "instanceOf")), "name")
 				output((((((((((("  " + permissions) + "  ") + owner) + " ") + group) + "    ") + size) + "   ") + name) + " : ") + type)
 
+		elif (cmd == "permission_modify"):
+			String permissions
+			String model_id
+
+			output("Which model do you want to change permissions of?")
+			model_id = get_model_id(input())
+			if (model_id != ""):
+				if (get_relation_to_model(user_id, model_id) == 0):
+					output("New permissions?")
+					permissions = input()
+
+					Boolean fail
+					Integer i
+					i = 0
+					if (string_length(permissions) != 3):
+						fail = True
+					while (bool_and(bool_not(fail), i < 3)):
+						permission = cast_s2i(string_read(permissions, i))
+						if (bool_or(permission < 0, permission > 2)):
+							fail = True
+
+					if (bool_not(fail)):
+						unset_attribute(core, model_id, "permissions")
+						instantiate_attribute(core, model_id, "permissions", permissions)
+					else:
+						output("Permissions must be a string of three characters with each character being a digit between 0 and 2")
+				else:
+					output("Permission denied!")
+			else:
+				output("No such model!")
+			
+		elif (cmd == "permission_owner"):
+			String permissions
+			String model_id
+			String user_id
+
+			output("Which model do you want to change owner of?")
+			model_id = get_model_id(input())
+			if (model_id != ""):
+				if (get_relation_to_model(user_id, model_id) == 0):
+					output("New owner?")
+					user_id = get_user_id(input())
+					if (user_id != ""):
+						model_delete_element(set_pop(allOutgoingAssociationInstances(core, model_id, "owner")))
+						instantiate_link(core, "owner", "", model_id, user_id)
+					else:
+						output("No such user!")
+				else:
+					output("Permission denied!")
+			else:
+				output("No such model!")
+
+		elif (cmd == "permission_group"):
+			String permissions
+			String model_id
+			String group_id
+
+			output("Which model do you want to change permissions of?")
+			model_id = get_model_id(input())
+			if (model_id != ""):
+				if (get_relation_to_model(user_id, model_id) == 0):
+					output("New group?")
+					group_id = get_group_id(input())
+					if (group_id != ""):
+						model_delete_element(set_pop(allOutgoingAssociationInstances(core, model_id, "group")))
+						instantiate_link(core, "group", "", model_id, group_id)
+					else:
+						output("No such group!")
+				else:
+					output("Permission denied!")
+			else:
+				output("No such model!")
+
+		elif (cmd == "group_create"):
+			// Create a new group and become its owner
+			String group_id
+			String name
+
+			output("Which group do you want to create?")
+			name = input()
+			group_id = get_group_id(name)
+			if (group_id == ""):
+				group_id = instantiate_node(core, "Group", "")
+				instantiate_attribute(core, group_id, "name", name)
+				instantiate_link(core, "belongsTo", "", user_id, group_id)
+				isntantiate_link(core, "owner", "", group_id, user_id)
+				output("Group created!")
+			else:
+				output("Group already exists")
+
+		elif (cmd == "group_delete"):
+			// Delete an existing group
+			String group_id
+			String name
+
+			output("Which group do you want to delete?")
+			name = input()
+			group_id = get_group_id(name)
+			if (group_id != ""):
+				if (allow_group_modify(user_id, group_id)):
+					model_delete_element(core, group_id)
+				else:
+					output("Permission denied")
+			else:
+				output("No such group")
+
+		elif (cmd == "group_owner_add"):
+			// Add an owner to your group
+			String group_id
+
+			output("Which group do you want to add an owner to?")
+			group_id = get_group_id(input())
+			if (group_id != ""):
+				if (allow_group_modify(user_id, group_id)):
+					output("Which user do you want to make an owner?")
+					other_user_id = get_user_id(input())
+					if (other_user_id != ""):
+						Element overlap
+
+						overlap = set_overlap(allIncomingAssociationInstances(core, user_id, "owner"), allOutgoingAssociationInstances(core, group_id, "owner"))
+						if (read_nr_out(overlap) == 0):
+							instantiate_link(core, "owner", "", group_id, user_id)
+
+							overlap = set_overlap(allOutgoingAssociationInstances(core, user_id, "belongsTo"), allIncomingAssociationInstances(core, group_id, "belongsTo"))
+
+							if (read_nr_out(overlap) == 0):
+								instantiate_link(core, "belongsTo", "", user_id, group_id)
+
+							output("New owner added to group!")
+						
+						else:
+							output("User is already an owner!")
+					else:
+						output("No such user")
+				else:
+					output("Permission denied!")
+			else:
+				output("No such group")
+
+		elif (cmd == "group_owner_delete"):
+			// Remove an owner from your group
+			String group_id
+
+			output("Which group do you want to disown someone from?")
+			group_id = get_group_id(input())
+			if (group_id != ""):
+				if (allow_group_modify(user_id, group_id)):
+					output("Which user do you want to disown?")
+					other_user_id = get_user_id(input())
+					if (other_user_id != ""):
+						Element overlap
+
+						overlap = set_overlap(allOutgoingAssociationInstances(core, user_id, "belongsTo"), allIncomingAssociationInstances(core, group_id, "belongsTo"))
+						if (read_nr_out(overlap) > 0):
+							overlap = set_overlap(allIncomingAssociationInstances(core, user_id, "owner"), allOutgoingAssociationInstances(core, group_id, "owner"))
+							if (read_nr_out(overlap) > 0):
+								model_delete_element(core, set_pop(overlap))
+								output("Disowned group from user!")
+							else:
+								output("User is not even an owner of the group!")
+						else:
+							output("User is not even a member of the group!")
+					else:
+						output("No such user")
+				else:
+					output("Permission denied!")
+			else:
+				output("No such group")
+
 		elif (cmd == "group_join"):
 			// Add someone to your group
 			String group_id