/** * @brief * * @param array $argv * @param array $argc */ function directory_run($argv, $argc) { cli_startup(); if ($argc < 2) { return; } $force = false; $pushall = true; if ($argc > 2) { if ($argv[2] === 'force') { $force = true; } if ($argv[2] === 'nopush') { $pushall = false; } } logger('directory update', LOGGER_DEBUG); $dirmode = get_config('system', 'directory_mode'); if ($dirmode === false) { $dirmode = DIRECTORY_MODE_NORMAL; } $x = q("select * from channel where channel_id = %d limit 1", intval($argv[1])); if (!$x) { return; } $channel = $x[0]; if ($dirmode != DIRECTORY_MODE_NORMAL) { // this is an in-memory update and we don't need to send a network packet. local_dir_update($argv[1], $force); q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id'])); // Now update all the connections if ($pushall) { proc_run('php', 'include/notifier.php', 'refresh_all', $channel['channel_id']); } return; } // otherwise send the changes upstream $directory = find_upstream_directory($dirmode); $url = $directory['url'] . '/post'; // ensure the upstream directory is updated $packet = zot_build_packet($channel, $force ? 'force_refresh' : 'refresh'); $z = zot_zot($url, $packet); // re-queue if unsuccessful if (!$z['success']) { /** @FIXME we aren't updating channel_dirdate if we have to queue * the directory packet. That means we'll try again on the next poll run. */ $hash = random_string(); q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) \n\t\t\tvalues ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account_id']), intval($channel['channel_id']), dbesc('zot'), dbesc($url), intval(1), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc($packet), dbesc('')); } else { q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id'])); } // Now update all the connections if ($pushall) { proc_run('php', 'include/notifier.php', 'refresh_all', $channel['channel_id']); } }
public static function run($argc, $argv) { if ($argc < 2) { return; } $force = false; $pushall = true; if ($argc > 2) { if ($argv[2] === 'force') { $force = true; } if ($argv[2] === 'nopush') { $pushall = false; } } logger('directory update', LOGGER_DEBUG); $dirmode = get_config('system', 'directory_mode'); if ($dirmode === false) { $dirmode = DIRECTORY_MODE_NORMAL; } $x = q("select * from channel where channel_id = %d limit 1", intval($argv[1])); if (!$x) { return; } $channel = $x[0]; if ($dirmode != DIRECTORY_MODE_NORMAL) { // this is an in-memory update and we don't need to send a network packet. local_dir_update($argv[1], $force); q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id'])); // Now update all the connections if ($pushall) { Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); } return; } // otherwise send the changes upstream $directory = find_upstream_directory($dirmode); $url = $directory['url'] . '/post'; // ensure the upstream directory is updated $packet = zot_build_packet($channel, $force ? 'force_refresh' : 'refresh'); $z = zot_zot($url, $packet); // re-queue if unsuccessful if (!$z['success']) { /** @FIXME we aren't updating channel_dirdate if we have to queue * the directory packet. That means we'll try again on the next poll run. */ $hash = random_string(); queue_insert(array('hash' => $hash, 'account_id' => $channel['channel_account_id'], 'channel_id' => $channel['channel_id'], 'posturl' => $url, 'notify' => $packet)); } else { q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id'])); } // Now update all the connections if ($pushall) { Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); } }