/**
  * Returns singletonian instance of this object
  *
  * @return Ai1ec_Oauth_Controller Singletonian instance of self
  */
 public static function get_instance()
 {
     if (!self::$_instance instanceof self) {
         global $wpdb;
         self::$_instance = new self($wpdb, Ai1ec_Settings::get_instance());
     }
     return self::$_instance;
 }
$ai1ec_events_list_helper = Ai1ec_Events_List_Helper::get_instance();
if ('admin-ajax.php' === basename($_SERVER['SCRIPT_NAME']) && isset($_REQUEST['lang'])) {
    $ai1ec_localization_helper->set_language($_REQUEST['lang']);
}
// ====================================
// = Initialize and setup CONTROLLERS =
// ====================================
global $ai1ec_app_controller, $ai1ec_settings_controller, $ai1ec_events_controller, $ai1ec_calendar_controller, $ai1ec_importer_controller, $ai1ec_exporter_controller, $ai1ec_platform_controller, $ai1ec_duplicate_controller, $ai1ec_oauth_controller, $ai1ec_logging_controller;
$ai1ec_settings_controller = Ai1ec_Settings_Controller::get_instance();
$ai1ec_events_controller = Ai1ec_Events_Controller::get_instance();
$ai1ec_calendar_controller = Ai1ec_Calendar_Controller::get_instance();
$ai1ec_importer_controller = Ai1ec_Importer_Controller::get_instance();
$ai1ec_exporter_controller = Ai1ec_Exporter_Controller::get_instance();
$ai1ec_platform_controller = Ai1ec_Platform_Controller::get_instance();
$ai1ec_duplicate_controller = Ai1ec_Duplicate_Controller::get_instance();
$ai1ec_oauth_controller = Ai1ec_Oauth_Controller::get_instance();
$ai1ec_logging_controller = Ai1ec_Logging_Controller::get_instance();
// Initialize other global classes
global $ai1ec_requirejs_controller, $ai1ec_rss_feed, $ai1ec_tax_meta_class;
// Create the instance of the class that handles javascript loading
$ai1ec_requirejs_controller = new Ai1ec_Requirejs_Controller();
// Inject settings
$ai1ec_requirejs_controller->set_settings($ai1ec_settings);
// Inject calendar controller
$ai1ec_requirejs_controller->set_events_helper($ai1ec_events_helper);
// Se the themes controller
$ai1ec_requirejs_controller->set_ai1ec_themes_controller($ai1ec_themes_controller);
// ==================================
// = Add the hook to render the js  =
// ==================================
if (isset($_GET[Ai1ec_Requirejs_Controller::WEB_WIDGET_GET_PARAMETER])) {
 /**
  * Checks and sends message to Twitter
  *
  * Upon successfully sending message - updates meta to reflect status change
  *
  * @return bool Success
  *
  * @throws Ai1ec_Oauth_Exception In case of some error
  */
 protected function _send_twitter_message($event)
 {
     $format = '[title], [date] @ [venue], [link] [hashtags]';
     $oauth = Ai1ec_Oauth_Controller::get_instance();
     $status = Ai1ec_Meta::instance('Post')->get($event->post_id, '_ai1ec_post_twitter', array('not_requested'));
     if (is_array($status)) {
         $status = (string) current($status);
     }
     if ('pending' !== $status) {
         return false;
     }
     $terms = array_merge(wp_get_post_terms($event->post_id, 'events_categories'), wp_get_post_terms($event->post_id, 'events_tags'));
     $hashtags = array();
     foreach ($terms as $term) {
         $hashtags[] = '#' . implode('_', explode(' ', $term->name));
     }
     $hashtags = implode(' ', array_unique($hashtags));
     $link = get_permalink($event->post) . $event->instance_id;
     $message = str_replace(array('[title]', '[date]', '@ [venue]', '[link]', '[hashtags]'), array($event->post->post_title, $event->get_short_start_date(), $event->venue, $link, $hashtags), $format);
     $message = trim(preg_replace('/ ,/', ',', preg_replace('/\\s+/', ' ', $message)));
     $length = strlen($message);
     $link_length = strlen($link);
     if ($link_length > 20) {
         $length += 20 - $link_length;
     }
     if ($length > 140) {
         $message = substr($message, 0, strrpos($message, ' ', 140 - $length));
     }
     $status = $oauth->get_provider('twitter')->send_message($oauth->get_token($event->post->post_author, 'twitter'), $message);
     if (!$status) {
         return false;
     }
     return update_post_meta($event->post_id, '_ai1ec_post_twitter', array('status' => 'sent', 'twitter_status_id' => $status));
 }