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

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

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