cms/drupal/profiles/standard/standard.install
changeset 541 e756a8c72c3d
equal deleted inserted replaced
540:07239de796bb 541:e756a8c72c3d
       
     1 <?php
       
     2 /**
       
     3  * @file
       
     4  * Install, update and uninstall functions for the standard installation profile.
       
     5  */
       
     6 
       
     7 /**
       
     8  * Implements hook_install().
       
     9  *
       
    10  * Perform actions to set up the site for this profile.
       
    11  *
       
    12  * @see system_install()
       
    13  */
       
    14 function standard_install() {
       
    15   // Add text formats.
       
    16   $filtered_html_format = array(
       
    17     'format' => 'filtered_html',
       
    18     'name' => 'Filtered HTML',
       
    19     'weight' => 0,
       
    20     'filters' => array(
       
    21       // URL filter.
       
    22       'filter_url' => array(
       
    23         'weight' => 0,
       
    24         'status' => 1,
       
    25       ),
       
    26       // HTML filter.
       
    27       'filter_html' => array(
       
    28         'weight' => 1,
       
    29         'status' => 1,
       
    30       ),
       
    31       // Line break filter.
       
    32       'filter_autop' => array(
       
    33         'weight' => 2,
       
    34         'status' => 1,
       
    35       ),
       
    36       // HTML corrector filter.
       
    37       'filter_htmlcorrector' => array(
       
    38         'weight' => 10,
       
    39         'status' => 1,
       
    40       ),
       
    41     ),
       
    42   );
       
    43   $filtered_html_format = (object) $filtered_html_format;
       
    44   filter_format_save($filtered_html_format);
       
    45 
       
    46   $full_html_format = array(
       
    47     'format' => 'full_html',
       
    48     'name' => 'Full HTML',
       
    49     'weight' => 1,
       
    50     'filters' => array(
       
    51       // URL filter.
       
    52       'filter_url' => array(
       
    53         'weight' => 0,
       
    54         'status' => 1,
       
    55       ),
       
    56       // Line break filter.
       
    57       'filter_autop' => array(
       
    58         'weight' => 1,
       
    59         'status' => 1,
       
    60       ),
       
    61       // HTML corrector filter.
       
    62       'filter_htmlcorrector' => array(
       
    63         'weight' => 10,
       
    64         'status' => 1,
       
    65       ),
       
    66     ),
       
    67   );
       
    68   $full_html_format = (object) $full_html_format;
       
    69   filter_format_save($full_html_format);
       
    70 
       
    71   // Enable some standard blocks.
       
    72   $default_theme = variable_get('theme_default', 'bartik');
       
    73   $admin_theme = 'seven';
       
    74   $blocks = array(
       
    75     array(
       
    76       'module' => 'system',
       
    77       'delta' => 'main',
       
    78       'theme' => $default_theme,
       
    79       'status' => 1,
       
    80       'weight' => 0,
       
    81       'region' => 'content',
       
    82       'pages' => '',
       
    83       'cache' => -1,
       
    84     ),
       
    85     array(
       
    86       'module' => 'search',
       
    87       'delta' => 'form',
       
    88       'theme' => $default_theme,
       
    89       'status' => 1,
       
    90       'weight' => -1,
       
    91       'region' => 'sidebar_first',
       
    92       'pages' => '',
       
    93       'cache' => -1,
       
    94     ),
       
    95     array(
       
    96       'module' => 'node',
       
    97       'delta' => 'recent',
       
    98       'theme' => $admin_theme,
       
    99       'status' => 1,
       
   100       'weight' => 10,
       
   101       'region' => 'dashboard_main',
       
   102       'pages' => '',
       
   103       'cache' => -1,
       
   104     ),
       
   105     array(
       
   106       'module' => 'user',
       
   107       'delta' => 'login',
       
   108       'theme' => $default_theme,
       
   109       'status' => 1,
       
   110       'weight' => 0,
       
   111       'region' => 'sidebar_first',
       
   112       'pages' => '',
       
   113       'cache' => -1,
       
   114     ),
       
   115     array(
       
   116       'module' => 'system',
       
   117       'delta' => 'navigation',
       
   118       'theme' => $default_theme,
       
   119       'status' => 1,
       
   120       'weight' => 0,
       
   121       'region' => 'sidebar_first',
       
   122       'pages' => '',
       
   123       'cache' => -1,
       
   124     ),
       
   125     array(
       
   126       'module' => 'system',
       
   127       'delta' => 'powered-by',
       
   128       'theme' => $default_theme,
       
   129       'status' => 1,
       
   130       'weight' => 10,
       
   131       'region' => 'footer',
       
   132       'pages' => '',
       
   133       'cache' => -1,
       
   134     ),
       
   135     array(
       
   136       'module' => 'system',
       
   137       'delta' => 'help',
       
   138       'theme' => $default_theme,
       
   139       'status' => 1,
       
   140       'weight' => 0,
       
   141       'region' => 'help',
       
   142       'pages' => '',
       
   143       'cache' => -1,
       
   144     ),
       
   145     array(
       
   146       'module' => 'system',
       
   147       'delta' => 'main',
       
   148       'theme' => $admin_theme,
       
   149       'status' => 1,
       
   150       'weight' => 0,
       
   151       'region' => 'content',
       
   152       'pages' => '',
       
   153       'cache' => -1,
       
   154     ),
       
   155     array(
       
   156       'module' => 'system',
       
   157       'delta' => 'help',
       
   158       'theme' => $admin_theme,
       
   159       'status' => 1,
       
   160       'weight' => 0,
       
   161       'region' => 'help',
       
   162       'pages' => '',
       
   163       'cache' => -1,
       
   164     ),
       
   165     array(
       
   166       'module' => 'user',
       
   167       'delta' => 'login',
       
   168       'theme' => $admin_theme,
       
   169       'status' => 1,
       
   170       'weight' => 10,
       
   171       'region' => 'content',
       
   172       'pages' => '',
       
   173       'cache' => -1,
       
   174     ),
       
   175     array(
       
   176       'module' => 'user',
       
   177       'delta' => 'new',
       
   178       'theme' => $admin_theme,
       
   179       'status' => 1,
       
   180       'weight' => 0,
       
   181       'region' => 'dashboard_sidebar',
       
   182       'pages' => '',
       
   183       'cache' => -1,
       
   184     ),
       
   185     array(
       
   186       'module' => 'search',
       
   187       'delta' => 'form',
       
   188       'theme' => $admin_theme,
       
   189       'status' => 1,
       
   190       'weight' => -10,
       
   191       'region' => 'dashboard_sidebar',
       
   192       'pages' => '',
       
   193       'cache' => -1,
       
   194     ),
       
   195   );
       
   196   $query = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
       
   197   foreach ($blocks as $block) {
       
   198     $query->values($block);
       
   199   }
       
   200   $query->execute();
       
   201 
       
   202   // Insert default pre-defined node types into the database. For a complete
       
   203   // list of available node type attributes, refer to the node type API
       
   204   // documentation at: http://api.drupal.org/api/HEAD/function/hook_node_info.
       
   205   $types = array(
       
   206     array(
       
   207       'type' => 'page',
       
   208       'name' => st('Basic page'),
       
   209       'base' => 'node_content',
       
   210       'description' => st("Use <em>basic pages</em> for your static content, such as an 'About us' page."),
       
   211       'custom' => 1,
       
   212       'modified' => 1,
       
   213       'locked' => 0,
       
   214     ),
       
   215     array(
       
   216       'type' => 'article',
       
   217       'name' => st('Article'),
       
   218       'base' => 'node_content',
       
   219       'description' => st('Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.'),
       
   220       'custom' => 1,
       
   221       'modified' => 1,
       
   222       'locked' => 0,
       
   223     ),
       
   224   );
       
   225 
       
   226   foreach ($types as $type) {
       
   227     $type = node_type_set_defaults($type);
       
   228     node_type_save($type);
       
   229     node_add_body_field($type);
       
   230   }
       
   231 
       
   232   // Insert default pre-defined RDF mapping into the database.
       
   233   $rdf_mappings = array(
       
   234     array(
       
   235       'type' => 'node',
       
   236       'bundle' => 'page',
       
   237       'mapping' => array(
       
   238         'rdftype' => array('foaf:Document'),
       
   239       ),
       
   240     ),
       
   241     array(
       
   242       'type' => 'node',
       
   243       'bundle' => 'article',
       
   244       'mapping' => array(
       
   245         'field_image' => array(
       
   246           'predicates' => array('og:image', 'rdfs:seeAlso'),
       
   247           'type' => 'rel',
       
   248         ),
       
   249         'field_tags' => array(
       
   250           'predicates' => array('dc:subject'),
       
   251           'type' => 'rel',
       
   252         ),
       
   253       ),
       
   254     ),
       
   255   );
       
   256   foreach ($rdf_mappings as $rdf_mapping) {
       
   257     rdf_mapping_save($rdf_mapping);
       
   258   }
       
   259 
       
   260   // Default "Basic page" to not be promoted and have comments disabled.
       
   261   variable_set('node_options_page', array('status'));
       
   262   variable_set('comment_page', COMMENT_NODE_HIDDEN);
       
   263 
       
   264   // Don't display date and author information for "Basic page" nodes by default.
       
   265   variable_set('node_submitted_page', FALSE);
       
   266 
       
   267   // Enable user picture support and set the default to a square thumbnail option.
       
   268   variable_set('user_pictures', '1');
       
   269   variable_set('user_picture_dimensions', '1024x1024');
       
   270   variable_set('user_picture_file_size', '800');
       
   271   variable_set('user_picture_style', 'thumbnail');
       
   272 
       
   273   // Allow visitor account creation with administrative approval.
       
   274   variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
       
   275 
       
   276   // Create a default vocabulary named "Tags", enabled for the 'article' content type.
       
   277   $description = st('Use tags to group articles on similar topics into categories.');
       
   278   $vocabulary = (object) array(
       
   279     'name' => st('Tags'),
       
   280     'description' => $description,
       
   281     'machine_name' => 'tags',
       
   282   );
       
   283   taxonomy_vocabulary_save($vocabulary);
       
   284 
       
   285   $field = array(
       
   286     'field_name' => 'field_' . $vocabulary->machine_name,
       
   287     'type' => 'taxonomy_term_reference',
       
   288     // Set cardinality to unlimited for tagging.
       
   289     'cardinality' => FIELD_CARDINALITY_UNLIMITED,
       
   290     'settings' => array(
       
   291       'allowed_values' => array(
       
   292         array(
       
   293           'vocabulary' => $vocabulary->machine_name,
       
   294           'parent' => 0,
       
   295         ),
       
   296       ),
       
   297     ),
       
   298   );
       
   299   field_create_field($field);
       
   300 
       
   301   $help = st('Enter a comma-separated list of words to describe your content.');
       
   302   $instance = array(
       
   303     'field_name' => 'field_' . $vocabulary->machine_name,
       
   304     'entity_type' => 'node',
       
   305     'label' => 'Tags',
       
   306     'bundle' => 'article',
       
   307     'description' => $help,
       
   308     'widget' => array(
       
   309       'type' => 'taxonomy_autocomplete',
       
   310       'weight' => -4,
       
   311     ),
       
   312     'display' => array(
       
   313       'default' => array(
       
   314         'type' => 'taxonomy_term_reference_link',
       
   315         'weight' => 10,
       
   316       ),
       
   317       'teaser' => array(
       
   318         'type' => 'taxonomy_term_reference_link',
       
   319         'weight' => 10,
       
   320       ),
       
   321     ),
       
   322   );
       
   323   field_create_instance($instance);
       
   324 
       
   325 
       
   326   // Create an image field named "Image", enabled for the 'article' content type.
       
   327   // Many of the following values will be defaulted, they're included here as an illustrative examples.
       
   328   // See http://api.drupal.org/api/function/field_create_field/7
       
   329 
       
   330   $field = array(
       
   331     'field_name' => 'field_image',
       
   332     'type' => 'image',
       
   333     'cardinality' => 1,
       
   334     'locked' => FALSE,
       
   335     'indexes' => array('fid' => array('fid')),
       
   336     'settings' => array(
       
   337       'uri_scheme' => 'public',
       
   338       'default_image' => FALSE,
       
   339     ),
       
   340     'storage' => array(
       
   341       'type' => 'field_sql_storage',
       
   342       'settings' => array(),
       
   343     ),
       
   344   );
       
   345   field_create_field($field);
       
   346 
       
   347 
       
   348   // Many of the following values will be defaulted, they're included here as an illustrative examples.
       
   349   // See http://api.drupal.org/api/function/field_create_instance/7
       
   350   $instance = array(
       
   351     'field_name' => 'field_image',
       
   352     'entity_type' => 'node',
       
   353     'label' => 'Image',
       
   354     'bundle' => 'article',
       
   355     'description' => st('Upload an image to go with this article.'),
       
   356     'required' => FALSE,
       
   357 
       
   358     'settings' => array(
       
   359       'file_directory' => 'field/image',
       
   360       'file_extensions' => 'png gif jpg jpeg',
       
   361       'max_filesize' => '',
       
   362       'max_resolution' => '',
       
   363       'min_resolution' => '',
       
   364       'alt_field' => TRUE,
       
   365       'title_field' => '',
       
   366     ),
       
   367 
       
   368     'widget' => array(
       
   369       'type' => 'image_image',
       
   370       'settings' => array(
       
   371         'progress_indicator' => 'throbber',
       
   372         'preview_image_style' => 'thumbnail',
       
   373       ),
       
   374       'weight' => -1,
       
   375     ),
       
   376 
       
   377     'display' => array(
       
   378       'default' => array(
       
   379         'label' => 'hidden',
       
   380         'type' => 'image',
       
   381         'settings' => array('image_style' => 'large', 'image_link' => ''),
       
   382         'weight' => -1,
       
   383       ),
       
   384       'teaser' => array(
       
   385         'label' => 'hidden',
       
   386         'type' => 'image',
       
   387         'settings' => array('image_style' => 'medium', 'image_link' => 'content'),
       
   388         'weight' => -1,
       
   389       ),
       
   390     ),
       
   391   );
       
   392   field_create_instance($instance);
       
   393 
       
   394   // Enable default permissions for system roles.
       
   395   $filtered_html_permission = filter_permission_name($filtered_html_format);
       
   396   user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content', 'access comments', $filtered_html_permission));
       
   397   user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content', 'access comments', 'post comments', 'skip comment approval', $filtered_html_permission));
       
   398 
       
   399   // Create a default role for site administrators, with all available permissions assigned.
       
   400   $admin_role = new stdClass();
       
   401   $admin_role->name = 'administrator';
       
   402   $admin_role->weight = 2;
       
   403   user_role_save($admin_role);
       
   404   user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));
       
   405   // Set this as the administrator role.
       
   406   variable_set('user_admin_role', $admin_role->rid);
       
   407 
       
   408   // Assign user 1 the "administrator" role.
       
   409   db_insert('users_roles')
       
   410     ->fields(array('uid' => 1, 'rid' => $admin_role->rid))
       
   411     ->execute();
       
   412 
       
   413   // Create a Home link in the main menu.
       
   414   $item = array(
       
   415     'link_title' => st('Home'),
       
   416     'link_path' => '<front>',
       
   417     'menu_name' => 'main-menu',
       
   418   );
       
   419   menu_link_save($item);
       
   420 
       
   421   // Update the menu router information.
       
   422   menu_rebuild();
       
   423 
       
   424   // Enable the admin theme.
       
   425   db_update('system')
       
   426     ->fields(array('status' => 1))
       
   427     ->condition('type', 'theme')
       
   428     ->condition('name', 'seven')
       
   429     ->execute();
       
   430   variable_set('admin_theme', 'seven');
       
   431   variable_set('node_admin_theme', '1');
       
   432 }