{"id":537,"date":"2012-12-27T22:25:21","date_gmt":"2012-12-28T04:25:21","guid":{"rendered":"http:\/\/blog.the-erm.com\/?p=537"},"modified":"2012-12-27T22:26:30","modified_gmt":"2012-12-28T04:26:30","slug":"php-trash-day-script","status":"publish","type":"post","link":"https:\/\/blog.the-erm.com\/?p=537","title":{"rendered":"php trash day script"},"content":{"rendered":"<p>Trash days on Monday suck.<br \/>\nI constantly forget to take out the trash on Saturday when there is a holiday on Monday.  I dusted off the old trash-day-php script and installed it.<\/p>\n<p>Installation is pretty simple.<br \/>\nEdit the script with the values you want.<br \/>\nplace it in \/etc\/cron.daily\/trash-day-php<br \/>\nchmod +x \/etc\/cron.daily\/trash-day-php <\/p>\n<p>cron doesn&#8217;t like . in filenames.  Thats why I named the file trash-day-php not trash-day.php.<\/p>\n<p>To test your email just run \/etc\/cron.daily\/trash-day-php &#8211;test<\/p>\n<p><!--more--><\/p>\n<pre style=\"overflow:auto; width:100%; border:1px solid; height:500px;\">#!\/usr\/bin\/php -q\r\n&lt;?php\r\n    require_once \"\/usr\/share\/php\/libphp-phpmailer\/class.phpmailer.php\";\r\n    \/\/ sudo apt-get install libphp-phpmailer # to install phpmailer\r\n\r\n    $trash_day = 1; \/\/ uses date('w'); 0 = Sunday 6 = Saturday\r\n    $from = \"email@domail.com\";\r\n    $from_name = 'First M. Last *trash day* script.';\r\n\r\n    $emails = array(\r\n        \"email-recipient@domain.com\" =&gt; \"First M. Last\",\r\n        \"email-recipient2@domain.com\" =&gt; \"First M. Last\",\r\n    );\r\n    \/\/ http:\/\/www.emailtextmessages.com\/ \/\/ you can send yourself an sms\r\n\r\n    $test_emails = array(); \/\/ You can setup test email addresses\r\n                            \/\/ to be used with trash-day-php --test\r\n                            \/\/ if you don't set this $emails will be used.\r\n    \r\n    \/*\r\n      Federal Legal Holidays 2009\r\n    \u00e2\u20ac\u00a2 January 1, 2009: New Year's Day [Jan. 1 every year]\r\n    \u00e2\u20ac\u00a2 January 19, 2009: Martin Luther King Day [3rd monday in Jan]\r\n    \u00e2\u20ac\u00a2 January 20, 2009: Inauguration Day [every 4th year]\r\n    \u00e2\u20ac\u00a2 February 16, 2009: Presidents Day (observed) [3rd monday in Feb]\r\n       note: Presidents Day is also Washington's Birthday (observed)\r\n    \u00e2\u20ac\u00a2 May 25, 2009: Memorial Day (observed) [last monday in May]\r\n    \u00e2\u20ac\u00a2 July 4, 2009: Independence Day [July 4 every year]\r\n    \u00e2\u20ac\u00a2 September 7, 2009: Labor Day [1st monday in Sept]\r\n    \u00e2\u20ac\u00a2 October 12, 2009: Columbus Day (observed) [2nd monday in Oct]\r\n    \u00e2\u20ac\u00a2 November 11, 2009: Veterans' Day [Nov. 11 every year]\r\n    \u00e2\u20ac\u00a2 November 26, 2009: Thanksgiving Day [4th thursday in Nov]\r\n    \u00e2\u20ac\u00a2 December 25, 2009: Christmas Day [Dec. 25 every year]\r\n\r\n\r\n    \u00e2\u20ac\u00a2 January 1, 2008: New Year's Day [Jan. 1 every year]\r\n    \u00e2\u20ac\u00a2 January 21, 2008: Martin Luther King Day [3rd monday in Jan]\r\n    \u00e2\u20ac\u00a2 February 18, 2008: Presidents Day (observed) [3rd monday in Feb]\r\n       note: Presidents Day is also Washington's Birthday (observed)\r\n    \u00e2\u20ac\u00a2 May 26, 2008: Memorial Day (observed) [last monday in May]\r\n    \u00e2\u20ac\u00a2 July 4, 2008: Independence Day [July 4 every year]\r\n    \u00e2\u20ac\u00a2 September 1, 2008: Labor Day [1st monday in Sept]\r\n    \u00e2\u20ac\u00a2 October 13, 2008: Columbus Day (observed) [2nd monday in Oct]\r\n    \u00e2\u20ac\u00a2 November 11, 2008: Veterans' Day [Nov. 11 every year]\r\n    \u00e2\u20ac\u00a2 November 27, 2008: Thanksgiving Day [4th thursday in Nov]\r\n    \u00e2\u20ac\u00a2 December 25, 2008: Christmas Day [Dec. 25 every year]\r\n\r\n    Holiday     Definition\r\n    ML King     3rd Monday of Jan     Mon, Jan 21st\r\n    Presidents Day     3rd Monday of Feb     Mon, Feb 18th\r\n    Memorial Day     Last Monday of May     Mon, May 26th1\r\n    Labor Day     1st Monday of Sep     Mon, Sep 1st\r\n    Columbus Day     2nd Monday of Oct     Mon, Oct 13th\r\n    Election Day     Tuesday after 1st\r\n    Monday of Nov     Tue, Nov 4th2\r\n    Thanksgiving Day     Last Thursday of Nov     Thu, Nov 27th\r\n\r\n    *\/\r\n\r\n    $min = 60;\r\n    $hr = $min * 60;\r\n    $day = 24 * $hr;\r\n    $week = $day * 7;\r\n\r\n    function calculate_day($data) {\r\n        $first_day_of_month = strtotime($data['month'] . ' 1');\r\n        $last_day_of_month = strtotime($data['month'] . ' ' . date('t', $first_day_of_month));\r\n        $min = 60;\r\n        $hr = $min * 60;\r\n        $day = 24 * $hr;\r\n        $week = $day * 7;\r\n        \/\/ 'w'\r\n        \/\/ print_r($data);\r\n        if (!is_numeric($data['day'])) {\r\n            $data['day'] = date('w',strtotime($data['day']));\r\n        }\r\n\r\n        if ($data['offset'] &gt; 0) {\r\n            $data['offset']--;\r\n        }\r\n        if ($data['offset'] &gt;= 0) {\r\n            \/\/ count up\r\n            $target = $first_day_of_month;\r\n            \/\/ Keep adding a week until offset is 0.\r\n            $target = ($target + ($week * $data['offset']));\r\n            \r\n            \/\/ Keep addinga day until the day of the week matches.\r\n            while (date('w', $target) != $data['day']) {\r\n                $target = ($target + $day);\r\n                # echo \"day:\", date('w',$target),\"\\n\";\r\n            }\r\n            # echo \"Figured:\",date('r', $target),\"\\n\";\r\n            return $target;\r\n        } else {\r\n            \/\/ count down.\r\n            \/\/ Last Monday of May     Mon, May 26th\r\n            $target = $last_day_of_month;\r\n            \/\/ Keep subtracting a week until offset is 0.\r\n            $target = ($target - ($week * abs($data['offset']+1)));\r\n            $multiple = date('w',$target) - $data['day'];\r\n            \/\/ Keep taking away a day until the day of the week matches.\r\n            while (date('w', $target) != $data['day']) {\r\n                $target = ($target - $day);\r\n                # echo \"day:\", date('w',$target),\"\\n\";\r\n            }\r\n            # echo \"-Figured:\",date('r', $target),\"\\n\";\r\n            return $target;\r\n        }\r\n    }\r\n\r\n    function send_emails($from, $from_name, $emails, $holiday) {\r\n        $mail = new PHPMailer();\r\n        # $mail-&gt;AddAddress(\"erm@the-erm.com,steph@the-erm.com,theerm@gmail.com\");\r\n        \/\/ 10digitphonenumber@tmomail.net\r\n        foreach ($emails as $email=&gt;$name) {\r\n            $mail-&gt;AddBCC($email,$name);\r\n        }\r\n        $mail-&gt;From     = $from;\r\n        $mail-&gt;FromName = $from_name;\r\n        $mail-&gt;Subject = \"*** TRASH DAY \".$holiday.\" ***\";\r\n        $mail-&gt;Body = \"$holiday will occur on a Monday, remember to set out the trash on Saturday.\\n\";\r\n        if(!$mail-&gt;Send()) {\r\n            echo \"There has been a mail error sending to:\\n\";\r\n            print_r($emails);\r\n            exit;\r\n        } else {\r\n            echo \"Sent email to:\\n\";\r\n            print_r($emails);\r\n        }\r\n    }\r\n\r\n    \/*\r\n    0 (for Sunday) through 6 (for Saturday)\r\n    *\/\r\n    $holidays = array(\r\n        'New Years' =&gt; strtotime('January 1 '.(date(\"Y\")+1)),\r\n        'Martin Luther King Day' =&gt; calculate_day(\r\n            array(\r\n                'day' =&gt; 'Monday',\r\n                'offset' =&gt; 3,\r\n                'month' =&gt; 'January'\r\n            )\r\n        ),\r\n        'Presidents Day' =&gt; calculate_day(\r\n            array(\r\n                'day' =&gt; 'Monday',\r\n                'offset' =&gt; 3,\r\n                'month' =&gt; 'February'\r\n            )\r\n        ),\r\n        'Memorial Day' =&gt; calculate_day(\r\n            array(\r\n                'day' =&gt; 'Monday',\r\n                'offset' =&gt; -1,\r\n                'month' =&gt; 'May'\r\n            )\r\n        ),\r\n        'Independence Day' =&gt; strtotime('July 4th'),\r\n        'Labor Day' =&gt; calculate_day(\r\n            array(\r\n                'month' =&gt; 'September',\r\n                'day' =&gt; 'Monday',\r\n                'offset' =&gt; 1\r\n            )\r\n        ),\r\n        'Columbus Day' =&gt; calculate_day(\r\n            array(\r\n                'month' =&gt; 'October',\r\n                'day' =&gt; 'Monday',\r\n                'offset' =&gt; 2\r\n            )\r\n        ),\r\n        'Veterans\\' Day' =&gt; strtotime('November 11'),\r\n        'Thanksgiving' =&gt; calculate_day(\r\n            array(\r\n                'month' =&gt; 'November',\r\n                'day' =&gt; 'Thursday',\r\n                'offset' =&gt; -1\r\n            )\r\n        ),\r\n        'Christmas' =&gt; strtotime('December 25'),\r\n        'Christmas Eve' =&gt; strtotime('December 24')\r\n    );\r\n\r\n    $today = time();\r\n\r\n    foreach ($holidays as $holiday=&gt;$v) {\r\n        if ($v &gt;= $today && $v &lt;= ($today + $week))  {\r\n            echo \"In range $holiday\\n\";\r\n            if (date('w',$v) == $trash_day) {\r\n                echo \"Date is on a Monday\\n\";\r\n                echo \"***** EMAIL ***** \";\r\n                send_emails($from, $from_name, $emails, $holiday);\r\n            } else {\r\n                echo \"Date is not a Monday\\n\";\r\n            }\r\n        }\r\n        echo \"$holiday \",date('r',$v),\"\\n\";\r\n    }\r\n\r\n    if (in_array (\"--test\", $argv)) {\r\n        if (!$test_emails) {\r\n            $test_emails = $emails;\r\n        }\r\n        send_emails($from, $from_name, $test_emails, \"TEST EMAIL\");\r\n    }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Trash days on Monday suck. I constantly forget to take out the trash on Saturday when there is a holiday on Monday. I dusted off the old trash-day-php script and installed it. Installation is pretty simple. Edit the script with the values you want. place it in \/etc\/cron.daily\/trash-day-php chmod +x \/etc\/cron.daily\/trash-day-php cron doesn&#8217;t like . [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[],"class_list":["post-537","post","type-post","status-publish","format-standard","hentry","category-php"],"_links":{"self":[{"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/posts\/537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=537"}],"version-history":[{"count":3,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/posts\/537\/revisions"}],"predecessor-version":[{"id":540,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=\/wp\/v2\/posts\/537\/revisions\/540"}],"wp:attachment":[{"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.the-erm.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}