You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			415 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			415 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
<?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());
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |