18 require_once SQ_CORE_PACKAGE_PATH.
'/designs/design_area/design_area_edit_fns.inc';
41 parent::__construct();
61 $settings = $asset->
attr(
'settings');
63 for (reset($settings); NULL !== ($name = key($settings)); next($settings)) {
64 if (!isset($settings[$name][
'normal'])) {
65 trigger_localised_error(
'CORE0172', E_USER_WARNING, $name, $asset->name);
69 if (!isset($settings[$name][
'hierarchy'])) {
70 $settings[$name][
'hierarchy'] = (isset($settings[$name][
'current'])) ? $settings[$name][
'current'] : $settings[$name][
'normal'];
73 if (!isset($settings[$name][
'current'])) {
74 $settings[$name][
'current'] = (isset($settings[$name][
'hierarchy'])) ? $settings[$name][
'hierarchy'] : $settings[$name][
'normal'];
83 $sub_menu_processed = FALSE;
88 foreach ($contents as $index => $element) {
89 if ($element[
'_type'] !=
'TAG')
continue;
90 switch ($element[
'operation']) {
92 $asset_index = $index;
95 if ($element[
'self_terminating'] || empty($element[
'contents'])) {
99 foreach ($element[
'contents'] as $sub_element_index => $sub_element) {
100 if ($sub_element[
'_type'] !=
'TAG' || $sub_element[
'operation'] !=
'sub') {
104 $sub_index = $sub_element_index;
109 if (empty($sub_element[
'attributes'][
'design_area'])) {
110 trigger_localised_error(
'CORE0144', E_USER_WARNING);
114 $design_area =
'design_area_'.strtolower($sub_element[
'attributes'][
'design_area']);
117 $design_area_parent_types = $GLOBALS[
'SQ_SYSTEM']->am->getTypeAncestors($design_area);
118 if (!in_array(
'design_area_menu_type', $design_area_parent_types)) {
119 trigger_localised_error(
'CORE0170', E_USER_WARNING, $asset->name);
123 if (!$this->
_processSubMenu($asset, $sub_element[
'contents'], $design_area)) {
126 $sub_menu_processed = TRUE;
134 $divider_index = $index;
142 if ($sub_menu_processed && $asset_index >= 0 && $sub_index >= 0) {
155 if ($asset_index >= 0) {
158 if (empty($contents[$asset_index][
'contents'])) {
162 if (!$asset->
setAttrValue(
'asset_contents', $contents[$asset_index][
'contents'])) {
167 $contents[$asset_index] = Array(
169 'attributes' => Array (),
170 'operation' =>
'asset',
171 'self_terminating' => 1,
177 if ($divider_index >= 0) {
180 if (empty($contents[$divider_index][
'contents'])) {
184 if (!$asset->
setAttrValue(
'divider_contents', $contents[$divider_index][
'contents'])) {
189 array_splice($contents, $divider_index, 1);
193 $GLOBALS[
'SQ_PROCESSED_DESIGN_AREAS'][$asset->
attr(
'id_name')] = TRUE;
220 if (empty($sub) || is_null($sub)) {
223 $design_links = $GLOBALS[
'SQ_SYSTEM']->am->getLinks($asset->id, SQ_LINK_TYPE_3,
'design', FALSE,
'minor', $asset->
attr(
'id_name'));
225 if (empty($design_links))
return FALSE;
227 foreach ($design_links as $design_link) {
228 $design_asset = $GLOBALS[
'SQ_SYSTEM']->am->getAsset($design_link[
'majorid']);
229 if (!is_null($design_asset)) {
230 $designs[] = $design_asset;
234 if (is_null($designs))
return FALSE;
236 $GLOBALS[
'SQ_SYSTEM']->am->includeAsset($design_area);
237 $sub =
new $design_area();
239 $sub->setAttrValue(
'id_name', $asset->
attr(
'id_name').
'__sub_menu');
240 $sub->setAttrValue(
'contents', $contents);
245 foreach ($designs as $design) {
246 $sub_link = Array(
'asset' => &$design,
'link_type' => SQ_LINK_TYPE_3,
'value' => $asset->
attr(
'id_name').
'__sub_menu',
'is_dependant' => 1);
249 $linkid = $sub->create($sub_link);
250 if (!$linkid)
return FALSE;
254 $linkid = $GLOBALS[
'SQ_SYSTEM']->am->createAssetLink($design, $sub, SQ_LINK_TYPE_3, $asset->
attr(
'id_name').
'__sub_menu', NULL, 1);
255 if (!$linkid)
return FALSE;
258 $linkids[] = $linkid;
262 $createAssetLink = $GLOBALS[
'SQ_SYSTEM']->am->createAssetLink($asset, $sub, SQ_LINK_NOTICE,
'sub_menu');
263 if (!$createAssetLink)
return FALSE;
268 if ($design_area != $sub->type()) {
271 if (!$sub->morph(
'design_area_menu_type')) {
275 if (!$sub->morph($design_area))
return FALSE;
276 if (!$sub->setAttrValue(
'id_name', $asset->
attr(
'id_name').
'__sub_menu')) {
281 $edit_fns = $sub->getEditFns();
283 if (!$edit_fns->_processContents($sub, $contents)) {
289 $unwanted_asset_types_parents = $asset->
attr(
'unwanted_asset_types');
290 if (!empty($unwanted_asset_types_parents)) {
291 $sub->setAttrValue(
'unwanted_asset_types', $unwanted_asset_types_parents);
294 if (!$sub->saveAttributes()) {
300 $wanted_asset_types_parents = $asset->
attr(
'wanted_asset_types');
301 if (!empty($wanted_asset_types_parents)) {
302 $sub->setAttrValue(
'wanted_asset_types', $wanted_asset_types_parents);
305 if (!$sub->saveAttributes()) {
330 $current_level = $asset->
attr(
'level');
331 $special_levels = Array(
332 '' =>
'-- '.strtolower(translate(
'custom')).
' --',
333 '-2' => translate(
'children'),
334 '-1' => translate(
'current'),
335 '0' => translate(
'top'),
336 '1' => translate(
'sub'),
340 combo_box($prefix.
'_special_level', $special_levels, FALSE, $asset->
attr(
'level'));
341 echo
' '.strtolower(translate(
'or')).
' ';
342 text_box($prefix.
'_level', (!isset($special_levels[$current_level])) ? $current_level :
'');
344 if (isset($special_levels[$current_level])) {
345 echo $special_levels[$current_level];
351 return $write_access;
368 $special_level = (int) (isset($_POST[$prefix.
'_special_level'])) ? $_POST[$prefix.
'_special_level'] :
'';
369 $custom_level = (
int) (isset($_POST[$prefix.
'_level'])) ? $_POST[$prefix.
'_level'] :
'';
370 $level = (!empty($custom_level)) ? $custom_level : $special_level;
388 $excluded_types = $asset->
attr(
'unwanted_asset_types');
390 asset_type_chooser($prefix.
'_excluded_types', TRUE, $excluded_types);
392 if (empty($excluded_types)) {
393 echo
'No types are excluded';
398 foreach ($GLOBALS[
'SQ_SYSTEM']->am->getTypeInfo($excluded_types,
'name') as $type_name) {
400 <li><?php echo $type_name; ?></li>
427 $exclude_list = Array();
428 foreach ($_POST[$prefix.
'_excluded_types'] as $type) {
429 if ($type !=
'') $exclude_list[] = $type;
431 return $asset->
setAttrValue(
'unwanted_asset_types', $exclude_list);
451 $included_types = $asset->
attr(
'wanted_asset_types');
453 asset_type_chooser($prefix.
'_included_types', TRUE, $included_types);
455 if (empty($included_types)) {
456 echo
'All types are included';
461 foreach ($GLOBALS[
'SQ_SYSTEM']->am->getTypeInfo($included_types,
'name') as $type_name) {
463 <li><?php echo $type_name; ?></li>
489 $include_list = Array();
490 foreach ($_POST[$prefix.
'_included_types'] as $type) {
491 if ($type !=
'') $include_list[] = $type;
493 return $asset->
setAttrValue(
'wanted_asset_types', $include_list);