create-profile.sh: fix also the submit callback when creating a new profile
[drupal-init-tools.git] / libexec / create-profile.sh
index 84ab022..57e3731 100755 (executable)
@@ -70,6 +70,11 @@ PROFILE_DEST_DIR="${PROJECT_ROOT}/${PROFILE_MACHINE_NAME}"
 
 pushd "$WEB_ROOT"
 
+CURRENT_PROFILE="$($DRUSH php-eval "echo drupal_get_profile();")"
+CURRENT_PROFILE_PATH="$($DRUSH php-eval "echo drupal_get_path('profile', '${CURRENT_PROFILE}');")"
+
+[ -d "$CURRENT_PROFILE_PATH" ] || { echo "Aborting, the current profile path is not valid." 1>&2; exit 1; }
+
 # The list of modules and themes could also be obtained by exporting the
 # configuration first and then looking at: config/install/core.extension.yml
 # like this:
@@ -95,6 +100,31 @@ $DRUPAL_CONSOLE generate:profile \
   --profile-path="$PROJECT_ROOT" \
   --no-interaction
 
+# Copy private code and data from the currently installed profile
+pushd "$CURRENT_PROFILE_PATH"
+
+find . -maxdepth 1 -type d ! -name "tests" -printf "%P\n" |
+  while read -r dir;
+  do
+    [ -d "$dir" ] && cp -r "$dir" "${PROFILE_DEST_DIR}/"
+  done
+
+find . -maxdepth 1 -type f ! -name "*.info.yml" -printf "%P\n" |
+  while read -r original_file;
+  do
+    DESTINATION_FILE="${PROFILE_DEST_DIR}/${original_file/#${CURRENT_PROFILE}/${PROFILE_MACHINE_NAME}}"
+    cp "${original_file}" "$DESTINATION_FILE"
+    if file "$original_file" | grep -q PHP;
+    then
+      sed -i \
+        -e "s/^function ${CURRENT_PROFILE}_/function ${PROFILE_MACHINE_NAME}_/g" \
+        -e "s/\$form\['#submit'\]\[\] = '${CURRENT_PROFILE}_/\$form\['#submit'\]\[\] = '${PROFILE_MACHINE_NAME}_/g" \
+        "$DESTINATION_FILE"
+    fi
+  done
+
+popd
+
 # Basically do what's suggested in the "Configuration" section here:
 # https://www.drupal.org/docs/8/creating-distributions/how-to-write-a-drupal-8-installation-profile
 $DRUPAL_CONSOLE config:export --directory="${PROFILE_DEST_DIR}/config/install" --remove-uuid --remove-config-hash
@@ -109,9 +139,17 @@ find "${PROFILE_DEST_DIR}/config/install" -type f -exec sed -i -e '/^_core: {  }
 #fdupes -f -1 "${WEB_ROOT}/core/profiles/standard/config/install/" "${PROFILE_DEST_DIR}/config/install/" | xargs rm
 
 # Export the default content if the default_content module is there
-if echo "$ENABLED_MODULES" | grep -q default_content;
+if $DRUSH pm-list --type=module --field=name --status=enabled --pipe | grep -q "^default_content$";
 then
   $DRUSH default-content-export-references --folder="${PROFILE_DEST_DIR}/content" node
 fi
 
+# The code copied over from the current profile may refer to the old name.
+# Warn the user about that.
+if [ "$PROFILE_MACHINE_NAME" != "$CURRENT_PROFILE" ];
+then
+  echo "The newly created profile has a name different from the current profile."
+  echo "Check that the code of the created profile refers to the new profile name."
+fi
+
 popd