public static function get($post_id = NULL) { $URI_ = array(); if ($post_id != NULL) { $meta_ = get_post_meta($post_id, '_thumbnail_id'); if (@count($meta_)) { foreach ($meta_ as $attachment_id) { $post_ = get_post($attachment_id); if (FeedValidator::isValidMediaURL($post_->guid, 'image')) { array_push($URI_, array('name' => $post_->post_title, 'uri' => $post_->guid)); } } } $images_ =& get_children(array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image')); if (!empty($images_)) { foreach ($images_ as $attachment_id => $attachment) { array_push($URI_, array('uri' => wp_get_attachment_url($attachment_id), 'name' => wp_get_attachment_image($attachment_id, 'thumbnail'))); } } } foreach ($URI_ as $img_) { $duplicate = 0; foreach ($URI_ as $i => $img_control_) { if ($img_['uri'] == $img_control_['uri']) { $duplicate++; if ($duplicate > 1) { $URI_ = array_slice($URI_, $i, 1); } } } } //dd( $URI_ ); return $URI_; }
public static function output($event_id = NULL, $event_cat = NULL, $page = 1, $is_download = FALSE, $is_push = FALSE) { //ob_clean(); //ini_set('zlib.output_handler',''); $EM_Events = !empty($event_id) ? array(em_get_event($event_id)) : EM_Events::get(apply_filters('em_calendar_template_args', array('limit' => get_option('ess_feed_limit'), 'category' => $event_cat, 'page' => $page, 'owner' => FALSE, 'orderby' => 'event_start_date'))); $limit = 0; //no limit for now, but this shall be eventually set in the wP settings page, option name dbem_ess_limit //var_dump( $EM_Events );die; //echo "count: ".count($EM_Events); //echo "limit: " . get_option('ess_feed_limit', $limit ); //echo "event_id: ". $event_id; //die; $essFeed = new FeedWriter(strlen(get_option('ess_feed_language')) == 2 ? get_option('ess_feed_language', ESS_Database::DEFAULT_LANGUAGE) : ESS_Database::DEFAULT_LANGUAGE); $essFeed->DEBUG = FALSE; // ### DEBUG MODE $essFeed->setTitle(self::_g('ess_feed_title', __('ESS Feed generated by Wordpress', 'dbem'))); $essFeed->setLink(str_replace('&push=1', '', str_replace('&download=1', '', FeedWriter::getCurrentURL()))); $essFeed->setPublished(ESS_Timezone::get_date_GMT(get_option('em_last_modified', current_time('timestamp', TRUE)))); $essFeed->setUpdated(ESS_Timezone::get_date_GMT(current_time('timestamp', TRUE))); $essFeed->setRights(self::_g('ess_feed_rights', 'Rights')); $count = 0; while (count($EM_Events) > 0) { foreach ($EM_Events as $ie => $EM_Event) { if (intval($EM_Event->event_id) <= 0) { // event empty break; } if (get_option('ess_feed_limit', $limit) != 0 && $count > get_option('ess_feed_limit', $limit)) { //we've reached the max event per feed break; } //dd( $EM_Event ); $event_url = self::unhtmlentities(esc_html(urldecode($EM_Event->guid))); // --- Create a new event to the feed: <feed> $newEvent = $essFeed->newEventFeed(); $newEvent->setTitle($EM_Event->output(get_option('dbem_rss_title_format', sprintf(__('Event Nb: %d', 'dbem'), $ie)), "rss")); $newEvent->setUri($event_url); $newEvent->setPublished(ESS_Timezone::get_date_GMT(strtotime($EM_Event->post_date))); $newEvent->setUpdated(ESS_Timezone::get_date_GMT(strtotime($EM_Event->post_modified))); $newEvent->setAccess(intval($EM_Event->event_private) === 1 ? EssDTD::ACCESS_PRIVATE : EssDTD::ACCESS_PUBLIC); // -- encode a unic ID base on the host name + event_id (e.g. www.sample.com:123) $newEvent->setId((strlen(@$_SERVER['SERVER_NAME']) > 0 ? $_SERVER['SERVER_NAME'] : @$_SERVER['HTTP_HOST']) . ":" . $EM_Event->event_id); $description = wpautop($EM_Event->post_content, TRUE); if (get_option('ess_backlink_enabled')) { $feed_uri_host = parse_url($event_url, PHP_URL_HOST); $description = "<h6>" . __("Source:", 'dbem') . " <a target=\"_blank\" title=\"" . __("Source:", 'dbem') . " " . $feed_uri_host . "\" href=\"" . $event_url . "\">" . $feed_uri_host . "</a></h6>" . $description; } //dd( $description ); // Add custom attributes json encoded in HTML comments <!--||ATTR||xx{xx:'xx',xx...}||ATTR||--> if (@count(@$EM_Event->event_attributes) > 0 && @$EM_Event->event_attributes != NULL) { $custom_att = $EM_Event->event_attributes; //dd( $custom_att ); $description .= "<!--" . self::CUSTOM_ATTRIBUTE_SEPARATOR . json_encode(iconv(mb_detect_encoding($custom_att, mb_detect_order(), TRUE), "UTF-8", $custom_att), JSON_UNESCAPED_SLASHES) . self::CUSTOM_ATTRIBUTE_SEPARATOR . "-->"; } $newEvent->setDescription($description); //dd( $description ); // ====== TAGS ======== $tags = get_the_terms($EM_Event->post_id, EM_TAXONOMY_TAG); //var_dump( $tags ); if (count($tags) > 0 && $tags != NULL) { $arr_ = array(); foreach ($tags as $tag) { if (strlen($tag->name) > 1 && is_numeric($tag->name) == FALSE) { array_push($arr_, $tag->name); } } if (count($arr_) > 0) { $newEvent->setTags($arr_); } } // ====== CATEGORIES ======== //dd( $EM_Event ); // $categories_ = EM_Categories::get( $EM_Event->get_categories()->get_ids() ); // enumerate all the categories if (@count(@$EM_Event->categories) > 0 && @$EM_Event->categories != NULL) { $cat_duplicates_ = array(); foreach ($EM_Event->categories as $cat) { $category_type = get_option('ess_feed_category_type'); if (strlen($cat->name) > 0 && strlen($category_type) > 3) { if (in_array(strtolower($cat->name), $cat_duplicates_) == FALSE) { $newEvent->addCategory($category_type, array('name' => $cat->name, 'id' => $cat->id)); } $cat_duplicates_[] = strtolower($cat->name); } } } // ====== DATES ========= $event_start = NULL; if (isset($EM_Event->event_start_date) && isset($EM_Event->event_end_date)) { $event_start = ESS_Timezone::get_date_GMT(strtotime($EM_Event->event_start_date . " " . $EM_Event->event_start_time)); $event_stop = ESS_Timezone::get_date_GMT(strtotime($EM_Event->event_end_date . " " . $EM_Event->event_end_time)); // -- STANDALONE ----- if ($EM_Event->recurrence <= 0) { $duration_s = FeedValidator::getDateDiff('s', $event_start, $event_stop); // number of seconds between two dates $newEvent->addDate('standalone', 'hour', NULL, NULL, NULL, NULL, array('name' => __('Date', 'dbem'), 'start' => $event_start, 'duration' => $duration_s > 0 ? $duration_s / 60 / 60 : 0)); } else { $interval = intval($EM_Event->recurrence_interval); $u = $EM_Event->recurrence_freq; $event_unit = $u == 'daily' ? 'day' : ($u == 'weekly' ? 'week' : ($u == 'monthly' ? 'month' : ($u == 'yearly' ? 'year' : 'hour'))); switch ($event_unit) { default: case 'day': $limit = FeedValidator::getDateDiff('d', $event_start, $event_stop); break; // number of days // number of days case 'hour': $limit = FeedValidator::getDateDiff('h', $event_start, $event_stop); break; // number of hours // number of hours case 'week': $limit = FeedValidator::getDateDiff('ww', $event_start, $event_stop); break; // number of weeks // number of weeks case 'month': $limit = FeedValidator::getDateDiff('m', $event_start, $event_stop); break; // number of months // number of months case 'year': $limit = FeedValidator::getDateDiff('yyyy', $event_start, $event_stop); break; // number of years } $d = intval($EM_Event->recurrence_byday); $selected_day = $event_unit == 'year' || $event_unit == 'month' || $event_unit == 'week' ? $d == 0 ? 'sunday' : ($d == 1 ? 'monday' : ($d == 2 ? 'tuesday' : ($d == 3 ? 'wednesday' : ($d == 4 ? 'thursday' : ($d == 5 ? 'friday' : ($d == 6 ? 'saturday' : '')))))) : ''; $w = intval($EM_Event->recurrence_byweekno); $selected_week = $event_unit == 'month' ? $w == -1 ? 'last' : ($w == 1 ? 'first' : ($w == 2 ? 'second' : ($w == 3 ? 'third' : ($w == 4 ? 'fourth' : '')))) : ''; $newEvent->addDate('recurrent', $event_unit, $limit, $interval, $selected_day, $selected_week, array('name' => sprintf(__('Date: %s', 'dbem'), $event_start), 'start' => $event_start, 'duration' => 0)); } } // end date // ====== PLACES ======== $places_ = $EM_Event->get_location(); //var_dump( $places_ ); if (is_object($places_) && strlen($places_->location_name) > 0) { $newEvent->addPlace('fixed', null, array('name' => $places_->location_name == $places_->location_address ? sprintf(__('Place: %s', 'dbem'), $places_->location_name) : $places_->location_name, 'latitude' => isset($places_->location_latitude) ? round($places_->location_latitude * 10000) / 10000 : '', 'longitude' => isset($places_->location_longitude) ? round($places_->location_longitude * 10000) / 10000 : '', 'address' => strlen($places_->location_address) > 0 ? $places_->location_address : $places_->location_name, 'city' => $places_->location_town, 'zip' => $places_->location_postcode, 'state' => $places_->location_region, 'state_code' => $places_->location_state, 'country' => FeedValidator::$COUNTRIES_[strtoupper($places_->location_country)], 'country_code' => strtolower($places_->location_country) == 'xe' ? '' : $places_->location_country)); } // end place // ====== PRICES ========= if ($EM_Event->is_free() == TRUE) { $newEvent->addPrice('standalone', 'free', NULL, NULL, NULL, NULL, NULL, array('name' => __('Free', 'dbem'), 'currency' => get_option('ess_feed_currency', ESS_Database::DEFAULT_CURRENCY), 'value' => 0)); } else { $prices_ = $EM_Event->get_bookings(); //dd($prices_); if ($prices_) { if (count($prices_->tickets->tickets) > 0 && $event_start != NULL && $prices_->tickets->tickets != NULL) { if (isset($prices_->tickets)) { if (is_array($prices_->tickets->tickets)) { foreach ($prices_->tickets->tickets as $i => $price) { if (is_object($price)) { $duration_s = $price->ticket_start && $price->ticket_end ? FeedValidator::getDateDiff('s', $price->ticket_start, $price->ticket_end) : 0; $ticket_start = isset($price->ticket_start) ? ESS_Timezone::get_date_GMT(strtotime($price->ticket_start)) : 0; $ticket_end = isset($price->ticket_end) ? ESS_Timezone::get_date_GMT(strtotime($price->ticket_end)) : 0; $p = intval($price->ticket_price); $e_start = strtotime($event_start); $t_end = strtotime($ticket_end); $t_mode = $p > 0 ? $e_start < $t_end || $ticket_end == 0 ? 'fixed' : 'prepaid' : 'free'; $newEvent->addPrice('standalone', $t_mode, "hour", NULL, NULL, NULL, NULL, array('name' => strlen($price->ticket_name) > 0 ? $price->ticket_name : sprintf(__("Ticket Nb %s", 'dbem'), $i), 'currency' => get_option('ess_feed_currency', ESS_Database::DEFAULT_CURRENCY), 'value' => intval($price->ticket_price) > 0 ? $price->ticket_price : 0, 'start' => isset($price->ticket_start) ? $ticket_start : '', 'duration' => intval($duration_s) > 0 ? $duration_s / 60 / 60 : 0, 'uri' => $event_url . "#em-booking")); } } } } } } } // end prices // ====== PEOPLE =========== $people_ = $EM_Event->get_contact(); //var_dump( $people_ ); if ($people_ instanceof EM_Person) { $owner_name = strlen(self::_g('ess_owner_firstname')) > 0 && strlen(self::_g('ess_owner_lastname')) > 0 ? trim(self::_g('ess_owner_firstname') . " " . self::_g('ess_owner_lastname')) : $people_->data->display_name; if (strlen($owner_name) > 0 && get_option('ess_owner_activate')) { $newEvent->addPeople('organizer', array('name' => $owner_name, 'firstname' => self::_g('ess_owner_firstname'), 'lastname' => self::_g('ess_owner_lastname'), 'organization' => self::_g('ess_owner_company'), 'logo' => '', 'icon' => '', 'uri' => self::_g('ess_owner_website'), 'address' => self::_g('ess_owner_address'), 'city' => self::_g('ess_owner_city'), 'zip' => self::_g('ess_owner_zip'), 'state' => self::_g('ess_owner_state'), 'state_code' => '', 'country' => FeedValidator::$COUNTRIES_[strtoupper(self::_g('ess_owner_country'))], 'country_code' => strtolower(self::_g('ess_owner_country')) == 'xe' ? 'GB' : self::_g('ess_owner_country'), 'email' => self::_g('ess_owner_email'), 'phone' => self::_g('ess_owner_phone'))); } foreach (ESS_Database::$SOCIAL_PLATFORMS as $type => $socials_) { foreach ($socials_ as $social) { if (FeedValidator::isValidURL(get_option('ess_social_' . $social))) { $newEvent->addPeople('social', array('name' => __(ucfirst($social), 'dbem'), 'uri' => self::_g('ess_social_' . $social))); } } } if (strlen(self::_g('ess_feed_title')) > 0 && FeedValidator::isValidURL(self::_g('ess_feed_website'))) { $newEvent->addPeople('author', array('name' => self::_g('ess_feed_title'), 'uri' => self::_g('ess_feed_website'))); } if (strlen($EM_Event->post_excerpt) > 0) { $newEvent->addPeople('attendee', array('name' => __('Required'), 'minpeople' => 0, 'maxpeople' => 0, 'minage' => 0, 'restriction' => esc_html($EM_Event->post_excerpt))); } } // ====== MEDIA ============ // -- IMAGES ----- if (get_option('ess_feed_export_images')) { $IMG_ = array(); $media_url = $EM_Event->get_image_url(); if (FeedValidator::isValidURL($media_url)) { array_push($IMG_, array('name' => __('Main Image', 'dbem'), 'uri' => $media_url)); } $images_ = ESS_Images::get($EM_Event->post_id); if (count($images_) > 0 && $images_ != NULL) { foreach ($images_ as $i => $img_) { array_push($IMG_, array('name' => strlen($img_['name']) > 0 ? $img_['name'] : sprintf(__('Image %d', 'dbem'), $i), 'uri' => $img_['uri'])); } } if (count($IMG_) > 0 && $IMG_ != NULL) { $IMG_ = array_map("unserialize", array_unique(array_map("serialize", $IMG_))); $duplicates_ = array(); foreach ($IMG_ as $i => $img_) { if (!in_array($img_['uri'], $duplicates_)) { $newEvent->addMedia('image', array('name' => strlen($img_['name']) > 0 ? sprintf(__('Image %d', 'dbem'), $i) : $img_['name'], 'uri' => $img_['uri'])); } array_push($duplicates_, $img_['uri']); } } } // -- SOUNDS ----- if (get_option('ess_feed_export_sounds')) { // TODO:... } // -- VIDEOS ----- if (get_option('ess_feed_export_videos')) { // TODO:... } // -- WEBSITES ----- if (FeedValidator::isValidURL(self::_g('ess_feed_website'))) { $newEvent->addMedia('website', array('name' => __('The website', 'dbem'), 'uri' => self::_g('ess_feed_website'))); } $essFeed->addItem($newEvent); $count++; } // -- We've reached the limit of event per feed, or showing one event only if (!empty($event_id) || intval($event_id) <= 0 || get_option('ess_feed_limit', $limit) != 0 && $count > get_option('ess_feed_limit', $limit) || $count <= get_option('ess_feed_limit', $limit) && intval($page) <= 1) { break; } else { //-- Go to the next page of results $page++; self::output($event_id, $page, $is_download, $is_push); } } $essFeed->IS_DOWNLOAD = $is_download === TRUE ? TRUE : FALSE; $essFeed->AUTO_PUSH = get_option('ess_feed_push', TRUE) && $is_push === TRUE ? TRUE : FALSE; //var_dump( $essFeed ); $essFeed->genarateFeed(); }
private function controlNodeContent($name, $value) { if (FeedValidator::isNull($value) == FALSE) { switch (strtolower($name)) { case 'start': case 'published': case 'updated': return FeedValidator::isValidDate(FeedWriter::getISODate($value)); break; case 'name': return FeedValidator::isNull($value) == FALSE ? TRUE : FALSE; break; case 'email': return FeedValidator::isValidEmail($value); break; case 'logo': case 'icon': case 'uri': return FeedValidator::isValidURL($value); break; case 'latitude': return FeedValidator::isValidLatitude($value); break; case 'longitude': return FeedValidator::isValidLongitude($value); break; case 'country_code': return FeedValidator::isValidCountryCode($value); break; case 'currency': return FeedValidator::isValidCurrency($value); break; default: return TRUE; break; } } return TRUE; }
public static function control_export_forms() { if (!isset($_REQUEST['save_export']) || empty($_REQUEST['save_export'])) { return; } global $ESS_Notices; // -- Syndication Settings ESS_Database::set_option('ess_syndication_status', @$_REQUEST['ess_syndication_status'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_backlink_enabled', @$_REQUEST['ess_backlink_enabled'] == 'on' ? TRUE : FALSE); // -- Feed Settings ESS_Database::set_option('ess_feed_title', @$_REQUEST['ess_feed_title']); ESS_Database::set_option('ess_feed_rights', @$_REQUEST['ess_feed_rights']); ESS_Database::set_option('ess_feed_website', @$_REQUEST['ess_feed_website']); ESS_Database::set_option('ess_feed_limit', @$_REQUEST['ess_feed_limit']); ESS_Database::set_option('ess_feed_category_type', @$_REQUEST['ess_feed_category_type']); ESS_Database::set_option('ess_feed_currency', @$_REQUEST['ess_feed_currency']); ESS_Database::set_option('ess_feed_language', @$_REQUEST['ess_feed_language']); ESS_Database::set_option('ess_feed_timezone', @$_REQUEST['ess_feed_timezone']); // -- Feed Visibility // -- Global ESS_Database::set_option('ess_feed_visibility_web', @$_REQUEST['ess_feed_visibility_web'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_visibility_meta', @$_REQUEST['ess_feed_visibility_meta'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_push', @$_REQUEST['ess_feed_push'] == 'on' ? TRUE : FALSE); // Elements ESS_Database::set_option('ess_feed_import_images', @$_REQUEST['ess_feed_import_images'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_export_images', @$_REQUEST['ess_feed_export_images'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_import_videos', @$_REQUEST['ess_feed_import_videos'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_export_videos', @$_REQUEST['ess_feed_export_videos'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_import_sounds', @$_REQUEST['ess_feed_import_sounds'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_feed_export_sounds', @$_REQUEST['ess_feed_export_sounds'] == 'on' ? TRUE : FALSE); // -- Event Organizer ESS_Database::set_option('ess_owner_activate', @$_REQUEST['ess_owner_activate'] == 'on' ? TRUE : FALSE); ESS_Database::set_option('ess_owner_firstname', @$_REQUEST['ess_owner_firstname']); ESS_Database::set_option('ess_owner_lastname', @$_REQUEST['ess_owner_lastname']); ESS_Database::set_option('ess_owner_company', @$_REQUEST['ess_owner_company']); ESS_Database::set_option('ess_owner_city', @$_REQUEST['ess_owner_city']); ESS_Database::set_option('ess_owner_address', @$_REQUEST['ess_owner_address']); ESS_Database::set_option('ess_owner_zip', @$_REQUEST['ess_owner_zip']); ESS_Database::set_option('ess_owner_state', @$_REQUEST['ess_owner_state']); ESS_Database::set_option('ess_owner_country', @$_REQUEST['ess_owner_country']); ESS_Database::set_option('ess_owner_website', self::url(@$_REQUEST['ess_owner_website'])); ESS_Database::set_option('ess_owner_phone', @$_REQUEST['ess_owner_phone']); // -- Social Platforms foreach (ESS_Database::$SOCIAL_PLATFORMS as $type => $socials_) { foreach ($socials_ as $social) { $url = $_REQUEST['ess_social_' . $social]; if (strlen($url) > 10) { if (FeedValidator::isValidURL($url)) { ESS_Database::set_option('ess_social_' . $social, $url); } else { $ESS_Notices->add_error(sprintf(__("The URL you have submited for <b>%s</b> is not valide: <a href='%s' target='_blank'>%s</a>", 'dbem'), $social, $url, $url)); } } } } if (strlen($ESS_Notices->get_errors()) <= 0) { $ESS_Notices->add_info(__("The export setting page have been save correctly.", 'dbem')); } }
/** * Simple test to check if the URL targets to an existing file. * * @param String feed_url URL of the ess feed file to test * @return Boolean result return a boolean value. */ public static function is_feed_valid($feed_url = '') { global $ESS_Notices; if (FeedValidator::isValidURL($feed_url) == FALSE) { $ESS_Notices->add_error(sprintf(__("The ESS URL is not valid: <a href='%s' target='_blank'>%s</a>", 'dbem'), $feed_url, $feed_url)); return FALSE; } else { $response = json_decode(ESS_IO::get_curl_result(FeedWriter::$VALIDATOR_WS, $feed_url), TRUE); //dd( $response ); if ($response !== FALSE) { $r = @$response['result']; //dd( $r ); if (@isset($r['result'])) { if (strlen(@$r['result']['error']) > 1 || @$r['type'] == 'KO') { //d( strlen( @$r['result']['error'] ) ); if ($response['result']['error'] == NULL) { $response['result']['error'] = array(); } array_unshift($response['result']['error'], "<b>" . sprintf(__("The Feed URL is not a valide ESS file: <a href='%s' target='_blank'>%s</a>", 'dbem'), $feed_url, $feed_url) . "</b><br>"); array_push($response['result']['error'], "<b>" . sprintf(__("More information about the standard: <a href='%s' target='_blank'>%s</a>", 'dbem'), ESS_IO::ESS_WEBSITE, ESS_IO::ESS_WEBSITE) . "</b><br>"); //dd( $r ); $ESS_Notices->add_error($response); return FALSE; } } return TRUE; } } return FALSE; }
private function getAggregatorResponse($response) { $r = $response['result']; $isOK = isset($r['result']) ? TRUE : FALSE; $isVersionUptoDate = isset($r['version']) ? (string) $r['version'] != (string) self::LIBRARY_VERSION && $isOK ? FALSE : TRUE : TRUE; if ($this->DEBUG == TRUE) { $DARK_RED = '#ff0000;'; $bg_color = $isOK ? '#91ff86' : '#ffd5d5'; $mn_color = $isOK ? '#168c0a' : $DARK_RED; echo "<div style='background-color:{$bg_color};color:{$mn_color};border:1px solid {$mn_color};width:95%;padding:10px;font-size:14px;margin:10px;'>" . ($isVersionUptoDate == FALSE ? "<h3 style='color:{$DARK_RED};font-size:20px;border:1px dotted {$DARK_RED};padding:10px;margin:5px;'>The PHP-ESS library have been updated.<br/>" . "Download the last GitHub version (" . $r['version'] . ") : <a target='_blank' href='https://github.com/essfeed/php-ess' style='color:#ff0000;'>https://github.com/essfeed/php-ess</a>" . "</h3>" . "<br/>" : '') . "Set the DEBUG attribute to false to remove this warning message." . "<br/><br/>" . "\$ newFeed = new FeedWriter();<br/>" . "<b>\$ newFeed->DEBUG = false;</b>" . "<br/><br/>" . self::htmlvardump($response) . "</div>"; } if ($isVersionUptoDate == FALSE && self::EMAIL_UP_TO_DATE && FeedValidator::isValidEmail($_SERVER['SERVER_ADMIN'])) { self::sendEmail($_SERVER['SERVER_ADMIN'], "Update your ESS Library on " . $_SERVER['HTTP_HOST'], "<h3>The library you used on your website " . $_SERVER['HTTP_HOST'] . " is not up to date</h3>" . "<p style='background:#000;color:#FFF;padding:6px;'>" . $_SERVER['DOCUMENT_ROOT'] . "</p>" . "You can upload the lastest version in <a href='https://github.com/essfeed/php-ess/'>https://github.com/essfeed/php-ess/</a>"); } }