# $Id: cdd-update-menus,v 1.5 2004/04/20 10:46:41 kalfa Exp $

# check if I am a specific user
amI() {
	RET=0
	test `whoami` != "$1" && RET=1
	return ${RET}
}

# updates user's menu for user $1, indipendently from any CDD
updateUser() {
	RET=0
	SYSUSER=$1
	SYSSCRIPT=$2
	USERSCRIPT=$3

	UHOME=`getUserHome ${SYSUSER}`
	if [ $# -ne 3 ]; then
		RET=64 # EX_USAGE
	elif [ ! -x "${SYSSCRIPT}" ]; then
		cddFail 66 "Fatal: ${SYSSCRIPT} doesn't exist"

	# and now real check for user's USERSCRIPT symlink presence
	else
		if [ ! -d "`dirname ${USERSCRIPT}`" ]; then
			# directory ~/.menu doesn't exist, create it and link the sys
			# script
			# returning <that's all right>
			echo "Creating `dirname ${USERSCRIPT}` and cdd-menu link inside"
			${DRYRUN} mkdir "`dirname ${USERSCRIPT}`"
			${DRYRUN} ln -fs "${SYSSCRIPT}" "${USERSCRIPT}"
			${DRYRUN} chown -R ${CDDUSER}: "`dirname ${USERSCRIPT}`"

		elif [ -f "${USERSCRIPT}" -a ! -L "${USERSCRIPT}" ]; then
			# parent directory of ${USERSCRIPT} exists and has cdd-menu, but
			# it's not a link probably it's a script modified by user write a
			# warning and RET=0

			# TODO PERFORM ANY ACTIONS? 
			cddLog "Warning: ${USERSCRIPT} isn't a symlink, probably ${CDDUSER} modified it."
			cddLog "Warning: Check it. please."

		else
			# here we're sure that if the file exists, it's a symlink 
			# returning <that's all right>

			cddLog "Updating cdd-menu script for user ${CDDUSER}"
			${DRYRUN} rm -f "${USERSCRIPT}"
			${DRYRUN} ln -fs "${SYSSCRIPT}" "${USERSCRIPT}"
			${DRYRUN} chown ${CDDUSER}: "${USERSCRIPT}"
		fi
	fi
	return ${RET}
}

# updates menu scripts for any user registered in CDD
updateCDD() {
	CDD=$1
	SYSSCRIPT=$2

	ROLES="`getCDDRoleList ${CDD}`"
	if [ $# -ne 2 ]; then
		RET=64 # EX_USAGE
	else
		cddLog "Updating menu script for all users in ${CDD} CDD:"
		for ROLE in ${ROLES}; do
			for CDDUSER in `getUsersInRole ${CDD} ${ROLE}`; do
				UHOME="`getUserHome ${CDDUSER}`"
				if [ ! -d "${UHOME}" ] ; then
				   logFail 67  "Home directory for user ${CDDUSER} does not exist.\n... Sorry can not update menus."
				fi

				USERSCRIPT="${UHOME}/.menu/cdd-menu"
				updateUser "${CDDUSER}" "${SYSSCRIPT}" "${USERSCRIPT}"
			done
		done

		# The above commented code isn't bad, only complex for the actual
		# state of the CDD menu system:
		# Update user menu script for a specific CDD can be delegated entirely
		# to ${SYSSCRIPT} script. 
		# The only needing is a correct cdd-menu script to be executed by
		# update-menus, let's easy up script!

	fi
}
