123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- /**
- * @file
- * Drush integration.
- */
- /**
- * Implements hook_drush_command().
- */
- function filefield_paths_drush_command() {
- $items = array();
- $items['ffp-update'] = array(
- 'description' => 'Retroactively updates all File (Field) Paths of a chosen field instance.',
- 'arguments' => array(
- 'entity_type' => 'Entity type.',
- 'bundle_name' => 'Bundle name.',
- 'field_name' => 'Field name.'
- ),
- 'options' => array(
- 'all' => 'Retroactively update all File (Field) Paths.',
- ),
- 'examples' => array(
- 'drush ffp-update' => 'Retroactively updates the File (Field) Paths of the instances choosen via an interactive menu.',
- 'drush ffp-update node article field_image' => 'Retroactively updates the File (Field) Paths of all instances of the Article content types Image field.',
- 'drush ffp-update --all' => 'Retroactively update all File (Field) Paths.',
- ),
- 'aliases' => array('ffpu'),
- );
- return $items;
- }
- /**
- * Retroactively updates all File (Field) Paths of a chosen field instance.
- *
- * @param null $entity_type
- * @param null $bundle_name
- * @param null $field_name
- *
- * @return string
- */
- function drush_filefield_paths_ffp_update($entity_type = NULL, $bundle_name = NULL, $field_name = NULL) {
- // Build array of information of all entity types, bundle names and field
- // names.
- $field_types = array_keys(_filefield_paths_get_field_types());
- $info = array();
- foreach (field_info_fields() as $field) {
- if (in_array($field['type'], $field_types)) {
- foreach ($field['bundles'] as $entity_type_name => $bundles) {
- if (!isset($info[$entity_type_name])) {
- $entity_type_info = entity_get_info($entity_type_name);
- $info[$entity_type_name] = array(
- '#label' => "{$entity_type_info['label']} ({$entity_type_name})",
- );
- }
- $bundles_info = field_info_bundles($entity_type_name);
- foreach ($bundles as $bundle) {
- if (!isset($info[$entity_type_name][$bundle])) {
- $info[$entity_type_name][$bundle] = array(
- '#label' => "{$bundles_info[$bundle]['label']} ({$bundle})",
- );
- }
- $field = field_info_instance($entity_type_name, $field['field_name'], $bundle);
- $info[$entity_type_name][$bundle][$field['field_name']] = "{$field['label']} ({$field['field_name']})";
- }
- }
- }
- }
- if (drush_get_option('all')) {
- $instances = array();
- foreach ($info as $entity_type => $bundles) {
- foreach (element_children($bundles) as $bundle_name) {
- foreach (element_children($info[$entity_type][$bundle_name]) as $field_name) {
- $instances[] = field_info_instance($entity_type, $field_name, $bundle_name);
- }
- }
- }
- _filefield_paths_drush_ffp_update($instances);
- return '';
- }
- // Get entity type.
- if (empty($entity_type)) {
- $choices = array('all' => dt('All'));
- foreach ($info as $entity_type => $entity_type_info) {
- $choices[$entity_type] = $entity_type_info['#label'];
- }
- $entity_type = drush_choice($choices, dt("Choose an Entity type."));
- }
- if (empty($entity_type)) {
- return '';
- }
- if ($entity_type == 'all') {
- $instances = array();
- foreach ($info as $entity_type => $bundles) {
- foreach (element_children($bundles) as $bundle_name) {
- foreach (element_children($info[$entity_type][$bundle_name]) as $field_name) {
- $instances[] = field_info_instance($entity_type, $field_name, $bundle_name);
- }
- }
- }
- _filefield_paths_drush_ffp_update($instances);
- return '';
- }
- // Get bundle.
- if (empty($bundle_name)) {
- $choices = array('all' => dt('All'));
- foreach (element_children($info[$entity_type]) as $bundle_name) {
- $choices[$bundle_name] = $info[$entity_type][$bundle_name]['#label'];
- }
- $bundle_name = drush_choice($choices, dt("Choose a Bundle."));
- }
- if (empty($bundle_name)) {
- return '';
- }
- if ($bundle_name == 'all') {
- $instances = array();
- foreach (element_children($info[$entity_type]) as $bundle_name) {
- foreach (element_children($info[$entity_type][$bundle_name]) as $field_name) {
- $instances[] = field_info_instance($entity_type, $field_name, $bundle_name);
- }
- }
- _filefield_paths_drush_ffp_update($instances);
- return '';
- }
- // Get field.
- if (empty($field_name)) {
- $choices = array('all' => dt('All'));
- foreach (element_children($info[$entity_type][$bundle_name]) as $field_name) {
- $choices[$field_name] = $info[$entity_type][$bundle_name][$field_name];
- }
- $field_name = drush_choice($choices, dt("Choose a Field."));
- }
- if (empty($field_name)) {
- return '';
- }
- if ($field_name == 'all') {
- $instances = array();
- foreach (element_children($info[$entity_type][$bundle_name]) as $field_name) {
- $instances[] = field_info_instance($entity_type, $field_name, $bundle_name);
- }
- _filefield_paths_drush_ffp_update($instances);
- return '';
- }
- // Invoke Retroactive update.
- $instance = field_info_instance($entity_type, $field_name, $bundle_name);
- _filefield_paths_drush_ffp_update(array($instance));
- }
- /**
- * Helper function; Invokes File (Field) Paths Retroactive updates.
- *
- * @param $instances
- */
- function _filefield_paths_drush_ffp_update($instances) {
- foreach ($instances as $instance) {
- if (filefield_paths_batch_update($instance)) {
- $batch =& batch_get();
- $batch['progressive'] = FALSE;
- drush_backend_batch_process();
- drush_log(dt('!field_name File (Field) Paths updated.', array('!field_name' => "{$instance['label']} ({$instance['entity_type']}-{$instance['bundle']}-{$instance['field_name']})")), 'success');
- }
- }
- }
|