source: products/qPingTool/tags/0.2/PingTool.py

Last change on this file was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 4.8 KB
Line 
1# from Globals import InitializeClass
2from Products.CMFCore.ActionProviderBase import ActionProviderBase
3from Products.CMFPlone.PloneFolder import PloneFolder
4from config import TOOL_ID, PROJECTNAME
5from Products.Archetypes.public import *
6from Products.CMFPlone.interfaces.OrderedContainer import IOrderedContainer
7from Products.CMFCore.ActionInformation import ActionInformation
8from Products.CMFCore.Expression import Expression
9from Products.CMFCore.CMFCorePermissions import ManageProperties
10from Acquisition import aq_base
11
12from Products.XMLRPCMethod.XMLRPCMethod import RPCThread, XMLRPCMethod
13from Products.CMFCore.utils import getToolByName
14from zLOG import LOG
15
16_marker = []
17def modify_fti(fti):
18    fti['title'] = 'Portal Ping Tool'
19    fti['allowed_content_types'] = ('PingInfo',)
20    fti['filter_content_types'] = 1
21    fti['icon'] = 'tool.gif'
22    actions = (
23              { 'id': 'view',
24                'name': 'View',
25                'action': 'string:folder_contents',
26                'permissions': ('Manage portal',),
27                'category':'object',
28              }, )
29    fti['actions']=tuple(actions)
30
31
32class PingTool(BaseFolder, PloneFolder, ActionProviderBase): #, BaseFolder):
33    """This tool serve for operation with ActionInfo objects
34    """
35
36    schema = BaseSchema
37    filter_content_types = 1
38    allowed_content_types = ['PingInfo']
39    global_allowed = 0
40
41    meta_type = archetype_name = portal_type = 'PingTool'
42
43
44    __implements__ = (IOrderedContainer,)
45    _actions = ( ActionInformation(
46                    id='ping'
47                  , title='Ping setup'
48                  , action=Expression(
49                        text='string:${folder_url}/ping_setup')
50                  , condition=Expression(
51                        text='python: folder==object and portal.portal_syndication.isSyndicationAllowed(object)')
52                  , permissions=(ManageProperties,)
53                  , category='folder'
54                  , visible=1
55                  )
56               ,
57               )                       
58
59
60    def pingFeedReader(self,context):
61        """ ping """
62        status = 'success'
63        message = 'The servers are pinged'
64        blog = context.simpleblog_tool.getFrontPage(context)
65        title = blog.Title()
66        portal = context.portal_url.getPortalObject()
67        canonical_url = portal.getProperty('canonical_url', None)
68        if canonical_url:
69            #return "failure", "Please setup 'canonical_url' property for your Plone site"
70            url = context.portal_url.getRelativeContentURL(blog)
71            url = canonical_url + url         
72        else:
73            url = blog.absolute_url() 
74        ps = getToolByName(context,'portal_syndication')
75        rss_templates = {'Blog':'','RSS1':'/RSS','RSS2':'/RSS2'}
76        pingProp = self.getPingProperties(blog)
77        result = 'ok'
78        if not pingProp['enable_ping']:
79           message = 'Ping is dissabled'
80           return status, message
81        if ps.isSyndicationAllowed(blog):
82            sites = pingProp['ping_sites']     
83            if sites:
84                for site in sites:
85                    site_obj = getattr(self,site)
86                    site_rss_version = rss_templates[site_obj.getRss_version()]
87                    site_method = site_obj.getMethod_name()
88                    site_url = site_obj.getUrl()
89                     
90                    PingMethod = XMLRPCMethod('myid',"",site_url,site_method,25)
91                    blog_url = url + site_rss_version
92                    try: 
93                        #LOG('qPing', 0, title, blog_url, site_url)
94                        result = PingMethod(title,blog_url)
95                    except:
96                        LOG('qPingTool', 100,"The site "+  site_url+" generated error for "+ blog_url, result)
97                    message += '\n'+ str(result)
98        return status, message
99
100
101    def setupPing(self,context,
102                  enable_ping=0,
103                  ping_sites=(),
104                  REQUEST=None):
105        """   """       
106        obj=aq_base(context)
107        status = 'success'
108        message = 'Your changes have been saved'
109
110        syInfo = getattr(obj, 'syndication_information', None)
111
112        if syInfo is None:
113            message = 'Syndication is Disabled'
114            status = 'failed'
115        syInfo.ping_sites = list(ping_sites)
116        syInfo.enable_ping = enable_ping
117        return status, message
118
119    def getPingProperties(self, context):
120        """ """
121        obj=aq_base(context)
122
123        syInfo = getattr(obj, 'syndication_information', None)
124        pingPropeties={}
125        pingPropeties['ping_sites'] = getattr(syInfo,'ping_sites',[])
126        pingPropeties['enable_ping'] = getattr(syInfo,'enable_ping',0)
127        return  pingPropeties
128
129registerType(PingTool)
Note: See TracBrowser for help on using the repository browser.