diff --recursive -u ./site_verify.admin.inc ./site_verify.admin.inc
--- ./site_verify.admin.inc 2011-02-20 23:37:54.000000000 +0100
+++ ./site_verify.admin.inc 2011-02-08 23:30:23.212203848 +0100
@@ -1,6 +1,9 @@
NULL,
'file' => '',
@@ -75,6 +85,7 @@
switch ($form_state['storage']['step']) {
case 1:
+ // Build list of possible verification engines.
$engines = site_verify_get_engines();
$options = array();
foreach ($engines as $key => $engine) {
@@ -92,8 +103,8 @@
'#value' => t('Next'),
);
break;
- case 2:
+ case 2:
$form['svid'] = array(
'#type' => 'value',
'#value' => $record['svid'],
@@ -105,8 +116,9 @@
$form['engine_name'] = array(
'#type' => 'item',
'#title' => t('Search engine'),
- '#value' => $record['engine']['name'],
+ '#markup' => $record['engine']['name'],
);
+
$form['#engine'] = $record['engine'];
$form['meta'] = array(
@@ -141,6 +153,7 @@
'#wysiwyg' => FALSE,
'#access' => $record['engine']['file_contents'],
);
+ // Add a warning message if Clean URLs is not available.
if (!variable_get('clean_url', 0)) {
drupal_set_message(t('Using verification files will not work if clean URLs are disabled.', array('@clean-urls' => url('admin/settings/clean-url'))), 'error', FALSE);
$form['file']['#disabled'] = TRUE;
@@ -192,6 +205,8 @@
}
}
+ // Confirm that the desired filename isn't already in use by another
+ // verification.
if ($values['file']) {
$existing_file = db_query("SELECT svid FROM {site_verify} WHERE LOWER(file) = LOWER(:file) AND svid <> :svid", array(':file' => $values['file'], 'svid' => $values['svid']))->fetchField();
if ($existing_file) {
@@ -211,25 +226,21 @@
$form_state['rebuild'] = TRUE;
}
else {
- // Save the verification to the database.
- if ($form_state['values']['svid']) {
- drupal_write_record('site_verify', $form_state['values'], array('svid'));
- }
- else {
- drupal_write_record('site_verify', $form_state['values']);
+ $record = (object) $form_state['values'];
+ if (empty($record->file)) {
+ $record->file_contents = '';
}
+ site_verify_save($record);
drupal_set_message(t('Verification saved.'));
$form_state['storage'] = $form_state['rebuild'] = NULL;
$form_state['redirect'] = 'admin/config/search/verifications';
-
- // Clear front page caches and set the menu to be rebuilt.
- cache_clear_all(url('', array('absolute' => TRUE)), 'cache_page');
- cache_clear_all(url(variable_get('site_frontpage', 'node'), array('absolute' => TRUE)), 'cache_page');
- variable_set('menu_rebuild_needed', TRUE);
}
}
+/**
+ * Delete form: found at admin/config/search/verifications/xxx/delete
+ */
function site_verify_delete_form($form, $form_state, $record) {
$form['record'] = array(
'#type' => 'value',
@@ -248,17 +259,16 @@
function site_verify_delete_form_submit($form, &$form_state) {
$record = $form_state['values']['record'];
- db_delete('site_verify')->condition('svid', $record['svid'])->execute();
+ site_verify_delete($record['svid']);
+
drupal_set_message(t('Verification for %engine has been deleted.', array('%engine' => $record['engine']['name'])));
- watchdog('site_verify', 'Verification for %engine deleted.', array('%engine' => $record['engine']['name']), WATCHDOG_NOTICE);
$form_state['redirect'] = 'admin/config/search/verifications';
-
- // Clear front page caches and set the menu to be rebuilt.
- cache_clear_all(url('', array('absolute' => TRUE)), 'cache_page');
- cache_clear_all(url(variable_get('site_frontpage', 'node'), array('absolute' => TRUE)), 'cache_page');
- variable_set('menu_rebuild_needed', TRUE);
}
+
+/**
+ * Validate that the 'meta' property uses the correct pattern for Google.
+ */
function site_verify_validate_meta_google($element, &$form_state) {
$value = strtolower(trim($element['#value']));
if ($value != '' && !preg_match('%\A\Z%', $value)) {
@@ -266,6 +276,7 @@
}
}
+
function site_verify_validate_page_google($element, &$form_state) {
$value = strtolower(trim($element['#value']));
if ($value != '' && !preg_match('%\Agoogle[\da-f]+\.html\Z%', $value)) {
Only in ./: ._site_verify.module
diff --recursive -u ./site_verify.module ./site_verify.module
--- ./site_verify.module 2011-02-20 23:37:54.000000000 +0100
+++ ./site_verify.module 2011-02-08 23:31:54.444201390 +0100
@@ -2,9 +2,17 @@
// $Id: site_verify.module,v 1.17 2011/02/20 22:37:54 davereid Exp $
/**
+ * @file
+ * Site Verify provides a tool for verification codes (meta tags or custom
+ * pages) to be added to the site, for verification with external search
+ * engines.
+ */
+
+/**
* Implements hook_menu().
*/
function site_verify_menu() {
+ // List all verification records.
$items['admin/config/search/verifications'] = array(
'title' => 'Verifications',
'description' => 'Add, change or remove verifications for your site.',
@@ -12,6 +20,7 @@
'access arguments' => array('administer site configuration'),
'file' => 'site_verify.admin.inc',
);
+ // Add a verification record.
$items['admin/config/search/verifications/add'] = array(
'title' => 'Add verification',
'page callback' => 'drupal_get_form',
@@ -20,24 +29,31 @@
'file' => 'site_verify.admin.inc',
'type' => MENU_LOCAL_ACTION,
);
+ // Direct URL to add a verification record for a specific engine.
+ // NB: This URL is not apparent in the UI, not provided as a link.
$items['admin/config/search/verifications/add/%site_verify_engine'] = array(
'title' => 'Add',
'page callback' => 'drupal_get_form',
'page arguments' => array('site_verify_edit_form', array(), 5),
'access arguments' => array('administer site configuration'),
'file' => 'site_verify.admin.inc',
+ 'type' => MENU_CALLBACK,
);
+ // Edit a verification record.
$items['admin/config/search/verifications/%site_verify/edit'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array('site_verify_edit_form', 4),
'access arguments' => array('administer site configuration'),
'file' => 'site_verify.admin.inc',
+ 'type' => MENU_CALLBACK,
);
+ // Delete a verification record.
$items['admin/config/search/verifications/%site_verify/delete'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array('site_verify_delete_form', 4),
'access arguments' => array('administer site configuration'),
'file' => 'site_verify.admin.inc',
+ 'type' => MENU_CALLBACK,
);
// Add the verification paths.
@@ -92,6 +108,85 @@
}
/**
+ * Save a site verification record.
+ *
+ * One of either $verification->meta or $verification->file must be provided.
+ * If $verification->file_contents is provided, $verification->file must not be
+ * empty.
+ *
+ * @param Object $verification
+ * @param Int $verification->svid opt ID to update an existing verification record.
+ * @param String $verification->engine System-name of the engine: e.g. google, bing, etc.
+ * @param String $verification->file opt URL path to provide a verification page (relative to Doc-root): e.g. 'foo' will be displayed at http://example.com/foo
+ * @param String $verification->file_contents opt Page contents to display on the URL provided at $verification->file
+ * @param String $verification->meta opt Verification meta-tag to display on the home page.
+ *
+ * @return Int
+ */
+function site_verify_save(&$verification) {
+ // Validation:
+ if (!empty($verification->file_contents) && empty($verification->file)) {
+ throw new Exception('site_verify_save requires a file parameter to be provided when the file_contents parameter is supplied.');
+ }
+ if (empty($verification->file) && empty($verification->meta)) {
+ throw new Exception('site_verify_save requires either a file parameter or a meta parameter.');
+ }
+ // Validate the engine:
+ if (empty($verification->engine) || !($engine = site_verify_engine_load($verification->engine))) {
+ throw new Exception('site_verify_save requires a valid engine parameter.');
+ }
+
+ db_merge('site_verify')
+ ->key(array(
+ 'svid' => (isset($verification->svid)) ? $verification->svid : NULL,
+ ))
+ ->fields(array(
+ 'engine' => $verification->engine,
+ 'file' => $verification->file,
+ 'file_contents' => $verification->file_contents,
+ 'meta' => $verification->meta,
+ ))
+ ->execute();
+
+ // Clear front page caches and set the menu to be rebuilt.
+ cache_clear_all(url('', array('absolute' => TRUE)), 'cache_page');
+ cache_clear_all(url(variable_get('site_frontpage', 'node'), array('absolute' => TRUE)), 'cache_page');
+ variable_set('menu_rebuild_needed', TRUE);
+
+ watchdog('site_verify', 'Verification for %engine added.', array('%engine' => $engine['name']), WATCHDOG_NOTICE);
+
+}
+
+
+/**
+ * Delete a site verification record.
+ *
+ * @param Int $svid
+ * Unique ID which identifies an existing verification record.
+ */
+function site_verify_delete($svid) {
+ $record = site_verify_load($svid);
+
+ if ($record) {
+ db_delete('site_verify')
+ ->condition('svid', $svid)
+ ->execute();
+
+ // Clear front page caches and set the menu to be rebuilt.
+ cache_clear_all(url('', array('absolute' => TRUE)), 'cache_page');
+ cache_clear_all(url(variable_get('site_frontpage', 'node'), array('absolute' => TRUE)), 'cache_page');
+ variable_set('menu_rebuild_needed', TRUE);
+
+ watchdog('site_verify', 'Verification for %engine deleted.', array('%engine' => $record['engine']['name']), WATCHDOG_NOTICE);
+ }
+ else {
+ watchdog('site_verify', 'Error deleting verification: ID %svid not found.', array('%svid' => $svid), WATCHDOG_WARNING);
+ }
+}
+
+
+
+/**
* Menu load callback; loads engine details.
*
* @param $engine
@@ -176,6 +271,10 @@
return $engines;
}
+
+/**
+ * Output the page-contents a file-based custom verification page.
+ */
function site_verify_output($svid) {
$verification = site_verify_load($svid);
if ($verification['file_contents'] && $verification['engine']['file_contents']) {