/**
  * Save Options Form
  */
 public function save($con = null)
 {
     foreach ($this->getValues() as $option => $value) {
         if (in_array($option, self::$IGNORE_OPTIONS)) {
             continue;
         }
         OptionPeer::updateOption($option, $value);
     }
 }
require_once dirname(__FILE__) . '/../config/ProjectConfiguration.class.php';
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', true);
// initialize instance
sfContext::createInstance($configuration);
// set default TIMEZONE
$tz = OptionPeer::retrieveOption('TIMEZONE');
if ($tz) {
    date_default_timezone_set($tz);
}
// load URL helper
sfLoader::loadHelpers('Url');
sfConfig::set('sf_relative_url_root', sfConfig::get('app_general_base_url'));
// get last time it was executed
$last_run = OptionPeer::retrieveOption("NOTIFY_TAG_CHANGES_LAST_RUN");
$this_run = time();
OptionPeer::updateOption("NOTIFY_TAG_CHANGES_LAST_RUN", $this_run);
if (!$last_run) {
    exit;
}
// this is the very first time we run, just mark last run time
// convert to SQL standard
$last_run_sql = date('Y-m-d H:i:s', $last_run);
$this_run_sql = date('Y-m-d H:i:s', $this_run);
// get all changed info
$changed_objects = array();
foreach (ContactPeer::$CONTACT_CLASSES as $class) {
    // build criteria
    $c = new Criteria();
    $c->add(eval("return {$class}Peer::UPDATED_AT;"), $last_run_sql, Criteria::GREATER_THAN);
    $c->addAnd(eval("return {$class}Peer::UPDATED_AT;"), $this_run_sql, Criteria::LESS_EQUAL);
    $c->addAnd(BookmarkPeer::USER_ID, null, Criteria::ISNOTNULL);