B
Bgag
Wäre nett, wenn du deine Lösung mal posten würdest, falls andere auch dieses Problem haben.
MfG, Andy
MfG, Andy
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
<?php
class inc_admin_development extends IncludeModelAdmin {
protected function get_needed_parameters() {
return 'act';
}
public function get_title_extention() {
return null;
}
public function get_operation_overview() {
$development = new ActionArea('development');
$development->add_method(new Action('acd','Klassendetails AdminModule'));
$development->add_method(new Action('usm','Usermodule die zur Suche gehören'));
$development->add_method(new Action('udm','Usermodule die Title und Metatags erweitern'));
return $development;
}
protected function show_content_of_admin_file() {
$action = $this->file_parameters['act'];
if (isset($action)) {
if ($action == 'acd') {
$this->get_admin_class_details();
}
else if ($action == 'usm') {
$this->get_user_search_methods();
}
else if ($action == 'udm') {
$this->get_keyword_descr_methods();
}
else {
$this->draw_wrong_parameter();
}
}
else {
$this->draw_wrong_parameter();
}
}
private function get_keyword_descr_methods() {
$this->include_of_folders(array('public', 'admin'));
$this->draw_header('Seiten die den Title erweitern');
$this->show_classes_implementing('get_title_extention');
$this->draw_bottom();
$this->draw_header('Seiten die MetaTags erweitern');
$this->show_classes_implementing('add_meta_tags');
$this->draw_bottom();
}
private function get_user_search_methods() {
$this->include_of_folders(array('public'));
$this->draw_header('Benutzerklassen die beim Suchen genutzt werden');
$this->show_classes_implementing('search_string');
$this->draw_bottom();
}
private function get_admin_class_details() {
$this->include_of_folders(array('admin'));
$this->draw_header('Übersicht aller Klassen (Admin)');
$classes = get_declared_classes();
asort($classes);
foreach ($classes as $class) {
// Prüfen ob es sich um eine Klasse von mir handelt
if (substr($class, 0, 3) == CLASS_PREFIX) {
$reflect = new ReflectionClass($class);
$this->draw_content_begin();
$abstract_class = $reflect->isAbstract() ? '<i>abstract</i> ' : '';
echo $abstract_class.'<b>'.$class.'</b> ('.($reflect->getEndline()-$reflect->getStartLine()).' Zeilen)<br />';
// Gibt die Klassenhierarchie aus
$parent = $reflect;
while (($parent = $parent->getParentClass()) != null) {
echo '» '.$parent->getName().'<br />';
}
$this->draw_content_end();
$this->draw_content_begin();
echo '
Überschriebene Methoden:
<table class="details">';
foreach ($reflect->getMethods() as $method) {
// Nur die Methoden anzeigen die nicht vererbt wurden
if ($method->getDeclaringClass()->getName() == $class && $this->is_overwritten($reflect, $method)) {
$this->show_method_details($method);
}
}
echo '</table>';
$this->draw_content_end();
$this->draw_content_begin();
echo '
Neue Methoden:
<table class="details">';
foreach ($reflect->getMethods() as $method) {
// Nur die Methoden anzeigen die nicht vererbt wurden
if ($method->getDeclaringClass()->getName() == $class && !$this->is_overwritten($reflect, $method)) {
$this->show_method_details($method);
}
}
echo '</table>';
$this->draw_content_end();
$this->draw_devider();
}
}
$this->draw_bottom();
}
private function show_classes_implementing($methodname) {
$this->draw_content_begin();
$classes = get_declared_classes();
asort($classes);
foreach ($classes as $class) {
// Prüfen ob es sich um eine Klasse von mir handelt
if (substr($class, 0, 3) == CLASS_PREFIX) {
$reflect = new ReflectionClass($class);
if ($reflect->hasMethod($methodname) && $reflect->getMethod($methodname)->getDeclaringClass()->getName() == $class) {
echo '<b>'.$class.'</b> ('.($reflect->getEndline()-$reflect->getStartLine()).' Zeilen)<br />';
}
}
}
$this->draw_content_end();
}
private function include_of_folders($scanfolders) {
foreach ($scanfolders as $scanfolder) {
$pfad = './links/'.$scanfolder.'/';
$verz = opendir($pfad);
while ($file = readdir($verz)) {
if (filetype($pfad.$file) != "dir" && substr($pfad.$file, strlen($pfad.$file)-3, 3) == 'php') {
include_once($pfad.$file);
}
}
}
}
private function is_overwritten($class, $method) {
$ret = false;
if ($class instanceof ReflectionClass && $method instanceof ReflectionMethod) {
// Prüfen ob die übergebene Klasse überhaupt die Methode implementiert
if ($class->hasMethod($method->getName())) {
// Prüfen ob eine der Elternklassen die Methode bereits implementiert
$parent = $class;
while (($parent = $parent->getParentClass()) != null) {
if ($parent->hasMethod($method->getName())) {
$ret = true;
}
}
}
}
return $ret;
}
private function show_method_details($method) {
if ($method instanceof ReflectionMethod) {
$params = '';
$paramcount = 0;
foreach ($method->getParameters() as $param) {
$params .= ($param->isPassedByReference()) ? '&' : '';
$params .= '$'.$param->getName();
$params .= (++$paramcount < $method->getNumberOfParameters()) ? ', ' : '';
}
echo '
<tr>
<td class="tableleft">
'.implode(' ', Reflection::getModifierNames($method->getModifiers())).'
</td>
<td class="tableright">
<b>'.$method->getName().'</b>('.$params.')
</td>
</tr>
';
}
}
}
?>