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.

Reply via email to