]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
store rendered content on save; display pre-rendered content
authorEvan Prodromou <evan@prodromou.name>
Wed, 9 Jul 2008 19:52:38 +0000 (15:52 -0400)
committerEvan Prodromou <evan@prodromou.name>
Wed, 9 Jul 2008 19:52:38 +0000 (15:52 -0400)
darcs-hash:20080709195238-84dde-a5df98439faaf7058571b5e345f165adece9c7b8.gz

actions/newnotice.php
actions/postnotice.php
actions/showstream.php
fixup_notices_rendered.php [new file with mode: 0755]
lib/stream.php
xmppdaemon.php

index 3abe875d5c046a10edf04283b6f2d1b2d517d674..de040ef77a38301d7152c2d9be6043e861dfa6f7 100644 (file)
@@ -53,6 +53,8 @@ class NewnoticeAction extends Action {
                        return;
                }
 
+               $notice->rendered = common_render_content($notice->content, $notice);
+               
                $id = $notice->insert();
 
                if (!$id) {
index 718ebdab05db85736c7f83d12c10228be65ba7dd..d83ceb971a61bd276f8beea68b86a8a4d708a5c7 100644 (file)
@@ -78,6 +78,7 @@ class PostnoticeAction extends Action {
                        $notice->profile_id = $remote_profile->id;
                        $notice->uri = $notice_uri;
                        $notice->content = $content;
+                       $notice->rendered = common_render_content($notice->content, $notice);
                        if ($notice_url) {
                                $notice->url = $notice_url;
                        }
@@ -87,6 +88,7 @@ class PostnoticeAction extends Action {
                                common_server_error(_t('Error inserting notice'), 500);
                                return false;
                        }
+                       common_save_replies($notice);   
                        common_broadcast_notice($notice, true);
                }
                return true;
index 4060535313f0923a3bc632bac3bd5a588c8c1580..eed63fab34f58c989292253ea8306b54d8a9b4a0 100644 (file)
@@ -344,7 +344,14 @@ class ShowstreamAction extends StreamAction {
                if ($notice->find(true)) {
                        # FIXME: URL, image, video, audio
                        common_element_start('p', array('class' => 'notice_current'));
-                       common_raw(common_render_content($notice->content, $notice));
+                       if ($notice->rendered) {
+                               common_raw($notice->rendered);
+                       } else {
+                               # XXX: may be some uncooked notices in the DB,
+                               # we cook them right now. This can probably disappear in future
+                               # versions (>> 0.4.x)
+                               common_raw(common_render_content($notice->content, $notice));
+                       }
                        common_element_end('p');
                }
        }
diff --git a/fixup_notices_rendered.php b/fixup_notices_rendered.php
new file mode 100755 (executable)
index 0000000..546eef3
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/env php
+<?php
+/*
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, Controlez-Vous, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+# Abort if called from a web server
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+       print "This script must be run from the command line\n";
+       exit();
+}
+
+define('INSTALLDIR', dirname(__FILE__));
+define('LACONICA', true);
+
+require_once(INSTALLDIR . '/lib/common.php');
+
+common_log(LOG_INFO, 'Starting to render old notices.');
+
+$notice = new Notice();
+$cnt = $notice->find();
+
+while ($notice->fetch()) {
+       if (!$notice->rendered) {
+               common_log(LOG_INFO, 'Pre-rendering notice #' . $notice->id);
+               $original = clone($notice);
+               $notice->rendered = common_render_content($notice->content, $notice);
+               $result = $notice->update($original);
+               if (!$result) {
+                       common_log_db_error($notice, 'UPDATE', __FILE__);
+               }
+       }
+}
index 431580b13662cd2d2d4c3cee0dba3c5ac3d21f00..0cf495f60ead9046da5c07c5b1026d0656c6ad84 100644 (file)
@@ -78,7 +78,14 @@ class StreamAction extends Action {
                                           $profile->nickname);
                # FIXME: URL, image, video, audio
                common_element_start('p', array('class' => 'content'));
-               common_raw(common_render_content($notice->content, $notice));
+               if ($notice->rendered) {
+                       common_raw($notice->rendered);
+               } else {
+                       # XXX: may be some uncooked notices in the DB,
+                       # we cook them right now. This can probably disappear in future
+                       # versions (>> 0.4.x)
+                       common_raw(common_render_content($notice->content, $notice));
+               }
                common_element_end('p');
                $noticeurl = common_local_url('shownotice', array('notice' => $notice->id));
                common_element_start('p', 'time');
index 7086044716ae72bfd4a889ee464549e7c0257ba6..dd262282885294d18a9132c1e2ecc324f76c989c 100755 (executable)
@@ -192,6 +192,7 @@ class XMPPDaemon {
                $notice = new Notice();
                $notice->profile_id = $user->id;
                $notice->content = trim(substr($pl['body'], 0, 140));
+               $notice->rendered = common_render_content($notice->content, $notice);
                $notice->created = DB_DataObject_Cast::dateTime();
                $notice->query('BEGIN');
                $id = $notice->insert();