19
19
from cms .constants import PAGE_TYPES_ID , PUBLISHER_STATE_DIRTY , ROOT_USER_LEVEL
20
20
from cms .forms .validators import validate_relative_url , validate_url_uniqueness
21
21
from cms .forms .widgets import UserSelectAdminWidget , AppHookSelect , ApplicationConfigSelect
22
- from cms .models import (CMSPlugin , Page , PageNode , PageType , PagePermission , PageUser , PageUserGroup , Title ,
23
- Placeholder , GlobalPagePermission )
22
+ from cms .models import (CMSPlugin , Page , PageType , PagePermission , PageUser , PageUserGroup , Title ,
23
+ Placeholder , GlobalPagePermission , TreeNode )
24
24
from cms .models .permissionmodels import User
25
25
from cms .plugin_pool import plugin_pool
26
26
from cms .signals .apphook import set_restart_trigger
@@ -152,7 +152,7 @@ class AddPageForm(BasePageForm):
152
152
required = False ,
153
153
)
154
154
parent_node = forms .ModelChoiceField (
155
- queryset = PageNode .objects .all (),
155
+ queryset = TreeNode .objects .all (),
156
156
required = False ,
157
157
widget = forms .HiddenInput (),
158
158
)
@@ -169,16 +169,12 @@ def __init__(self, *args, **kwargs):
169
169
if not source_field or source_field .widget .is_hidden :
170
170
return
171
171
172
- root_node = PageType .get_root_node (site = self ._site )
172
+ root_page = PageType .get_root_page (site = self .<
F438
span class="pl-c1">_site)
173
173
174
- if root_node :
174
+ if root_page :
175
175
# Set the choicefield's choices to the various page_types
176
- descendants = root_node .get_descendants ()
177
- titles = Title .objects .filter (
178
- page__is_page_type = True ,
179
- page__nodes__in = descendants ,
180
- language = self ._language ,
181
- )
176
+ descendants = root_page .get_descendant_pages ().filter (is_page_type = True )
177
+ titles = Title .objects .filter (page__in = descendants , language = self ._language )
182
178
choices = [('' , '---------' )]
183
179
choices .extend ((title .page_id , title .title ) for title in titles )
184
180
source_field .choices = choices
@@ -200,7 +196,7 @@ def clean(self):
200
196
201
197
if parent_node :
202
198
slug = data ['slug' ]
203
- parent_path = parent_node .page .get_path (self ._language )
199
+ parent_path = parent_node .item .get_path (self ._language )
204
200
path = u'%s/%s' % (parent_path , slug ) if parent_path else slug
205
201
else :
206
202
path = data ['slug' ]
@@ -225,15 +221,6 @@ def clean_parent_node(self):
225
221
raise ValidationError ("Site doesn't match the parent's page site" )
226
222
return parent_node
227
223
228
- def create_page_node (self , page , parent = None ):
229
- new_node = PageNode (page = page , site = page .site )
230
-
231
- if parent :
232
- parent .add_child (instance = new_node )
233
- else :
234
- PageNode .add_root (instance = new_node )
235
- return new_node
236
-
237
224
def create_translation (self , page ):
238
225
data = self .cleaned_data
239
226
title_kwargs = {
@@ -275,16 +262,14 @@ def save(self, *args, **kwargs):
275
262
276
263
if source :
277
264
new_page = self .from_source (source , parent = parent )
278
- new_node = new_page .get_node_object (self ._site )
279
265
280
266
for lang in source .get_languages ():
281
267
source ._copy_contents (new_page , lang )
282
268
else :
283
269
new_page = super (AddPageForm , self ).save (commit = False )
284
270
new_page .template = self .get_template ()
285
- new_page .site = self ._site
271
+ new_page .set_tree_node ( self ._site , target = parent , position = 'last-child' )
286
272
new_page .save ()
287
- new_node = self .create_page_node (new_page , parent = parent )
288
273
289
274
translation = self .create_translation (new_page )
290
275
@@ -296,10 +281,10 @@ def save(self, *args, **kwargs):
296
281
)
297
282
298
283
is_first = not (
299
- PageNode
284
+ TreeNode
300
285
.objects
301
286
.get_for_site (self ._site )
302
- .exclude (pk = new_node . pk )
287
+ .exclude (pk = new_page . node_id )
303
288
.exists ()
304
289
)
305
290
new_page .rescan_placeholders ()
@@ -326,18 +311,16 @@ def get_or_create_root(self):
326
311
Creates the root node used to store all page types
327
312
for the current site if it doesn't exist.
328
313
"""
329
- root_node = PageType .get_root_node (site = self ._site )
314
+ root_page = PageType .get_root_page (site = self ._site )
330
315
331
- if root_node :
332
- root_page = root_node .page
333
- else :
334
- root_page = Page .objects .create (
316
+ if not root_page :
317
+ root_page = Page (
335
318
publisher_is_draft = True ,
336
- site = self ._site ,
337
319
in_navigation = False ,
338
320
is_page_type = True ,
339
321
)
340
- root_node = root_page .attach_site (self ._site )
322
+ root_page .set_tree_node (self ._site )
323
+ root_page .save ()
341
324
342
325
if not root_page .has_translation (self ._language ):
343
326
api .create_title (
@@ -347,12 +330,12 @@ def get_or_create_root(self):
347
330
slug = PAGE_TYPES_ID ,
348
331
path = PAGE_TYPES_ID ,
349
332
)
350
- return root_node
333
+ return root_page . node
351
334
352
335
def clean_parent_node (self ):
353
336
parent_node = super (AddPageTypeForm , self ).clean_parent_node ()
354
337
355
- if parent_node and not parent_node .page .is_page_type :
338
+ if parent_node and not parent_node .item .is_page_type :
356
339
raise ValidationError ("Parent has to be a page type." )
357
340
358
341
if not parent_node :
@@ -437,11 +420,9 @@ def clean(self):
437
420
# as a result, slug might not always be there.
438
421
return data
439
422
440
- node = page .get_node_object (site = self ._site )
441
-
442
- if node .parent :
423
+ if page .parent_page :
443
424
slug = data ['slug' ]
444
- parent_path = node . parent . page .get_path (self ._language )
425
+ parent_path = page . parent_page .get_path (self ._language )
445
426
path = u'%s/%s' % (parent_path , slug ) if parent_path else slug
446
427
else :
447
428
path = data ['slug' ]
@@ -483,7 +464,7 @@ def save(self, commit=True):
483
464
if update_count == 0 :
484
465
api .create_title (language = self ._language , page = cms_page , ** translation_data )
485
466
else :
486
- cms_page ._update_title_path_recursive (self ._language , self . _site )
467
+ cms_page ._update_title_path_recursive (self ._language )
487
468
return cms_page
488
469
489
470
@@ -611,9 +592,7 @@ def get_navigation_extenders(self):
611
592
return menu_pool .get_menus_by_attribute ("cms_enabled" , True )
612
593
613
594
def _check_unique_namespace_instance (self , namespace ):
614
- return Page .objects .filter (
615
- publisher_is_draft = True ,
616
- site_id = self .instance .site_id ,
595
+ return Page .objects .drafts ().on_site (self ._site ).filter (
617
596
application_namespace = namespace
618
597
).exclude (pk = self .instance .pk ).exists ()
619
598
@@ -628,7 +607,7 @@ def clean(self):
628
607
# so we know it exists.
629
608
language_name = get_language_object (
630
609
self ._language ,
631
- site_id = self .instance . site_id ,
610
+ site_id = self ._site . pk ,
632
611
)['name' ]
633
612
634
613
if not self .title_obj .slug :
@@ -640,11 +619,10 @@ def clean(self):
640
619
raise ValidationError (message % {'language' : language_name })
641
620
642
621
if 'reverse_id' in self .fields :
643
- id = cleaned_data ['reverse_id' ]
644
- site_id = self .instance .site_id
645
- if id :
646
- if Page .objects .filter (reverse_id = id , site = site_id , publisher_is_draft = True ).exclude (
647
- pk = self .instance .pk ).exists ():
622
+ reverse_id = cleaned_data ['reverse_id' ]
623
+ if reverse_id :
624
+ lookup = Page .objects .drafts ().on_site (self ._site ).filter (reverse_id = reverse_id )
625
+ if lookup .exclude (pk = self .instance .pk ).exists ():
648
626
self ._errors ['reverse_id' ] = self .error_class (
649
627
[_ ('A page with this reverse URL id exists already.' )])
650
628
apphook = cleaned_data .get ('application_urls' , None )
@@ -780,23 +758,19 @@ def __init__(self, *args, **kwargs):
780
758
self ._site = kwargs .pop ('site' , Site .objects .get_current ())
781
759
super (PageTreeForm , self ).__init__ (* args , ** kwargs )
782
760
self .fields ['target' ].queryset = Page .objects .drafts ().filter (
783
- nodes__site = self ._site ,
761
+ node__site = self ._site ,
784
762
is_page_type = self .page .is_page_type ,
785
763
)
786
764
787
765
def get_root_nodes (self ):
788
- return PageNode .get_root_nodes ().filter (page__is_page_type = self .page .is_page_type )
789
-
790
- def get_parent_node (self , site ):
791
- target_page = self .cleaned_data .get ('target' )
792
-
793
- if target_page :
794
- return target_page .get_node_object (site )
795
- return
766
+ # TODO: this needs to avoid using the pages accessor directly
767
+ nodes = TreeNode .get_root_nodes ()
768
+ return nodes .exclude (cms_pages__is_page_type = not (self .page .is_page_type ))
796
769
797
770
def get_tree_options (self ):
798
771
position = self .cleaned_data ['position' ]
799
- parent_node = self .get_parent_node (self ._site )
772
+ target_page = self .cleaned_data .get ('target' )
773
+ parent_node = target_page .node if target_page else None
800
774
801
775
if parent_node :
802
776
return self ._get_tree_options_for_parent (parent_node , position )
@@ -838,7 +812,7 @@ def get_tree_options(self):
838
812
if target_node_position != 'left' :
839
813
return (target_node , target_node_position )
840
814
841
- node = self .page .get_node_object ( self . _site )
815
+ node = self .page .node
842
816
node_is_first = node .path < target_node .path
843
817
844
818
if node_is_first and node .is_sibling_of (target_node ):
@@ -866,11 +840,9 @@ class CopyPageForm(PageTreeForm):
866
840
copy_permissions = forms .BooleanField (initial = False , required = False )
867
841
868
842
def copy_page (self ):
869
- source_site = self .cleaned_data ['source_site' ]
870
843
target , position = self .get_tree_options ()
871
844
copy_permissions = self .cleaned_data .get ('copy_permissions' , False )
872
845
new_page = self .page .copy_with_descendants (
873
- source_site ,
874
846
target_
78C1
node = target ,
875
847
position = position ,
876
848
copy_permissions = copy_permissions ,
@@ -922,7 +894,7 @@ def get_filter_items(self):
922
894
923
895
def run_filters (self , queryset ):
924
896
for field , value in self .get_filter_items ():
925
- query = {'page__ {}__exact' .format (field ): value }
897
+ query = {'{}__exact' .format (field ): value }
926
898
queryset = queryset .filter (** query )
927
899
return queryset
928
900
0 commit comments