| 1 |
<?php |
<?php |
| 2 |
// $Id: rpg_rulesets.module,v 1.2 2008/01/03 01:59:56 aaron Exp $ |
// $Id: rpg_rulesets.module,v 1.3 2008/03/08 00:31:03 aaron Exp $ |
| 3 |
|
|
| 4 |
function rpg_rulesets_menu($may_cache) { |
function rpg_rulesets_menu($may_cache) { |
| 5 |
$items = array(); |
$items = array(); |
| 71 |
} |
} |
| 72 |
|
|
| 73 |
function rpg_rulesets_admin_module_page($module) { |
function rpg_rulesets_admin_module_page($module) { |
| 74 |
|
_rpg_rulesets_include_files($module); |
| 75 |
$ruleset = module_invoke($module, 'rpg_ruleset'); |
$ruleset = module_invoke($module, 'rpg_ruleset'); |
| 76 |
$form = array(); |
$form = array(); |
| 77 |
$form['ruleset'] = array( |
$form['ruleset'] = array( |
| 132 |
} |
} |
| 133 |
} |
} |
| 134 |
} |
} |
| 135 |
|
if (module_exists('rpg_achieve')) { |
| 136 |
|
$form['ruleset']['achieve'] = _rpg_rulesets_achieve_form($module, $ruleset); |
| 137 |
|
} |
| 138 |
$form['__module'] = array( |
$form['__module'] = array( |
| 139 |
'#type' => 'value', |
'#type' => 'value', |
| 140 |
'#value' => $module, |
'#value' => $module, |
| 146 |
return $form; |
return $form; |
| 147 |
} |
} |
| 148 |
|
|
| 149 |
|
function _rpg_rulesets_achieve_form($module, $ruleset) { |
| 150 |
|
$form = array( |
| 151 |
|
'#type' => 'fieldset', |
| 152 |
|
'#title' => t('Achievements'), |
| 153 |
|
'#description' => t('This is an overview of all RPG Achievements offered by this ruleset. Achievements already defined in the system are listed in the lower section below; they may be overridden if desired.'), |
| 154 |
|
'#collapsible' => TRUE, |
| 155 |
|
'#collapsed' => FALSE, |
| 156 |
|
); |
| 157 |
|
$form['new'] = array( |
| 158 |
|
'#type' => 'fieldset', |
| 159 |
|
'#title' => t('New achievements'), |
| 160 |
|
'#description' => t('Check the boxes of each Achievement you wish to import.'), |
| 161 |
|
'#collapsible' => TRUE, |
| 162 |
|
'#collapsed' => TRUE, |
| 163 |
|
); |
| 164 |
|
$form['defined'] = array( |
| 165 |
|
'#type' => 'fieldset', |
| 166 |
|
'#title' => t('Achievements already defined'), |
| 167 |
|
'#description' => t("If an achievement conflicts with an achievement already in the system, you will see that achievement listed here. In such a case, if you select the achievement anyway, the system achievement will be overridden with this ruleset's definition."), |
| 168 |
|
'#collapsible' => TRUE, |
| 169 |
|
'#collapsed' => TRUE, |
| 170 |
|
); |
| 171 |
|
$achievements = $ruleset['#achievements']; |
| 172 |
|
if (is_array($achievements)) { |
| 173 |
|
foreach ($achievements as $name) { |
| 174 |
|
$achievement = module_invoke($module, 'rpg_achieve_' . $name); |
| 175 |
|
$exists = rpg_achieve_get_achievement_text($name, FALSE); |
| 176 |
|
$checkbox = array( |
| 177 |
|
'#type' => 'checkbox', |
| 178 |
|
'#title' => $achievement['#name'], |
| 179 |
|
'#description' => $achievement['#description'], |
| 180 |
|
); |
| 181 |
|
if ($exists) { |
| 182 |
|
$form['defined']['#collapsed'] = FALSE; |
| 183 |
|
$form['defined'][$name] = $checkbox; |
| 184 |
|
} |
| 185 |
|
else { |
| 186 |
|
$form['new']['#collapsed'] = FALSE; |
| 187 |
|
$form['new'][$name] = $checkbox; |
| 188 |
|
} |
| 189 |
|
} |
| 190 |
|
} |
| 191 |
|
return $form; |
| 192 |
|
} |
| 193 |
|
|
| 194 |
/** |
/** |
| 195 |
* This will import the types selected from the admin page. |
* This will import the types selected from the admin page. |
| 196 |
*/ |
*/ |
| 197 |
function rpg_rulesets_admin_page_submit($form_id, $form_values) { |
function rpg_rulesets_admin_page_submit($form_id, $form_values) { |
| 198 |
$module = $form_values['__module']; |
$module = $form_values['__module']; |
| 199 |
|
_rpg_rulesets_include_files($module); |
| 200 |
$ruleset = module_invoke($module, 'rpg_ruleset'); |
$ruleset = module_invoke($module, 'rpg_ruleset'); |
| 201 |
$types = $ruleset['#types']; |
$types = $ruleset['#types']; |
| 202 |
foreach ($types as $type_name) { |
foreach ($types as $type_name) { |
| 245 |
rpg_types(NULL, false); |
rpg_types(NULL, false); |
| 246 |
} |
} |
| 247 |
|
|
| 248 |
|
if (module_exists('rpg_achieve')) { |
| 249 |
|
foreach ($ruleset['#achievements'] as $name) { |
| 250 |
|
if ($form_values[$name]) { |
| 251 |
|
$achievement = module_invoke($module, 'rpg_achieve_' . $name); |
| 252 |
|
$achievement = _rpg_rulesets_convert_achievement($achievement); |
| 253 |
|
rpg_achieve_set_achievement_text($name, $achievement['name'], $achievement['description'], $achievement['exposed_default']); |
| 254 |
|
drupal_set_message(t('Imported RPG Achievement: @achievement', array('@achievement' => $achievement['name']))); |
| 255 |
|
} |
| 256 |
|
} |
| 257 |
|
} |
| 258 |
|
|
| 259 |
return 'admin/rpg/rulesets'; |
return 'admin/rpg/rulesets'; |
| 260 |
} |
} |
| 261 |
|
|
| 262 |
|
function _rpg_rulesets_convert_achievement($fapi) { |
| 263 |
|
$achievement = array(); |
| 264 |
|
$achievement['achievement'] = $fapi['#achievement']; |
| 265 |
|
$achievement['name'] = $fapi['#name']; |
| 266 |
|
$achievement['description'] = $fapi['#description']; |
| 267 |
|
$achievement['exposed_default'] = $fapi['#exposed_default']; |
| 268 |
|
return $achievement; |
| 269 |
|
} |
| 270 |
|
|
| 271 |
/** |
/** |
| 272 |
* This converts the FAPI type of the ruleset into an rpg type, to prepare it for saving. |
* This converts the FAPI type of the ruleset into an rpg type, to prepare it for saving. |
| 273 |
* TODO: figure out whatever hooks are called here. |
* TODO: figure out whatever hooks are called here. |
| 384 |
return $output; |
return $output; |
| 385 |
} |
} |
| 386 |
|
|
| 387 |
|
function _rpg_rulesets_include_files($module) { |
| 388 |
|
$file = drupal_get_path('module', $module) . "/$module.rpg_ruleset.inc"; |
| 389 |
|
if (file_exists($file)) { |
| 390 |
|
include_once($file); |
| 391 |
|
} |
| 392 |
|
} |