| 1 | <?php\r |
| 2 | /*\r |
| 3 | Plugin Name: danixland CountDown\r |
| 4 | Plugin URI: http://danixland.net/?p=3330 \r |
| 5 | Description: A simple plugin that shows a widget with a countdown\r |
| 6 | Version: 0.4\r |
| 7 | Author: Danilo 'danix' Macri\r |
| 8 | Author URI: http://danixland.net\r |
| 9 | Text Domain: dnxcd\r |
| 10 | \r |
| 11 | This program is distributed in the hope that it will be useful,\r |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of\r |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r |
| 14 | */\r |
| 15 | \r |
| 16 | \r |
| 17 | /**\r |
| 18 | * Add plugin i18n domain: dnxcd\r |
| 19 | * @since 0.1\r |
| 20 | */\r |
| 21 | load_plugin_textdomain('dnxcd', plugins_url() . '/danixland-countdown/i18n/', 'danixland-countdown/i18n/');\r |
| 22 | \r |
| 23 | /**\r |
| 24 | * Function that installs our widget options\r |
| 25 | * @since 0.1\r |
| 26 | */\r |
| 27 | function dnxcd_options_set() {\r |
| 28 | add_option( 'dnxcd_future_date', '06-05-2020', '', 'yes' );\r |
| 29 | add_option( 'dnxcd_widget_link', '', '', 'yes' );\r |
| 30 | add_option( 'dnxcd_use_style', 1, '', 'yes' );\r |
| 31 | }\r |
| 32 | \r |
| 33 | /**\r |
| 34 | * Function that deletes our widget options\r |
| 35 | * @since 0.3\r |
| 36 | */\r |
| 37 | function dnxcd_options_unset() {\r |
| 38 | delete_option( 'dnxcd_future_date' );\r |
| 39 | delete_option( 'dnxcd_widget_link' );\r |
| 40 | delete_option( 'dnxcd_use_style' );\r |
| 41 | }\r |
| 42 | \r |
| 43 | /**\r |
| 44 | * Use widget's stylesheet if user wants it\r |
| 45 | * @since 0.3\r |
| 46 | */\r |
| 47 | function dnxcd_style_handle() {\r |
| 48 | wp_register_style('dnxcd_basic', plugins_url() . '/danixland-countdown/inc/style/basic.css');\r |
| 49 | if( false == get_option('dnxcd_use_style') )\r |
| 50 | return;\r |
| 51 | wp_enqueue_style('dnxcd_basic');\r |
| 52 | }\r |
| 53 | add_action( 'wp_enqueue_scripts', 'dnxcd_style_handle' );\r |
| 54 | \r |
| 55 | /**\r |
| 56 | * Add function on plugin activation that'll set our plugin options\r |
| 57 | * @since 0.1\r |
| 58 | */\r |
| 59 | register_activation_hook( __FILE__, 'dnxcd_options_set' );\r |
| 60 | \r |
| 61 | /**\r |
| 62 | * Add function on plugin deactivation that'll unset our plugin options\r |
| 63 | * @since 0.3\r |
| 64 | */\r |
| 65 | register_deactivation_hook( __FILE__, 'dnxcd_options_unset' );\r |
| 66 | \r |
| 67 | /**\r |
| 68 | * Add function to widgets_init that'll load our widget.\r |
| 69 | * @since 0.1\r |
| 70 | */\r |
| 71 | add_action( 'widgets_init', 'danixland_countdown' );\r |
| 72 | \r |
| 73 | /**\r |
| 74 | * Register our widget.\r |
| 75 | * 'dnx_CountDown' is the widget class used below.\r |
| 76 | *\r |
| 77 | * @since 0.1\r |
| 78 | */\r |
| 79 | function danixland_countdown() {\r |
| 80 | register_widget( 'dnx_CountDown' );\r |
| 81 | }\r |
| 82 | \r |
| 83 | /**\r |
| 84 | * dnx_CountDown class.\r |
| 85 | * This class handles everything that needs to be handled with the widget:\r |
| 86 | * the settings, form, display, and update. Nice!\r |
| 87 | *\r |
| 88 | * @since 0.1\r |
| 89 | */\r |
| 90 | class dnx_CountDown extends WP_Widget {\r |
| 91 | \r |
| 92 | \r |
| 93 | /**\r |
| 94 | * Widget setup.\r |
| 95 | */\r |
| 96 | public function __construct() {\r |
| 97 | $control_ops = array('width' => 400, 'height' => 350);\r |
| 98 | parent::__construct(\r |
| 99 | 'dnx-countdown', // id_base\r |
| 100 | __('danixland CountDown', 'dnxcd' ), // Name\r |
| 101 | array( 'description' => __('Use this widget to add a simple Count Down to your Sidebar', 'dnxcd') ),\r |
| 102 | $control_ops\r |
| 103 | );\r |
| 104 | }\r |
| 105 | \r |
| 106 | /**\r |
| 107 | * How to display the widget on the public side of the site.\r |
| 108 | */\r |
| 109 | public function widget( $args, $instance ) {\r |
| 110 | extract( $args );\r |
| 111 | \r |
| 112 | /* Our variables from the widget settings. */\r |
| 113 | $title = apply_filters('widget_title', $instance['title'] );\r |
| 114 | \r |
| 115 | /* Before widget (defined by themes). */\r |
| 116 | echo $before_widget;\r |
| 117 | \r |
| 118 | /* Display the widget title if one was input (before and after defined by themes). */\r |
| 119 | if ( $title ) {\r |
| 120 | echo $before_title . $title . $after_title;\r |
| 121 | }\r |
| 122 | \r |
| 123 | if ( '' != get_option('dnxcd_future_date') ) {\r |
| 124 | echo '<div class="dnx-countdown">';\r |
| 125 | $date = gmdate('U', strtotime( get_option('dnxcd_future_date') ));\r |
| 126 | $diff = $date - gmdate('U');\r |
| 127 | if ( '' != get_option('dnxcd_widget_link') ) {\r |
| 128 | echo '<a href="' . get_option('dnxcd_widget_link') . '">';\r |
| 129 | echo '-' . floor($diff / (24 * 60 * 60));\r |
| 130 | echo '</a>';\r |
| 131 | } else {\r |
| 132 | echo '-' . floor($diff / (24 * 60 * 60));\r |
| 133 | }\r |
| 134 | echo '</div> <!-- #dnx-countdown -->';\r |
| 135 | echo '<div class="dnx-days">' . __('days to go', 'dnxcd') . '</div>'; \r |
| 136 | } else {\r |
| 137 | echo "<div class='dnx-warning'><a href='" . get_admin_url('', 'widgets.php', '') . "' title='" . __('configure widget', 'dnxcd') . "'>" . __('the date is missing<br />configure widget', 'dnxcd') . "</a></div>";\r |
| 138 | }\r |
| 139 | \r |
| 140 | /* After widget (defined by themes). */\r |
| 141 | echo $after_widget;\r |
| 142 | }\r |
| 143 | \r |
| 144 | //Update the widget \r |
| 145 | \r |
| 146 | public function update( $new_instance, $old_instance ) {\r |
| 147 | $instance = $old_instance;\r |
| 148 | \r |
| 149 | //Strip tags from title and name to remove HTML \r |
| 150 | $instance['title'] = sanitize_text_field( $new_instance['title'] );\r |
| 151 | $instance['date'] = strip_tags( $new_instance['date'] );\r |
| 152 | $instance['link'] = esc_url( $new_instance['link'], array('http', 'https') );\r |
| 153 | $instance['style'] = (bool) $new_instance['style'];\r |
| 154 | \r |
| 155 | update_option( 'dnxcd_future_date', $instance['date'] );\r |
| 156 | update_option( 'dnxcd_widget_link', $instance['link'] );\r |
| 157 | update_option( 'dnxcd_use_style', $instance['style'] );\r |
| 158 | \r |
| 159 | return $instance;\r |
| 160 | }\r |
| 161 | \r |
| 162 | /**\r |
| 163 | * Displays just a quick notice with a link to the Settings page\r |
| 164 | */\r |
| 165 | public function form( $instance ) {\r |
| 166 | $defaults = array( \r |
| 167 | 'title' => __( 'Count Down', 'dnxcd' ),\r |
| 168 | 'date' => get_option( 'dnxcd_future_date' ),\r |
| 169 | 'link' => get_option( 'dnxcd_widget_link' ),\r |
| 170 | 'style' => get_option( 'dnxcd_use_style' )\r |
| 171 | );\r |
| 172 | $instance = wp_parse_args( (array) $instance, $defaults );\r |
| 173 | extract( $instance, EXTR_SKIP );\r |
| 174 | ?>\r |
| 175 | \r |
| 176 | <p>\r |
| 177 | <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'dnxcd'); ?></label>\r |
| 178 | <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $title; ?>" style="width:100%;" />\r |
| 179 | </p>\r |
| 180 | <p>\r |
| 181 | <label for="<?php echo $this->get_field_id( 'date' ); ?>"><?php _e('Future Date (dd-mm-yyyy):', 'dnxcd'); ?></label>\r |
| 182 | <input type="date" class="widefat" id="<?php echo $this->get_field_id( 'date' ); ?>" name="<?php echo $this->get_field_name( 'date' ); ?>" value="<?php echo $date ?>" style="width:100%;" />\r |
| 183 | <label for="<?php echo $this->get_field_id( 'link' ); ?>"><?php _e('Link (only http/https allowed):', 'dnxcd'); ?></label>\r |
| 184 | <input class="widefat" id="<?php echo $this->get_field_id( 'link' ); ?>" name="<?php echo $this->get_field_name( 'link' ); ?>" value="<?php echo $link; ?>" style="width:100%;" />\r |
| 185 | </p>\r |
| 186 | <p>\r |
| 187 | <input class="checkbox" type="checkbox" <?php checked( $style, true ); ?> id="<?php echo $this->get_field_id( 'style' ); ?>" name="<?php echo $this->get_field_name( 'style' ); ?>" />\r |
| 188 | <label for="<?php echo $this->get_field_id( 'style' ); ?>"><?php _e('Enable Widget Stylesheet?', 'dnxcd'); ?></label>\r |
| 189 | </p>\r |
| 190 | <?php\r |
| 191 | }\r |
| 192 | }\r |
| 193 | \r |
| 194 | ?>\r |