Uploaded image for project: 'Doctrine 1'
  1. Doctrine 1
  2. DC-623

Impossible to create non-unique slugs

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.2.2
    • Fix Version/s: None
    • Component/s: Sluggable
    • Labels:
      None

      Description

      I want to create a non-unique slug of a title field from my table.

      But I've found that when I change unique from 'true' to 'false' the slugs were not created or updated

      In lib\Doctrine\Template\Listener\Sluggable.php inside preUpdate() function the first if() statement disables the unique (false) option.

        Activity

        adwise Adwise Internetmarketing created issue -
        jmather Jacob Mather made changes -
        Field Original Value New Value
        Attachment dc-623.patch [ 10750 ]
        webpragmatist webPragmatist made changes -
        Comment [ I'm not sure what the point of the check for unique is on preUpdate. Maybe this function is incomplete?

        {code}
            /**
             * Set the slug value automatically when a record is updated if the options are configured
             * to allow it
             *
             * @param Doctrine_Event $event
             * @return void
             */
            public function preUpdate(Doctrine_Event $event)
            {
                if (false !== $this->_options['unique']) {
                    $record = $event->getInvoker();
                    $name = $record->getTable()->getFieldName($this->_options['name']);

                    if ( ! $record->$name || (
                        false !== $this->_options['canUpdate'] &&
                        ! array_key_exists($name, $record->getModified())
                    )) {
                        $record->$name = $this->buildSlugFromFields($record);
                    } else if ( ! empty($record->$name) &&
                        false !== $this->_options['canUpdate'] &&
                        array_key_exists($name, $record->getModified()
                    )) {
                        $record->$name = $this->buildSlugFromSlugField($record);
                    }
                }
            }
        {code}

        Change to

        {code}
            /**
             * Set the slug value automatically when a record is updated if the options are configured
             * to allow it
             *
             * @param Doctrine_Event $event
             * @return void
             */
            public function preUpdate(Doctrine_Event $event)
            {
                    $record = $event->getInvoker();
                    $name = $record->getTable()->getFieldName($this->_options['name']);

                    if ( ! $record->$name || (
                        false !== $this->_options['canUpdate'] &&
                        ! array_key_exists($name, $record->getModified())
                    )) {
                        $record->$name = $this->buildSlugFromFields($record);
                    } else if ( ! empty($record->$name) &&
                        false !== $this->_options['canUpdate'] &&
                        array_key_exists($name, $record->getModified()
                    )) {
                        $record->$name = $this->buildSlugFromSlugField($record);
                    }
            }
        {code} ]

          People

          • Assignee:
            jwage Jonathan H. Wage
            Reporter:
            adwise Adwise Internetmarketing
          • Votes:
            2 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: