We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26586
    • 184 Posts
    Плагин при изменении любого модуля, плагина или сниппета, сохраняет в каталог на диске (assets/cache).

    Сохраняются файлы:
    /assets/cache/modules/<name>.txt - модули
    /assets/cache/plugins/<name>.txt - плагины
    /assets/cache/snippets/<name>.txt - сниппеты
    /assets/cache/events.txt - список событий
    /assets/cache/plugins_priority.txt - приоритет вызова плагинов

    После чего удобнее стало сравнивать локальную копию сайта и рабочую.

    $e = &$modx->Event;
    $id = intval($e->params['id']);
    
    $tbl_categories = $modx->getFullTableName("categories");
    
    $pp = array(
    	"OnModFormSave" => array(
    		"tbl"    => $modx->getFullTableName("site_modules"),
    		"field"  => "name, description, modulecode, properties, {$tbl_categories}.category as category_name",
    		"folder" => "modules",
    		),
    	"OnPluginFormSave" => array(
    		"tbl"    => $modx->getFullTableName("site_plugins"),
    		"field"  => "name, description, plugincode, properties, {$tbl_categories}.category as category_name",
    		"folder" => "plugins",
    		),
    	"OnSnipFormSave" => array(
    		"tbl"    => $modx->getFullTableName("site_snippets"),
    		"field"  => "name, description, snippet, properties, {$tbl_categories}.category as category_name",
    		"folder" => "snippets",
    		),
    	);
    	
    switch ($e->name) {
    	case "OnModFormSave":	
    	case "OnPluginFormSave":	
    	case "OnSnipFormSave":	
    		$p = $pp[$e->name];
    		$ds = $modx->db->query("SELECT {$p['field']} FROM {$p['tbl']} LEFT JOIN {$tbl_categories} ON {$p['tbl']}.category={$tbl_categories}.id  WHERE {$p['tbl']}.id='{$id}'");
    		if ($row = $modx->db->getRow($ds)) {
    			//
    			$alias = strtolower($modx->stripAlias(str_replace(array(":", ",", "/", "\\", "  "), " ", $row["name"])));
    			//
    			if ($e->name=="OnPluginFormSave") {
    				$spe = $modx->getFullTableName("site_plugin_events");
    				$se = $modx->getFullTableName("system_eventnames");
    				$ds2 = $modx->db->query("SELECT name FROM {$spe} JOIN {$se} ON {$se}.id = {$spe}.evtid WHERE pluginid='{$id}' ORDER BY name");
    				$row["events"] = array();
    				while ($row2 = $modx->db->getRow($ds2)) {
    					$row["events"][] = $row2["name"];
    				}	
    				$row["events"] = implode("\n", $row["events"]);
    			}
    			//
    			$file = MODX_BASE_PATH."assets/cache/{$p['folder']}/{$alias}.txt";
    			$out = "";
    			foreach ($row as $k=>$v) $out .= "== ".trim($k)." ==\r\n".trim($v)."\r\n\r\n";
    			file_put_contents($file, trim($out));
    			@chmod($file, 0664);
    		}
    		break;
    	case "OnSiteRefresh":
    		$spe = $modx->getFullTableName("site_plugin_events");
    		$se = $modx->getFullTableName("system_eventnames");
    		$sp = $modx->getFullTableName("site_plugins");
    		foreach ($pp as $k=>$p) {
    			$ds = $modx->db->query("SELECT {$p['field']} FROM {$p['tbl']} LEFT JOIN {$tbl_categories} ON {$p['tbl']}.category={$tbl_categories}.id");
    			while ($row = $modx->db->getRow($ds)) {
    				//
    				$alias = strtolower($modx->stripAlias(str_replace(array(":", ",", "/", "\\", "  "), " ", $row["name"])));
    				//
    				if ($p["folder"]=="plugins") {
    					$ds2 = $modx->db->query("SELECT {$se}.name  FROM {$p['tbl']} JOIN {$spe} ON {$spe}.pluginid = {$p['tbl']}.id JOIN {$se} ON {$se}.id = {$spe}.evtid WHERE {$p['tbl']}.name='{$row['name']}' ORDER BY {$se}.name");
    					$row["events"] = array();
    					while ($row2 = $modx->db->getRow($ds2)) {
    						$row["events"][] = $row2["name"];
    					}	
    					$row["events"] = implode("\n", $row["events"]);
    				}
    				//
    				$file = MODX_BASE_PATH."assets/cache/{$p['folder']}/{$alias}.txt";
    				$out = "";
    				foreach ($row as $k=>$v) $out .= "== ".trim($k)." ==\r\n".trim($v)."\r\n\r\n";
    				file_put_contents($file, trim($out));
    				@chmod($file, 0664);
    			}
    		}
    
    		$services = array(
    			"Parser Service Events",
    			"Manager Access Events",
    			"Web Access Service Events",
    			"Cache Service Events",
    			"Template Service Events",
    			"User Defined Events"
    		); 		
    		$data = array();
    		$ds = $modx->db->query("SELECT * FROM {$se} ORDER BY service DESC, groupname, name");
    		while ($row = $modx->db->getRow($ds)) {
    			if (empty($row['groupname'])) $row['groupname'] = $services[$row['service']-1];
    			$data[$row['groupname']][$row['name']] = 1;
    		}
    		$out = "";
    		foreach ($data as $k=>$v) {
    			$out .= "== ".trim($k)." ==\r\n".trim(implode("\r\n", array_keys($v)))."\r\n\r\n";
    		}
    		$file = MODX_BASE_PATH."assets/cache/events.txt";
    		file_put_contents($file, trim($out));
    		@chmod($file, 0664);
    
    		$data = array();
    		$ds = $modx->db->query("SELECT sysevt.name as evtname, plugs.name FROM {$se} sysevt INNER JOIN {$spe} pe ON pe.evtid = sysevt.id INNER JOIN {$sp} plugs ON plugs.id = pe.pluginid ORDER BY sysevt.name, pe.priority");
    		while ($row = $modx->db->getRow($ds)) {
    			$data[$row['evtname']][$row['name']] = 1;
    		}
    		$out = "";
    		foreach ($data as $k=>$v) {
    			$out .= "== ".trim($k)." ==\r\n".trim(implode("\r\n", array_keys($v)))."\r\n\r\n";
    		}
    		$file = MODX_BASE_PATH."assets/cache/plugins_priority.txt";
    		file_put_contents($file, trim($out));
    		@chmod($file, 0664);
    		
    		break;
    }
    


    Вешать надо на события: OnModFormSave, OnPluginFormSave, OnSiteRefresh, OnSnipFormSave.