Author: xavier
Date: 2010-09-09 15:01:46 +0200 (Thu, 09 Sep 2010)
New Revision: 30860
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/config/doctrine/schema.yml
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrl.class.php
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlBannedDomain.class.php
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlTable.class.php
plugins/sfDoctrineShortUrlPlugin/trunk/lib/validator/sfValidatorBannedDomain.class.php
plugins/sfDoctrineShortUrlPlugin/trunk/modules/sfShortUrl/lib/BasesfShortUrlActions.class.php
Log:
added rel=shortlink fetching. Better count of visits
Modified: plugins/sfDoctrineShortUrlPlugin/trunk/config/doctrine/schema.yml
===================================================================
--- plugins/sfDoctrineShortUrlPlugin/trunk/config/doctrine/schema.yml
2010-09-08 19:45:50 UTC (rev 30859)
+++ plugins/sfDoctrineShortUrlPlugin/trunk/config/doctrine/schema.yml
2010-09-09 13:01:46 UTC (rev 30860)
@@ -8,6 +8,7 @@
last_visited_at: { type: timestamp }
is_malware: { type: boolean, default: false }
is_enabled: { type: boolean, default: true }
+ is_external: { type: boolean, default: false }
indexes:
uriindex:
fields:
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrl.class.php
===================================================================
---
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrl.class.php
2010-09-08 19:45:50 UTC (rev 30859)
+++
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrl.class.php
2010-09-09 13:01:46 UTC (rev 30860)
@@ -11,5 +11,30 @@
*/
abstract class PluginsfShortUrl extends BasesfShortUrl
{
+ const REGEX_URL_FORMAT = '~^
+ (%s):// # protocol
+ (
+ ([a-z0-9-]+\.)+[a-z]{2,6} # a domain name
+ | # or
+ \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address
+ )
+ (:[0-9]+)? # a port (optional)
+ (/?|/\S+) # a /, nothing or a / with
something
+ $~ix';
+ public static $protocols = array('http', 'https', 'ftp', 'ftps');
+
+ public function getDomainName()
+ {
+ $pattern = sprintf(self::REGEX_URL_FORMAT, implode('|', self::$protocols));
+ preg_match($pattern, $this->getLongurl(), $matches);
+ return isset($matches[2]) ? $matches[2] : null;
+ }
+
+ public function saveVisit(sfWebRequest $request)
+ {
+ $this->setViewcount($this->getViewcount() + 1);
+ $this->setLastVisitedAt(date('Y-m-d H:i:s', time()));
+ $this->save();
+ }
}
\ No newline at end of file
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlBannedDomain.class.php
===================================================================
---
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlBannedDomain.class.php
2010-09-08 19:45:50 UTC (rev 30859)
+++
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlBannedDomain.class.php
2010-09-09 13:01:46 UTC (rev 30860)
@@ -2,9 +2,9 @@
/**
* PluginsfShortUrlBannedDomain
- *
+ *
* This class has been auto-generated by the Doctrine ORM Framework
- *
+ *
* @package ##PACKAGE##
* @subpackage ##SUBPACKAGE##
* @author ##NAME## <##EMAIL##>
@@ -12,5 +12,13 @@
*/
abstract class PluginsfShortUrlBannedDomain extends BasesfShortUrlBannedDomain
{
-
+ public function cleanShortUrls()
+ {
+ $regex =
'^(http|https|ftp|ftps)://('.$this->getDomain().')(:[0-9]+)?(/|/.*)?$';
+ Doctrine_Query::create()
+ ->delete()
+ ->from('sfShortUrl u')
+ ->where('u.longurl REGEXP ?', $regex)
+ ->execute();
+ }
}
\ No newline at end of file
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlTable.class.php
===================================================================
---
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlTable.class.php
2010-09-08 19:45:50 UTC (rev 30859)
+++
plugins/sfDoctrineShortUrlPlugin/trunk/lib/model/doctrine/PluginsfShortUrlTable.class.php
2010-09-09 13:01:46 UTC (rev 30860)
@@ -41,6 +41,7 @@
$shorturl_object->setShorturl($shorturl);
$shorturl_object->setIsEnabled(true);
$shorturl_object->setViewcount(0);
+ $shorturl_object->setIsExternal(false);
$shorturl_object->save();
return $shorturl_object;
}
@@ -118,4 +119,43 @@
return $shorturl_object;
}
+
+ public function generateWithRelShortlink($longurl, $shorturl = '')
+ {
+ // try to retrieve a corresponding url within the public ones
+ $shorturl_object = $this->findOneByLongurl($longurl);
+
+ if (!isset($shorturl_object) || !$shorturl_object)
+ {
+ // grab the page
+ $browser = new sfWebBrowser();
+ $selector = $browser->get($longurl)->getResponseDomCssSelector();
+
+ // search for a shortlink in the page
+ $link = $selector->matchSingle('head link[rel=shortlink]')->getNode();
+
+ if ($link)
+ {
+ $extracted_shorturl = $link->getAttribute('href');
+ }
+
+ // if not found, generate our shorturl
+ if (isset($extracted_shorturl) && $extracted_shorturl)
+ {
+ $shorturl_object = new sfShortUrl();
+ $shorturl_object->setLongurl($longurl);
+ $shorturl_object->setShorturl($extracted_shorturl);
+ $shorturl_object->setIsEnabled(true);
+ $shorturl_object->setViewcount(0);
+ $shorturl_object->setIsExternal(true);
+ $shorturl_object->save();
+ }
+ else
+ {
+ $shorturl_object = $this->generate($longurl, $shorturl);
+ }
+ }
+
+ return $shorturl_object;
+ }
}
\ No newline at end of file
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/lib/validator/sfValidatorBannedDomain.class.php
===================================================================
---
plugins/sfDoctrineShortUrlPlugin/trunk/lib/validator/sfValidatorBannedDomain.class.php
2010-09-08 19:45:50 UTC (rev 30859)
+++
plugins/sfDoctrineShortUrlPlugin/trunk/lib/validator/sfValidatorBannedDomain.class.php
2010-09-09 13:01:46 UTC (rev 30860)
@@ -9,17 +9,6 @@
*/
class sfValidatorBannedDomain extends sfValidatorBase
{
- const REGEX_URL_FORMAT = '~^
- (%s):// # protocol
- (
- ([a-z0-9-]+\.)+[a-z]{2,6} # a domain name
- | # or
- \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address
- )
- (:[0-9]+)? # a port (optional)
- (/?|/\S+) # a /, nothing or a / with
something
- $~ix';
-
/**
* Configures the current validator.
*
@@ -30,6 +19,7 @@
parent::configure($options, $messages);
$this->addOption('protocols', array('http', 'https', 'ftp', 'ftps'));
+ $this->addMessage('domain_not_found', 'The domain name could not be found
and validated.');
$this->addMessage('invalid', 'This domain name is not allowed.');
}
@@ -38,10 +28,15 @@
*/
protected function doClean($value)
{
- $pattern = sprintf(self::REGEX_URL_FORMAT, implode('|',
$this->getOption('protocols')));
+ $pattern = sprintf(sfShortUrl::REGEX_URL_FORMAT, implode('|',
$this->getOption('protocols')));
preg_match($pattern, $value, $matches);
- $domain = $matches[2];
+ $domain = isset($matches[2]) ? $matches[2] : null;
+ if (!$domain)
+ {
+ throw new sfValidatorError($this, 'domain_not_found', array('value' =>
$value));
+ }
+
$query =
Doctrine_Core::getTable('sfShortUrlBannedDomain')->createQuery()->where('domain
= ?', $domain);
if ($query->count())
Modified:
plugins/sfDoctrineShortUrlPlugin/trunk/modules/sfShortUrl/lib/BasesfShortUrlActions.class.php
===================================================================
---
plugins/sfDoctrineShortUrlPlugin/trunk/modules/sfShortUrl/lib/BasesfShortUrlActions.class.php
2010-09-08 19:45:50 UTC (rev 30859)
+++
plugins/sfDoctrineShortUrlPlugin/trunk/modules/sfShortUrl/lib/BasesfShortUrlActions.class.php
2010-09-09 13:01:46 UTC (rev 30860)
@@ -58,9 +58,7 @@
{
$shorturl =
Doctrine::getTable('sfShortUrl')->findOneByShorturl($request->getParameter('shorturl'));
$this->forward404Unless($shorturl && $shorturl->getIsEnabled());
- $shorturl->setViewcount($shorturl->getViewcount() + 1);
- $shorturl->setLastVisitedAt(date('Y-m-d H:i:s', time()));
- $shorturl->save();
+ $shorturl->saveVisit($request);
$this->redirect($shorturl->getLongurl(), 301);
}
}
--
You received this message because you are subscribed to the Google Groups
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/symfony-svn?hl=en.