diff src/plugins/plugin_misc_static_blog.py @ 1102:4c48e2549592

plugin misc_static_blog: add a menu for displaying a user static blog
author souliane <souliane@mailoo.org>
date Tue, 15 Jul 2014 18:28:40 +0200
parents adbde4a3a52f
children 731fbed0b9cf
line wrap: on
line diff
--- a/src/plugins/plugin_misc_static_blog.py	Tue Jul 15 18:26:36 2014 +0200
+++ b/src/plugins/plugin_misc_static_blog.py	Tue Jul 15 18:28:40 2014 +0200
@@ -17,9 +17,16 @@
 # 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/>.
 
+from sat.core.log import getLogger
+log = getLogger(__name__)
 
 from sat.core.i18n import _, D_
 from sat.core.constants import Const as C
+from sat.core import exceptions
+from sat.tools import xml_tools
+
+from twisted.internet import defer
+from twisted.words.protocols.jabber import jid
 
 
 PLUGIN_INFO = {
@@ -28,6 +35,7 @@
     "type": "MISC",
     "protocols": [],
     "dependencies": [],
+    "recommendations": ['MISC-ACCOUNT'],  # TODO: remove when all blogs can be retrieved
     "main": "StaticBlog",
     "handler": "no",
     "description": _("""Plugin for static blogs""")
@@ -61,4 +69,30 @@
     }
 
     def __init__(self, host):
+        try:  # TODO: remove this attribute when all blogs can be retrieved
+            self.domain = host.plugins['MISC-ACCOUNT'].getNewAccountDomain()
+        except KeyError:
+            self.domain = None
         host.memory.updateParams(self.params)
+        host.importMenu((D_("User"), D_("Public blog")), self._displayPublicBlog, security_limit=1, help_string=D_("Display public blog page"), type_=C.MENU_JID_CONTEXT)
+
+    def _displayPublicBlog(self, menu_data, profile):
+        """Check if the blog can be displayed and answer the frontend.
+
+        @param menu_data: %(menu_data)s
+        @param profile: %(doc_profile)s
+        @return: dict
+        """
+        try:
+            user_jid = jid.JID(menu_data['jid'])
+        except KeyError:
+            log.error(_("jid key is not present !"))
+            return defer.fail(exceptions.DataError)
+
+        # TODO: remove this check when all blogs can be retrieved
+        if self.domain and user_jid.host != self.domain:
+            info_ui = xml_tools.XMLUI("popup", title=D_("Not available"))
+            info_ui.addText(D_("Retrieving a blog from an external domain is not implemented yet."))
+            return {'xmlui': info_ui.toXml()}
+
+        return {"public_blog": user_jid.userhost()}