public function prepare()
 {
     $this->_merge = new Aitoc_Aitsys_Model_Rewriter_Merge();
     $this->_rewriterConfig = new Aitoc_Aitsys_Model_Rewriter_Config();
     // first clearing current class rewrites
     Aitoc_Aitsys_Model_Rewriter_Autoload::instance()->clearConfig();
     $this->_merge->clear();
     $rewriteHelper = Mage::helper('aitsys/rewriter');
     $result = array();
     if ($rewriteHelper->analysisInheritedClasses($this, 'mergeFilesFromClass', $result)) {
         $this->_rewriterConfig->commit();
     }
     Aitoc_Aitsys_Model_Rewriter_Autoload::instance()->setupConfig();
 }
示例#2
0
 private static function _initSource($file, $key)
 {
     if (!Mage::registry('aitoc_test_marker')) {
         $module = self::get()->platform()->getModule($key)->initSource();
         $filename = pathinfo($file, PATHINFO_FILENAME);
         if ($files = Aitoc_Aitsys_Model_Rewriter_Autoload::instance()->getFileConfig($filename)) {
             $match = str_replace('_', '/', $key);
             foreach ($files as $file) {
                 $file = str_replace('\\', '/', $file);
                 if (strstr($file, $match)) {
                     break;
                 }
             }
         }
         $file = str_replace('\\', '/', $file);
         if (($tmp = strstr($file, 'Aitoc/')) || ($tmp = strstr($file, 'AdjustWare/'))) {
             $file = $tmp;
         } else {
             $file = strstr($file, 'app/');
         }
         Mage::register('aitoc_file:' . md5($file), array($file, $module));
         Mage::register('aitoc_block_marker', array($file, $module));
         return true;
     }
     Mage::unregister('aitoc_test_marker');
     return false;
 }
示例#3
0
 public function prepare()
 {
     $merge = new Aitoc_Aitsys_Model_Rewriter_Merge();
     $rewriterConfig = new Aitoc_Aitsys_Model_Rewriter_Config();
     // first clearing current class rewrites
     Aitoc_Aitsys_Model_Rewriter_Autoload::instance()->clearConfig();
     $merge->clear();
     $conflict = new Aitoc_Aitsys_Model_Rewriter_Conflict();
     list($conflicts, $rewritesAbstract) = $conflict->getConflictList();
     /**
      * FOR NORMAL REWRITES
      */
     // will combine rewrites by alias groups
     if (!empty($conflicts)) {
         foreach ($conflicts as $groupType => $modules) {
             $groupType = substr($groupType, 0, -1);
             foreach ($modules as $moduleName => $moduleRewrites) {
                 foreach ($moduleRewrites['rewrite'] as $moduleClass => $rewriteClasses) {
                     /*
                      * $rewriteClasses is an array of class names for one rewrite alias
                      * for example:
                      * Array
                      *   (
                      *       [0] => AdjustWare_Deliverydate_Model_Rewrite_AdminhtmlSalesOrderCreate
                      *       [4] => Aitoc_Aitcheckoutfields_Model_Rewrite_AdminSalesOrderCreate
                      *       [10] => Aitoc_Aitorderedit_Model_Rewrite_AdminSalesOrderCreate
                      *   )
                      */
                     // building inheritance tree
                     $alias = $moduleName . '/' . $moduleClass;
                     $classModel = new Aitoc_Aitsys_Model_Rewriter_Class();
                     $inheritanceModel = new Aitoc_Aitsys_Model_Rewriter_Inheritance();
                     $baseClass = $classModel->getBaseClass($groupType, $alias);
                     $inheritedClasses = $inheritanceModel->build($rewriteClasses, $baseClass);
                     // don't create rewrites for excluded Magento base classes
                     if (in_array($baseClass, $this->tool()->db()->getConfigValue('aitsys_rewriter_exclude_classes', array()))) {
                         continue;
                     }
                     $mergedFilename = $merge->merge($inheritedClasses);
                     if ($mergedFilename) {
                         $rewriterConfig->add($mergedFilename, $rewriteClasses);
                         $rewriterConfig->add(serialize($merge->getLatestMergedFiles()), 'file:' . $mergedFilename);
                     }
                 }
             }
         }
     }
     /**
      * FOR ABSTRACT REWRITES (AITOC REALIZATION)
      */
     if (!empty($rewritesAbstract)) {
         foreach ($rewritesAbstract as $groupType => $modules) {
             $groupType = substr($groupType, 0, -1);
             foreach ($modules as $moduleName => $moduleRewrites) {
                 foreach ($moduleRewrites['rewriteabstract'] as $moduleClass => $rewriteClass) {
                     // building inheritance tree
                     $alias = $moduleName . '/' . $moduleClass;
                     $classModel = new Aitoc_Aitsys_Model_Rewriter_Class();
                     $inheritanceModel = new Aitoc_Aitsys_Model_Rewriter_Inheritance();
                     $baseClass = $classModel->getBaseClass($groupType, $alias);
                     $inheritedClasses = $inheritanceModel->buildAbstract($rewriteClass, $baseClass);
                     $mergedFilename = $merge->merge($inheritedClasses);
                     if ($mergedFilename) {
                         $rewriterConfig->add($mergedFilename, array($rewriteClass, $baseClass));
                     }
                 }
             }
         }
     }
     $rewriterConfig->commit();
     Aitoc_Aitsys_Model_Rewriter_Autoload::instance()->setupConfig();
 }
示例#4
0
    protected function _copy($source, $target, $firstIteration = true)
    {
        parent::_copy($source, $target, $firstIteration);
        if (is_file($target) && file_exists($target)) {
            $platform = Aitoc_Aitsys_Abstract_Service::get()->platform();
            $dirs = $platform->getModuleDirs();
            foreach ($dirs as $dir) {
                if ($item = strstr($source, $dir)) {
                    if ($item != $dir) {
                        file_put_contents($target, '<?php class_exists("Mage_Adminhtml_Controller_Action"); require_once "' . $source . '";?>');
                        return $this;
                    }
                }
            }
            $name = pathinfo($target, PATHINFO_FILENAME);
            $loader = Aitoc_Aitsys_Model_Rewriter_Autoload::instance();
            if ($loader->hasClass($name)) {
                $path = $loader->getRewriteDir();
                $source = <<<SOURCE
<?php
class_exists("Mage_Adminhtml_Controller_Action");
function _{$name}_autoloader( \$class )
{
    foreach (glob('{$path}*') as \$path)
    {
        require_once \$path;
    }
}

if (defined('AITSYS_REWRITED')) return;
spl_autoload_register('_{$name}_autoloader');
_{$name}_autoloader(null);
spl_autoload_unregister('_{$name}_autoloader');
define('AITSYS_REWRITED',true);
SOURCE;
                file_put_contents($target, '');
            }
        }
        return $this;
    }