]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/util.php
Link rtsp, mms & tel URI schemes, correct pseudo-protocol ones.
[quix0rs-gnu-social.git] / lib / util.php
index 4d4a3b20f2debe7c1ac77884808a9d3133afab60..d7af3f2045eba96552e1e9f07d7e9b1b4c5d26d1 100644 (file)
 
 function common_server_error($msg, $code=500)
 {
-    static $status = array(500 => 'Internal Server Error',
-                           501 => 'Not Implemented',
-                           502 => 'Bad Gateway',
-                           503 => 'Service Unavailable',
-                           504 => 'Gateway Timeout',
-                           505 => 'HTTP Version Not Supported');
-
-    if (!array_key_exists($code, $status)) {
-        $code = 500;
-    }
-
-    $status_string = $status[$code];
-
-    header('HTTP/1.1 '.$code.' '.$status_string);
-    header('Content-type: text/plain');
-
-    print $msg;
-    print "\n";
-    exit();
+    $err = new ServerErrorAction($msg, $code);
+    $err->showPage();
 }
 
 // Show a user error
 function common_user_error($msg, $code=400)
 {
-    static $status = array(400 => 'Bad Request',
-                           401 => 'Unauthorized',
-                           402 => 'Payment Required',
-                           403 => 'Forbidden',
-                           404 => 'Not Found',
-                           405 => 'Method Not Allowed',
-                           406 => 'Not Acceptable',
-                           407 => 'Proxy Authentication Required',
-                           408 => 'Request Timeout',
-                           409 => 'Conflict',
-                           410 => 'Gone',
-                           411 => 'Length Required',
-                           412 => 'Precondition Failed',
-                           413 => 'Request Entity Too Large',
-                           414 => 'Request-URI Too Long',
-                           415 => 'Unsupported Media Type',
-                           416 => 'Requested Range Not Satisfiable',
-                           417 => 'Expectation Failed');
-
-    if (!array_key_exists($code, $status)) {
-        $code = 400;
-    }
-
-    $status_string = $status[$code];
-
-    header('HTTP/1.1 '.$code.' '.$status_string);
-
-    common_show_header('Error');
-    common_element('div', array('class' => 'error'), $msg);
-    common_show_footer();
+    $err = new ClientErrorAction($msg, $code);
+    $err->showPage();
 }
 
 function common_init_locale($language=null)
@@ -415,8 +370,6 @@ function common_canonical_email($email)
     return $email;
 }
 
-define('URL_REGEX', '^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))');
-
 function common_render_content($text, $notice)
 {
     $r = common_render_text($text);
@@ -424,6 +377,7 @@ function common_render_content($text, $notice)
     $r = preg_replace('/(^|\s+)@([A-Za-z0-9]{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r);
     $r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r);
     $r = preg_replace('/(^|\s+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r);
+    $r = preg_replace('/(^|\s)!([A-Za-z0-9]{1,64})/e', "'\\1!'.common_group_link($id, '\\2')", $r);
     return $r;
 }
 
@@ -432,7 +386,8 @@ function common_render_text($text)
     $r = htmlspecialchars($text);
 
     $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
-    $r = preg_replace_callback('@https?://[^\]>\s]+@', 'common_render_uri_thingy', $r);
+    $r = preg_replace_callback('@(ftp|http|https|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|xmpp|irc)://[^\]>\s]+@', 'common_render_uri_thingy', $r);
+    $r = preg_replace_callback('@(mailto|aim|tel):[^\]>\s]+@', 'common_render_uri_thingy', $r); // Pseudo-protocols don't require '//' after ':'.
     $r = preg_replace('/(^|\s+)#([A-Za-z0-9_\-\.]{1,64})/e', "'\\1#'.common_tag_link('\\2')", $r);
     // XXX: machine tags
     return $r;
@@ -595,6 +550,17 @@ function common_at_link($sender_id, $nickname)
     }
 }
 
+function common_group_link($sender_id, $nickname)
+{
+    $sender = Profile::staticGet($sender_id);
+    $group = User_group::staticGet('nickname', common_canonical_nickname($nickname));
+    if ($group && $sender->isMember($group)) {
+        return '<span class="vcard"><a href="'.htmlspecialchars($group->permalink()).'" class="url"><span class="fn nickname">'.$nickname.'</span></a></span>';
+    } else {
+        return $nickname;
+    }
+}
+
 function common_at_hash_link($sender_id, $tag)
 {
     $user = User::staticGet($sender_id);
@@ -856,6 +822,8 @@ function common_fancy_url($action, $args=null)
         return common_path('settings/im');
      case 'avatarsettings':
         return common_path('settings/avatar');
+     case 'groupsearch':
+        return common_path('search/group' . (($args) ? ('?' . http_build_query($args)) : ''));
      case 'peoplesearch':
         return common_path('search/people' . (($args) ? ('?' . http_build_query($args)) : ''));
      case 'noticesearch':
@@ -918,7 +886,7 @@ function common_fancy_url($action, $args=null)
      case 'newgroup':
         return common_path('group/new');
      case 'showgroup':
-        return common_path('group/'.$args['nickname']);
+        return common_path('group/'.$args['nickname'] . (($args['page']) ? ('?page=' . $args['page']) : ''));
      case 'editgroup':
         return common_path('group/'.$args['nickname'].'/edit');
      case 'joingroup':
@@ -931,8 +899,14 @@ function common_fancy_url($action, $args=null)
         return common_path('group/'.$args['nickname'].'/rss');
      case 'groupmembers':
         return common_path('group/'.$args['nickname'].'/members');
+     case 'grouplogo':
+        return common_path('group/'.$args['nickname'].'/logo');
      case 'usergroups':
-        return common_path($args['nickname'].'/groups');
+        $nickname = $args['nickname'];
+        unset($args['nickname']);
+        return common_path($nickname.'/groups' . (($args) ? ('?' . http_build_query($args)) : ''));
+     case 'groups':
+        return common_path('group' . (($args) ? ('?' . http_build_query($args)) : ''));
      default:
         return common_simple_url($action, $args);
     }
@@ -1052,95 +1026,11 @@ function common_redirect($url, $code=307)
     $xo->startXML('a',
                   '-//W3C//DTD XHTML 1.0 Strict//EN',
                   'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
-    $xo->output('a', array('href' => $url), $url);
+    $xo->element('a', array('href' => $url), $url);
     $xo->endXML();
     exit;
 }
 
-function common_save_replies($notice)
-{
-    // Alternative reply format
-    $tname = false;
-    if (preg_match('/^T ([A-Z0-9]{1,64}) /', $notice->content, $match)) {
-        $tname = $match[1];
-    }
-    // extract all @messages
-    $cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match);
-
-    $names = array();
-
-    if ($cnt || $tname) {
-        // XXX: is there another way to make an array copy?
-        $names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]);
-    }
-
-    $sender = Profile::staticGet($notice->profile_id);
-
-    $replied = array();
-
-    // store replied only for first @ (what user/notice what the reply directed,
-    // we assume first @ is it)
-
-    for ($i=0; $i<count($names); $i++) {
-        $nickname = $names[$i];
-        $recipient = common_relative_profile($sender, $nickname, $notice->created);
-        if (!$recipient) {
-            continue;
-        }
-        if ($i == 0 && ($recipient->id != $sender->id) && !$notice->reply_to) { // Don't save reply to self
-            $reply_for = $recipient;
-            $recipient_notice = $reply_for->getCurrentNotice();
-            if ($recipient_notice) {
-                $orig = clone($notice);
-                $notice->reply_to = $recipient_notice->id;
-                $notice->update($orig);
-            }
-        }
-        // Don't save replies from blocked profile to local user
-        $recipient_user = User::staticGet('id', $recipient->id);
-        if ($recipient_user && $recipient_user->hasBlocked($sender)) {
-            continue;
-        }
-        $reply = new Reply();
-        $reply->notice_id = $notice->id;
-        $reply->profile_id = $recipient->id;
-        $id = $reply->insert();
-        if (!$id) {
-            $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
-            common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message);
-            common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message));
-            return;
-        } else {
-            $replied[$recipient->id] = 1;
-        }
-    }
-
-    // Hash format replies, too
-    $cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $notice->content, $match);
-    if ($cnt) {
-        foreach ($match[1] as $tag) {
-            $tagged = Profile_tag::getTagged($sender->id, $tag);
-            foreach ($tagged as $t) {
-                if (!$replied[$t->id]) {
-                    // Don't save replies from blocked profile to local user
-                    $t_user = User::staticGet('id', $t->id);
-                    if ($t_user && $t_user->hasBlocked($sender)) {
-                        continue;
-                    }
-                    $reply = new Reply();
-                    $reply->notice_id = $notice->id;
-                    $reply->profile_id = $t->id;
-                    $id = $reply->insert();
-                    if (!$id) {
-                        common_log_db_error($reply, 'INSERT', __FILE__);
-                        return;
-                    }
-                }
-            }
-        }
-    }
-}
-
 function common_broadcast_notice($notice, $remote=false)
 {
 
@@ -1251,23 +1141,6 @@ function common_enqueue_notice($notice)
     return $result;
 }
 
-function common_dequeue_notice($notice)
-{
-    $qi = Queue_item::staticGet($notice->id);
-    if ($qi) {
-        $result = $qi->delete();
-        if (!$result) {
-            $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
-            common_log(LOG_ERR, 'DB error deleting queue item: ' . $last_error->message);
-            return false;
-        }
-        common_log(LOG_DEBUG, 'complete dequeueing notice ID = ' . $notice->id);
-        return $result;
-    } else {
-        return false;
-    }
-}
-
 function common_real_broadcast($notice, $remote=false)
 {
     $success = true;
@@ -1660,11 +1533,6 @@ function common_session_token()
     return $_SESSION['token'];
 }
 
-function common_nudge_response()
-{
-    common_element('p', array('id' => 'nudge_response'), _('Nudge sent!'));
-}
-
 function common_cache_key($extra)
 {
     return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra;