- or use the ``site`` GET parameter:
``/?q=foo&site=example.org/dir``
- OpenSearch support with HTML and Atom result lists
+* Instant indexing with WebSub (formerly PubSubHubbub)
============
- Net_URL2
+=====
+Setup
+=====
+This section is incomplete.
+
+Cron job
+========
+Run ``bin/renew-subscriptions.php`` once a day with cron.
+
+
============
About phinde
============
--- /dev/null
+#!/usr/bin/env php
+<?php
+namespace phinde;
+/**
+ * Renew subscriptions
+ * Call this once a day with cron.
+ */
+require_once __DIR__ . '/../src/init.php';
+
+chdir(__DIR__);
+$subDb = new Subscriptions();
+foreach ($subDb->getExpiring() as $sub) {
+ Log::info('Expires soon: ' . $sub['sub_topic']);
+ passthru('./subscribe.php ' . escapeshellarg($sub['sub_topic']));
+}
+?>
}
$sub = $subDb->get($topic);
-if ($sub !== false) {
- Log::error('Topic exists already in subscription table');
- Log::info('Current status: ' . $sub->sub_status);
- exit(3);
+if ($sub === false) {
+ $subDb->create($topic);
+} else {
+ Log::info(
+ 'Topic exists already in subscription table with status '
+ . $sub->sub_status
+ );
+ Log::info('Renewing subscription...');
+ $subDb->renew($sub->sub_id);
}
-$subDb->create($topic);
$sub = $subDb->get($topic);
$callbackUrl = $GLOBALS['phinde']['baseurl'] . 'push-subscription.php'
return $res;
}
+ /**
+ * Get all topics that either expired or expire soon
+ *
+ * @return \PDOStatement Result iterator
+ */
+ public function getExpiring()
+ {
+ $stmt = $this->db->prepare(
+ 'SELECT * FROM subscriptions'
+ . ' WHERE sub_status IN ("active", "expired")'
+ . ' AND DATEDIFF(sub_expires, NOW()) <= 2'
+ );
+ $stmt->execute();
+
+ return $stmt;
+ }
+
/**
* Create a new subscription entry in database.
* Automatically generates secret, capkey and lease seconds.
);
}
+ /**
+ * Renew a subscription: Set its status to "subscribing"
+ *
+ * @param integer $subId Subscription ID
+ *
+ * @return void
+ */
+ public function renew($subId)
+ {
+ $this->db->prepare(
+ 'UPDATE subscriptions'
+ . ' SET sub_status = "subscribing"'
+ . ' , sub_updated = NOW()'
+ . ' WHERE sub_id = :id'
+ )->execute([':id' => $subId]);
+ }
+
/**
* A subscription has been confirmed by the hub - mark it as active.
*
)->execute([':id' => $subId]);
}
+ /**
+ * Subscription has been cancelled/denied for some reason
+ *
+ * @param integer $subId Subscription ID
+ * @param string $reason Cancellation reason
+ *
+ * @return void
+ */
public function denied($subId, $reason)
{
$this->db->prepare(
)->execute([':id' => $subId, ':reason' => $reason]);
}
+ /**
+ * Topic update notification has been received
+ *
+ * @param integer $subId Subscription ID
+ *
+ * @return void
+ */
public function pinged($subId)
{
$this->db->prepare(