From 3faf40d3f0f24bc7e75d49e53a197a57cde4f71e Mon Sep 17 00:00:00 2001 From: Acemir Sousa Mendes Date: Sat, 21 Jun 2014 08:55:58 -0300 Subject: [PATCH] Tweet text and time parse improvements Create links from hashtags, mentions, urls and parse tweet time to get Twitter style "time ago" --- database.xml | 1 + language/br/twitter_lang.php | 37 ++++++++++++++++++ language/en/index.html | 10 ----- language/en/twitter_lang.php | 34 ++++++++++++---- language/es/twitter_lang.php | 47 +++++++++++++++++++++++ language/it/twitter_lang.php | 38 ++++++++++++++++++ language/pt/twitter_lang.php | 38 ++++++++++++++++++ libraries/twitter_tags.php | 44 +++++++++++++++++---- models/twitter_user_model.php | 1 + views/admin/toolboxes/twitter_toolbox.php | 2 +- views/admin/user_detail.php | 12 +++--- views/admin/user_list.php | 2 +- 12 files changed, 233 insertions(+), 33 deletions(-) create mode 100644 language/br/twitter_lang.php delete mode 100644 language/en/index.html create mode 100644 language/es/twitter_lang.php create mode 100644 language/it/twitter_lang.php create mode 100644 language/pt/twitter_lang.php diff --git a/database.xml b/database.xml index ae0a311..b118340 100644 --- a/database.xml +++ b/database.xml @@ -42,6 +42,7 @@ id_user INT UNSIGNED NOT NULL, id_tweet VARCHAR(255) NOT NULL, screen_name VARCHAR(255) NOT NULL, + created_at VARCHAR(255) NOT NULL, userurl VARCHAR(255) NULL, text VARCHAR(260), PRIMARY KEY (id_user,id_tweet) diff --git a/language/br/twitter_lang.php b/language/br/twitter_lang.php new file mode 100644 index 0000000..e5acdd9 --- /dev/null +++ b/language/br/twitter_lang.php @@ -0,0 +1,37 @@ +" + * to avoid conflict with core / other translations items + * + */ + +$lang['module_twitter_title'] = "Módulo Twitter"; +$lang['module_twitter_about'] = "Informações sobre o módulo Twitter..."; +$lang['module_twitter_button_create_user'] = "Adicionar usuário twitter"; +$lang['module_twitter_title_edit_user'] = "Editar usuário"; +$lang['module_twitter_label_username'] = "Nome da conta"; +$lang['module_twitter_label_accesstoken'] = "Access Token"; +$lang['module_twitter_label_accesstokensecret'] = "Access Token Secret"; +$lang['module_twitter_label_consumerkey'] = "API Key"; +$lang['module_twitter_label_consumersecret'] = "API Secret"; +$lang['module_twitter_label_max_time_difference'] = "Intervalo de atualização (segundos)"; + +$lang['module_twitter_about_time'] = 'cerca de '; +$lang['module_twitter_ago'] = ' atrás'; +$lang['module_twitter_now'] = 'agora'; +$lang['module_twitter_second'] = 'segundo'; +$lang['module_twitter_seconds'] = 'segundos'; +$lang['module_twitter_minute'] = 'minuto'; +$lang['module_twitter_minutes'] = 'minutos'; +$lang['module_twitter_hour'] = 'hora'; +$lang['module_twitter_hours'] = 'horas'; +$lang['module_twitter_day'] = 'dia'; +$lang['module_twitter_days'] = 'dias'; +$lang['module_twitter_week'] = 'semana'; +$lang['module_twitter_weeks'] = 'semanas'; +$lang['module_twitter_month'] = 'mês'; +$lang['module_twitter_months'] = 'meses'; +$lang['module_twitter_year'] = 'ano'; +$lang['module_twitter_years'] = 'anos'; +?> \ No newline at end of file diff --git a/language/en/index.html b/language/en/index.html deleted file mode 100644 index c942a79..0000000 --- a/language/en/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - 403 Forbidden - - - -

Directory access is forbidden.

- - - \ No newline at end of file diff --git a/language/en/twitter_lang.php b/language/en/twitter_lang.php index 66bdb89..ab8e8bb 100644 --- a/language/en/twitter_lang.php +++ b/language/en/twitter_lang.php @@ -9,10 +9,30 @@ $lang['module_twitter_title'] = "Twitter module"; $lang['module_twitter_about'] = "About the Twitter module..."; $lang['module_twitter_button_create_user'] = "Add twitter user"; -$lang['ionize_module_twitter_label_username'] = "Twitter Account Name"; -$lang['ionize_module_twitter_label_accesstoken'] = "Twitter Api Access Token"; -$lang['ionize_module_twitter_label_accesstokensecret'] = "Access Token Secret"; -$lang['ionize_module_twitter_label_consumerkey'] = "Consumer Key"; -$lang['ionize_module_twitter_label_consumersecret'] = "Consumer Secret"; -$lang['ionize_module_twitter_label_max_time_difference'] = "Tweet update interval (seconds)"; -$lang['ionize_module_twitter_title_edit_user'] = "Edit User Account"; +$lang['module_twitter_title_edit_user'] = "Edit User Account"; +$lang['module_twitter_label_username'] = "Twitter Account Name"; +$lang['module_twitter_label_accesstoken'] = "Twitter Api Access Token"; +$lang['module_twitter_label_accesstokensecret'] = "Access Token Secret"; +$lang['module_twitter_label_consumerkey'] = "Consumer Key"; +$lang['module_twitter_label_consumersecret'] = "Consumer Secret"; +$lang['module_twitter_label_max_time_difference'] = "Tweet update interval (seconds)"; + +$lang['module_twitter_about_time'] = 'about '; +$lang['module_twitter_ago'] = ' ago'; +$lang['module_twitter_now'] = 'just now'; +$lang['module_twitter_second'] = 'second'; +$lang['module_twitter_seconds'] = 'seconds'; +$lang['module_twitter_minute'] = 'minute'; +$lang['module_twitter_minutes'] = 'minutes'; +$lang['module_twitter_hour'] = 'hour'; +$lang['module_twitter_hours'] = 'hours'; +$lang['module_twitter_day'] = 'day'; +$lang['module_twitter_days'] = 'days'; +$lang['module_twitter_week'] = 'week'; +$lang['module_twitter_weeks'] = 'weeks'; +$lang['module_twitter_month'] = 'month'; +$lang['module_twitter_months'] = 'months'; +$lang['module_twitter_year'] = 'year'; +$lang['module_twitter_years'] = 'years'; + +?> \ No newline at end of file diff --git a/language/es/twitter_lang.php b/language/es/twitter_lang.php new file mode 100644 index 0000000..89c7b37 --- /dev/null +++ b/language/es/twitter_lang.php @@ -0,0 +1,47 @@ +" + * to avoid conflict with core / other translations items + * + */ + +$lang['module_twitter_title'] = "Twitter module"; +$lang['module_twitter_about'] = "About the Twitter module..."; +$lang['module_twitter_button_create_user'] = "Add twitter user"; +$lang['module_twitter_title_edit_user'] = "Edit User Account"; +$lang['module_twitter_label_username'] = "Twitter Account Name"; +$lang['module_twitter_label_accesstoken'] = "Twitter Api Access Token"; +$lang['module_twitter_label_accesstokensecret'] = "Access Token Secret"; +$lang['module_twitter_label_consumerkey'] = "Consumer Key"; +$lang['module_twitter_label_consumersecret'] = "Consumer Secret"; +$lang['module_twitter_label_max_time_difference'] = "Tweet update interval (seconds)"; + +$lang['module_twitter_less_then_three_seconds'] = "ahora"; +$lang['module_twitter_less_then_minute'] = " s"; +$lang['module_twitter_less_then_two_minutes'] = "1 m"; +$lang['module_twitter_less_then_hour'] = " m"; +$lang['module_twitter_less_then_two_hours'] = "1 h"; +$lang['module_twitter_less_then_day'] = " h"; +$lang['module_twitter_less_then_two_days'] = "ayer"; +$lang['module_twitter_less_then_year'] = " d"; +$lang['module_twitter_more_then_year'] = "+1 a"; + +$lang['module_twitter_about_time'] = 'hace cerca de '; +$lang['module_twitter_ago'] = ' '; +$lang['module_twitter_now'] = 'ahora'; +$lang['module_twitter_second'] = 'segundo'; +$lang['module_twitter_seconds'] = 'segundos'; +$lang['module_twitter_minute'] = 'minuto'; +$lang['module_twitter_minutes'] = 'minutos'; +$lang['module_twitter_hour'] = 'hora'; +$lang['module_twitter_hours'] = 'horas'; +$lang['module_twitter_day'] = 'día'; +$lang['module_twitter_days'] = 'días'; +$lang['module_twitter_week'] = 'semana'; +$lang['module_twitter_weeks'] = 'semanas'; +$lang['module_twitter_month'] = 'mes'; +$lang['module_twitter_months'] = 'meses'; +$lang['module_twitter_year'] = 'año'; +$lang['module_twitter_years'] = 'años'; +?> \ No newline at end of file diff --git a/language/it/twitter_lang.php b/language/it/twitter_lang.php new file mode 100644 index 0000000..795494f --- /dev/null +++ b/language/it/twitter_lang.php @@ -0,0 +1,38 @@ +" + * to avoid conflict with core / other translations items + * + */ + +$lang['module_twitter_title'] = "Modulo Twitter"; +$lang['module_twitter_about'] = "Informazioni sul modulo Twitter..."; +$lang['module_twitter_button_create_user'] = "Aggiungi utente twitter"; +$lang['module_twitter_title_edit_user'] = "Modifica dati account"; +$lang['module_twitter_label_username'] = "Nome utente Twitter"; +$lang['module_twitter_label_accesstoken'] = "Api Access Token Twitter"; +$lang['module_twitter_label_accesstokensecret'] = "Access Token Secret"; +$lang['module_twitter_label_consumerkey'] = "Consumer Key"; +$lang['module_twitter_label_consumersecret'] = "Consumer Secret"; +$lang['module_twitter_label_max_time_difference'] = "Intervallo aggiornamento Tweet (secondi)"; + +$lang['module_twitter_about_time'] = 'circa '; +$lang['module_twitter_ago'] = ' fa'; +$lang['module_twitter_now'] = 'adesso'; +$lang['module_twitter_second'] = 'secondo'; +$lang['module_twitter_seconds'] = 'secondi'; +$lang['module_twitter_minute'] = 'minuto'; +$lang['module_twitter_minutes'] = 'minuti'; +$lang['module_twitter_hour'] = 'ore'; +$lang['module_twitter_hours'] = 'ore'; +$lang['module_twitter_day'] = 'giorno'; +$lang['module_twitter_days'] = 'giorni'; +$lang['module_twitter_week'] = 'settimana'; +$lang['module_twitter_weeks'] = 'settimane'; +$lang['module_twitter_month'] = 'mese'; +$lang['module_twitter_months'] = 'mesi'; +$lang['module_twitter_year'] = 'anno'; +$lang['module_twitter_years'] = 'anni'; + +?> \ No newline at end of file diff --git a/language/pt/twitter_lang.php b/language/pt/twitter_lang.php new file mode 100644 index 0000000..e9da558 --- /dev/null +++ b/language/pt/twitter_lang.php @@ -0,0 +1,38 @@ +" + * to avoid conflict with core / other translations items + * + */ + +$lang['module_twitter_title'] = "Módulo Twitter"; +$lang['module_twitter_about'] = "Informações sobre o módulo Twitter..."; +$lang['module_twitter_button_create_user'] = "Adicionar usuário twitter"; +$lang['module_twitter_title_edit_user'] = "Editar usuário"; +$lang['module_twitter_label_username'] = "Nome da conta"; +$lang['module_twitter_label_accesstoken'] = "Access Token"; +$lang['module_twitter_label_accesstokensecret'] = "Access Token Secret"; +$lang['module_twitter_label_consumerkey'] = "API Key"; +$lang['module_twitter_label_consumersecret'] = "API Secret"; +$lang['module_twitter_label_max_time_difference'] = "Intervalo de atualização (segundos)"; + +$lang['module_twitter_about_time'] = 'cerca de '; +$lang['module_twitter_ago'] = ' atrás'; +$lang['module_twitter_now'] = 'agora'; +$lang['module_twitter_second'] = 'segundo'; +$lang['module_twitter_seconds'] = 'segundos'; +$lang['module_twitter_minute'] = 'minuto'; +$lang['module_twitter_minutes'] = 'minutos'; +$lang['module_twitter_hour'] = 'hora'; +$lang['module_twitter_hours'] = 'horas'; +$lang['module_twitter_day'] = 'dia'; +$lang['module_twitter_days'] = 'dias'; +$lang['module_twitter_week'] = 'semana'; +$lang['module_twitter_weeks'] = 'semanas'; +$lang['module_twitter_month'] = 'mês'; +$lang['module_twitter_months'] = 'meses'; +$lang['module_twitter_year'] = 'ano'; +$lang['module_twitter_years'] = 'anos'; + +?> \ No newline at end of file diff --git a/libraries/twitter_tags.php b/libraries/twitter_tags.php index d387385..b4d34eb 100644 --- a/libraries/twitter_tags.php +++ b/libraries/twitter_tags.php @@ -123,7 +123,7 @@ public static function tag_tweets(FTL_Binding $tag) * @return String Tag attribute or '' * * @usage - * + * * * */ @@ -141,14 +141,42 @@ public static function tag_tweet(FTL_Binding $tag) $text = self::output_value($tag, $tweet[$field]); if ($field == 'text') { - $text = preg_replace("%www\.%", "http://www.", $text); - $text = preg_replace("%http://http://www\.%", "http://www.", $text); - $text = preg_replace("%https://http://www\.%", "https://www.", $text); - $exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; - preg_match_all($exUrl, $text, $url); - foreach($url[0] as $k=>$v) $text = str_replace($url[0][$k], ''.$url[0][$k].'', $text); + $text = preg_replace('/(https?:\/\/[^\s"<>]+)/','$1', $text); + $text = preg_replace('/(^|[\n\s])@([^\s"\t\n\r<:]*)/is', '$1@$2', $text); + $text = preg_replace('/(^|[\n\s])#([^\s"\t\n\r<:]*)/is', '$1#$2', $text); + } + + if ($field == 'created_at') { + $format = $tag->getAttribute('format'); + $d = time()-strtotime($text); + $t = array( + 'year'=>31556926, + 'month'=>2629744, + 'week'=>604800, + 'day'=>86400, + 'hour'=>3600, + 'minute'=>60, + 'second'=>1 + ); + + if ($format == 'short' || $format == 'medium' || $format == 'long' || $format == 'complete') { + $text = date(lang('dateformat_'.$format), strtotime($text)); + // TODO >> This value is not being translated. Should behave like + } + else { + // Simple function to get "time ago" + $text=lang('module_twitter_now'); + + foreach($t as $u=>$s){ + if($s<=$d){ + $v=floor($d/$s); + $text=lang('module_twitter_about_time').$v.' '.lang('module_twitter_'.$u.($v==1?'':'s')).lang('module_twitter_ago'); + break; + } + } + } } - + return $text; } diff --git a/models/twitter_user_model.php b/models/twitter_user_model.php index bea0b38..245153a 100644 --- a/models/twitter_user_model.php +++ b/models/twitter_user_model.php @@ -33,6 +33,7 @@ public function update_user($id_user, $content){ 'id_tweet' => $tweet->id_str, 'screen_name' => $tweet->user->screen_name, 'userurl' => $tweet->user->url, + 'created_at' => $tweet->created_at, 'text' => $tweet->text ); $this->{$this->db_group}->insert($this->_tweets_table, $data); diff --git a/views/admin/toolboxes/twitter_toolbox.php b/views/admin/toolboxes/twitter_toolbox.php index 4007a5e..ecf9773 100644 --- a/views/admin/toolboxes/twitter_toolbox.php +++ b/views/admin/toolboxes/twitter_toolbox.php @@ -15,7 +15,7 @@ admin_url + 'module/twitter/user/create', { 'width':350, - 'height':250 + 'height':220 } ); }); diff --git a/views/admin/user_detail.php b/views/admin/user_detail.php index 8c3934c..3a318ea 100644 --- a/views/admin/user_detail.php +++ b/views/admin/user_detail.php @@ -11,7 +11,7 @@
- +
- +
@@ -36,7 +36,7 @@
- +
@@ -46,7 +46,7 @@
- +
@@ -56,7 +56,7 @@
- +
@@ -66,7 +66,7 @@
- +
diff --git a/views/admin/user_list.php b/views/admin/user_list.php index 9b2a865..04a23fe 100644 --- a/views/admin/user_list.php +++ b/views/admin/user_list.php @@ -37,7 +37,7 @@ 'module/twitter/user/get/' + id, // URL of the controller { 'width':350, - 'height':200 + 'height':220 } ); });