Skip to content

Commit 5a90f5d

Browse files
committed
Allow to change keyword group association
1 parent cecead9 commit 5a90f5d

27 files changed

+503
-3930
lines changed

Action/Keyword.php

+4-8
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
use Keyword\Model\FolderAssociatedKeyword;
4040
use Keyword\Model\FolderAssociatedKeywordQuery;
4141

42-
use Keyword\Model\KeywordGroup;
43-
use Keyword\Model\KeywordGroupQuery;
4442
use Keyword\Model\KeywordQuery;
4543
use Keyword\Model\ProductAssociatedKeyword;
4644
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -190,11 +188,8 @@ public function createKeyword(KeywordEvents $event)
190188
->setLocale($event->getLocale())
191189
->setTitle($event->getTitle())
192190
->setCode($event->getCode())
193-
->setVisible($event->getVisible());
194-
195-
$keywordGroup = KeywordGroupQuery::create()->findById($event->getKeywordGroupId());
196-
197-
$keyword->setKeywordGroups($keywordGroup);
191+
->setVisible($event->getVisible())
192+
->setKeywordGroupId($event->getKeywordGroupId());
198193

199194
$keyword->create();
200195

@@ -228,6 +223,7 @@ public function updateKeyword(KeywordUpdateEvent $event)
228223
->setDescription($event->getDescription())
229224
->setChapo($event->getChapo())
230225
->setPostscriptum($event->getPostscriptum())
226+
->setKeywordGroupId($event->getKeywordGroupId())
231227
->save()
232228
;
233229

@@ -323,4 +319,4 @@ public static function getSubscribedEvents()
323319
KeywordEvents::KEYWORD_OBJECT_UPDATE_POSITION => array('updateKeywordObjectPosition', 128)
324320
);
325321
}
326-
}
322+
}

Config/module.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<descriptive locale="en_US">
88
<title>Keyword</title>
99
</descriptive>
10-
<version>2.3.0</version>
10+
<version>2.4.0</version>
1111
<author>
1212
<name>Michaël Espeche</name>
1313
<email>mespeche@openstudio.fr</email>

Config/schema.xml

+6-18
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,24 @@
2020

2121
<table name="keyword" namespace="Keyword\Model">
2222
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
23+
<column name="keyword_group_id" required="true" type="INTEGER" />
2324
<column name="visible" type="TINYINT" />
2425
<column name="position" type="INTEGER" />
2526
<column name="title" size="255" type="VARCHAR" />
2627
<column name="code" size="255" type="VARCHAR" />
2728
<column name="description" type="CLOB" />
2829
<column name="chapo" type="LONGVARCHAR" />
2930
<column name="postscriptum" type="LONGVARCHAR" />
30-
<behavior name="timestampable" />
31-
<behavior name="i18n">
32-
<parameter name="i18n_columns" value="title, description, chapo, postscriptum" />
33-
</behavior>
34-
</table>
35-
36-
<table name="keyword_group_associated_keyword" isCrossRef="true" namespace="Keyword\Model">
37-
<column name="keyword_group_id" primaryKey="true" required="true" type="INTEGER" />
38-
<column name="keyword_id" primaryKey="true" required="true" type="INTEGER" />
39-
<column name="position" required="true" type="INTEGER" />
40-
<foreign-key foreignTable="keyword_group" name="fk_keyword_group_associated_keyword_keyword_group_id" onDelete="CASCADE" onUpdate="RESTRICT">
31+
<foreign-key foreignTable="keyword_group" name="fk_keyword_group_id" onDelete="CASCADE" onUpdate="RESTRICT">
4132
<reference foreign="id" local="keyword_group_id" />
4233
</foreign-key>
43-
<foreign-key foreignTable="keyword" name="fk_keyword_group_associated_keyword_keyword_id" onDelete="CASCADE" onUpdate="RESTRICT">
44-
<reference foreign="id" local="keyword_id" />
45-
</foreign-key>
46-
<index name="idx_keyword_group_associated_keyword_keyword_group_id">
34+
<index name="idx_keyword_group_id">
4735
<index-column name="keyword_group_id" />
4836
</index>
49-
<index name="idx_keyword_group_associated_keyword_keyword_id">
50-
<index-column name="keyword_id" />
51-
</index>
5237
<behavior name="timestampable" />
38+
<behavior name="i18n">
39+
<parameter name="i18n_columns" value="title, description, chapo, postscriptum" />
40+
</behavior>
5341
</table>
5442

5543
<table name="content_associated_keyword" namespace="Keyword\Model">

Config/thelia.sql

+4-25
Original file line numberDiff line numberDiff line change
@@ -29,39 +29,18 @@ DROP TABLE IF EXISTS `keyword`;
2929
CREATE TABLE `keyword`
3030
(
3131
`id` INTEGER NOT NULL AUTO_INCREMENT,
32+
`keyword_group_id` INTEGER NOT NULL,
3233
`visible` TINYINT,
3334
`position` INTEGER,
3435
`code` VARCHAR(255),
3536
`created_at` DATETIME,
3637
`updated_at` DATETIME,
37-
PRIMARY KEY (`id`)
38-
) ENGINE=InnoDB;
39-
40-
-- ---------------------------------------------------------------------
41-
-- keyword_group_associated_keyword
42-
-- ---------------------------------------------------------------------
43-
44-
DROP TABLE IF EXISTS `keyword_group_associated_keyword`;
45-
46-
CREATE TABLE `keyword_group_associated_keyword`
47-
(
48-
`keyword_group_id` INTEGER NOT NULL,
49-
`keyword_id` INTEGER NOT NULL,
50-
`position` INTEGER NOT NULL,
51-
`created_at` DATETIME,
52-
`updated_at` DATETIME,
53-
PRIMARY KEY (`keyword_group_id`,`keyword_id`),
54-
INDEX `idx_keyword_group_associated_keyword_keyword_group_id` (`keyword_group_id`),
55-
INDEX `idx_keyword_group_associated_keyword_keyword_id` (`keyword_id`),
56-
CONSTRAINT `fk_keyword_group_associated_keyword_keyword_group_id`
38+
PRIMARY KEY (`id`),
39+
INDEX `idx_keyword_group_id` (`keyword_group_id`),
40+
CONSTRAINT `fk_keyword_group_id`
5741
FOREIGN KEY (`keyword_group_id`)
5842
REFERENCES `keyword_group` (`id`)
5943
ON UPDATE RESTRICT
60-
ON DELETE CASCADE,
61-
CONSTRAINT `fk_keyword_group_associated_keyword_keyword_id`
62-
FOREIGN KEY (`keyword_id`)
63-
REFERENCES `keyword` (`id`)
64-
ON UPDATE RESTRICT
6544
ON DELETE CASCADE
6645
) ENGINE=InnoDB;
6746

Controller/Admin/KeywordController.php

+13-10
Original file line numberDiff line numberDiff line change
@@ -426,16 +426,17 @@ protected function getUpdateForm()
426426
*/
427427
protected function hydrateObjectForm($object)
428428
{
429+
429430
// Prepare the data that will hydrate the form
430431
$data = array(
431-
'id' => $object->getId(),
432-
'locale' => $object->getLocale(),
433-
'title' => $object->getTitle(),
434-
'code' => $object->getCode(),
435-
'chapo' => $object->getChapo(),
436-
'description' => $object->getDescription(),
437-
'postscriptum' => $object->getPostscriptum(),
438-
'visible' => $object->getVisible()
432+
'id' => $object->getId(),
433+
'locale' => $object->getLocale(),
434+
'title' => $object->getTitle(),
435+
'code' => $object->getCode(),
436+
'chapo' => $object->getChapo(),
437+
'description' => $object->getDescription(),
438+
'postscriptum' => $object->getPostscriptum(),
439+
'visible' => $object->getVisible()
439440
);
440441

441442
// Setup the object form
@@ -477,7 +478,8 @@ protected function getUpdateEvent($formData)
477478
->setChapo($formData['chapo'])
478479
->setDescription($formData['description'])
479480
->setPostscriptum($formData['postscriptum'])
480-
->setVisible($formData['visible']);
481+
->setVisible($formData['visible'])
482+
->setKeywordGroupId($formData['keyword_group_id']);
481483

482484
return $keywordUpdateEvent;
483485
}
@@ -599,6 +601,7 @@ protected function renderEditionTemplate()
599601
protected function redirectToEditionTemplate()
600602
{
601603
$args = $this->getEditionArguments();
604+
602605
return $this->generateRedirect('/admin/module/Keyword/update?keyword_id='.$args['keyword_id']);
603606
}
604607

@@ -637,4 +640,4 @@ protected function performAdditionalUpdateAction($updateEvent)
637640
return $this->redirectToListTemplate();
638641
}
639642
}
640-
}
643+
}

Controller/Admin/KeywordGroupController.php

+1
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ protected function renderEditionTemplate()
271271
protected function redirectToEditionTemplate()
272272
{
273273
$args = $this->getEditionArguments();
274+
274275
return $this->generateRedirect('/admin/module/Keyword/group/update?keyword_group_id='.$args['keyword_group_id']);
275276
}
276277

Event/KeywordUpdateEvent.php

+19
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
class KeywordUpdateEvent extends KeywordEvents
3232
{
3333
protected $keyword_id;
34+
protected $keyword_group_id;
3435

3536
protected $chapo;
3637
protected $description;
@@ -121,4 +122,22 @@ public function getPostscriptum()
121122
return $this->postscriptum;
122123
}
123124

125+
/**
126+
* @return mixed
127+
*/
128+
public function getKeywordGroupId()
129+
{
130+
return $this->keyword_group_id;
131+
}
132+
133+
/**
134+
* @param mixed $keyword_group_id
135+
*/
136+
public function setKeywordGroupId($keyword_group_id)
137+
{
138+
$this->keyword_group_id = $keyword_group_id;
139+
140+
return $this;
141+
}
142+
124143
}

Event/KeywordUpdateObjectPositionEvent.php

+1-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class KeywordUpdateObjectPositionEvent extends ActionEvent
2828
protected $mode;
2929
protected $position;
3030

31-
function __construct($keyword_id, $object, $object_id, $mode, $position)
31+
public function __construct($keyword_id, $object, $object_id, $mode, $position)
3232
{
3333
$this->keyword_id = $keyword_id;
3434
$this->object = $object;
@@ -127,6 +127,4 @@ public function getPosition()
127127
return $this->position;
128128
}
129129

130-
131-
132130
}

Form/KeywordModificationForm.php

+13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Keyword\Model\KeywordQuery;
2727
use Symfony\Component\Validator\Constraints\GreaterThan;
2828
use Symfony\Component\Validator\ExecutionContextInterface;
29+
use Thelia\Core\Translation\Translator;
2930
use Thelia\Form\StandardDescriptionFieldsTrait;
3031

3132
/**
@@ -43,6 +44,18 @@ protected function buildForm()
4344

4445
$this->formBuilder
4546
->add("id", "hidden", array("constraints" => array(new GreaterThan(array('value' => 0)))))
47+
->add("keyword_group_id", "integer", array(
48+
"constraints" => array(
49+
new GreaterThan(
50+
array('value' => 0)
51+
)
52+
),
53+
'label' => Translator::getInstance()->trans('Change keyword group', array(), 'keyword'),
54+
'label_attr' => array(
55+
'for' => 'keyword_group_id'
56+
)
57+
)
58+
)
4659
;
4760

4861
// Add standard description fields, excluding title and locale, which a re defined in parent class

I18n/en_US.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,6 @@
6262
'Enter new folder position' => 'Enter new folder position',
6363
'Enter new content position' => 'Enter new content position',
6464
'Enter new category position' => 'Enter new category position',
65-
'Enter new product position' => 'Enter new product position'
65+
'Enter new product position' => 'Enter new product position',
66+
'Change keyword group' => 'Change keyword group'
6667
);

I18n/fr_FR.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,6 @@
6262
'Enter new folder position' => 'Entrez la nouvelle position du dossier',
6363
'Enter new content position' => 'Entrez la nouvelle position du contenu',
6464
'Enter new category position' => 'Entrez la nouvelle position de la catégorie',
65-
'Enter new product position' => 'Entrez la nouvelle position du produit'
65+
'Enter new product position' => 'Entrez la nouvelle position du produit',
66+
'Change keyword group' => 'Changer le mot clé de groupe'
6667
);

Loop/Keyword.php

+2-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
namespace Keyword\Loop;
2525

26-
use Keyword\Model\Base\KeywordGroupAssociatedKeywordQuery;
2726
use Keyword\Model\CategoryAssociatedKeywordQuery;
2827
use Keyword\Model\ContentAssociatedKeywordQuery;
2928
use Keyword\Model\FolderAssociatedKeywordQuery;
@@ -140,8 +139,7 @@ public function buildModelCriteria()
140139

141140
/* If keyword group criteria filter by keyword group code */
142141
if ($this->getKeywordGroup()) {
143-
$keywordGroup = KeywordGroupAssociatedKeywordQuery::create()->findByKeywordGroupId($this->getKeywordGroup());
144-
$search->filterByKeywordGroupAssociatedKeyword($keywordGroup);
142+
$search->filterByKeywordGroupId($this->getKeywordGroup());
145143
}
146144

147145
/* If keyword criteria filter by keyword code */
@@ -237,10 +235,8 @@ public function parseResults(LoopResult $loopResult)
237235
$productId[] = $product->getId();
238236
}
239237

240-
$keywordGroup = KeywordGroupAssociatedKeywordQuery::create()->findOneByKeywordId($keyword->getId());
241-
242238
$loopResultRow->set("ID", $keyword->getId())
243-
->set("KEYWORD_GROUP_ID", $keywordGroup->getKeywordGroupId())
239+
->set("KEYWORD_GROUP_ID", $keyword->getKeywordGroupId())
244240
->set("IS_TRANSLATED",$keyword->getVirtualColumn('IS_TRANSLATED'))
245241
->set("LOCALE",$this->locale)
246242
->set("TITLE",$keyword->getVirtualColumn('i18n_TITLE'))

Loop/KeywordContent.php

-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ public function parseResults(LoopResult $results)
174174
$results->addRow($loopResultRow);
175175
}
176176

177-
178177
return $results;
179178
}
180179

Loop/KeywordFolder.php

-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,6 @@ public function parseResults(LoopResult $results)
178178
$results->addRow($loopResultRow);
179179
}
180180

181-
182181
return $results;
183182
}
184183

0 commit comments

Comments
 (0)