Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
<?php
/**
* @file
* Module file for the portail_reformat_stop_words.module.
*
* This module is a solution to reformat titles that were input with 'stop words'
* between brackets. The idea was that titles shouldn't be sorted using common words like
* 'les', 'la' etc.
*
* The module loads all the nodes from the content type, finds occurances of the stop words,
* removes them, and finally adds it to the beginning of the title. Node titles are then updated
* in the database.
*
* @see https://www.wunderlist.com/#/tasks/3026645045
* @author Michael Dean <contact@michaeldean.ca>
*/
/**
* Remove any remaining hyphens at the beginning of Piece titles.
*/
function portail_reformat_stop_words_update_7403() {
//Load all the nodes from the piece content type
$node_type = "pi_ce";
$piece_nodes = node_load_multiple(array(), array('type' => $node_type));
//Check each node to see if it starts with a hyphen
foreach($piece_nodes as $node) {
//Only do a node save if a hyphen is removed.
if(substr($node->title, 0, 1) === '-') {
$node->title = ltrim($node->title,'-');
$node->revision = 1;
$node->log = 'Hyphen removed automatically from portail_reformat_stop_words module';
node_save($node);
}
}
}
/**
* Copy the title field to the field_sorting field
*/
function portail_reformat_stop_words_update_7401() {
//Load all the nodes from the piece content type
$node_type = "pi_ce";
$piece_nodes = node_load_multiple(array(), array('type' => $node_type));
//Copy the title to the sorting field
foreach($piece_nodes as $node) {
/**
* First remove the left-over titles with hyphens from last title reformatting
* @see https://www.wunderlist.com/#/tasks/3026645551
*/
$node->title = ltrim($node->title,'-');
//Copy the field
$node->field_sorting['und'][0]['value'] = $node->title;
//Save the updated node
field_attach_update('node', $node);
}
}
/**
* Reformat all nodes of type 'piece' so stop words are place at beginning of the titles.
*/
function portail_reformat_stop_words_update_7402() {
//The stop words to remove and place at the beginning of the title
$stop_words = array("L'", "La", "Le", "Les");
//Load all the nodes of a specific content type
$node_type = "pi_ce";
$piece_nodes = node_load_multiple(array(), array('type' => $node_type));
//If the node has one of the stop words in it, reformat the title
foreach($piece_nodes as $node) {
/**
* First remove the left-over titles with hyphens from last title reformatting
* @see https://www.wunderlist.com/#/tasks/3026645551
*/
$node->title = ltrim($node->title,'-');
$node_title = $node->title;
//Check for each stop word. Assumed it only occurs once.
foreach($stop_words as $stop_word) {
//In the titles, there are parentheses placed around each stop word
$stop_word_parentheses = '(' . $stop_word . ')';
//Get the position (not-false) of the stop word if it is found in the title
$stop_word_pos = strpos($node_title,$stop_word_parentheses);
//Format the title if it contains a stop word in its title
if($stop_word_pos !== false) {
//Remove the stop word from the title
$node_title = str_replace($stop_word_parentheses,'',$node_title);
/**
* Deal with spacing between stop word and beginning of title
* (L') is a special case because it doesn't need a space between the word
*/
$space = ' ';
if($stop_word === "L'") {
$space = '';
}
$node_title = $stop_word . $space . $node_title;
//Update the node title, add a new revision, prepare for saving
$node->title = $node_title;
$node->revision = 1;
$node->log = 'Stop words removed automatically from portail_reformat_stop_words module';
node_save($node);
//Don't bother looking for more stop words in this title. If one is already found, we're done.
break;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment