Using ctools modal forms for node edit

For a drupal 6 site I needed a node edit overlay. This is what I did.

Define the urls ajax/node/%node/edit and nojs/node/%node/edit. The idea is to use path similar to the normal drupal paths just prepended with what ctools modal needs. It needs are minor in that the url path must contain a string nojs and in this case a class attribute ctools-use-modal.

<?php
function annotate_ym_menu() {
$items['nojs/node/%node/%'] = array(
'page callback' => 'annotate_ym_ajax_node',
'page arguments' => array(0, 2, 3),

update module with a twist

I just did an upgrade from the calendar and date module of which calendar needed to move from 6.x-2.x-dev to 6.x-2.4 version which seemed a pitb exercise. I hope I missed some skills :-p

The following command was not working

drush upc calendar-6.x-2.4

So what I did was download the latest version offsite. Then diff the module trees.

cd /tmp
drush dl calendar-6.x-2.4
cd /my-site/sites/all/modules/calendar
cp -r /tmp/calendar/* ./

I like Universal Subtitles website.

Logo of Universal Subtitles
I recently discovered the site http://universalsubtitles.org which is a gateway to online video material and allows us to subtitle online videos. In the past I tried to do something similar with http://mycaptions.org (offline) with an arcane editor using BUedit. With that system I managed to add subtitles to this video of which I like the animal.

Who is currently online

I want to run svn up on the site but I need to offline it first. So who is online?

SELECT name, mail, (unix_timestamp()-access)/3600 AS hours
  FROM users
  HAVING hours < 1
  ORDER BY access;

Or for short

drush sql-query "select name, mail, (unix_timestamp()-access)/3600 as hours from users having hours < 1 order by access;"

Bookmarklets tips from the Drupal developement mailing list

Quotation would be nice but I deleted them from my mail :( ... hope to edit this one some day.

== below is not by me ==

Append XDEBUG

if(document.URL.indexOf('XDEBUG_PROFILE')<1) { 
  var sep=document.URL.indexOf('?');sep = (sep<1)? '?' : '&';
  window.location.href=document.URL+sep+'XDEBUG_PROFILE';
}

Switch from dev.example.com to www.example.com

if ( /dev\./.test(location.href)){
  location.href=location.href.replace('dev.','www.');
};

And more

There are a handful of such useful freebies (including the one I did for DBG

mysql on mac

(this is my scratchpad)
I installed mysql on a mac straight from mysql website. Not sure whether that was a wise decision.

cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
vi /etc/my.cnf 
/Library/StartupItems/MySQLCOM/MySQLCOM stop
/Library/StartupItems/MySQLCOM/MySQLCOM start
free form: 

Using cron to update a site and prepare the backup

For a site on my VM I needed an svn sync and the backup files on my developer site.

I initially didn't want to install backup_migrate module. This was partly due to my arcane workflow which is of course by hand and unfamiliarity with back_migrate module.

So this is what I deviced

test_site@serverVM:~$ crontab -l
# m h  dom mon dow   command
*/7 * * * * wget -O - -q -t 1 http://test-site.com/cron.php
*/5 * * * * /home/test_site/svn-up 2>&1 > /home/test_site/svn-up.log
* */1 * * * /home/test_site/ant-backup 2>&1 > /home/test_site/ant-backup.log

Temporary Securing Drupal through Basic Auth in settings.php

We needed to protect our production site from prying eyes for a while with a basic authentication. Using apache basic auth settings seemed not enough. Or actually was too much. We wanted the theme to blend in. So these files were not supposed to get protected. Only our Drupal pages should.

The solution came from http://php.net/manual/en/features.http-auth.php. Adding the following to sites/default/settings.php makes the customer happy and drush too.

Dumping all tables with drush

I want a clean database without clicking.

echo "\
SELECT concat('drop table ', table_name, ';') \
  FROM information_schema.tables \
  WHERE table_schema=schema()" \
| `drush sql-connect` \
| grep "^drop table " \
| `drush sql-connect`

This work only for single drupal / single schema installs.