Explorar el Código

Adjust template to work with local getter correctly

Fix loop in makefile
George S. Baugh hace 7 años
padre
commit
ab8e48aa31

+ 6 - 5
Makefile

@@ -1,13 +1,12 @@
-all: install
+all: install install-slack install-xmpp install-discord install-notification-center
 
 mkdir:
 	[ -d /var/cpanel/perl/Cpanel/iContact/Provider/Schema ] || mkdir -p /var/cpanel/perl/Cpanel/iContact/Provider/Schema/
+	[ -d /var/cpanel/perl/Cpanel/iContact/Provider/Local ] || mkdir -p /var/cpanel/perl/Cpanel/iContact/Provider/Local/
 
 install: mkdir depend-all
 	cp -f lib/Cpanel/iContact/Provider/Schema/*.pm /var/cpanel/perl/Cpanel/iContact/Provider/Schema/
 	cp -f lib/Cpanel/iContact/Provider/*.pm /var/cpanel/perl/Cpanel/iContact/Provider/
-	cd notification-center
-	make install
 
 install-slack: mkdir
 	cp -f lib/Cpanel/iContact/Provider/Schema/Slack.pm /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Slack.pm
@@ -28,6 +27,8 @@ install-discord: mkdir
 install-notification-center: mkdir
 	cp -f lib/Cpanel/iContact/Provider/Schema/Local.pm /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Local.pm
 	cp -f lib/Cpanel/iContact/Provider/Local.pm /var/cpanel/perl/Cpanel/iContact/Provider/Local.pm
+	cp -f lib/Cpanel/iContact/Provider/Local/Getter.pm /var/cpanel/perl/Cpanel/iContact/Provider/Local/Getter.pm
+	cd notification-center && make install
 
 uninstall:
 	[ ! -f /var/cpanel/perl/Cpanel/iContact/Provider/Slack.pm ] || rm /var/cpanel/perl/Cpanel/iContact/Provider/Slack.pm
@@ -40,8 +41,8 @@ uninstall:
 	[ ! -f /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Discord.pm ] || rm /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Discord.pm
 	[ ! -f /var/cpanel/perl/Cpanel/iContact/Provider/Local.pm ] || rm /var/cpanel/perl/Cpanel/iContact/Provider/Local.pm
 	[ ! -f /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Local.pm ] || rm /var/cpanel/perl/Cpanel/iContact/Provider/Schema/Local.pm
-	cd notification-center
-	make uninstall
+	[ ! -f /var/cpanel/perl/Cpanel/iContact/Provider/Local/Getter.pm ] || rm /var/cpanel/perl/Cpanel/iContact/Provider/Local/Getter.pm
+	[ ! -f /usr/local/cpanel/whostmgr/docroot/cgi/addon_notification-center.cgi ] || cd notification-center && make uninstall
 
 test: depend-all depend-test
 	[ ! -x /usr/local/cpanel/3rdparty/bin/prove ] || /usr/local/cpanel/3rdparty/bin/prove t/*.t

+ 19 - 0
lib/Cpanel/iContact/Provider/Local.pm

@@ -106,4 +106,23 @@ sub send {
     return 1;
 }
 
+sub reap_older_than {
+    my ($timestamp) = @_;
+
+    return () unless -d $DIR;
+
+    opendir(my $dh, $DIR) || die "Can't opendir $DIR: $!";
+    my @actual_files = grep { !/^\./ && -f "$DIR/$_" } readdir($dh);
+    closedir $dh;
+
+    my %files_by_age = ();
+    @files_by_age{@actual_files} = map { (stat "$DIR/$_")[9] } @actual_files;
+
+    my @files_to_kill = grep { $files_by_age{$_} < $timestamp } @actual_files;
+
+    foreach my $goner (@files_to_kill) { unlink "$DIR/$goner" or warn "Could not delete $DIR/$goner!"; }
+
+    return @files_to_kill;
+}
+
 1;

+ 2 - 1
notification-center/notification-center.pl

@@ -18,8 +18,9 @@ main() unless caller;
 
 sub main {
 
+    my %notices = Cpanel::iContact::Provider::Local::Getter::get_all_notices( user => $ENV{REMOTE_USER} || 'root' );
     my $vars = {
-        notifications => Cpanel::iContact::Provider::Local::Getter::get( user => $ENV{REMOTE_USER} );
+        notifications => \%notices,
     };
 
     Cpanel::Template::process_template( 'whostmgr', { template_file => 'addon_notification-center.tmpl', data => $vars } );

+ 27 - 1
notification-center/notification-center.tt

@@ -23,17 +23,43 @@
         <tr>
             <td>[% locale.maketext('Notification') %]</td>
             <td>[% locale.maketext('Time Occurred') %]</td>
+            <td>[% locale.maketext('Show/Hide') %]</td>
         </tr>
     </thead>
     <tbody>
         [% FOREACH notification IN data.notifications.keys.sort %]
         <tr>
             <td>[% data.notifications.$notification.subject %]</td>
-            <td>[% notification %]</td>
+            <td class="timestamp">[% notification %]</td>
+            <td><a class="button" href="javascript:toggleContentDisplay('[% notification %]')">Show/Hide</a></td>
+        </tr>
+        <tr style="display:none" colspan=3 id="[% notification %]">
+            <td>
+                [% data.notifications.$notification.html %]
+            </td>
         </tr>
         [% END %]
     </tbody>
 </table>
 
+<script type="text/javascript">
+    //Localize all the timestamps on the page
+    window.onload = function () {
+        var timestamps = document.querySelectorAll('.timestamp');
+        for (var i=0; i < timestamps.length; i++) {
+            var timestamp = timestamps[i].innerText.replace('/','');
+            var t = new Date(0)
+            t.setUTCSeconds(timestamp);
+            timestamps[i].innerText = t.toLocaleDateString() + " " + t.toLocaleTimeString();
+        }
+    };
+
+    function toggleContentDisplay(id) {
+        var dstatus   = document.getElementById(id).style.display;
+        var newstatus = dstatus === 'block' ? 'none' : 'block' 
+        document.getElementById(id).style.display = newstatus;
+    }
+</script>
+
 [% PROCESS '_ajaxapp_footer.tmpl' -%]
 [% END #wrapper -%]

+ 35 - 0
scripts/reap_local_icontact.pl

@@ -0,0 +1,35 @@
+#!/usr/local/cpanel/3rdparty/bin/perl
+
+package LocaliContactReaper;
+
+use strict;
+use warnings;
+
+use Getopt::Long ();
+
+use lib '/var/cpanel/perl';
+
+use Cpanel::iContact::Provider::Local;
+
+exit main(@ARGV) unless caller();
+
+sub main {
+    my @args = @_;
+    my $days;
+
+    Getopt::Long::GetOptionsFromArray(\@args,
+        'days=i' => \$days,
+    );
+    $days ||= 30;
+
+    my $timestamp = time() - (int($days) * 86400 );
+
+    my @reaped = Cpanel::iContact::Provider::Local::reap_older_than($timestamp);
+    foreach my $goner (@reaped) {
+        print "Reaped $goner for being older than $timestamp...\n";
+    }
+    print "Done!\n";
+    return 0;
+}
+
+1;