]> ruin.nu Git - ndwebbie.git/commitdiff
Add sms sending to webbie
authorMichael Andreen <harv@ruin.nu>
Mon, 16 Jan 2017 21:42:22 +0000 (22:42 +0100)
committerMichael Andreen <harv@ruin.nu>
Mon, 16 Jan 2017 21:42:22 +0000 (22:42 +0100)
database/data/group_roles.sql
lib/NDWeb.pm
lib/NDWeb/Controller/Users.pm
root/lib/site/leftbar.tt2
root/src/users/sms.tt2 [new file with mode: 0644]

index 1496d770f4f437ee535f08f23aaf7ddd9e891ff3..0a512585a63074e501af2c7da900b9d1cad7c184 100644 (file)
@@ -31,6 +31,7 @@ INSERT INTO roles VALUES('textexport_alliance');
 INSERT INTO roles VALUES('stats_find_nick');
 INSERT INTO roles VALUES('members_defenders');
 INSERT INTO roles VALUES('stats_tags_all');
+INSERT INTO roles VALUES('users_sms');
 
 INSERT INTO group_roles (gid,role) VALUES(2,'member_menu');
 INSERT INTO group_roles (gid,role) VALUES(2,'attack_menu');
@@ -47,6 +48,7 @@ INSERT INTO group_roles (gid,role) VALUES(6,'calls_edit');
 INSERT INTO group_roles (gid,role) VALUES(6,'calls_leeches');
 INSERT INTO group_roles (gid,role) VALUES(6,'members_defenders');
 INSERT INTO group_roles (gid,role) VALUES('D','stats_tags_all');
+INSERT INTO group_roles (gid,role) VALUES('D','users_sms');
 
 INSERT INTO group_roles (gid,role) VALUES(4,'bc_menu');
 INSERT INTO group_roles (gid,role) VALUES(4,'raids_info');
@@ -83,6 +85,7 @@ INSERT INTO group_roles (gid,role) VALUES(1,'intel_member');
 INSERT INTO group_roles (gid,role) VALUES(1,'intel_naps');
 INSERT INTO group_roles (gid,role) VALUES(1,'textexport_alliance');
 INSERT INTO group_roles (gid,role) VALUES(1,'members_defenders');
+INSERT INTO group_roles (gid,role) VALUES('T','users_sms');
 
 INSERT INTO group_roles (gid,role) VALUES(3,'dc_menu');
 INSERT INTO group_roles (gid,role) VALUES(3,'bc_menu');
@@ -104,6 +107,9 @@ INSERT INTO group_roles (gid,role) VALUES(3,'intel_member');
 INSERT INTO group_roles (gid,role) VALUES(3,'intel_naps');
 INSERT INTO group_roles (gid,role) VALUES(3,'textexport_alliance');
 INSERT INTO group_roles (gid,role) VALUES(3,'members_defenders');
+INSERT INTO group_roles (gid,role) VALUES('H','users_sms');
+
+INSERT INTO group_roles (gid,role) VALUES('O','users_sms');
 
 INSERT INTO group_roles (gid,role) VALUES('R','stats_tags_all');
 
index 2cb66a0038e129e1033d9178f5f3e42d60747c3a..81a78fd6ff4e466c841fadbc3c91c0ffcf84a234 100644 (file)
@@ -88,6 +88,7 @@ __PACKAGE__->config( encoding => 'UTF-8');
 __PACKAGE__->setup();
 
 __PACKAGE__->deny_access_unless('/users',[qw/admin_users/]);
+__PACKAGE__->deny_access_unless('/users/sms',[qw/users_sms/]);
 __PACKAGE__->deny_access_unless('/alliances',[qw/alliances/]);
 __PACKAGE__->deny_access_unless('/alliances/resources',[qw/alliances_resources/]);
 __PACKAGE__->deny_access_unless('/graphs/alliancevsintel',[qw/graphs_intel/]);
index bdad4fc9b61c19dac0b1bb4b5bc7c0ee5a709866..efb48d3fd155e0e718c83f860a93a6dfd048662a 100644 (file)
@@ -188,6 +188,51 @@ sub postmail : Local {
        $c->res->redirect($c->uri_for('mail'));
 }
 
+sub sms : Local {
+       my ( $self, $c ) = @_;
+       my $dbh = $c->model;
+
+       $c->stash(ok => $c->flash->{ok});
+       $c->stash(error => $c->flash->{error});
+
+       my $query = $dbh->prepare(q{
+SELECT uid,username FROM users
+WHERE uid > 0 AND sms SIMILAR TO '\+\d+'
+       AND uid IN (SELECT uid FROM groupmembers WHERE gid = 'M')
+ORDER BY username
+               });
+       $query->execute;
+
+       $c->stash(users => $query->fetchall_arrayref({}) );
+
+       my $query = $dbh->prepare(q{
+SELECT u.username AS sender, COALESCE(r.username,'unknown?') AS receiver, number,
+       message, status, cost, to_char(time, 'YYYY-MM-DD HH24:MI:SS') AS time
+FROM users u
+       JOIN sms s USING (uid)
+       LEFT JOIN users r ON r.sms = '+' || s.number
+WHERE time > now() - '2 weeks'::interval
+ORDER BY time desc
+               });
+       $query->execute;
+       $c->stash(sms => $query->fetchall_arrayref({}));
+}
+
+sub postsms : Local {
+       my ( $self, $c ) = @_;
+       my $dbh = $c->model;
+
+       $c->req->parameters->{uid} = [$c->req->parameters->{uid}]
+               unless ref $c->req->parameters->{uid} eq 'ARRAY';
+
+       my $query = $dbh->prepare(q{INSERT INTO sms (uid,message,number)
+               (SELECT $1,$2, trim(leading '+' FROM sms) FROM users u WHERE uid = ANY ($3) AND sms SIMILAR TO '\+\d+' )});
+
+       $query->execute($c->user->id,$c->req->param('message'),$c->req->parameters->{uid});
+
+       $c->res->redirect($c->uri_for('sms'));
+}
+
 =head1 AUTHOR
 
 Micahel Andreen (harv@ruin.nu)
index 41b658d9fa4d9b12e41b73044dce607bdb75f81c..8dae00ea2902c53f246124b01b6d2fed997cc65d 100644 (file)
@@ -98,6 +98,7 @@
 [% IF c.check_user_roles("dc_menu") %]
 <p>DC menu</p>
 <ul class="linkbar">
+       <li><a href="/users/sms">Send SMS</a></li>
        <li><a href="/members/defenders">Available defenders</a></li>
        <li><a href="/calls/defleeches">Def Leeches</a></li>
        <li><a href="/calls/list">Active calls</a></li>
diff --git a/root/src/users/sms.tt2 b/root/src/users/sms.tt2
new file mode 100644 (file)
index 0000000..21a611b
--- /dev/null
@@ -0,0 +1,53 @@
+[% META title = 'SMS' %]
+
+<form action="postsms" method="post" id="sms"><fieldset class="forum-post">
+<legend>New SMS</legend>
+       <p><span id="recadd">Receiver(s): </span><select name="uid" multiple size="5">
+[% FOR u IN users %]
+               <option value="[% u.uid %]" [% IF uid == u.uid %]selected[% END %]>[% u.username %]</option>
+[% END %]
+               </select></p>
+       <div id="receivers"></div>
+       <p>Message <input type="text" name="message" size="50" value=""></p>
+       <br>
+       <input type="submit" name="cmd" value="Submit">
+</fieldset>
+</form>
+
+<table>
+       <tr><th>Sender</th><th>Receiver</th><th>Message</th><th>Cost</th><th>Status</th><th>Time</th></tr>
+[% FOR s IN sms %]
+       <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+               <td>[% s.sender | html %]</td>
+               <td>+[% s.number %] ([% s.receiver | html %])</td>
+               <td>[% s.message | html %]</td>
+               <td>[% s.cost %]</td>
+               <td>[% s.status | html %]</td>
+               <td>[% s.time %]</td>
+       </tr>
+[% END %]
+</table>
+
+<script type="text/javascript">
+$(document).ready(function(){
+       $('select').attr({name:'u', size: 1, multiple: null}).after($('<input type="button" id="add" value="Add">'));
+       $('#recadd').text('Users: ');
+       $('#receivers').append('Receiver(s):');
+
+       $('#add').click(function(){
+               var u = $('option:selected');
+               $('#receivers').append($('<p>'+u.text()+': <input type="checkbox" name="uid" checked value='+u.val()+'><\/p>'));
+       });
+
+       $('#sms').submit(function(){
+               if(!$('#sms :checkbox[name=uid][checked]').val()){
+                       alert('You need to add a receiver.');
+                       return false;
+               }
+               if($('#sms :input[name=message]').val() == ''){
+                       alert('You need to write a message');
+                       return false;
+               }
+       });
+});
+</script>