Пример #1
0
 public function addMakeSlugUnique(&$script)
 {
     $script .= "\n\n/**\n * Get the slug, ensuring its uniqueness\n *\n * @param    string \$slug            the slug to check\n * @param    string \$separator       the separator used by slug\n * @param    int    \$alreadyExists   false for the first try, true for the second, and take the high count + 1\n * @return   string                   the unique slug\n */\nprotected function makeSlugUnique(\$slug, \$separator = '" . $this->getParameter('separator') . "', \$alreadyExists = false)\n{";
     $getter = $this->getColumnGetter();
     $script .= "\n    if (!\$alreadyExists) {\n        \$slug2 = \$slug;\n    } else {\n        \$slug2 = \$slug . \$separator;";
     if (null == $this->getParameter('slug_pattern')) {
         $script .= "\n\n        \$count = " . $this->builder->getStubQueryBuilder()->getClassname() . "::create()\n            ->filterBySlug(\$this->{$getter}())\n            ->filterByPrimaryKey(\$this->getPrimaryKey())\n        ->count();\n\n        if (1 == \$count) {\n            return \$this->{$getter}();\n        }";
     }
     $script .= "\n    }\n\n    \$adapter = \\Propel\\Runtime\\Propel::getServiceContainer()->getAdapter('" . $this->builder->getDatabase()->getName() . "');\n    \$col = 'q." . $this->getColumnForParameter('slug_column')->getPhpName() . "';\n    \$compare = \$alreadyExists ? \$adapter->compareRegex(\$col, '?') : sprintf('%s = ?', \$col);\n\n    \$query = " . $this->builder->getStubQueryBuilder()->getClassname() . "::create('q')\n        ->where(\$compare, \$alreadyExists ? '^' . \$slug2 . '[0-9]+\$' : \$slug2)\n        ->prune(\$this)";
     if ($this->getParameter('scope_column')) {
         $getter = 'get' . $this->getColumnForParameter('scope_column')->getPhpName();
         $script .= "\n            ->filterBy('{$this->getColumnForParameter('scope_column')->getPhpName()}', \$this->{$getter}())";
     }
     // watch out: some of the columns may be hidden by the soft_delete behavior
     if ($this->table->hasBehavior('soft_delete')) {
         $script .= "\n        ->includeDeleted()";
     }
     $script .= "\n    ;\n\n    if (!\$alreadyExists) {\n        \$count = \$query->count();\n        if (\$count > 0) {\n            return \$this->makeSlugUnique(\$slug, \$separator, true);\n        }\n\n        return \$slug2;\n    }\n\n    \$adapter = \\Propel\\Runtime\\Propel::getServiceContainer()->getAdapter('" . $this->builder->getDatabase()->getName() . "');\n    // Already exists\n    \$object = \$query\n        ->addDescendingOrderByColumn(\$adapter->strLength('" . $this->getColumnForParameter('slug_column')->getName() . "'))\n        ->addDescendingOrderByColumn('" . $this->getColumnForParameter('slug_column')->getName() . "')\n    ->findOne();\n\n    // First duplicate slug\n    if (null == \$object) {\n        return \$slug2 . '1';\n    }\n\n    \$slugNum = substr(\$object->" . $getter . "(), strlen(\$slug) + 1);\n    if (0 == \$slugNum[0]) {\n        \$slugNum[0] = 1;\n    }\n\n    return \$slug2 . (\$slugNum + 1);\n}\n";
 }