Concrete5 では、events というフックが用意されています。Concrete5 の処理の途中に、利用者が独自に処理を追加することができます。(WordPress を使っている方は、アクションフックのようなもの、と考えてください)
処理が追加可能な場所は、ソースコード内で Events::fire が用意されている所です。
パッケージ等で、Events::extend と記述することで処理を追加します。
Events::extend('on_user_login', 'UserprofilePackage', 'on_user_login', 'packages/userprofile/controller.php');
フックする箇所(Events::fire が用意されている所)、(自分で追加する)クラス名、(クラスの)メソッド名、クラスのあるファイルパス、です。上の例では、on_user_login フックで、packages/userprofile/controller.php にある UserprofilePackage の on_user_login を実行します。
例えば、ログイン後、ユーザー名と同じ名前のページにリダイレクトする場合は、以下のようになります。(実運用では、リダイレクトさせるページが存在するかどうかのチェックを挟みますが、ここでは省略しています)
public function on_user_login($obj) {
		$u = new User();
		$obj->redirect('/'.$u->uName);
}
詳しく知りたい方は、How concrete5 Events work、またはConcrete5 Begginer’s Guideをごらんください。またEvent Tester というアドオンを利用すると、フックについて調べるのが楽になります。
Concrete5.5β では、以下のフックが用意されています (*.php を対象に文字列検索した結果です。抜けや重複等があるかもしれません)。
blocks/library_file/controller.php:				$ret = Events::fire('on_file_upload', $bf);
controllers/login.php:		Events::fire('on_user_login',$this);
dispatcher.php:		Events::fire('on_page_view', $c, $u);
libraries/view.php:				Events::fire('on_start', $this);
libraries/view.php:							Events::fire('on_before_render', $this);
libraries/view.php:							Events::fire('on_render_complete', $this);
libraries/view.php:				Events::fire('on_before_render', $this);
libraries/view.php:					$ret = Events::fire('on_page_output', $pageContent);
libraries/view.php:				Events::fire('on_render_complete', $this);
libraries/events.php:		// params coming at the end. e.g. if I fire Events::fire('on_login', $userObject) it will come in with user object first
models/file.php:		Events::fire('on_file_set_password', $this, $pw);
models/file.php:		Events::fire('on_file_add', $f, $fv);
models/file.php:		Events::fire('on_file_version_add', $fv);
models/file.php:		Events::fire('on_file_download', $fv, $u);
models/users_friends.php:		Events::fire('on_user_friend_add', $uID, $friendUID);
models/users_friends.php:		$ret = Events::fire('on_user_friend_remove', $uID, $friendUID);
models/job.php:		Events::fire('on_before_job_execute', $this);
models/job.php:		Events::fire('on_job_execute', $this);
models/job.php:			Events::fire('on_job_install', $j);
models/job.php:		Events::fire('on_job_install', $this);
models/job.php:		$ret = Events::fire('on_job_uninstall', $this);
models/collection_version.php:			Events::fire('on_page_version_add', $c, $nv);
models/collection_version.php:			Events::fire('on_page_version_approve', $c);
models/file_version.php:		Events::fire('on_file_version_duplicate', $fv2);
models/file_version.php:		Events::fire('on_file_version_update_title', $this, $title);
models/file_version.php:		Events::fire('on_file_version_update_tags', $this, $tags);
models/file_version.php:		Events::fire('on_file_version_update_description', $this, $descr);
models/file_version.php:		Events::fire('on_file_version_approve', $this);
models/file_version.php:		Events::fire('on_file_version_deny', $this);
models/user.php:			Events::fire('on_user_logout');
models/user.php:				Events::fire('on_user_enter_group', $this, $g);
models/user.php:				$ret = Events::fire('on_user_exit_group', $this, $g);
models/user_private_message.php:				Events::fire('on_private_message_marked_as_read', $this);
models/user_private_message.php:			$ret = Events::fire('on_private_message_delete', $this);
models/user_private_message.php:			Events::fire('on_private_message_marked_not_new', $this);
models/user_private_message.php:			Events::fire('on_private_message_over_limit', $offender);
models/userinfo.php:					Events::fire('on_user_add', $ui, $data['uPassword']);
models/userinfo.php:			$ret = Events::fire('on_user_delete', $this);
models/userinfo.php:				Events::fire('on_user_update', $ui);
models/userinfo.php:					Events::fire('on_user_change_password', $ui, $data['uPassword']);
models/userinfo.php:			Events::fire('on_user_validate', $this);
models/userinfo.php:				Events::fire('on_user_change_password', $this, $newPassword);
models/groups.php:			$ret = Events::fire('on_group_delete', $this);
models/groups.php:		        Events::fire('on_group_update', $this);
models/groups.php:				Events::fire('on_group_add', $ng);
models/page.php:		$icon = Events::fire('on_page_get_icon', $this);
models/page.php:		$ret = Events::fire('on_page_update', $this);
models/page.php:		$ret = Events::fire('on_page_move', $this, $oldParent, $newParent);
models/page.php:			$ret = Events::fire('on_page_duplicate', $nc2, $this);
models/page.php:		$ret = Events::fire('on_page_delete', $this);
models/page.php:			Events::fire('on_page_add', $pc);