<?php /* * Created on 01.09.2016 * * @copyright (c) 2016 animegame.eu * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence * */ include_once(ROOT_PATH.'/include/items.inc.php'); function getSetDefinitionFromRequest($request) { $items = getItemsMap(); $craft_item = lookupItem($items, $request['crafted']); $deps = array(); for ($i=0; $i<5;$i++) { $dep_item = lookupItem($items, $request['ingredient_'.$i]); if ( $dep_item !== NULL ) { $deps[]=$dep_item; } } $set['item'] = $craft_item; $set['deps'] = $deps; if ( isset($request['topic']) ) { $set['topic_id'] = $request['topic'] == 0 ? NULL : $request['topic']; } return $set; } function displayRezepte($request) { switch ( $request['action'] ) { case 'create': displayRezepteCreateMenu($request); break; case 'edit': displayRezepteEditMenu($request); break; case 'delete': displayRezepteDeleteMenu($request); break; case 'create_topic': displayRezepteTopicCreateMenu($request); break; case 'edit_topic': displayRezepteTopicEditMenu($request); break; case 'delete_topic': displayRezepteTopicDeleteMenu($request); break; case 'up_topic': displayRezepteTopicUpMenu($request); break; case 'down_topic': displayRezepteTopicDownMenu($request); break; default: displayRezepteMainMenu($request); break; } } function displayRezepteMainMenu($request) { ?> <table> <tr> <th colspan="3">Rezepte</th> </tr> <?php $sets = get_set_definitions(); $prev_topic = '#INVALID_TOPIC#'; foreach ($sets as $set) { $dep_item_names = array(); foreach( $set['deps'] as $dep_item ) { $dep_item_names[]=$dep_item['name']; } if ($set['topic'] != $prev_topic) { $prev_topic = $set['topic']; $print_topic = ($set['topic'] === NULL) ? '- Kein Topic -' : $set['topic']; ?> <tr> <th colspan="3"><hr></th> </tr> <tr> <th colspan="3"><?php echo $print_topic; ?></th> </tr> <tr> <th>Item</th><th width="50%">Zutaten</th><th>Action</th> </tr> <?php } echo '<tr><td>'.$set['item']['name'].'</td><td align="center">'.join(',',$dep_item_names).'</td><td align="center"><a href="?choose=rezept&action=edit&set='.$set['id'].'">Edit</a> | <a href="?choose=rezept&action=delete&set='.$set['id'].'">Delete</a></td></tr>'; } ?> <tr><td colspan="3" align="center"><a href="?choose=rezept&action=create">Neues Rezept erstellen</a></td></tr> <tr><th colspan="3"><hr /></th></tr> <tr> <th colspan="3">Rezept Topics</th> </tr> <?php $set_topics = getItemTopicsMap(); foreach ($set_topics as $set_topic) { $id = $set_topic['id']; ?> <tr> <td><?php echo $set_topic['name']; ?></td> <td colspan="2" align="right"><a href="?choose=rezept&action=edit_topic&id=<?php echo $id; ?>">Edit</a> | <a href="?choose=rezept&action=up_topic&id=<?php echo $id; ?>">Up</a> | <a href="?choose=rezept&action=down_topic&id=<?php echo $id; ?>">Down</a> | <a href="?choose=rezept&action=delete_topic&id=<?php echo $id; ?>">Delete</a></td> </tr> <?php } ?> <tr><td colspan="3" align="center"><a href="?choose=rezept&action=create_topic">Neues Rezept Topic erstellen</a></td></tr> <tr> <td colspan="3"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Zum Hauptmenu</a> </td> </tr> </table> <?php } function createRezeptEntry($set) { $qry = db_query('Select max(set_id) FROM sp_sets'); $new_id = mysqli_fetch_row($qry)[0]; do { $new_id++; db_query('INSERT sp_sets(set_id, table_name, item_id) values('.$new_id.',\''.$set['item']['table_name'].'\','.$set['item']['id'].')'); } while(db_affected_rows() == 0); return $new_id; } function updateRezept($base, $edit) { if ($base['id'] === NULL) { $base['id'] = createRezeptEntry($edit); } else { $topic_id = ($edit['topic_id'] == NULL) ? 'NULL' : $edit['topic_id']; db_query('UPDATE sp_sets SET table_name=\''.$edit['item']['table_name'].'\', item_id='.$edit['item']['id'].', set_topic_id='.$topic_id.' WHERE set_id='.$base['id']); } if( $base['deps'] === NULL ) { $base['deps'] = array(); } $to_add = array(); // first add the items that are in edit, but not in base foreach ($edit['deps'] as $new_dep) { $add = true; foreach ($base['deps'] as $old_dep) { if (itemEquals($new_dep, $old_dep)) { $add = false; break; } } if($add) { $to_add[]=$new_dep; } } $to_remove = array(); foreach ($base['deps'] as $old_dep) { $remove = true; foreach ($edit['deps'] as $new_dep) { if (itemEquals($old_dep, $new_dep)) { $remove=false; break; } } if($remove) { $to_remove[]=$old_dep; } } foreach ($to_add as $item) { db_query('INSERT sp_set_ingredient(set_id, table_name, item_id) values('.$base['id'].', \''.$item['table_name'].'\', '.$item['id'].')'); } foreach ($to_remove as $item) { db_query('DELETE FROM sp_set_ingredient WHERE set_id = '.$base['id'].' and table_name = \''.$item['table_name'].'\' and item_id = '.$item['id']); } return getSetDefinition($base['id']); } function displayRezepteEditMenu($request) { $set = getSetDefinition($request['set']); if ($set === NULL) { displayErrorMessage("Rezept konnte nicht bearbeitet werden", "Set existiert nicht!", displayHistoryBackLink()); return; } if ( isset($request['crafted']) ) { $set_changes = getSetDefinitionFromRequest($request); updateRezept($set, $set_changes); $set = getSetDefinition($request['set']); } displayForm($request, $set); } function displayRezepteCreateMenu($request) { if ( isset($request['crafted']) ) { $set_changes = getSetDefinitionFromRequest($request); $set = updateRezept(array(), $set_changes); $request['set'] = $set['id']; $request['action'] = 'edit'; displayForm($request, $set); return; } displayForm($request, array()); } function displayForm($request, $set) { $itemsMap = getItemsMap(); ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <input name="choose" value="<?php echo $request['choose']; ?>" type="hidden" /> <input name="action" value="<?php echo $request['action']; ?>" type="hidden" /> <input name="set" value="<?php echo $set['id']; ?>" type="hidden" /> <table> <tr> <th colspan="2">Rezept <?php echo $set['id']; ?></th> </tr> <tr> <td>Topic</td> <td> <select name="topic"> <option value="0">- Kein Topic -</option> <?php $topics = getItemTopicsMap(); foreach ($topics as $topic) { $selected = ($set['topic'] == $topic['name'])?'selected':''; ?> <option value="<?php echo $topic['id']; ?>" <?php echo $selected; ?>><?php echo $topic['name']; ?></option> <?php } ?> </td> </tr> <tr> <td>Item</td> <td> <select name="crafted"><?php foreach ($itemsMap as $table) { foreach ($table as $item) { $selected = ''; if($set['item']['table_name'] == $item['table_name'] && $set['item']['id'] == $item['id']) { $selected = 'selected="selected"'; } echo '<option value="'.item2Value($item).'" '.$selected.'>'.item2Name($item).'</option>'; } } ?> </select> </td> </tr> <?php for ($i=0;$i<5;$i++){ ?> <tr> <td>Zutat <?php echo $i+1; ?>:</td> <td> <?php $dep_item = $set['deps'][$i]; echo '<select name="ingredient_'.$i.'">'; echo '<option value="">None</option>'; foreach ($itemsMap as $table) { foreach ($table as $item) { $selected = ''; if($dep_item['table_name'] == $item['table_name'] && $dep_item['id'] == $item['id']) { $selected = 'selected="selected"'; } echo '<option value="'.item2Value($item).'" '.$selected.'>'.item2Name($item).'</option>'; } } ?> </select> </td> <?php } ?> <tr> <td colspan="2" align="center"><input type="submit" value="Ändern" /></td> </tr> <tr> <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']; ?>?choose=rezept">Zum Rezeptemenu</a> </td> </tr> <tr> <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Zum Hauptmenu</a> </td> </tr> </table> </form> <?php } function displayRezepteDeleteMenu($request) { $set = getSetDefinition($request['set']); if ($set === NULL) { displayErrorMessage("Rezept konnte nicht gelöscht werden", "Set existiert nicht!", displayHistoryBackLink()); return; } db_query('DELETE FROM sp_sets WHERE set_id = '.$set['id']); db_query('DELETE FROM sp_set_ingredient WHERE set_id = '.$set['id']); displayRezepteMainMenu(array()); } function displayRezepteTopicCreateMenu($request) { if(isset($request['persist'])) { $id = mysqli_fetch_row(db_query('SELECT max(id) +1 from sp_set_topics'))[0]; if ($id === NULL) { $id = 1; } db_query('INSERT INTO sp_set_topics(id, name) values('.$id.', "'.$request['name'].'")'); displayRezepteMainMenu(array()); } else { ?> <form action="" method="POST"> <input name="persist" value="true" type="hidden" /> <table> <tr> <th colspan="2">Neues Rezept Topic erstellen</th> </tr> <tr> <th>Name:</th> <td><input name="name" value="" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="create" /></td> </tr> <tr> <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Zum Hauptmenu</a> </td> </tr> </table> </form> <?php } } function displayRezepteTopicDeleteMenu($request) { db_query('DELETE FROM sp_set_topics WHERE id = '. $request['id']); displayRezepteMainMenu(array()); } function displayRezepteTopicEditMenu($request) { if(isset($request['persist'])) { db_query('UPDATE sp_set_topics SET name = "'.$request['name'].'" WHERE id = '.$request['id']); displayRezepteMainMenu(array()); } else { $topic = getItemTopicsMap()[$request['id']]; ?> <form action="" method="POST"> <input name="persist" value="true" type="hidden" /> <input name="id" value="<?php echo $topic['id']; ?>" type="hidden" /> <table> <tr> <th colspan="2">Topic editieren</th> </tr> <tr> <th>Name:</th> <td><input name="name" value="<?php echo $topic['name']; ?>" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="edit" /></td> </tr> <tr> <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Zum Hauptmenu</a> </td> </tr> </table> </form> <?php } } function swapRezepteTopicOrder( $lhs_id, $rhs_id ) { if ( $lhs_id !== NULL && $rhs_id !== NULL ) { db_query('UPDATE sp_set_topics SET id = 0 WHERE id = '.$lhs_id ); db_query('UPDATE sp_set_topics SET id = '.$lhs_id.' WHERE id = '.$rhs_id ); db_query('UPDATE sp_set_topics SET id = '.$rhs_id.' WHERE id = 0' ); } } function displayRezepteTopicUpMenu($request) { $topic_id = $request['id']; $other = mysqli_fetch_row(db_query('SELECT max(id) from sp_set_topics WHERE id < '.$topic_id)); if ( $other ) { swapRezepteTopicOrder($topic_id, $other[0]); } displayRezepteMainMenu(array()); } function displayRezepteTopicDownMenu($request) { $topic_id = $request['id']; $other = mysqli_fetch_row(db_query('SELECT min(id) from sp_set_topics WHERE id > '.$topic_id)); if ( $other ) { swapRezepteTopicOrder($topic_id, $other[0]); } displayRezepteMainMenu(array()); }