You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by el...@apache.org on 2017/06/22 20:21:02 UTC

[09/17] incubator-trafficcontrol git commit: UI working

UI working


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/2976a25f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/2976a25f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/2976a25f

Branch: refs/heads/master
Commit: 2976a25fb94bf91f5f2e04c6b3bc0a07a7053e3a
Parents: 5a30eaf
Author: Derek Gelinas <de...@cable.comcast.com>
Authored: Thu Jun 1 18:24:58 2017 +0000
Committer: Jeff Elsloo <je...@cable.comcast.com>
Committed: Thu Jun 22 14:18:17 2017 -0600

----------------------------------------------------------------------
 .../app/lib/Schema/Result/SteeringTarget.pm     |  31 +-
 .../app/lib/Schema/Result/SteeringView.pm       |   9 +-
 traffic_ops/app/lib/UI/Steering.pm              | 300 +++++++------------
 .../app/templates/steering/index.html.ep        |  36 +--
 4 files changed, 155 insertions(+), 221 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/2976a25f/traffic_ops/app/lib/Schema/Result/SteeringTarget.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/SteeringTarget.pm b/traffic_ops/app/lib/Schema/Result/SteeringTarget.pm
index a11454f..ec67170 100644
--- a/traffic_ops/app/lib/Schema/Result/SteeringTarget.pm
+++ b/traffic_ops/app/lib/Schema/Result/SteeringTarget.pm
@@ -37,7 +37,7 @@ __PACKAGE__->table("steering_target");
 =head2 value
 
   data_type: 'bigint'
-  is_nullable: 1
+  is_nullable: 0
 
 =head2 last_updated
 
@@ -48,9 +48,9 @@ __PACKAGE__->table("steering_target");
 
 =head2 type
 
-  data_type: 'text'
-  default_value: 'weight'
-  is_nullable: 1
+  data_type: 'bigint'
+  is_foreign_key: 1
+  is_nullable: 0
 
 =cut
 
@@ -60,7 +60,7 @@ __PACKAGE__->add_columns(
   "target",
   { data_type => "bigint", is_nullable => 0 },
   "value",
-  { data_type => "bigint", is_nullable => 1 },
+  { data_type => "bigint", is_nullable => 0 },
   "last_updated",
   {
     data_type     => "timestamp with time zone",
@@ -69,7 +69,7 @@ __PACKAGE__->add_columns(
     original      => { default_value => \"now()" },
   },
   "type",
-  { data_type => "text", default_value => "weight", is_nullable => 1 },
+  { data_type => "bigint", is_foreign_key => 1, is_nullable => 0 },
 );
 
 =head1 PRIMARY KEY
@@ -118,9 +118,24 @@ __PACKAGE__->belongs_to(
   { is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" },
 );
 
+=head2 type
+
+Type: belongs_to
+
+Related object: L<Schema::Result::Type>
+
+=cut
+
+__PACKAGE__->belongs_to(
+  "type",
+  "Schema::Result::Type",
+  { id => "type" },
+  { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
+);
+
 
-# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-05-31 19:50:30
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:iusMfHEMfTfB8egLQfhOJw
+# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-05-31 20:31:43
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:DYSNby1kQgL/sEtaCwOgbw
 
 
 # You can replace this text with custom code or comments, and it will be preserved on regeneration

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/2976a25f/traffic_ops/app/lib/Schema/Result/SteeringView.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/SteeringView.pm b/traffic_ops/app/lib/Schema/Result/SteeringView.pm
index f353b8c..eef4ab8 100644
--- a/traffic_ops/app/lib/Schema/Result/SteeringView.pm
+++ b/traffic_ops/app/lib/Schema/Result/SteeringView.pm
@@ -30,9 +30,10 @@ __PACKAGE__->table("SteeringView");
 __PACKAGE__->result_source_instance->is_virtual(1);
 
 __PACKAGE__->result_source_instance->view_definition(
-    "select s.xml_id as steering_xml_id, s.id as steering_id, t.xml_id as target_xml_id, t.id as target_id, value, steering_target.type from steering_target
+    "select s.xml_id as steering_xml_id, s.id as steering_id, t.xml_id as target_xml_id, t.id as target_id, value, tp.name as type from steering_target
     join deliveryservice s on s.id = steering_target.deliveryservice
-    join deliveryservice t on t.id = steering_target.target"
+    join deliveryservice t on t.id = steering_target.target
+    join type tp on tp.id = steering_target.type"
 );
 
 __PACKAGE__->add_columns(
@@ -45,9 +46,9 @@ __PACKAGE__->add_columns(
     "target_id",
     { data_type => "integer", is_nullable => 0, size => 11 },
     "value",
-    { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 1 },
+    { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 0 },
     "type",
-    { data_type => "text", is_nullable => 1 }
+    { data_type => "integer", is_nullable => 0 }
 );
 
 1;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/2976a25f/traffic_ops/app/lib/UI/Steering.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/UI/Steering.pm b/traffic_ops/app/lib/UI/Steering.pm
index 723fe1c..2bf80ba 100644
--- a/traffic_ops/app/lib/UI/Steering.pm
+++ b/traffic_ops/app/lib/UI/Steering.pm
@@ -27,74 +27,89 @@ use Scalar::Util qw(looks_like_number);
 use JSON;
 use POSIX qw(strftime);
 use Date::Parse;
-use Data::Dumper;
 
 sub index {
 	my $self  = shift;
 	my $ds_id = $self->param('id');
-	#print STDERR Dumper($ds_id);
-
-	&navbarpage($self);
-
-	# select * from steering_target where deliveryservice = ds_id;
-	#my $steering = { ds_id => $ds_id, ds_name => $self->get_ds_name($ds_id) };
 	my $steering_obj;
 	my @steering;
-	my $st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => "weight" }, { order_by => 'value DESC' } );
-	my $i = 0;
-	if ( $st_rs > 0 ) {
-		while ( my $row = $st_rs->next ) {
-			$steering_obj->{"target_$i"}->{'target_id'} = $row->target;
-			$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $row->target );
-			$steering_obj->{"target_$i"}->{'target_value'}   = $row->value;
-			if (!defined($steering_obj->{"target_$i"}->{'target_value'})) { $steering_obj->{"target_$i"}->{'target_value'} = 0; }
-			$steering_obj->{"target_$i"}->{'target_type'}   = $row->type;
-			#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_type'});
-			push ( @steering, $steering_obj->{"target_$i"} );
+
+	my $t_rs = $self->db->resultset('Type')->search( { use_in_table => 'steering_target'} );
+	my $type_names;
+	my $type_ids;
+
+	if ( $t_rs > 0 ) {
+		while ( my $row = $t_rs->next ) {
+			$type_names->{$row->id} = $row->name;
+			$type_ids->{$row->name} = $row->id;
+		}
+	}
+
+	my $weight_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => $type_ids->{'STEERING_WEIGHT'} }, { order_by => 'value DESC' } );
+
+	if ( $weight_rs > 0 ) {
+		my $i = 0;
+		while ( my $row = $weight_rs->next ) {
+			my $t = $steering_obj->{"target_$i"};
+			$t->{'target_id'} = $row->target;
+			$t->{'target_name'}   = $self->get_ds_name( $row->target );
+			$t->{'target_value'}   = $row->value;
+			if (!defined($t->{'target_value'})) { $t->{'target_value'} = 0; }
+			$t->{'target_type'}   = $row->type->id;
+			push ( @steering, $t );
 			$i++;
 		}
+		
 	}
-	$st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => "order" }, { order_by => 'value ASC' } );
-	if ( $st_rs > 0 ) {
-		while ( my $row = $st_rs->next ) {
-			$steering_obj->{"target_$i"}->{'target_id'} = $row->target;
-			$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $row->target );
-			$steering_obj->{"target_$i"}->{'target_value'}   = $row->value;
-			if (!defined($steering_obj->{"target_$i"}->{'target_value'})) { $steering_obj->{"target_$i"}->{'target_value'} = 0; }
-			$steering_obj->{"target_$i"}->{'target_type'}   = $row->type;
-			#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_type'});
-			push ( @steering, $steering_obj->{"target_$i"} );
+	my $order_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => $type_ids->{'STEERING_ORDER'} }, { order_by => 'value ASC' } );
+
+	if ( $order_rs > 0 ) {
+		my $i = 0;
+		while ( my $row = $order_rs->next ) {
+			my $t = $steering_obj->{"target_$i"};
+			$t->{'target_id'} = $row->target;
+			$t->{'target_name'}   = $self->get_ds_name( $row->target );
+			$t->{'target_value'}   = $row->value;
+			if (!defined($t->{'target_value'})) { $t->{'target_value'} = 0; }
+			$t->{'target_type'}   = $row->type->id;
+			push ( @steering, $t );
 			$i++;
 		}
+		
 	}
+	
+	&navbarpage($self);
 
 	$self->stash(
 		ds_id          => $ds_id,
 		ds_name        => $self->get_ds_name($ds_id),
 		steering       => \@steering,
-		ds_data        => $self->get_deliveryservices(),
+		ds_data        => $self->get_deliveryservices($ds_id),
+		types          => $type_names,
 		fbox_layout    => 1
 	);
 }
 
-sub get_target_weight{
-	my $self = shift;
-	my $ds_id = shift;
-	my $target_id = shift;
-	my $weight = $self->db->resultset('SteeringTarget')->search( { -and => [target => $target_id, deliveryservice => $ds_id] } )->get_column('weight')->single();
-	return $weight;
-}
-
 sub get_ds_name {
 	my $self  = shift;
 	my $ds_id = shift;
 	return $self->db->resultset('Deliveryservice')->search( { id => $ds_id } )->get_column('xml_id')->single();
 }
 
+sub get_cdn {
+	my $self = shift;
+	my $ds_id = shift;
+	return $self->db->resultset('Deliveryservice')->search( { id => $ds_id } )->get_column('cdn_id')->single();
+
+}
+
 sub get_deliveryservices {
 	my $self = shift;
+	my $ds_id = shift;
+	my $cdn_id = $self->get_cdn($ds_id);
 	my %ds_data;
-	my $rs = $self->db->resultset('Deliveryservice')->search(undef, { prefetch => [ 'type' ] });
+	#search for only the delivery services that match the CDN ID of the supplied delivery service.
+	my $rs = $self->db->resultset('Deliveryservice')->search({ cdn_id => $cdn_id } , { prefetch => [ 'type' ] });
 	while ( my $row = $rs->next ) {
 		if ( $row->type->name =~ m/^HTTP/ ) {
 			$ds_data{ $row->id } = $row->xml_id;
@@ -104,44 +119,17 @@ sub get_deliveryservices {
 	return \%ds_data;
 }
 
-sub testupdate {
-	my $self = shift;
-	my $ds_id = $self->param('id');
-	my $st = $self->param('st');
-	my @target_id = $self->param('st.target_id');
-	my @target_value = $self->param('st.target_value');
-	my @target_type = $self->param('st.target_type');
-	my @target_delete = $self->param('st.target_delete');
-	my @all = $self->req->params();
-	print STDERR Dumper(\@all);
-	print STDERR Dumper(\@target_id);
-	print STDERR Dumper(\@target_value);
-	print STDERR Dumper(\@target_type);
-	foreach my $i (0 .. $#target_id) {
-	#foreach my $id, $weight (@{$st->{'target_id'}}, @{$st->{'target_weight'}}) {
-		print STDERR Dumper($target_id[$i]);
-		print STDERR Dumper($target_value[$i]);
-		print STDERR Dumper($target_type[$i]);
-	}
-	$self->redirect_to("/ds/$ds_id/steering");
-}
-
 sub update {
 	my $self = shift;
 	my $ds_id = $self->param('id');
 	my @target_id = $self->param('st.target_id');
 	my @target_value = $self->param('st.target_value');
 	my @target_type = $self->param('st.target_type');
-	#my $st = $self->param('st');
 	my @targets;
 	my $steering_obj;
 	foreach my $i (0 .. $#target_id) {
-	#foreach my $id (@{$st->{'target_id'}}) {
-		#print STDERR Dumper($i);
-		#print STDERR Dumper(@target_id[$i]);
-		#print STDERR Dumper(@target_weight[$i]);
+		#look for and remove the blank entries - this filters out the deleted entries and the unused new target entry.
 		if ( $target_id[$i] eq '' ) {
-			#print STDERR Dumper("This one is blank");
 			next;
 		}
 		if ( $target_value[$i] eq "" ) { $target_value[$i] = 0 };
@@ -150,8 +138,6 @@ sub update {
 		$steering_obj->{"target_$i"}->{'target_type'} = $target_type[$i];
 		push ( @targets, $steering_obj->{"target_$i"} );
 	}
-	print STDERR Dumper(\@targets);
-	#if ( 1 ==1 ) {
 	if ( $self->is_valid(\@targets) ) {
 		#delete current entries
 		my $delete = $self->db->resultset('SteeringTarget')
@@ -161,9 +147,7 @@ sub update {
 		}
 		
 		#add new entries
-		#my $i = 0;
 		foreach my $i ( keys @targets ) {
-			print STDERR Dumper($targets[$i]->{'target_id'});
 			my $insert = $self->db->resultset('SteeringTarget')->create(
 				{   deliveryservice => $ds_id,
 					target          => $targets[$i]->{'target_id'},
@@ -180,42 +164,60 @@ sub update {
 				. "!" );
 	}
 	else {
-		print STDERR Dumper("at else somehow");
-		my $steering_obj;
+		my $steering;
 		my @steering;
-		my $st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => "weight" }, { order_by => 'value DESC' } );
-		my $i = 0;
-		if ( $st_rs > 0 ) {
-			while ( my $row = $st_rs->next ) {
-				$steering_obj->{"target_$i"}->{'target_id'} = $row->target;
-				$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $row->target );
-				$steering_obj->{"target_$i"}->{'target_value'}   = $row->value;
-				if (!defined($steering_obj->{"target_$i"}->{'target_value'})) { $steering_obj->{"target_$i"}->{'target_value'} = 0; }
-				$steering_obj->{"target_$i"}->{'target_type'}   = $row->type;
-				#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_type'});
-				push ( @steering, $steering_obj->{"target_$i"} );
+
+		my $t_rs = $self->db->resultset('Type')->search( { use_in_table => 'steering_target'} );
+		my $type_names;
+		my $type_ids;
+	
+		if ( $t_rs > 0 ) {
+			while ( my $row = $t_rs->next ) {
+				$type_names->{$row->id} = $row->name;
+				$type_ids->{$row->name} = $row->id;
+			}
+		}
+	
+		my $weight_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => $type_ids->{'STEERING_WEIGHT'} }, { order_by => 'value DESC' } );
+	
+		if ( $weight_rs > 0 ) {
+			my $i = 0;
+			while ( my $row = $weight_rs->next ) {
+				my $t = $steering_obj->{"target_$i"};
+				$t->{'target_id'} = $row->target;
+				$t->{'target_name'}   = $self->get_ds_name( $row->target );
+				$t->{'target_value'}   = $row->value;
+				if (!defined($t->{'target_value'})) { $t->{'target_value'} = 0; }
+				$t->{'target_type'}   = $row->type->id;
+				push ( @steering, $t );
 				$i++;
 			}
+			
 		}
-		$st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => "order" }, { order_by => 'value ASC' } );
-		if ( $st_rs > 0 ) {
-			while ( my $row = $st_rs->next ) {
-				$steering_obj->{"target_$i"}->{'target_id'} = $row->target;
-				$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $row->target );
-				$steering_obj->{"target_$i"}->{'target_value'}   = $row->value;
-				if (!defined($steering_obj->{"target_$i"}->{'target_value'})) { $steering_obj->{"target_$i"}->{'target_value'} = 0; }
-				$steering_obj->{"target_$i"}->{'target_type'}   = $row->type;
-				#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_type'});
-				push ( @steering, $steering_obj->{"target_$i"} );
+		my $order_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id, type => $type_ids->{'STEERING_ORDER'} }, { order_by => 'value ASC' } );
+	
+		if ( $order_rs > 0 ) {
+			my $i = 0;
+			while ( my $row = $order_rs->next ) {
+				my $t = $steering_obj->{"target_$i"};
+				$t->{'target_id'} = $row->target;
+				$t->{'target_name'}   = $self->get_ds_name( $row->target );
+				$t->{'target_value'}   = $row->value;
+				if (!defined($t->{'target_value'})) { $t->{'target_value'} = 0; }
+				$t->{'target_type'}   = $row->type->id;
+				push ( @steering, $t );
 				$i++;
 			}
+			
 		}
+		
 		&stash_role($self);
 		$self->stash(
 			ds_id          => $ds_id,
 			ds_name        => $self->get_ds_name($ds_id),
 			steering       => \@steering,
 			ds_data        => $self->get_deliveryservices(),
+			types          => $type_names,
 			fbox_layout    => 1
 		);
 		$self->render("steering/index");
@@ -224,113 +226,33 @@ sub update {
 	$self->redirect_to("/ds/$ds_id/steering");
 }
 
-sub old_update {
-	my $self  = shift;
-	my $ds_id = $self->param('id');
-	my $tid1  = $self->param('steering.target_id_1');
-	my $tid2  = $self->param('steering.target_id_2');
-	my $tid1_weight = $self->param('steering.target_id_1_weight');
-	my $tid2_weight = $self->param('steering.target_id_2_weight');
-	if ( $tid1_weight eq "" ) { $tid1_weight = 0; }
-	if ( $tid2_weight eq "" ) { $tid2_weight = 0; }
-	if ( $self->is_valid() ) {
-		my $targets;
-		$targets->{$tid1} = $tid1_weight;
-		$targets->{$tid2} = $tid2_weight;
-		
-
-		#delete current entries
-		my $delete = $self->db->resultset('SteeringTarget')
-			->search( { deliveryservice => $ds_id } );
-		if ( defined($delete) ) {
-			$delete->delete();
-		}
-
-		#add new entries
-		foreach my $target ( keys %$targets ) {
-			my $insert = $self->db->resultset('SteeringTarget')->create(
-				{   deliveryservice => $ds_id,
-					target          => $target,
-					weight          => $targets->{$target},
-				}
-			);
-
-			$insert->insert();
-		}
-
-		$self->flash(
-			      message => "Successfully saved steering assignments for "
-				. $self->get_ds_name($ds_id)
-				. "!" );
-
-		$self->redirect_to("/ds/$ds_id/steering");
-	}
-	else {
-		&stash_role($self);
-		my $target_name_1;
-		my $target_name_2;
-		my $target_id_1_weight;
-		my $target_id_2_weight;
-		if ($tid1 ) {
-			$target_name_1 = $self->get_ds_name($tid1);
-			$target_id_1_weight = $self->get_target_weight( $ds_id, $tid1 );
-		}
-		if ($tid2 ) {
-			$target_name_2 = $self->get_ds_name($tid2);
-			$target_id_2_weight = $self->get_target_weight( $ds_id, $tid2 );
-		}
-		$self->stash(
-			steering => {
-				ds_id           => $ds_id,
-				ds_name         => $self->get_ds_name($ds_id),
-				target_id_1     => $tid1,
-				target_id_2     => $tid2,
-				target_name_1   => $target_name_1,
-				target_name_2   => $target_name_2,
-				target_id_1_weight => $target_id_1_weight,
-				target_id_2_weight => $target_id_2_weight
-			},
-			ds_data        => $self->get_deliveryservices(),
-			fbox_layout    => 1
-		);
-		$self->render("steering/index");
-	}
-}
 
 sub is_valid {
 	my $self  = shift;
 	my @targets = @{$_[0]};
-	my $last_cdn;
-	
+	my %tracker;
+
 	foreach my $i ( keys @targets ) {
-		print STDERR Dumper($targets[$i]->{'target_id'});
-		my $cdn = $self->get_ds_cdn( $targets[$i]->{'target_id'} );
-		if ( defined($last_cdn) ) {
-			if ( $cdn == $last_cdn ) {
-				next;
-			}
-			else { 
-				$self->flash(message => "Target Deliveryservices must be in the same CDN!" );
+		my $t = $targets[$i];
+		my $t_name = $self->db->resultset('Type')->search( { id => "$t->{'target_type'}" } )->get_column('name')->single();
+		if ( $t_name eq "STEERING_ORDER" && $t->{'target_value'} ne int($t->{'target_value'})) {
+			$self->flash(message => "STEERING_ORDER values must be integers." );
+			return;
+		}
+		elsif ( $t_name eq "STEERING_WEIGHT" && ( $t->{'target_value'} ne int($t->{'target_value'}) || ($t->{'target_value'} < 0 ) ) )  {
+			$self->flash(message => "STEERING_WEIGHT values must be integers greater than 0." );
+			return;
+		}
+		if (exists($t->{'target_id'})) {
+			$tracker{$t->{'target_id'}}++;
+			if ( $tracker{$t->{'target_id'}} > 1 ) {
+				$self->flash(message => "Target delivery services must be unique." );
 				return;
 			}
 		}
-		else {
-			$last_cdn = $cdn;
-			next;
-		}
-		
 	}
 
 	return $self->valid;
-
-}
-
-
-sub get_ds_cdn {
-	my $self  = shift;
-	my $ds_id = shift;
-	my $ds = $self->db->resultset('Deliveryservice')->search( { 'me.id' => $ds_id } )->single();
-	return $ds->cdn_id;
 }
 
 1;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/2976a25f/traffic_ops/app/templates/steering/index.html.ep
----------------------------------------------------------------------
diff --git a/traffic_ops/app/templates/steering/index.html.ep b/traffic_ops/app/templates/steering/index.html.ep
index 7c112c4..91b1f8b 100644
--- a/traffic_ops/app/templates/steering/index.html.ep
+++ b/traffic_ops/app/templates/steering/index.html.ep
@@ -81,10 +81,10 @@
 						<% my $i = 0; %>
 						<% foreach my $st (@{$steering}) { %>
 							<div id="target_<%= $i %>" style="visibility: visible">
-							<div style="margin-left: 20px;">
+							<div style="margin-left: 0px;">
 							<h4>Target #  <%= $i+1; %></h4>
 							</div>
-							<div style="margin-left: 30px;">
+							<div style="margin-left: 2px;">
 								<% unless (field('st.target_id')->valid) { %>
 									<span class="field-with-error"><%= field('st.target_id')->error %></span><br>
 								<% } %>
@@ -100,41 +100,36 @@
 										<option value="<%=$id%>"><%=$ds_data->{$id}%></option>
 									<% } %>
 								</select>
-								<span style="display:inline-block; width: 10px;"></span>
+								<span style="display:inline-block; width: 5px;"></span>
 								<% unless (field('st.target_type')->valid) { %>
 								<span class="field-with-error"><%= field('st.target_type')->error %></span><br><br>
 							<% } %>
 							%= label_for 'st.target_type' => ' Type: ', class => 'label'
 							<select style="max-width:250px" name="st.target_type">
-							<option value="<%=$st->{target_type}%>" selected><%=$st->{target_type}%></option>
-							<% if ( $st->{target_type} =~ /weight/ ) { %>
-								<option value="order">order</option>
-							<% } elsif ( $st->{target_type} =~ /order/ ) { %>
-								<option value="weight">weight</option>
-							<% } else { %>
-								<option value="order">order</option>
-								<option value="weight">weight</option>
+							<option value="<%=$st->{target_type}%>" selected><%=$types->{$st->{target_type}}%></option>
+							<% foreach my $type (keys $types) { %>
+								<option value="<%= $type %>"><%= $types->{$type} %></option>
 							<% } %>
 							</select>
-							<span style="display:inline-block; width: 10px;"></span>
+							<span style="display:inline-block; width: 5px;"></span>
 								<% unless (field('st.target_value')->valid) { %>
 								<span class="field-with-error"><%= field('st.target_value')->error %></span><br><br>
 							<% } %>
 							%= label_for 'st.target_value' => 'Value: ', class => 'label'
 							<input type="text" style="max-width:25px; text-align:right" name="st.target_value" value = "<%= $st->{target_value} %>">
-							<span style="display:inline-block; width: 10px;"></span>
+							<span style="display:inline-block; width: 5px;"></span>
 							<!-- <a id="deleteTarget" href="">Delete Target</a> -->
-							<input type="button" onclick="changeText('st.target_id_<%= $i %>', 'target_<%= $i %>', '<%=$st->{target_name}%>')" value="Delete Target">
+							<input type="button" onclick="changeText('st.target_id_<%= $i %>', 'target_<%= $i %>', '<%=$st->{target_name}%>')" value="Delete">
 							<br>
 							<% $i++; %>
 							</div>
 							</div><br>
 						<% } %>
 						<div id="toggleText" style="visibility: hidden">
-						<div style="margin-left: 20px;">
+						<div style="margin-left: 0px;">
 						<h4>New Target</h4>
 						</div>
-						<div style="margin-left: 30px;">
+						<div style="margin-left: 2px;">
 						<% unless (field('st.target_id')->valid) { %>
 									<span class="field-with-error"><%= field('st.target_id')->error %></span><br>
 								<% } %>
@@ -144,16 +139,17 @@
 								<% foreach my $id (sort{$ds_data->{$a} cmp $ds_data->{$b}} keys %$ds_data) { %>
 								<option value="<%=$id%>"><%=$ds_data->{$id}%></option><% } %>
 								</select>
-								<span style="display:inline-block; width: 10px;"></span>
+								<span style="display:inline-block; width: 5px;"></span>
 								<% unless (field('st.target_type')->valid) { %>
 								<span class="field-with-error"><%= field('st.target_type')->error %></span><br><br>
 							<% } %>
 							%= label_for 'st.target_type' => ' Type: ', class => 'label'
 							<select style="max-width:250px" name="st.target_type">
-								<option value="order">order</option>
-								<option value="weight" selected>weight</option>
+							<% foreach my $type (keys $types) { %>
+								<option value="<%= $type %>"><%= $types->{$type} %></option>
+							<% } %>
 							</select>
-							<span style="display:inline-block; width: 10px;"></span>
+							<span style="display:inline-block; width: 5px;"></span>
 								<% unless (field('st.target_value')->valid) { %>
 								<span class="field-with-error"><%= field('st.target_value')->error %></span><br><br>
 							<% } %>