root/branches/feature-narrow-tables/lib/MT/Core.pm @ 1763

Revision 1763, 33.2 kB (checked in by mpaschal, 20 months ago)

Declare these meta objects as objects, until the upgrader can know them automatically
BugzID: 68749

  • Property svn:keywords set to Id Revision
Line 
1# Movable Type (r) Open Source (C) 2001-2008 Six Apart, Ltd.
2# This program is distributed under the terms of the
3# GNU General Public License, version 2.
4#
5# $Id$
6
7package MT::Core;
8
9use strict;
10use MT;
11use base 'MT::Component';
12
13# This is just to make our localization scanner happy
14sub trans {
15    return shift;
16}
17
18sub name {
19    return "Core";
20}
21
22my $core_registry;
23
24BEGIN {
25    $core_registry = {
26        version        => MT->VERSION,
27        schema_version => MT->schema_version,
28        object_drivers => {
29            'mysql' => {
30                label => 'MySQL Database',
31                dbd_package => 'DBD::mysql',
32                config_package => 'DBI::mysql',
33            },
34            'postgres' => {
35                label => 'PostgreSQL Database',
36                dbd_package => 'DBD::Pg',
37                dbd_version => '1.32',
38                config_package => 'DBI::postgres',
39            },
40            'sqlite' => {
41                label => 'SQLite Database',
42                dbd_package => 'DBD::SQLite',
43                config_package => 'DBI::sqlite',
44            },
45            'sqlite2' => {
46                label => 'SQLite Database (v2)',
47                dbd_package => 'DBD::SQLite2',
48                config_package => 'DBI::sqlite',
49            },
50        },
51        object_types   => {
52            'entry'           => 'MT::Entry',
53            'entry_meta'      => 'MT::Entry::Meta',
54            'author'          => 'MT::Author',
55            'author_meta'     => 'MT::Author::Meta',
56            'asset'           => 'MT::Asset',
57            'asset_meta'      => 'MT::Asset::Meta',
58            'file'            => 'MT::Asset',
59            'asset.image'     => 'MT::Asset::Image',
60            'image'           => 'MT::Asset::Image',
61            'asset.audio'     => 'MT::Asset::Audio',
62            'audio'           => 'MT::Asset::Audio',
63            'asset.video'     => 'MT::Asset::Video',
64            'video'           => 'MT::Asset::Video',
65            'entry.page'      => 'MT::Page',
66            'page'            => 'MT::Page',
67            'category.folder' => 'MT::Folder',
68            'folder'          => 'MT::Folder',
69            'category'        => 'MT::Category',
70            'user'            => 'MT::Author',
71            'commenter'       => 'MT::Author',
72            'blog'            => 'MT::Blog',
73            'template'        => 'MT::Template',
74            'template_meta'   => 'MT::Template::Meta',
75            'comment'         => 'MT::Comment',
76            'notification'    => 'MT::Notification',
77            'templatemap'     => 'MT::TemplateMap',
78            'banlist'         => 'MT::IPBanList',
79            'tbping'          => 'MT::TBPing',
80            'ping'            => 'MT::TBPing',
81            'ping_cat'        => 'MT::TBPing',
82            'log'             => 'MT::Log',
83            'log.ping'        => 'MT::Log::TBPing',
84            'log.entry'       => 'MT::Log::Entry',
85            'log.comment'     => 'MT::Log::Comment',
86            'log.system'      => 'MT::Log',
87            'tag'             => 'MT::Tag',
88            'role'            => 'MT::Role',
89            'association'     => 'MT::Association',
90            'permission'      => 'MT::Permission',
91            'fileinfo'        => 'MT::FileInfo',
92            'placement'       => 'MT::Placement',
93            'plugindata'      => 'MT::PluginData',
94            'session'         => 'MT::Session',
95            'trackback'       => 'MT::Trackback',
96            'config'          => 'MT::Config',
97            'objecttag'       => 'MT::ObjectTag',
98            'objectscore'     => 'MT::ObjectScore',
99            'objectasset'     => 'MT::ObjectAsset',
100
101            # TheSchwartz tables
102            'ts_job'        => 'MT::TheSchwartz::Job',
103            'ts_error'      => 'MT::TheSchwartz::Error',
104            'ts_exitstatus' => 'MT::TheSchwartz::ExitStatus',
105            'ts_funcmap'    => 'MT::TheSchwartz::FuncMap',
106        },
107        permissions => {
108            'system.administer' => {
109                label => trans("System Administrator"),
110                group => 'sys_admin',
111                order => 0,
112            },
113            'system.create_blog' => {
114                label => trans("Create Blogs"),
115                group => 'sys_admin',
116                order => 100,
117            },
118            'system.manage_plugins' => {
119                label => trans('Manage Plugins'),
120                group => 'sys_admin',
121                order => 200,
122            },
123            'system.edit_templates' => {
124                label => trans('Manage Templates'),
125                group => 'sys_admin',
126                order => 250,
127            },
128            'system.view_log' => {
129                label => trans("View System Activity Log"),
130                group => 'sys_admin',
131                order => 300,
132            },
133
134            'blog.administer_blog' => {
135                label => trans("Blog Administrator"),
136                group => 'blog_admin',
137                order => 0,
138            },
139            'blog.edit_config' => {
140                label => trans("Configure Blog"),
141                group => 'blog_admin',
142                order => 100,
143            },
144            'blog.set_publish_paths' => {
145                label => trans('Set Publishing Paths'),
146                group => 'blog_admin',
147                order => 200,
148            },
149            'blog.edit_categories' => {
150                label => trans('Manage Categories'),
151                group => 'blog_admin',
152                order => 300,
153            },
154            'blog.edit_tags' => {
155                label => trans('Manage Tags'),
156                group => 'blog_admin',
157                order => 400,
158            },
159            'blog.edit_notifications' => {
160                label => trans('Manage Address Book'),
161                group => 'blog_admin',
162                order => 500,
163            },
164            'blog.view_blog_log' => {
165                label => trans('View Activity Log'),
166                group => 'blog_admin',
167                order => 600,
168            },
169
170            'blog.create_post' => {
171                label => trans('Create Entries'),
172                group => 'auth_pub',
173                order => 100,
174            },
175            'blog.publish_post' => {
176                label => trans('Publish Entries'),
177                group => 'auth_pub',
178                order => 200,
179            },
180            'blog.send_notifications' => {
181                label => trans('Send Notifications'),
182                group => 'auth_pub',
183                order => 300,
184            },
185            'blog.edit_all_posts' => {
186                label => trans('Edit All Entries'),
187                group => 'auth_pub',
188                order => 400,
189            },
190            'blog.manage_pages' => {
191                label => trans('Manage Pages'),
192                group => 'auth_pub',
193                order => 500,
194            },
195            'blog.rebuild' => {
196                label => trans('Publish Blog'),
197                group => 'auth_pub',
198                order => 600,
199            },
200
201            'blog.edit_templates' => {
202                label => trans('Manage Templates'),
203                group => 'blog_design',
204                order => 100,
205            },
206
207            'blog.upload' => {
208                label => trans("Upload File"),
209                group => 'blog_upload',
210                order => 100,
211            },
212            'blog.save_image_defaults' => {
213                label => trans('Save Image Defaults'),
214                group => 'blog_upload',
215                order => 200,
216            },
217            'blog.edit_assets' => {
218                label => trans('Manage Assets'),
219                group => 'blog_upload',
220                order => 300,
221            },
222
223            'blog.comment' => {
224                label => trans("Post Comments"),
225                group => 'blog_comment',
226                order => 100,
227            },
228            'blog.manage_feedback' => {
229                label => trans('Manage Feedback'),
230                group => 'blog_comment',
231                order => 200,
232            },
233        },
234        config_settings => {
235            'AtomApp' => {
236                type    => 'HASH',
237                default => {
238                    weblog => 'MT::AtomServer::Weblog::Legacy',
239                    '1.0'  => 'MT::AtomServer::Weblog',
240                },
241            },
242            'SchemaVersion'   => undef,
243            'MTVersion'       => undef,
244            'NotifyUpgrade'   => { default => 1 },
245            'Database'        => undef,
246            'DBHost'          => undef,
247            'DBSocket'        => undef,
248            'DBPort'          => undef,
249            'DBUser'          => undef,
250            'DBPassword'      => undef,
251            'DefaultLanguage' => {
252                default => 'en_US',
253            },
254            'LocalPreviews'   => { default => 0 },
255            'DefaultSiteRoot' => { default => '', },
256            'DefaultSiteURL'  => { default => '', },
257            'DefaultCommenterAuth' => { default => 'MovableType,LiveJournal,Vox' },
258            'TemplatePath'    => {
259                default => 'tmpl',
260                path    => 1,
261            },
262            'WeblogTemplatesPath' => {
263                default => 'default_templates',
264                path    => 1,
265            },
266            'AltTemplatePath' => {
267                default => 'alt-tmpl',
268                path    => 1,
269            },
270            'CSSPath'    => { default => 'css', },
271            'ImportPath' => {
272                default => 'import',
273                path    => 1,
274            },
275            'PluginPath' => {
276                default => 'plugins',
277                path    => 1,
278                type    => 'ARRAY',
279            },
280            'EnableArchivePaths' => { default => 0, },
281            'SearchTemplatePath' => {
282                default => 'search_templates',
283                path    => 1,
284            },
285            'ObjectDriver'  => undef,
286            'AllowedTextFilters' => undef,
287            'Serializer'    => { default => 'MT', },
288            'SendMailPath'  => { default => '/usr/lib/sendmail', },
289            'RsyncPath'     => undef,
290            'TimeOffset'    => { default => 0, },
291            'WSSETimeout'   => { default => 120, },
292            'StaticWebPath' => { default => '', },
293            'StaticFilePath' => undef,
294            'CGIPath'       => { default => '/cgi-bin/', },
295            'AdminCGIPath'  => undef,
296            'CookieDomain'  => undef,
297            'CookiePath'    => undef,
298            'MailEncoding'  => {
299                default => 'ISO-8859-1',
300            },
301            'MailTransfer'      => { default => 'sendmail' },
302            'SMTPServer'        => { default => 'localhost', },
303            'DebugEmailAddress' => undef,
304            'WeblogsPingURL' => { default => 'http://rpc.weblogs.com/RPC2', },
305            'BlogsPingURL'   => { default => 'http://ping.blo.gs/', },
306            'MTPingURL' => { default => 'http://www.movabletype.org/update/', },
307            'TechnoratiPingURL' =>
308              { default => 'http://rpc.technorati.com/rpc/ping', },
309            'GooglePingURL' =>
310              { default => 'http://blogsearch.google.com/ping/RPC2', },
311            'CGIMaxUpload'          => { default => 20_480_000 },
312            'DBUmask'               => { default => '0111', },
313            'HTMLUmask'             => { default => '0111', },
314            'UploadUmask'           => { default => '0111', },
315            'DirUmask'              => { default => '0000', },
316            'HTMLPerms'             => { default => '0666', },
317            'UploadPerms'           => { default => '0666', },
318            'NoTempFiles'           => { default => 0, },
319            'TempDir'               => { default => '/tmp', },
320            'RichTextEditor'        => { default => 'archetype', },
321            'EntriesPerRebuild'     => { default => 40, },
322            'UseNFSSafeLocking'     => { default => 0, },
323            'NoLocking'             => { default => 0, },
324            'NoHTMLEntities'        => { default => 1, },
325            'NoCDATA'               => { default => 0, },
326            'NoPlacementCache'      => { default => 0, },
327            'NoPublishMeansDraft'   => { default => 0, },
328            'IgnoreISOTimezones'    => { default => 0, },
329            'PingTimeout'           => { default => 60, },
330            'HTTPTimeout'           => { default => 60 },
331            'PingInterface'         => undef,
332            'HTTPInterface'         => undef,
333            'PingProxy'             => undef,
334            'HTTPProxy'             => undef,
335            'PingNoProxy'           => { default => 'localhost', },
336            'HTTPNoProxy'           => { default => 'localhost', },
337            'ImageDriver'           => { default => 'ImageMagick', },
338            'NetPBMPath'            => undef,
339            'AdminScript'           => { default => 'mt.cgi', },
340            'ActivityFeedScript'    => { default => 'mt-feed.cgi', },
341            'ActivityFeedItemLimit' => { default => 50, },
342            'CommentScript'         => { default => 'mt-comments.cgi', },
343            'TrackbackScript'       => { default => 'mt-tb.cgi', },
344            'SearchScript'          => { default => 'mt-search.cgi', },
345            'XMLRPCScript'          => { default => 'mt-xmlrpc.cgi', },
346            'ViewScript'            => { default => 'mt-view.cgi', },
347            'AtomScript'            => { default => 'mt-atom.cgi', },
348            'UpgradeScript'         => { default => 'mt-upgrade.cgi', },
349            'CheckScript'           => { default => 'mt-check.cgi', },
350            'NotifyScript'          => { default => 'mt-add-notify.cgi', },
351            'PublishCharset'        => {
352                default => 'utf-8',
353            },
354            'SafeMode'           => { default => 1, },
355            'GlobalSanitizeSpec' => {
356                default => 'a href,b,i,br/,p,strong,em,ul,ol,li,blockquote,pre',
357            },
358            'GenerateTrackBackRSS' => { default => 0, },
359
360            ## Search settings, copied from Jay's mt-search and integrated
361            ## into default config.
362            'NoOverride'          => { default => '', },
363            'RegexSearch'         => { default => 0, },
364            'CaseSearch'          => { default => 0, },
365            'ResultDisplay'       => { default => 'descend', },
366            'ExcerptWords'        => { default => 40, },
367            'SearchElement'       => { default => 'entries', },
368            'ExcludeBlogs'        => undef,
369            'IncludeBlogs'        => undef,
370            'DefaultTemplate'     => { default => 'default.tmpl', },
371            'Type'                => { default => 'straight', },
372            'MaxResults'          => { default => '20', },
373            'SearchCutoff'        => { default => '9999999', },
374            'CommentSearchCutoff' => { default => '30', },
375            'AltTemplate'         => {
376                type    => 'ARRAY',
377                default => 'feed results_feed.tmpl',
378            },
379            'SearchSortBy'    => undef,
380            'SearchSortOrder' => { default => 'ascend', },
381            'SearchNoOverride'      => { alias => 'NoOverride', },
382            'SearchResultDisplay'   => { alias => 'ResultDisplay', },
383            'SearchExcerptWords'    => { alias => 'ExcerptWords', },
384            'SearchDefaultTemplate' => { alias => 'DefaultTemplate', },
385            'SearchMaxResults'      => { alias => 'MaxResults', },
386            'SearchAltTemplate'     => { alias => 'AltTemplate' },
387            'SearchPrivateTags'     => { default => 0 },
388            'RegKeyURL' =>
389              { default => 'http://www.typekey.com/extras/regkeys.txt', },
390            'IdentitySystem' =>
391              { default => 'http://www.typekey.com/t/typekey', },
392            'SignOnURL' =>
393              { default => 'https://www.typekey.com/t/typekey/login?', },
394            'SignOffURL' =>
395              { default => 'https://www.typekey.com/t/typekey/logout?', },
396            'IdentityURL'     => { default => "http://profile.typekey.com/", },
397            'DynamicComments' => { default => 0, },
398            'SignOnPublicKey' => { default => '', },
399            'ThrottleSeconds' => { default => 20, },
400            'SearchThrottleIPWhitelist' => undef,
401            'OneHourMaxPings'           => { default => 10, },
402            'OneDayMaxPings'            => { default => 50, },
403            'SupportURL'                => {
404                default => 'http://www.sixapart.com/movabletype/support/',
405            },
406            'NewsURL' => {
407                default => 'http://www.sixapart.com/movabletype/news/',
408            },
409            'NewsboxURL' => {
410                default => 'http://www.sixapart.com/movabletype/news/mt4_news_widget.html',
411            },
412            # 'MTNewsURL' => {
413            #     default => 'http://www.sixapart.com/movabletype/news/mt4_news_widget.html',
414            # },
415            'LearningNewsURL' => {
416                default => 'http://learning.movabletype.org/newsbox.html',
417            },
418            # 'HackingNewsURL' => {
419            #     default => 'http://hacking.movabletype.org/newsbox.html',
420            # },
421            'EmailAddressMain'      => undef,
422            'EmailReplyTo'          => undef,
423            'EmailNotificationBcc'  => { default => 1, },
424            'CommentSessionTimeout' => { default => 60 * 60 * 24 * 3, },
425            'UserSessionTimeout'    => { default => 60 * 60 * 4, },
426            'LaunchBackgroundTasks' => { default => 0 },
427            'TypeKeyVersion'        => { default => '1.1' },
428            'TransparentProxyIPs'   => { default => 0, },
429            'DebugMode'             => { default => 0, },
430            'ShowIPInformation'     => { default => 0, },
431            'AllowComments'         => { default => 1, },
432            'AllowPings'            => { default => 1, },
433            'HelpURL'               => undef,
434            #'HelpURL'               => {
435            #    default => 'http://www.sixapart.com/movabletype/docs/4.0/',
436            #},
437            'UsePlugins'               => { default => 1, },
438            'PluginSwitch'             => { type    => 'HASH', },
439            'PluginSchemaVersion'      => { type    => 'HASH', },
440            'OutboundTrackbackLimit'   => { default => 'any', },
441            'OutboundTrackbackDomains' => { type    => 'ARRAY', },
442            'IndexBasename'            => { default => 'index', },
443            'LogExportEncoding'        => {
444                default => 'utf-8',
445            },
446            'ActivityFeedsRunTasks' => { default => 1, },
447            'ExportEncoding'        => {
448                default => 'utf-8',
449            },
450            'SQLSetNames'     => undef,
451            'UseSQLite2'      => { default => 0, },
452            'UseJcodeModule'  => { default => 0, },
453            'DefaultTimezone' => {
454                default => '0',
455            },
456            'CategoryNameNodash' => {
457                default => '0',
458            },
459            'DefaultListPrefs' => {
460                type    => 'HASH',
461            },
462            'DefaultEntryPrefs' => {
463                type    => 'HASH',
464                default => {
465                    type   => 'Default',         # Default|All|Custom
466                    button => 'Below',           # Above|Below|Both
467                    height => 162,               # textarea height
468                },
469            },
470            'DeleteFilesAtRebuild'      => { default => 1, },
471            'RebuildAtDelete'           => { default => 1, },
472            'MaxTagAutoCompletionItems' => { default => 10000, },
473            'NewUserAutoProvisioning' =>
474              { handler => \&NewUserAutoProvisioning, },
475            'NewUserTemplateBlogId'   => undef,
476            'DefaultUserLanguage'     => undef,
477            'DefaultUserTagDelimiter' => {
478                handler => \&DefaultUserTagDelimiter,
479                default => 'comma',
480            },
481            'AuthenticationModule' => { default => 'MT', },
482            'AuthLoginURL'         => undef,
483            'AuthLogoutURL'        => undef,
484            'DefaultAssignments'   => undef,
485            'AutoSaveFrequency'         => { default => 5 },
486            'FuturePostFrequency'       => { default => 1 },
487            'AssetCacheDir'             => { default => 'assets_c', },
488            'IncludesDir'               => { default => 'includes_c', },
489            'MemcachedServers'          => { type    => 'ARRAY', },
490            'MemcachedNamespace'        => undef,
491            'MemcachedDriver'           => { default => 'Cache::Memcached' },
492            'CommenterRegistration'     => {
493                type    => 'HASH',
494                default => {
495                    Allow  => '1',
496                    Notify => q(),
497                },
498            },
499            'CaptchaSourceImageBase'     => undef,
500            'SecretToken'                => { handler => \&SecretToken, },
501            ## NaughtyWordChars settings
502            'NwcSmartReplace' => { default => 0, },
503            'NwcReplaceField' =>
504              { default => 'title,text,text_more,keywords,excerpt,tags', },
505            'DisableNotificationPings'   => { default => 0 },
506            'SyncTarget' => { type => 'ARRAY' },
507            'RsyncOptions' => undef,
508            'UserpicAllowRect' => { default => 0 },
509            'UserpicMaxUpload' => { default => 0 },
510            'UserpicThumbnailSize' => { default => 100 },
511
512            # Basename settings
513            'AuthorBasenameLimit' => { default => 30 },
514            'PerformanceLogging' => { default => 0 },
515            'PerformanceLoggingThreshold' => { default => 0.1 },
516            'ProcessMemoryCommand' => { handler => \&ProcessMemoryCommand },
517        },
518        upgrade_functions => \&load_upgrade_fns,
519        applications      => {
520            'xmlrpc'   => { handler => 'MT::XMLRPCServer', },
521            'atom'     => { handler => 'MT::AtomServer', },
522            'feeds'    => { handler => 'MT::App::ActivityFeeds', },
523            'view'     => { handler => 'MT::App::Viewer', },
524            'notify'   => { handler => 'MT::App::NotifyList', },
525            'tb'       => { handler => 'MT::App::Trackback', },
526            'upgrade'  => { handler => 'MT::App::Upgrade', },
527            'wizard'   => { handler => 'MT::App::Wizard', },
528            'comments' => { handler => 'MT::App::Comments', },
529            'search'   => {
530                handler => 'MT::App::Search::Legacy', 
531                tags => sub { MT->app->load_core_tags },
532            },
533            'new_search'   => {
534                handler => 'MT::App::Search', 
535                tags    => sub { 
536                    require MT::Template::Context::Search;
537                    return MT::Template::Context::Search->load_core_tags();
538                },
539                methods => sub { MT->app->core_methods() },
540                default => sub { MT->app->core_parameters() },
541            },
542            'cms'      => {
543                handler         => 'MT::App::CMS',
544                cgi_base        => 'mt',
545                page_actions    => sub { MT->app->core_page_actions(@_) },
546                list_actions    => sub { MT->app->core_list_actions(@_) },
547                list_filters    => sub { MT->app->core_list_filters(@_) },
548                search_apis     => sub {
549                    require MT::CMS::Search;
550                    return MT::CMS::Search::core_search_apis(MT->app, @_);
551                },
552                menus           => sub { MT->app->core_menus() },
553                methods         => sub { MT->app->core_methods() },
554                widgets         => sub { MT->app->core_widgets() },
555                blog_stats_tabs => sub { MT->app->core_blog_stats_tabs() },
556                import_formats  => sub {
557                    require MT::Import;
558                    return MT::Import->core_import_formats();
559                },
560            },
561        },
562        archive_types => \&load_archive_types,
563        tags          => \&load_core_tags,
564        text_filters  => {
565            '__default__' => {
566                label   => 'Convert Line Breaks',
567                handler => 'MT::Util::html_text_transform',
568            },
569            'richtext' => {
570                label   => 'Rich Text',
571                handler => 'MT::Util::rich_text_transform',
572                condition => sub {
573                    my ($type) = @_;
574                    return 1 if $type && ($type ne 'comment');
575                },
576            },
577        },
578        richtext_editors => {
579            'archetype' => {
580                label => 'Movable Type Default',
581                template => 'archetype_editor.tmpl',
582            },
583        },
584        ping_servers  => {
585            'weblogs' => {
586                label => 'weblogs.com',
587                url   => 'http://rpc.weblogs.com/RPC2',
588            },
589            'technorati' => {
590                label => 'technorati.com',
591                url   => 'http://rpc.technorati.com/rpc/ping',
592            },
593            'google' => {
594                label => 'google.com',
595                url   => 'http://blogsearch.google.com/ping/RPC2',
596            },
597        },
598        commenter_authenticators => \&load_core_commenter_auth,
599        captcha_providers        => \&load_captcha_providers,
600        tasks                    => \&load_core_tasks,
601        default_templates        => \&load_default_templates,
602        template_sets => {
603            mt_blog => {
604                label => "Classic Blog",
605                order => 100,
606                # means, load from 'default_templates' registry
607                # which we've established for core templates with
608                # the MT 4.0 registry
609                templates => '*',
610            },
611        },
612        junk_filters             => \&load_junk_filters,
613        task_workers             => {
614            'mt_rebuild' => {
615                label => "Publishes content.",
616                class => 'MT::Worker::Publish',
617            },
618            'mt_sync' => {
619                label => "Synchronizes content to other server(s).",
620                class => 'MT::Worker::Sync',
621            },
622        },
623        archivers => {
624            'zip' => {
625                class => 'MT::Util::Archive::Zip',
626                label => 'zip',
627            },
628            'tgz' => {
629                class => 'MT::Util::Archive::Tgz',
630                label => 'tar.gz',
631            },
632        },
633        template_snippets        => {
634            'insert_entries' => {
635                trigger => 'entries',
636                label   => 'Entries List',
637                content => qq{<mt:Entries lastn="10">\n    \$0\n</mt:Entries>\n},
638            },
639            'blog_url' => {
640                trigger => 'blogurl',
641                label => 'Blog URL',
642                content => '<$mt:BlogURL$>$0',
643            },
644            'blog_id' => {
645                trigger => 'blogid',
646                label => 'Blog ID',
647                content => '<$mt:BlogID$>$0',
648            },
649            'blog_name' => {
650                trigger => 'blogname',
651                label => 'Blog Name',
652                content => '<$mt:BlogName$>$0',
653            },
654            'entry_body' => {
655                trigger => 'entrybody',
656                label => 'Entry Body',
657                content => '<$mt:EntryBody$>$0',
658            },
659            'entry_excerpt' => {
660                trigger => 'entryexcerpt',
661                label => 'Entry Excerpt',
662                content => '<$mt:EntryExcerpt$>$0',
663            },
664            'entry_link' => {
665                trigger => 'entrylink',
666                label => 'Entry Link',
667                content => '<$mt:EntryLink$>$0',
668            },
669            'entry_more' => {
670                trigger => 'entrymore',
671                label => 'Entry Extended Text',
672                content => '<$mt:EntryMore$>$0',
673            },
674            'entry_title' => {
675                trigger => 'entrytitle',
676                label => 'Entry Title',
677                content => '<$mt:EntryTitle$>$0',
678            },
679            'if' => {
680                trigger => 'mtif',
681                label => 'If Block',
682                content => qq{<mt:if name="variable">\n    \$0\n</mt:if>\n},
683            },
684            'if_else' => {
685                trigger => 'mtife',
686                label => 'If/Else Block',
687                content => qq{<mt:if name="variable">\n    \$0\n<mt:else>\n\n</mt:if>\n},
688            },
689            'include_module' => {
690                trigger => 'module',
691                label => 'Include Template Module',
692                content => '<$mt:Include module="$0"$>',
693            },
694            'include_file' => {
695                trigger => 'file',
696                label => 'Include Template File',
697                content => '<$mt:Include file="$0"$>',
698            },
699            'getvar' => {
700                trigger => 'get',
701                label => 'Get Variable',
702                content => '<$mt:var name="$0"$>',
703            },
704            'setvar' => {
705                trigger => 'set',
706                label => 'Set Variable',
707                content => '<$mt:var name="$0" value="value"$>',
708            },
709            'setvarblock' => {
710                trigger => 'setb',
711                label => 'Set Variable Block',
712                content => qq{<mt:SetVarBlock name="variable">\n    \$0\n</mt:SetVarBlock>\n},
713            },
714        },
715    };
716}
717
718sub id {
719    return 'core';
720}
721
722sub load_junk_filters {
723    require MT::JunkFilter;
724    return MT::JunkFilter->core_filters;
725}
726
727sub load_core_tasks {
728    my $cfg = MT->config;
729    return {
730        'FuturePost' => {
731            label     => 'Publish Scheduled Entries',
732            frequency => $cfg->FuturePostFrequency * 60,    # once per minute
733            code      => sub {
734                MT->instance->publisher->publish_future_posts;
735              }
736        },
737        'JunkExpiration' => {
738            label     => 'Junk Folder Expiration',
739            frequency => 12 * 60 * 60,             # no more than every 12 hours
740            code      => sub {
741                require MT::JunkFilter;
742                MT::JunkFilter->task_expire_junk;
743            },
744        },
745        'CleanTemporaryFiles' => {
746            label => 'Remove Temporary Files',
747            frequency => 60 * 60,   # once per hour
748            code => sub {
749                MT::Core->remove_temporary_files;
750            },
751        },
752        'RemoveExpiredUserSessions' => {
753            label => 'Remove Expired User Sessions',
754            frequency => 60 * 60 * 24,   # once a day
755            code => sub {
756                MT::Core->remove_expired_sessions;
757            },
758        },
759    };
760}
761
762sub remove_temporary_files {
763    require MT::Session;
764
765    my @files = MT::Session->load(
766        { kind => 'TF', start => [ undef, time - 60 * 60 ] },
767        { range => { start => 1 } } );
768    my $fmgr = MT::FileMgr->new('Local');
769    foreach my $f (@files) {
770        if ($fmgr->delete($f->name)) {
771            $f->remove;
772        }
773    }
774    # This is a silent task; no need to log removal of temporary files
775    return '';
776}
777
778sub remove_expired_sessions {
779    require MT::Session;
780
781    my $expired = MT->config->UserSessionTimeout;
782    my @sesss = MT::Session->load(
783        { kind => 'US', start => [ undef, time - $expired ] },
784        { range => { start => 1 } } );
785    foreach my $s (@sesss) {
786        $s->remove if !$s->get('remember');
787    }
788    return '';
789}
790
791sub load_default_templates {
792    require MT::DefaultTemplates;
793    return MT::DefaultTemplates->core_default_templates;
794}
795
796sub load_captcha_providers {
797    return MT->core_captcha_providers;
798}
799
800sub load_core_commenter_auth {
801    return MT->core_commenter_authenticators;
802}
803
804sub load_core_tags {
805    require MT::Template::ContextHandlers;
806    return MT::Template::Context::core_tags();
807}
808
809sub load_upgrade_fns {
810    require MT::Upgrade;
811    return MT::Upgrade->core_upgrade_functions;
812}
813
814sub l10n_class { 'MT::L10N' }
815
816sub init_registry {
817    my $c = shift;
818    return $c->{registry} = $core_registry;
819}
820
821# Config handlers for these settings...
822
823sub load_archive_types {
824    require MT::WeblogPublisher;
825    return MT::WeblogPublisher->core_archive_types;
826}
827
828sub ProcessMemoryCommand {
829    my $cfg = shift;
830    $cfg->set_internal( 'ProcessMemoryCommand', @_ ) if @_;
831    my $cmd = $cfg->get_internal('ProcessMemoryCommand');
832    unless ($cmd) {
833        my $os = $^O;
834        if ($os eq 'darwin') {
835            $cmd = 'ps $$ -o rss=';
836        }
837        elsif ($os eq 'linux') {
838            $cmd = 'ps -p $$ -o rss=';
839        }
840        elsif ($os eq 'MSWin32') {
841            $cmd = { command => q{tasklist /FI "PID eq $$" /FO TABLE /NH},
842                regex => qr/([\d,]+) K/ };
843        }
844    }
845    return $cmd;
846}
847
848sub SecretToken {
849    my $cfg = shift;
850    $cfg->set_internal( 'SecretToken', @_ ) if @_;
851    my $secret = $cfg->get_internal('SecretToken');
852    unless ($secret) {
853        my @alpha = ( 'a' .. 'z', 'A' .. 'Z', 0 .. 9 );
854        $secret = join '', map $alpha[ rand @alpha ], 1 .. 40;
855        $secret = $cfg->set_internal( 'SecretToken', $secret, 1 );
856        $cfg->save_config();
857    }
858    return $secret;
859}
860
861sub DefaultUserTagDelimiter {
862    my $mgr = shift;
863    return $mgr->set_internal( 'DefaultUserTagDelimiter', @_ ) if @_;
864    my $delim = $mgr->get_internal('DefaultUserTagDelimiter');
865    if ( lc $delim eq 'comma' ) {
866        return ord(',');
867    }
868    elsif ( lc $delim eq 'space' ) {
869        return ord(' ');
870    }
871    else {
872        return ord(',');
873    }
874}
875
876sub NewUserAutoProvisioning {
877    my $mgr = shift;
878    return $mgr->set_internal( 'NewUserAutoProvisioning', @_ ) if @_;
879    return 0 unless $mgr->DefaultSiteRoot && $mgr->DefaultSiteURL;
880    $mgr->get_internal('NewUserAutoProvisioning');
881}
882
8831;
Note: See TracBrowser for help on using the browser.