/**
  * Caches and returns list of all possible actions 
  */
 public static function loadRoleActionList()
 {
     if (!ca_user_roles::$s_action_list) {
         $o_config = Configuration::load();
         $o_actions_config = Configuration::load(__CA_CONF_DIR__ . '/user_actions.conf');
         $vo_datamodel = Datamodel::load();
         $va_raw_actions = $o_actions_config->getAssoc('user_actions');
         // expand actions that need expanding
         foreach ($va_raw_actions as $vs_group => $va_group_info) {
             $va_new_actions = array();
             if (!is_array($va_group_info["actions"])) {
                 $va_group_info["actions"] = array();
             }
             foreach ($va_group_info["actions"] as $vs_action_key => $va_action) {
                 if (is_array($va_action["expand_types"]) && strlen($va_action["expand_types"]["table"]) > 0) {
                     $t_instance = $vo_datamodel->getInstanceByTableName($va_action["expand_types"]["table"], true);
                     if (method_exists($t_instance, "getTypeList")) {
                         $va_type_list = $t_instance->getTypeList();
                         foreach ($va_type_list as $vn_type_id => $va_type) {
                             $vs_descr_app = str_replace("%t", """ . $va_type["name_singular"] . """, $va_action["expand_types"]["description_appendix"]);
                             $vs_label_app = str_replace("%t", """ . $va_type["name_singular"] . """, $va_action["expand_types"]["label_appendix"]);
                             $va_new_actions[$vs_action_key . "_type:{$t_instance->tableName()}:{$va_type["idno"]}"] = array("description" => $va_action["description"] . " " . $vs_descr_app, "label" => $va_action["label"] . " " . $vs_label_app);
                         }
                     }
                 }
             }
             $va_group_info["actions"] = array_merge($va_group_info["actions"], $va_new_actions);
         }
         if (is_array($va_raw_plugin_actions = ApplicationPluginManager::getPluginRoleActions())) {
             $va_raw_actions['plugins'] = array('label' => 'Plugin actions', 'description' => '', 'actions' => $va_raw_plugin_actions);
         }
         if (is_array($va_raw_widget_actions = WidgetManager::getWidgetRoleActions())) {
             $va_raw_actions['widgets'] = array('label' => 'Widget actions', 'description' => '', 'actions' => $va_raw_widget_actions);
         }
         $va_flattened_actions = array();
         foreach ($va_raw_actions as $vs_group => $va_group_actions_info) {
             if (!is_array($va_group_actions_info['actions'])) {
                 $va_group_actions_info['actions'] = array();
             }
             $va_flattened_actions = array_merge($va_flattened_actions, $va_group_actions_info['actions']);
         }
         ca_user_roles::$s_action_list = array('raw' => $va_raw_actions, 'flattened' => $va_flattened_actions);
     }
     return ca_user_roles::$s_action_list;
 }