/** * @param unknown_type $content_object_type_id * @param unknown_type $genid * @param unknown_type $selected_members * @param unknown_type $options * @param unknown_type $skipped_dimensions * @param unknown_type $simulate_required */ function render_dimension_trees($content_object_type_id, $genid = null, $selected_members = null, $options = array(), $skipped_dimensions = null, $simulate_required = null) { if (is_numeric($content_object_type_id)) { if (is_null($genid)) $genid = gen_id(); $user_dimensions = get_user_dimensions_ids(); // User allowed dimensions $dimensions = array() ; if ( $all_dimensions = Dimensions::getAllowedDimensions($content_object_type_id) ) { // Diemsions for this content type foreach ($all_dimensions as $dimension){ // A kind of intersection... if ( isset($user_dimensions[$dimension['dimension_id']] ) ){ if( $dimension_options = json_decode($dimension['dimension_options'])){ if (isset($dimension_options->useLangs) && $dimension_options->useLangs ) { $dimension['dimension_name'] = lang($dimension['dimension_code']); } } $dimensions[] = $dimension ; } } } $object_is_new = is_null($selected_members); if ($dimensions!= null && count($dimensions)) { if (is_null($selected_members) && array_var($options, 'select_current_context')) { $context = active_context(); $selected_members = array(); foreach ($context as $selection) { if ($selection instanceof Member) $selected_members[] = $selection->getId(); } } $selected_members_json = json_encode($selected_members); $component_id = "$genid-member-chooser-panel-$content_object_type_id" ; if (isset($options['layout']) && in_array($options['layout'], array('horizontal', 'column'))) { $layout = $options['layout']; } else { //$layout = count($dimensions) > 5 ? "horizontal" : "column"; $layout = "column"; } ?> <?php if (!$object_is_new) : ?> <input id='<?php echo $genid; ?>trees_not_loaded' name='trees_not_loaded' type='hidden' value="1"></input> <?php endif;?> <input id='<?php echo $genid; ?>members' name='members' type='hidden' value="<?php echo str_replace('"', "'", $selected_members_json); ?>"></input> <div id='<?php echo $component_id ?>-container' class="member-chooser-container" ></div> <script> var memberChooserPanel = new og.MemberChooserPanel({ renderTo: '<?php echo $component_id ?>-container', id: '<?php echo $component_id ?>', selectedMembers: <?php echo $selected_members_json?>, layout: '<?php echo $layout; ?>' }) ; <?php foreach ($dimensions as $dimension) : $dimension_id = $dimension['dimension_id']; if (is_array($skipped_dimensions) && in_array($dimension_id, $skipped_dimensions)) continue; if ( is_array(array_var($options, 'allowedDimensions')) && array_search($dimension_id, $options['allowedDimensions']) === false ){ continue; } if (!$dimension['is_manageable']) continue; $is_required = $dimension['is_required']; $dimension_name = $dimension['dimension_name'] ; if ($is_required) $dimension_name.= " *" ; if (is_array($simulate_required) && in_array($dimension_id, $simulate_required)) $is_required = true; if (!isset($id)) $id = gen_id(); ?> var config = { title: '<?php echo $dimension_name ?>', dimensionId: <?php echo $dimension_id ?>, objectTypeId: <?php echo $content_object_type_id ?>, required: <?php echo $is_required ?>, reloadDimensions: <?php echo json_encode( DimensionMemberAssociations::instance()->getDimensionsToReload($dimension_id) ) ; ?>, isMultiple: <?php echo $dimension['is_multiple'] ?>, selModel: <?php echo ($dimension['is_multiple'])? 'new Ext.tree.MultiSelectionModel()': 'new Ext.tree.DefaultSelectionModel()'?> }; <?php if( isset ($options['allowedMemberTypes'])) : ?> config.allowedMemberTypes = <?php echo json_encode($options['allowedMemberTypes']) ?> ; <?php endif; ?> <?php if( isset ($options['collapsible'])) : ?> config.collapsible = <?php echo (int)$options['collapsible'] ?> ; <?php endif; ?> <?php if( isset ($options['collapsed'])) : ?> config.collapsed = <?php echo (int) $options['collapsed'] ?> ; <?php endif; ?> config.listeners = { 'tree rendered': function(tree) { if (!tree.ownerCt.rendered_trees) tree.ownerCt.rendered_trees = 0; tree.ownerCt.rendered_trees++; if (tree.ownerCt.rendered_trees == tree.ownerCt.items.length) tree.ownerCt.fireEvent('all trees rendered', tree.ownerCt); } }; var tree = new og.MemberChooserTree ( config ); memberChooserPanel.add(tree); <?php endforeach; ?> og.can_submit_members = false; memberChooserPanel.on('all trees rendered', function(panel) { og.can_submit_members = true; var trees_to_reload = []; panel.items.each(function(item, index, length) { var checked = item.getLastChecked(); if (checked != 0 && item.filterOnChange) trees_to_reload.push(item); }); if (trees_to_reload.length > 0) { for (var i=0; i<trees_to_reload.length; i++) { trees_to_reload[i].dont_update_form = true; tree = trees_to_reload[i]; setTimeout(function() { tree.dont_update_form = false; }, 2500); } for (var i=1; i<trees_to_reload.length; i++) { var next = trees_to_reload[i]; trees_to_reload[i-1].on('all trees updated', function(){ next.fireEvent('checkchange', next.getNodeById(next.getLastChecked()), true); next.expand(); }); } var t = trees_to_reload[0]; t.fireEvent('checkchange', t.getNodeById(t.getLastChecked()), true); t.expand(); } }); memberChooserPanel.doLayout(); </script> <?php } } }
/** * This function will return paginated result. Result is an array where first element is * array of returned object and second populated pagination object that can be used for * obtaining and rendering pagination data using various helpers. * * Items and pagination array vars are indexed with 0 for items and 1 for pagination * because you can't use associative indexing with list() construct * * @access public * @param array $arguments Query argumens (@see find()) Limit and offset are ignored! * @param integer $items_per_page Number of items per page * @param integer $current_page Current page number * @return array */ function paginate($arguments = null, $items_per_page = 10, $current_page = 1) { if (isset($this) && instance_of($this, 'DimensionMemberAssociations')) { return parent::paginate($arguments, $items_per_page, $current_page); } else { return DimensionMemberAssociations::instance()->paginate($arguments, $items_per_page, $current_page); } // if }
foreach ($dimensions['dimensions'] as $dimension) { if ($dimension->getOptions(1) && isset($dimension->getOptions(1)->hidden) && $dimension->getOptions(1)->hidden) { continue; } /* @var $dimension Dimension */ $title = $dimension->getOptions() && isset($dimension->getOptions(1)->useLangs) && $dimension->getOptions(1)->useLangs ? lang($dimension->getCode()) : $dimension->getName(); if (!$first) { ?> ,<?php } $first = false; ?> { reloadDimensions: <?php echo json_encode(DimensionMemberAssociations::instance()->getDimensionsToReload($dimension->getId())); ?> , xtype: 'member-tree', id: 'dimension-panel-<?php echo $dimension->getId(); ?> ', dimensionId: <?php echo $dimension->getId(); ?> , dimensionCode: '<?php echo $dimension->getCode(); ?> ',
?> ', dimensionId: <?php echo $dimension_id; ?> , objectTypeId: '<?php echo $content_object_type_id; ?> ', required: <?php echo $is_required ? '1' : '0'; ?> , reloadDimensions: <?php echo json_encode(DimensionMemberAssociations::instance()->getDimensionsToReloadByObjectType($dimension_id), JSON_NUMERIC_CHECK); ?> , isMultiple: <?php echo $dimension['is_multiple'] ? '1' : '0'; ?> , allowedMemberTypes: <?php echo json_encode($allowed_member_type_ids); ?> , listeners: <?php echo $listeners_str; ?> };
<?php $listeners_str = "{"; foreach ($listeners as $event => $function) { $listeners_str .= $event .' : \''. escape_single_quotes($function) .'\','; } if (str_ends_with($listeners_str, ",")) $listeners_str = substr($listeners_str, 0, -1); $listeners_str .= "}"; ?> member_selector['<?php echo $genid; ?>'].properties['<?php echo $dimension_id ?>'] = { title: '<?php echo $dimension_name ?>', dimensionId: <?php echo $dimension_id ?>, objectTypeId: '<?php echo $content_object_type_id ?>', required: <?php echo $is_required ? '1' : '0'?>, reloadDimensions: <?php echo json_encode( DimensionMemberAssociations::instance()->getDimensionsToReload($dimension_id) ); ?>, isMultiple: <?php echo $dimension['is_multiple'] ? '1' : '0'?>, listeners: <?php echo $listeners_str ?> }; if (member_selector['<?php echo $genid; ?>'].properties['<?php echo $dimension_id ?>'].listeners.after_render) { eval(member_selector['<?php echo $genid; ?>'].properties['<?php echo $dimension_id ?>'].listeners.after_render); } </script> <?php endforeach; ?> <?php foreach ($listeners as $event => $function) { if ($event == 'after_render_all') { echo '<script>'.escape_single_quotes($function).';</script>';
/** * Return manager instance * * @access protected * @param void * @return DimensionMemberAssociations */ function manager() { if(!($this->manager instanceof DimensionMemberAssociations)) $this->manager = DimensionMemberAssociations::instance(); return $this->manager; } // manager
function get_associated_status_member_id($member, $dimension, $ot = null) { if ($member instanceof Member && $dimension instanceof Dimension) { $member_dimension = $member->getDimension(); if (!$member_dimension instanceof Dimension) { return 0; } $a = DimensionMemberAssociations::instance()->findOne(array('conditions' => array('dimension_id=? AND object_type_id=? AND associated_dimension_id=?' . ($ot instanceof ObjectType ? ' AND associated_object_type_id=' . $ot->getId() : ''), $member_dimension->getId(), $member->getObjectTypeId(), $dimension->getId()))); // create relation between members and remove old relations if ($a instanceof DimensionMemberAssociation) { $mpm = MemberPropertyMembers::findOne(array('conditions' => array('association_id = ? AND member_id = ?', $a->getId(), $member->getId()))); if ($mpm instanceof MemberPropertyMember) { return $mpm->getPropertyMemberId(); } } } return 0; }