-
Notifications
You must be signed in to change notification settings - Fork 0
/
scf.profile
547 lines (485 loc) · 21 KB
/
scf.profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
<?php
// $Id: $
/**
* Return a description of the profile for the initial installation screen.
*
* @return
* An array with keys 'name' and 'description' describing this profile,
* and optional 'language' to override the language selection for
* language-specific profiles.
*/
function scf_profile_details() {
return array(
'name' => 'Science Collaboration Framework (SCF)',
'description' => 'SCF is a reusable, semantically-aware toolkit for building on-line communities.'
);
}
/**
* Return an array of the modules to be enabled when this profile is installed.
*
* @return
* An array of modules to enable.
*/
function scf_profile_modules() {
return array(
// CORE
'comment', 'dblog', 'help', 'menu', 'path', 'search', 'taxonomy', 'upload', 'forum',
// CONTRIB
'ajax_pic_preview',
'biblio',
'blockclone',
'logintoboggan',
'reg_with_pic',
'simplemenu',
'sioc',
'taxonomy_csv',
// image et al. can't be installed here. see below in scf_profile_tasks()
// 'image',
// 'image_gallery',
// 'image_import',
// 'image_im_advanced',
// SCF
'iic_util',
'oo',
'scf',
'member',
'taxonomy_bulk',
'species',
'bio_ontologies',
'gene',
'antibody',
'modelorganism',
'contributor',
'interview',
'newsarticle',
'researchstatement',
// node proxying
'nodeproxy',
'rdf',
);
}
/**
* Return a list of tasks that this profile supports.
*
* @return
* A keyed array of tasks the profile will perform during
* the final stage. The keys of the array will be used internally,
* while the values will be displayed to the user in the installer
* task list.
*/
function scf_profile_task_list() {
}
/**
* Perform any final installation tasks for this profile.
*
* The installer goes through the profile-select -> locale-select
* -> requirements -> database -> profile-install-batch
* -> locale-initial-batch -> configure -> locale-remaining-batch
* -> finished -> done tasks, in this order, if you don't implement
* this function in your profile.
*
* If this function is implemented, you can have any number of
* custom tasks to perform after 'configure', implementing a state
* machine here to walk the user through those tasks. First time,
* this function gets called with $task set to 'profile', and you
* can advance to further tasks by setting $task to your tasks'
* identifiers, used as array keys in the hook_profile_task_list()
* above. You must avoid the reserved tasks listed in
* install_reserved_tasks(). If you implement your custom tasks,
* this function will get called in every HTTP request (for form
* processing, printing your information screens and so on) until
* you advance to the 'profile-finished' task, with which you
* hand control back to the installer. Each custom page you
* return needs to provide a way to continue, such as a form
* submission or a link. You should also set custom page titles.
*
* You should define the list of custom tasks you implement by
* returning an array of them in hook_profile_task_list(), as these
* show up in the list of tasks on the installer user interface.
*
* Remember that the user will be able to reload the pages multiple
* times, so you might want to use variable_set() and variable_get()
* to remember your data and control further processing, if $task
* is insufficient. Should a profile want to display a form here,
* it can; the form should set '#redirect' to FALSE, and rely on
* an action in the submit handler, such as variable_set(), to
* detect submission and proceed to further tasks. See the configuration
* form handling code in install_tasks() for an example.
*
* Important: Any temporary variables should be removed using
* variable_del() before advancing to the 'profile-finished' phase.
*
* @param $task
* The current $task of the install system. When hook_profile_tasks()
* is first called, this is 'profile'.
* @param $url
* Complete URL to be used for a link or form action on a custom page,
* if providing any, to allow the user to proceed with the installation.
*
* @return
* An optional HTML string to display to the user. Only used if you
* modify the $task, otherwise discarded.
*/
function scf_profile_tasks(&$task, $url) {
$themes = array('scf_stub', 'scf_demo');
// forum
variable_set('node_options_forum', array('status'));
_scf_comments_on('forum');
// disable attachments
variable_set('upload_forum', '0');
// member
variable_set('node_options_member', array('status'));
// don't allow comments on members(?)
_scf_comments_off('member');
// disable attachments
variable_set('upload_member', '1');
// image
variable_set('image_default_path', 'images');
drupal_install_modules(array('image', 'image_gallery', 'image_import', 'image_im_advanced'));
variable_set('node_options_image', array('status'));
_scf_comments_off('image');
variable_set('upload_image', 1);
variable_set('image_max_upload_size', '5000');
variable_set('image_sizes',
array (
'_original' =>
array (
'label' => 'Original',
'operation' => 'scale',
'width' => '',
'height' => '',
'link' => '1',
),
'thumbnail' =>
array (
'label' => 'Thumbnail',
'operation' => 'scale',
'width' => '100',
'height' => '100',
'link' => '1',
),
'preview' =>
array (
'label' => 'Preview',
'operation' => 'scale',
'width' => '640',
'height' => '640',
'link' => '1',
)
));
variable_set('image_attach_existing', '1');
variable_set('image_gallery_nav_vocabulary', '');
// gene
variable_set('node_options_gene', array('status'));
_scf_comments_off('gene');
// disable attachments
variable_set('upload_gene', 0);
// interview
variable_set('node_options_interview', array('status', 'revision'));
_scf_comments_on('interview');
// newsarticle
variable_set('node_options_newsarticle', array('status', 'revision', 'promote'));
_scf_comments_on('newsarticle');
// researchstatement
variable_set('node_options_researchstatement', array('status'));
_scf_comments_on('researchstatement');
// before installing pubnode/pubgroup, set some vars
variable_set('pubgroup_forum_name', 'Books');
variable_set('pubnode_forum_name', 'Chapters');
drupal_install_modules(
array(
'pubgroup',
'pubnode',
'pubnode_nlm',
)
);
// pubgroup
variable_set('node_options_pubgroup', array('status'));
_scf_comments_on('pubgroup');
// pubnode
variable_set('node_options_pubnode', array('status'));
_scf_comments_on('pubnode');
variable_set('pubnode_default_doctype', 'nlm');
// install contrib RDF modules after rdf module installed, because
// that's the only way they can recognize that ARC2 is installed
drupal_install_modules(array('rdf_db', 'rdf_import', 'rdf_export', 'rdf_schema', 'sparql'));
// these modules in turn depend on rdf_import...
drupal_install_modules(array('rdfnodeproxy', 'sciencecommons_geneproxy'));
variable_set('filter_html_1', 1);
variable_set('clean_url', '1');
// not used if scf is usurping home page
variable_set('default_nodes_main', '10');
variable_set('teaser_length', '600');
// node previewing is optional (set to 1 for required)
variable_set('node_preview', '0');
variable_set('javascript_parsed', array());
variable_set('update_access_fixed', true);
variable_set('image_toolkit', 'gd');
// not sure what this does
// can't blame prev. developer for not knowing
// maybe has to do with: http://drupal.org/node/61760
variable_set('array_filter', true);
// file directory paths
variable_set('file_directory_path', 'sites/default/files');
variable_set('file_directory_temp', '/tmp');
// LoginToboggan
variable_set('logintoboggan_confirm_email_at_registration', '0');
variable_set('logintoboggan_pre_auth_role', '2');
variable_set('logintoboggan_redirect_on_register', '');
variable_set('logintoboggan_redirect_on_confirm', '');
variable_set('logintoboggan_login_successful_message', '0');
variable_set('logintoboggan_minimum_password_length', '0');
variable_set('logintoboggan_login_block_type', '1');
variable_set('logintoboggan_login_block_message', '');
variable_set('logintoboggan_login_with_email', '1');
// predefined role constants (from bootstrap.inc):
// define('DRUPAL_ANONYMOUS_RID', 1);
// define('DRUPAL_AUTHENTICATED_RID', 2);
db_query("INSERT INTO {role} (rid, name) VALUES (3, 'author')");
variable_set('scf_author_rid', 3);
db_query("INSERT INTO {role} (rid, name) VALUES (4, 'editor')");
db_query("INSERT INTO {role} (rid, name) VALUES (5, 'admin')");
$type_list = array(
'antibody' => 'antibodies',
'gene' => 'genes',
'interview' => 'interviews',
'model organism' => 'model organisms',
'news article' => 'news articles',
'publication' => 'publications',
'pubgroup' => 'pubgroups',
'research statement' => 'research statements'
);
$perms = array();
// base perms for anonymous visitor
$perms[] = 'access content, access comments, search content';
// biblio perms (ill-named)
$perms[] = 'show export links, show filter tab, show sort links, view full text';
db_query("UPDATE {permission} SET perm = '%s' WHERE rid = 1", implode(', ', $perms));
// extra perms for authenticated user
$perms[] = 'post comments, post comments without approval, use advanced search, view uploaded files, change own username';
// SCF-specific perms: these are still being worked on...
$perms[] = 'browse member directory, create own member, edit own member, delete own member';
$perms[] = 'create proxied nodes, search proxy sources';
$perms[] = 'create proxied sciencecommons gene records';
db_query("UPDATE {permission} SET perm = '%s' WHERE rid = 2", implode(', ', $perms));
// extra perms for AUTHOR
$perms[] = 'create forum topics, delete own forum topics, edit own forum topics, upload files';
$perms[] = 'create images, edit own images, view original images';
$perms[] = 'create biblio, edit own biblio entries, import from file';
foreach ($type_list as $thing => $things) {
$perms[] = "create $things, edit own $things, delete own $things";
}
db_query("INSERT INTO {permission} (rid, perm) VALUES (3, '%s')", implode(', ', $perms));
// extra perms for EDITOR
$perms[] = 'administer blocks, administer comments, administer forums, edit any forum topic, delete any forum topic';
$perms[] = 'administer menu, administer content types, administer nodes, delete revisions, revert revisions, view revisions';
$perms[] = 'administer search, access administration pages, access site reports, administer actions, administer files';
$perms[] = 'administer site configuration, administer taxonomy, access user profiles, create url aliases, administer url aliases';
$perms[] = 'edit images, administer images, import images, administer simplemenu, view simplemenu, administer users';
$perms[] = 'edit all biblio entries';
// SCF-specific perms: these are still being worked on...
foreach ($type_list as $thing => $things) {
$perms[] = "edit any $thing, delete any $thing";
}
$perms[] = 'create any member, edit any member, delete any member';
db_query("INSERT INTO {permission} (rid, perm) VALUES (4, '%s')", implode(', ', $perms));
// extra perms for ADMIN (NOT the same as user 1, which can do ANYTHING)
$perms[] = 'switch users, administer filters, select different theme, administer permissions';
foreach ($type_list as $thing => $things) {
$perms[] = "administer $things";
}
$perms[] = 'administer node proxies, administer scf, administer members';
db_query("INSERT INTO {permission} (rid, perm) VALUES (5, '%s')", implode(', ', $perms));
// "Visitors can create accounts and no administrator approval is required."
variable_set('user_register', '1');
// "Require e-mail verification when a visitor creates an account"
variable_set('user_email_verification', '0');
// "This text is displayed at the top of the user registration form
// and is useful for helping or instructing your users."
variable_set('user_registration_help', '');
variable_set('user_signatures', '0');
variable_set('user_pictures', '1');
variable_set('user_picture_path', 'pictures');
variable_set('user_picture_default', '');
variable_set('user_picture_dimensions', '100x100');
variable_set('user_picture_file_size', '50'); // KB
variable_set('user_picture_guidelines', '');
// role permissions for uploading
// '0' means no restriction
variable_set('upload_max_resolution', '0');
// "Display attached files when viewing a post."
variable_set('upload_list_default', '1');
// Default settings (any auth user)
variable_set('upload_extensions_default', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp');
// max size per upload (MB)
variable_set('upload_uploadsize_default', '1');
// total max upload size per user (MB)
variable_set('upload_usersize_default', '1');
// Author upload settings
variable_set('upload_extensions_3', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp zip');
// max size per upload (MB)
variable_set('upload_uploadsize_3', '8');
// total max upload size per user (MB)
variable_set('upload_usersize_3', '1000');
// Editor upload settings
variable_set('upload_extensions_4', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp zip');
// max size per upload (MB)
variable_set('upload_uploadsize_4', '8');
// total max upload size per user (MB)
variable_set('upload_usersize_4', '10000');
// Admin upload settings
variable_set('upload_extensions_5', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp zip');
// max size per upload (MB)
variable_set('upload_uploadsize_5', '8');
// total max upload size per user (MB)
variable_set('upload_usersize_5', '1000');
$theme_settings = variable_get('theme_settings', array());
$theme_settings['toggle_logo'] = 0;
$theme_settings['toggle_name'] = 1;
$theme_settings['toggle_slogan'] = 1;
$theme_settings['toggle_mission'] = 1;
$theme_settings['toggle_node_user_picture'] = 0;
$theme_settings['toggle_comment_user_picture'] = 0;
$theme_settings['toggle_search'] = 1;
$theme_settings['toggle_favicon'] = 1;
$theme_settings['toggle_primary_links'] = 1;
$theme_settings['toggle_secondary_links'] = 1;
$theme_settings['default_logo'] = 0;
$theme_settings['logo_path'] = '';
$theme_settings['logo_upload'] = '';
$theme_settings['default_favicon'] = 1;
$theme_settings['favicon_path'] = '';
$theme_settings['favicon_upload'] = '';
$theme_settings['op'] = 'Save configuration';
// 'toggle_node_info_X' tells whether to display date and author information for node type X
$theme_settings['toggle_node_info_member'] = 1;
variable_set('theme_settings', $theme_settings);
foreach ($themes as $theme) {
variable_set('theme_' . $theme . '_settings', $theme_settings);
}
// SCF settings
variable_set('scf_pub_title', 'SCF Book');
// variable_set('scf_usurp_front_page', 1);
// Site config
variable_set('site_name', '');
variable_set('site_slogan', 'The Science Collaboration Framework (SCF) is a reusable, semantically-aware toolkit for building on-line communities.');
variable_set('site_footer', '<p>The <a href="http://iic.harvard.edu/projects/scf.html" title="IIC SCF project">Scientific Collaborative Framework</a> is a project of the <a href="http://iic.harvard.edu/" title="IIC web site">Initiative in Innovative Computing</a> at <a href="http://harvard.edu/">Harvard University</a>.</p>
<p>SCF is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPL version 3</a> software license.</p>');
variable_set('site_frontpage', 'node');
variable_set('simplemenu_theme', 'blackblue');
variable_set('anonymous', 'Anonymous');
foreach ($themes as $theme) {
// all pages
_scf_block('user', '0', $theme, 'account');
_scf_block('logintoboggan', '0', $theme, 'account', 0, '', '<none>', 1);
// only actually populated if current page is a pubnode
_scf_block('pubnode', 'toc', $theme, 'right', 0, '', '', -10);
// _scf_block('menu', 'secondary-links', $theme, 'right', 0, '', '<none>', 1);
// targeted to specific pages:
// front only:
_scf_block('newsarticle', 'listing', $theme, 'left', 1, '<front>', 'News', -10);
_scf_block('pubgroup', 'listing', $theme, 'stemcenter_stembook_books', 1, '<front>', 'Books', -10);
_scf_block('block', '1', $theme, 'stemcenter_stembook_intro', 1, '<front>', '<none>', -10, 1);
// stembook page only
_scf_block('blockclone', '2', $theme, 'left', 1, 'scf/pub', 'Books', -8, 1);
_scf_block('blockclone', '1', $theme, 'stemcenter_stembook_intro', 1, 'scf/pub', '<none>', -9, 1);
// stembook page and <front>
_scf_block('comment', '0', $theme, 'right', 1, "<front>\r\nscf/pub", 'StemBook Buzz');
_scf_block('interview', 'listing', $theme, 'stembook_features', 1, "<front>\r\nscf/pub", 'Features');
}
// add stembook intro block text to boxes table
$stembook_intro = '<div id="stembook_intro"><h2>SCF</h2><p>This implementation of Science Collaboration Framework will be a comprehensive, open-access collection of original, peer-reviewed chapters.</p>';
db_query("INSERT INTO {boxes} (bid, body, info, format) VALUES (1, '%s', 'StemBook Introduction', 2)", $stembook_intro);
// blockclone record to handle cloning of stembook intro
db_query("INSERT INTO {blockclone} (blockclone_id, mod_module, mod_delta) VALUES (1, 'block', '1')");
db_query("INSERT INTO {blockclone} (blockclone_id, mod_module, mod_delta) VALUES (2, 'pubgroup', 'listing')");
foreach ($themes as $theme) {
system_theme_data();
db_query("UPDATE {system} SET status = 1 WHERE type = 'theme' and name = '%s'", $theme);
// run this after all the blocks set up above or it conflicts
system_initialize_theme_blocks($theme);
}
variable_set('theme_default', 'scf_demo');
_scf_primary_link('newsarticle/list', 'News');
_scf_primary_link('scf/pub', 'Book');
_scf_primary_link('forum', 'Forums');
_scf_primary_link('scf/resources', 'Resources');
_scf_primary_link('member/dir', 'Members');
// _scf_secondary_link('node/add/member', 'Member profile');
// Update the menu router information.
menu_rebuild();
}
/**
* Implementation of hook_form_alter().
*
* Allows the profile to alter the site-configuration form. This is
* called through custom invocation, so $form_state is not populated.
*/
function scf_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'install_configure') {
// Set default for site name field.
$form['site_information']['site_name']['#default_value'] = 'Science Collaboration Framework';
}
}
/**
* @param $type the node type to enable comments for
* @param $mode
* possibilities are:
* COMMENT_MODE_FLAT_COLLAPSED => t('Flat list - collapsed'),
* COMMENT_MODE_FLAT_EXPANDED => t('Flat list - expanded'),
* COMMENT_MODE_THREADED_COLLAPSED => t('Threaded list - collapsed'),
* COMMENT_MODE_THREADED_EXPANDED => t('Threaded list - expanded')
* @param $order
* possibilities are:
* COMMENT_ORDER_NEWEST_FIRST => t('Date - newest first'),
* COMMENT_ORDER_OLDEST_FIRST => t('Date - oldest first')
*/
function _scf_comments_on ($type, $mode = COMMENT_MODE_THREADED_EXPANDED, $order = COMMENT_ORDER_NEWEST_FIRST) {
// default to show per page
$num = 50;
// Can users provide a unique subject for their comments?
$subj = 1; // (enabled)
// Force user to preview their comments?
$preview = 1; // (required)
// Location of comment submission form
$loc = 0; // display form on sep page (1 means below post or other comments)
variable_set('comment_' . $type, COMMENT_NODE_READ_WRITE);
variable_set('comment_default_mode_' . $type, $mode);
variable_set('comment_default_order_' . $type, $order);
variable_set('comment_default_per_page_' . $type, $num);
variable_set('comment_subject_field_' . $type, $subj);
variable_set('comment_preview_' . $type, $preview);
variable_set('comment_form_location_' . $type, $loc);
}
function _scf_comments_off ($type) {
variable_set('comment_' . $type, COMMENT_NODE_DISABLED);
}
function _scf_block ($module, $delta, $theme, $region, $visibility = 0, $pages = '', $title = '<none>', $weight = 0, $cache = -1) {
$sql = "INSERT INTO {blocks} (module, delta, theme, status, weight, region, visibility, pages, title, cache)";
$sql .= " VALUES ('%s', '%s', '%s', 1, %d, '%s', %d, '%s', '%s', %d)";
db_query($sql, $module, $delta, $theme, $weight, $region, $visibility, $pages, $title, $cache);
}
function _scf_primary_link ($href, $text) {
static $weight = -1;
$weight++;
_scf_add_link('primary-links', $href, $text, $weight);
}
function _scf_secondary_link ($href, $text) {
static $weight = -1;
$weight++;
_scf_add_link('secondary-links', $href, $text, $weight);
}
function _scf_add_link ($menu, $href, $text, $weight) {
$link = array(
'link_path' => $href,
'link_title' => st($text),
'menu_name' => $menu,
'weight' => $weight,
'options' => array(
'attributes' => array(
'title' => st($text)
)
)
);
menu_link_save($link);
}