コード例 #1
0
 /**
  * Returns true if the object blongs to the texmplate context ($memberIds)
  * @author Ignacio Vazquez - elpepe.uy@gmail.com
  * @param ContentDataObject $object
  * @param array $memberIds
  */
 static function validateObjectContext($object, $memberIds)
 {
     $valid = true;
     // Dimensiones requeridas para el tipo de objecto
     $dimensions = Dimensions::getAllowedDimensions(self::instance()->getObjectTypeId());
     $requiredDimensions = array();
     foreach ($dimensions as $dim) {
         if ($dim['is_required']) {
             $requiredDimensions[$dim['dimension_id']] = $dim;
             // Performance, dim id in the array key  ! ! !
         }
     }
     // Miembros del Objeto
     $objMembers = $object->getMemberIds();
     // P/cada miembro
     foreach ($objMembers as $mid) {
         $member = Members::instance()->findById($mid);
         if ($member instanceof Member) {
             /* @var  $member Member */
             $did = $member->getDimensionId();
             // Si la dimension del miembro esta en la requeridas
             if ($requiredDimensions[$did]) {
                 if (!in_array($mid, $memberIds)) {
                     $valid = false;
                 }
             }
         }
     }
     if (!$valid) {
         throw new DAOValidationError($this, array(lang("template members do not match object members")));
     }
 }
コード例 #2
0
ファイル: application.php プロジェクト: Jtgadbois/Pedadida
/**
 * @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 
			}
		}
}
コード例 #3
0
ファイル: dimension.php プロジェクト: Jtgadbois/Pedadida
function render_member_selectors($content_object_type_id, $genid = null, $selected_member_ids = 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();
		
		// Diemsions for this content type
		if ( $all_dimensions = Dimensions::getAllowedDimensions($content_object_type_id) ) {
			foreach ($all_dimensions as $dimension){
				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;
				}
			}
		}
		
		if ($dimensions != null && count($dimensions)) {
			if (is_null($selected_member_ids) && array_var($options, 'select_current_context')) {
				$context = active_context();
				$selected_member_ids = array();
				foreach ($context as $selection) {
					if ($selection instanceof Member) $selected_member_ids[] = $selection->getId(); 
				}
			}
			
			if (is_null($selected_member_ids)) $selected_member_ids = array();
			
			// Set view variables
			$selected_members = count($selected_member_ids) > 0 ? Members::findAll(array('conditions' => 'id IN ('.implode(',', $selected_member_ids).')')) : array();
			$selected_members_json = "[".implode(',', $selected_member_ids)."]";
			$component_id = "$genid-member-selectors-panel-$content_object_type_id";
			$object_is_new = is_null($selected_members);
			
			$listeners = array_var($options, 'listeners', array());
			$allowed_member_type_ids = array_var($options, 'allowedMemberTypes', null);
			
			
			$initial_selected_members = $selected_members;
			if (count($initial_selected_members) == 0) {
				$selected_context_member_ids = active_context_members(false);
				if (count($selected_context_member_ids) > 0) {
					$initial_selected_members = Members::findAll(array('conditions' => 'id IN ('.implode(',', $selected_context_member_ids).')'));
				}
			}
			
			$tmp = array();
			foreach ($initial_selected_members as $ism) {
				if ($ism->getDimension()->getIsManageable()) $tmp[] = $ism;
			}
			$initial_selected_members = $tmp;
			
			
			// Render view
			include get_template_path("components/multiple_dimension_selector", "dimension");
			
		}
	}
}
コード例 #4
0
ファイル: dimension.php プロジェクト: abhinay100/feng_app
function render_member_selectors($content_object_type_id, $genid = null, $selected_member_ids = null, $options = array(), $skipped_dimensions = null, $simulate_required = null, $default_view = true)
{
    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();
        // Diemsions for this content type
        if ($all_dimensions = Dimensions::getAllowedDimensions($content_object_type_id)) {
            foreach ($all_dimensions as $dimension) {
                if (isset($user_dimensions[$dimension['dimension_id']])) {
                    $custom_name = DimensionOptions::getOptionValue($dimension['dimension_id'], 'custom_dimension_name');
                    $dimension['dimension_name'] = $custom_name && trim($custom_name) != "" ? $custom_name : lang($dimension['dimension_code']);
                    $dimensions[] = $dimension;
                }
            }
        }
        if ($dimensions != null && count($dimensions)) {
            if (is_null($selected_member_ids) && array_var($options, 'select_current_context')) {
                $context = active_context();
                $selected_member_ids = array();
                foreach ($context as $selection) {
                    if ($selection instanceof Member) {
                        $selected_member_ids[] = $selection->getId();
                    }
                }
            }
            if (is_null($selected_member_ids)) {
                $selected_member_ids = array();
            }
            $skipped_dimensions_cond = "";
            if (is_array($skipped_dimensions) && count($skipped_dimensions) > 0) {
                $skipped_dimensions_cond = " AND dimension_id NOT IN (" . implode(',', $skipped_dimensions) . ")";
            }
            // Set view variables
            $manageable_conds = ' AND dimension_id IN (SELECT id from ' . TABLE_PREFIX . 'dimensions WHERE is_manageable=1)' . $skipped_dimensions_cond;
            $selected_members = count($selected_member_ids) > 0 ? Members::findAll(array('conditions' => 'id IN (' . implode(',', $selected_member_ids) . ') ' . $manageable_conds)) : array();
            $selected_member_ids = array();
            foreach ($selected_members as $sm) {
                $selected_member_ids[] = $sm->getId();
            }
            $selected_members_json = "[" . implode(',', $selected_member_ids) . "]";
            $component_id = "{$genid}-member-selectors-panel-{$content_object_type_id}";
            $object_is_new = is_null($selected_members);
            $listeners = array_var($options, 'listeners', array());
            $allowed_member_type_ids = array_var($options, 'allowedMemberTypes', null);
            $initial_selected_members = $selected_members;
            if (count($initial_selected_members) == 0) {
                $selected_context_member_ids = active_context_members(false);
                if (count($selected_context_member_ids) > 0) {
                    $initial_selected_members = Members::findAll(array('conditions' => 'id IN (' . implode(',', $selected_context_member_ids) . ')'));
                }
            }
            $tmp = array();
            foreach ($initial_selected_members as $ism) {
                if ($ism->getDimension()->getIsManageable()) {
                    $tmp[] = $ism;
                }
            }
            $initial_selected_members = $tmp;
            // Render view
            include get_template_path("components/multiple_dimension_selector", "dimension");
        }
    }
}
コード例 #5
0
ファイル: permissions.php プロジェクト: rorteg/fengoffice
/**
 * Returns the users with permissions for the object type $object_type for the context $context
 * 
 * @param $object_type_id Object Type
 * @param $context Context
 * @param $access_level (ACCESS_LEVEL_READ, ACCESS_LEVEL_WRITE, ACCESS_LEVEL_DELETE)
 * @param $extra_conditions Extra conditions to add to the users query
 * @param $to_assign true if this function is called to fill the "assigned to" combobox when editing a task
 */
function allowed_users_in_context($object_type_id, $context = null, $access_level = ACCESS_LEVEL_READ, $extra_conditions = "")
{
    $result = array();
    $members = array();
    if (isset($context) && is_array($context)) {
        foreach ($context as $selection) {
            if ($selection instanceof Member) {
                $members[] = $selection;
            }
        }
    }
    if (count($members) == 0) {
        $logged_user_pgs = logged_user()->getPermissionGroupIds();
        if (count($logged_user_pgs) > 0) {
            $dimensions = Dimensions::getAllowedDimensions($object_type_id);
            foreach ($dimensions as $d) {
                $dim = Dimensions::getDimensionById(array_var($d, 'dimension_id'));
                if ($dim instanceof Dimension && $dim->getDefinesPermissions() && $dim->getCode() != 'feng_persons' && $dim->getCode() != 'feng_users') {
                    if ($dim->hasAllowAllForContact(implode(",", $logged_user_pgs))) {
                        $permission_conditions = "";
                    } else {
                        $permission_conditions = " AND EXISTS (SELECT cmp.permission_group_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \n\t\t\t\t\t\t\t\tWHERE cmp.permission_group_id IN (" . implode(",", $logged_user_pgs) . ") AND cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.object_type_id={$object_type_id})";
                    }
                    $members = array_merge($members, $dim->getAllMembers(false, null, true, $permission_conditions));
                }
            }
        }
    }
    $all_permission_groups = array();
    $rows = DB::executeAll("SELECT DISTINCT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups");
    foreach ($rows as $row) {
        $all_permission_groups[] = $row['permission_group_id'];
    }
    $allowed_permission_groups = can_access_pgids($all_permission_groups, $members, $object_type_id, $access_level);
    if (count($allowed_permission_groups) > 0) {
        $result = Contacts::instance()->findAll(array('conditions' => "id IN (SELECT DISTINCT contact_id FROM " . TABLE_PREFIX . "contact_permission_groups\n\t\t\t\t\t\t\t\tWHERE permission_group_id IN (" . implode(",", $allowed_permission_groups) . ") {$extra_conditions})", 'order' => 'name'));
    }
    return $result;
}
コード例 #6
0
ファイル: permissions.php プロジェクト: abhinay100/feng_app
/**
 * Returns the users with permissions for the object type $object_type for the context $context
 * 
 * @param $object_type_id Object Type
 * @param $context Context
 * @param $access_level (ACCESS_LEVEL_READ, ACCESS_LEVEL_WRITE, ACCESS_LEVEL_DELETE)
 * @param $extra_conditions Extra conditions to add to the users query
 * @param $to_assign true if this function is called to fill the "assigned to" combobox when editing a task
 */
function allowed_users_in_context($object_type_id, $context = null, $access_level = ACCESS_LEVEL_READ, $extra_conditions = "", $for_tasks_filter = false)
{
    $result = array();
    $members = array();
    if (isset($context) && is_array($context)) {
        foreach ($context as $selection) {
            if ($selection instanceof Member && $selection->getDimension()->getDefinesPermissions() && $selection->getDimension()->getIsManageable()) {
                $members[] = $selection;
            }
        }
    }
    $zero_members = false;
    if (count($members) == 0) {
        $zero_members = true;
        $logged_user_pgs = logged_user()->getPermissionGroupIds();
        if (count($logged_user_pgs) > 0) {
            $dimensions = Dimensions::getAllowedDimensions($object_type_id);
            foreach ($dimensions as $d) {
                $dim = Dimensions::getDimensionById(array_var($d, 'dimension_id'));
                if ($dim instanceof Dimension && $dim->getDefinesPermissions() && $dim->getCode() != 'feng_persons' && $dim->getCode() != 'feng_users') {
                    if ($dim->hasAllowAllForContact(implode(",", $logged_user_pgs))) {
                        $permission_conditions = "";
                    } else {
                        $permission_conditions = " AND EXISTS (SELECT cmp.permission_group_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \r\n\t\t\t\t\t\t\t\tWHERE cmp.permission_group_id IN (" . implode(",", $logged_user_pgs) . ") AND cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.object_type_id={$object_type_id})";
                    }
                    $members = array_merge($members, $dim->getAllMembers(false, null, true, $permission_conditions));
                }
            }
        }
    }
    $all_permission_groups = array();
    $rows = DB::executeAll("SELECT DISTINCT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups");
    foreach ($rows as $row) {
        $all_permission_groups[] = $row['permission_group_id'];
    }
    if ($zero_members && $for_tasks_filter) {
        $allowed_permission_groups = get_user_pgs_with_permissions_in_my_members($object_type_id);
    } else {
        if ($zero_members && config_option('let_users_create_objects_in_root') && (logged_user()->isAdminGroup() || logged_user()->isExecutive() || logged_user()->isManager())) {
            $allowed_permission_groups = array_flat(DB::executeAll("SELECT permission_group_id FROM " . TABLE_PREFIX . "contact_member_permissions WHERE member_id=0 AND object_type_id={$object_type_id}"));
        } else {
            $allowed_permission_groups = can_access_pgids($all_permission_groups, $members, $object_type_id, $access_level);
        }
    }
    foreach ($allowed_permission_groups as $k => &$apg) {
        if (trim($apg) == '') {
            unset($allowed_permission_groups[$k]);
        }
    }
    if (count($allowed_permission_groups) > 0) {
        $isSuperAdmin = " OR user_type IN (SELECT id FROM " . TABLE_PREFIX . "permission_groups WHERE type='roles' AND name = 'Super Administrator')";
        $result = Contacts::instance()->findAll(array('conditions' => "disabled=0 AND (\r\n\t\t\t\t\t\t\t\t\t\t\tid IN (SELECT DISTINCT contact_id FROM " . TABLE_PREFIX . "contact_permission_groups\r\n\t\t\t\t\t\t\t\t\t\t\tWHERE permission_group_id IN (" . implode(",", $allowed_permission_groups) . ") \r\n\t\t\t\t\t\t\t\t\t\t\t{$isSuperAdmin}\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t{$extra_conditions})", 'order' => 'name'));
    }
    return $result;
}
コード例 #7
0
 function getMembersIdsToDisplayPath()
 {
     $member_ids = array();
     $dimensions_ids = array();
     $selected_members_ids = $this->getMemberIds();
     if (count($selected_members_ids) > 0) {
         $selected_members_cond = ' AND id IN (' . implode(',', $selected_members_ids) . ')';
         //get all dimensions ids to showInPaths
         $dimensions = Dimensions::getAllowedDimensions($this->getObjectTypeId());
         foreach ($dimensions as $dimension) {
             $options = json_decode($dimension['dimension_options']);
             if (isset($options->showInPaths) && $options->showInPaths) {
                 $dimensions_ids[] = $dimension['dimension_id'];
                 $to_display = user_config_option('breadcrumb_member_count');
                 $extra_cond = " AND m.dimension_id = " . $dimension['dimension_id'];
                 $extra_cond .= $selected_members_cond;
                 $dim_members = ObjectMembers::getMembersIdsByObjectAndExtraCond($this->getId(), $extra_cond, $to_display, false);
                 foreach ($dim_members as $mem) {
                     $member_ids[$dimension['dimension_id']][$mem] = $mem;
                 }
             }
         }
     }
     return $member_ids;
 }