$count = 0; if ($items = Categories::list_by_date(0, 1000, 'raw')) { // retrieve the id and all attributes $errors_count = 0; foreach ($items as $id => $item) { // animate user screen and take care of time $count++; if (!($count % 100)) { $context['text'] .= sprintf(i18n::s('%d records have been processed'), $count) . BR . "\n"; // ensure enough execution time Safe::set_time_limit(30); } // rebuild titles path $path = ''; if ($item['anchor']) { $path .= Categories::build_path($item['anchor']) . '|'; } $path .= strip_tags($item['title']); // save in the database $query = "UPDATE " . SQL::table_name('categories') . " SET " . " path='" . SQL::escape($path) . "'" . " WHERE id = " . SQL::escape($item['id']); if (SQL::query($query) === FALSE) { if (++$errors_count >= 5) { $context['text'] .= i18n::s('Too many successive errors. Aborted') . BR . "\n"; break; } } else { $errors_count = 0; } } } // ending message
/** * put an updated category in the database * * @param array an array of fields * @return string either a null string, or some text describing an error to be inserted into the html response **/ public static function put(&$fields) { global $context; // id cannot be empty if (!$fields['id'] || !is_numeric($fields['id'])) { return i18n::s('No item has the provided id.'); } // title cannot be empty if (!$fields['title']) { return i18n::s('No title has been provided.'); } // sanity filter $fields['title'] = strip_tags($fields['title'], '<br>'); // protect from hackers if (isset($fields['icon_url'])) { $fields['icon_url'] = encode_link($fields['icon_url']); } if (isset($fields['thumbnail_url'])) { $fields['thumbnail_url'] = encode_link($fields['thumbnail_url']); } // set default values for this editor Surfer::check_default_editor($fields); // reinforce date formats if (!isset($fields['expiry_date']) || $fields['expiry_date'] <= NULL_DATE) { $fields['expiry_date'] = NULL_DATE; } // set layout for categories if (!isset($fields['categories_layout']) || !$fields['categories_layout']) { $fields['categories_layout'] = 'decorated'; } elseif ($fields['categories_layout'] == 'custom') { if (isset($fields['categories_custom_layout']) && $fields['categories_custom_layout']) { $fields['categories_layout'] = $fields['categories_custom_layout']; } else { $fields['categories_layout'] = 'decorated'; } } // set layout for sections if (!isset($fields['sections_layout']) || !$fields['sections_layout']) { $fields['sections_layout'] = 'decorated'; } elseif ($fields['sections_layout'] == 'custom') { if (isset($fields['sections_custom_layout']) && $fields['sections_custom_layout']) { $fields['sections_layout'] = $fields['sections_custom_layout']; } else { $fields['sections_layout'] = 'decorated'; } } // set layout for articles if (!isset($fields['articles_layout']) || !$fields['articles_layout']) { $fields['articles_layout'] = 'decorated'; } elseif ($fields['articles_layout'] == 'custom') { if (isset($fields['articles_custom_layout']) && $fields['articles_custom_layout']) { $fields['articles_layout'] = $fields['articles_custom_layout']; } else { $fields['articles_layout'] = 'decorated'; } } // set layout for users if (!isset($fields['users_layout']) || !$fields['users_layout']) { $fields['users_layout'] = 'decorated'; } elseif ($fields['users_layout'] == 'custom') { if (isset($fields['users_custom_layout']) && $fields['users_custom_layout']) { $fields['users_layout'] = $fields['users_custom_layout']; } else { $fields['users_layout'] = 'decorated'; } } // set default values if (!isset($fields['active_set'])) { $fields['active_set'] = 'Y'; } // cascade anchor access rights if (isset($fields['anchor']) && ($anchor = Anchors::get($fields['anchor']))) { $fields['active'] = $anchor->ceil_rights($fields['active_set']); } else { $fields['active'] = $fields['active_set']; } // build path information $path = ''; if (isset($fields['anchor']) && $fields['anchor']) { $path .= Categories::build_path($fields['anchor']) . '|'; } $path .= $fields['title']; // update an existing record $query = "UPDATE " . SQL::table_name('categories') . " SET "; if ($fields['nick_name']) { $query .= "nick_name='" . SQL::escape($fields['nick_name']) . "',"; } $query .= "anchor='" . SQL::escape(isset($fields['anchor']) ? $fields['anchor'] : '') . "'," . "active='" . SQL::escape($fields['active']) . "'," . "active_set='" . SQL::escape($fields['active_set']) . "'," . "articles_layout='" . SQL::escape($fields['articles_layout']) . "'," . "background_color='" . SQL::escape(isset($fields['background_color']) ? $fields['background_color'] : '') . "'," . "categories_count='" . SQL::escape($fields['categories_count']) . "' ," . "categories_layout='" . SQL::escape($fields['categories_layout']) . "'," . "categories_overlay='" . SQL::escape(isset($fields['categories_overlay']) ? $fields['categories_overlay'] : '') . "'," . "description='" . SQL::escape($fields['description']) . "'," . "display='" . SQL::escape(isset($fields['display']) ? $fields['display'] : '') . "'," . "expiry_date='" . SQL::escape($fields['expiry_date']) . "'," . "extra='" . SQL::escape(isset($fields['extra']) ? $fields['extra'] : '') . "'," . "icon_url='" . SQL::escape($fields['icon_url']) . "'," . "introduction='" . SQL::escape(isset($fields['introduction']) ? $fields['introduction'] : '') . "'," . "keywords='" . SQL::escape($fields['keywords']) . "'," . "options='" . SQL::escape($fields['options']) . "'," . "overlay='" . SQL::escape(isset($fields['overlay']) ? $fields['overlay'] : '') . "'," . "overlay_id='" . SQL::escape(isset($fields['overlay_id']) ? $fields['overlay_id'] : '') . "'," . "path='" . SQL::escape($path) . "'," . "prefix='" . SQL::escape(isset($fields['prefix']) ? $fields['prefix'] : '') . "'," . "rank='" . SQL::escape($fields['rank']) . "'," . "sections_layout='" . SQL::escape($fields['sections_layout']) . "'," . "suffix='" . SQL::escape(isset($fields['suffix']) ? $fields['suffix'] : '') . "'," . "thumbnail_url='" . SQL::escape($fields['thumbnail_url']) . "'," . "title='" . SQL::escape($fields['title']) . "'," . "trailer='" . SQL::escape(isset($fields['trailer']) ? $fields['trailer'] : '') . "'," . "users_layout='" . SQL::escape($fields['users_layout']) . "'"; // maybe a silent update if (!isset($fields['silent']) || $fields['silent'] != 'Y') { $query .= ",\n" . "edit_name='" . SQL::escape($fields['edit_name']) . "',\n" . "edit_id=" . SQL::escape($fields['edit_id']) . ",\n" . "edit_address='" . SQL::escape($fields['edit_address']) . "',\n" . "edit_action='category:update',\n" . "edit_date='" . SQL::escape($fields['edit_date']) . "'"; } // actual update query $query .= " WHERE id = " . SQL::escape($fields['id']); SQL::query($query); // clear the cache for categories Categories::clear($fields); // end of job return NULL; }