Example #1
0
File: Topic.php Project: kotow/work
 public function getIndexPage()
 {
     try {
         $c = new Criteria();
         $c->add(TagPeer::TAG_ID, 'website_page_index');
         $tag = TagPeer::doSelectOne($c);
         $c = new Criteria();
         $c->add(RelationPeer::ID1, $this->getId());
         $c->addJoin(RelationPeer::ID2, TagrelationPeer::ID);
         $c->add(TagrelationPeer::TAG_ID, $tag->getId());
         $relation = RelationPeer::doSelectOne($c);
         if ($relation) {
             $indexPage = Document::getDocumentInstance($relation->getId2());
             return $indexPage;
         } else {
             return null;
         }
     } catch (Exception $e) {
         throw $e;
     }
 }
Example #2
0
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = RelationPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setId1($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setId2($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setDocumentModel1($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setDocumentModel2($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setSortOrder($arr[$keys[4]]);
     }
 }
Example #3
0
function run_generate_cache($task, $args)
{
    ini_set("memory_limit", "2048M");
    ini_set("display_errors", 1);
    define('SF_ROOT_DIR', sfConfig::get('sf_root_dir'));
    define('SF_APP', 'frontend');
    define('SF_ENVIRONMENT', 'dev');
    define('SF_DEBUG', false);
    sfConfig::set("sf_use_relations_cache", false);
    require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
    $databaseManager = new sfDatabaseManager();
    $databaseManager->initialize();
    run_url_relations($task, $args);
    run_tags_relations($task, $args);
    echo_cms_title("GENERATING CACHE...");
    if (!class_exists("XMLParser")) {
        include sfConfig::get('sf_root_dir') . "/lib/tools/XMLParser.class.php";
    }
    if (!class_exists("FileHelper")) {
        include sfConfig::get('sf_root_dir') . "/lib/helper/FileHelper.php";
    }
    //echo_cms_sep();
    echo_cms("sf_cache_objects = " . sfConfig::get('sf_cache_objects'));
    echo_cms("sf_cache_relations = " . sfConfig::get('sf_cache_relations'));
    echo_cms("sf_cache_trees = " . sfConfig::get('sf_cache_trees'));
    //echo_cms_sep();
    if (count($args) > 0) {
        $relationsFlag = substr($args[0], 0, 3) == "rel";
        $listsFlag = substr($args[0], 0, 4) == "list";
        $cacheModel = $args[0];
        if (is_numeric($cacheModel)) {
            $obj = Document::getDocumentInstance($cacheModel);
            if ($obj) {
                $phpName = get_class($obj);
            } else {
                echo_cms_error("Object with ID=" . $cacheModel . " not found!");
                exit;
            }
        }
    }
    // parse schema file to make Schema.class.php
    $objects = XMLParser::getXMLdataValues(sfConfig::get('sf_root_dir') . "/config/schema.xml");
    $schemaFile = sfConfig::get('sf_root_dir') . "/config/Schema.class.php";
    $content = $content = "<?php\n class Schema\n{\n\n";
    echo_cms("Building " . $schemaFile . "... ");
    foreach ($objects as $obj) {
        if ($obj['tag'] == 'TABLE' && $obj['type'] == 'open') {
            $table = $obj['attributes']['PHPNAME'];
            if ($phpName && $phpName == $table) {
                $tableName = $obj['attributes']['NAME'];
            }
            $trees = explode(",", $obj['attributes']['TREE']);
            $content .= "\tpublic static function get" . $table . "Trees()\n\t{\n";
            $content .= "\t\treturn array(";
            foreach ($trees as $tree) {
                $content .= "'" . strtolower($tree) . "', ";
            }
            $content = substr($content, 0, -2);
            $content .= ");\n\t}\n\n";
            $content .= "\tpublic static function get" . $table . "Properties()\n\t{\n";
            $content .= "\t\treturn array(";
        }
        if ($obj['tag'] == 'COLUMN' && $obj['type'] == 'complete') {
            $property = $obj['attributes']['NAME'];
            $getProperty = UtilsHelper::convertFieldName($property);
            $content .= "'" . $getProperty . "', ";
        }
        if ($obj['tag'] == 'TABLE' && $obj['type'] == 'close') {
            $content = substr($content, 0, -2);
            $content .= ");\n\t}\n\n";
        }
    }
    $content .= "\n}";
    //echo_cms_sep();
    if (FileHelper::writeFile($schemaFile, $content)) {
        echo_cms($schemaFile . " writen successfully!");
    } else {
        echo_cms_error("Error writing " . $schemaFile . "!");
    }
    echo "\n";
    //echo_cms_sep();
    if (substr($args[0], 0, 5) == "schema") {
        echo_cms(" Done!");
        exit;
    }
    if (!$relationsFlag && !$listsFlag) {
        try {
            if (is_numeric($cacheModel)) {
                $obj = array();
                $obj['tag'] = 'OBJECT';
                $obj['type'] = 'complete';
                $obj['id'] = $cacheModel;
                $objects = array($obj);
                $exit = true;
            } elseif ($cacheModel) {
                $obj = array();
                $obj['tag'] = 'OBJECT';
                $obj['type'] = 'complete';
                $obj['value'] = $cacheModel;
                $objects = array($obj);
                $exit = true;
            } else {
                $objects = XMLParser::getXMLdataValues(sfConfig::get('sf_root_dir') . "/config/cachedObjects.xml");
            }
            foreach ($objects as $obj) {
                if ($obj['tag'] == 'OBJECT' && $obj['type'] == 'complete') {
                    if ($id = $obj['id']) {
                        $obj = Document::getDocumentInstance($id);
                        $model = get_class($obj);
                        $c = new Criteria();
                        $c->add($tableName . '.ID', $id);
                    } else {
                        $model = $obj['value'];
                        $c = new Criteria();
                    }
                    $classPeer = ucfirst($model) . "Peer";
                    //$c = new Criteria();
                    //$results = call_user_func(array($classPeer, 'doSelect'), $c);
                    $peerMethod = "doSelect";
                    $results = call_user_func(array($classPeer, $peerMethod), $c);
                    echo_cms("  Caching " . $model . " documents");
                    $ind = 0;
                    foreach ($results as $result) {
                        if ($ind % 20 == 0) {
                            echo $ind . "  .\r";
                        } else {
                            if ($ind % 10 == 0) {
                                echo $ind . "  o\r";
                            }
                        }
                        $ind++;
                        Document::cacheObj($result, $model, false);
                    }
                    echo_cms(" ====> " . $ind . " " . $model . " Document(s) cached.");
                    //echo_cms_sep();
                }
            }
            if ($exit) {
                exit;
            }
        } catch (Expection $e) {
            echo_cms_error(" Error: {$e}");
        }
    }
    if (!$listsFlag) {
        echo "\n";
        //echo_cms_sep();
        echo_cms("Writing relations cache");
        Relation::checkRelationCache('lock');
        try {
            $c = new Criteria();
            $c->addAscendingOrderByColumn('id1');
            $c->addAscendingOrderByColumn('document_model2');
            $c->addAscendingOrderByColumn('sort_order');
            $relations = RelationPeer::doSelect($c);
            $relationsFile = sfConfig::get('sf_root_dir') . "/cache/objcache/childrenRelations.php";
            echo_cms("Processing children :");
            $i = 0;
            $content = "<?php \n";
            $oldIDModel = '';
            $currIDModel = '';
            $idStr = '';
            foreach ($relations as $relation) {
                $currIDModel = $relation->getId1() . ':' . $relation->getDocumentModel2();
                if ($i == 0) {
                    $oldIDModel = $currIDModel;
                }
                $i++;
                echo $i . "\t\t\r";
                if ($currIDModel == $oldIDModel) {
                    $idStr .= "," . $relation->getId2();
                } else {
                    $idStr = substr($idStr, 1);
                    $content .= "\$_Rel[" . $oldId1 . "][\"" . $oldModel2 . "\"] = explode(\",\", \"" . $idStr . "\");\n";
                    $idStr = "," . $relation->getId2();
                }
                $oldIDModel = $currIDModel;
                $oldId1 = $relation->getId1();
                $oldModel2 = $relation->getDocumentModel2();
            }
            if ($idStr) {
                $idStr = substr($idStr, 1);
                $content .= "\$_Rel[" . $oldId1 . "][\"" . $oldModel2 . "\"] = explode(\",\", \"" . $idStr . "\");\n";
            }
            echo "\n";
            $content .= "\n?>";
            //echo_cms_sep();
            if (FileHelper::writeFile($relationsFile, $content)) {
                echo_cms($relationsFile . " written successfully");
            } else {
                echo_cms_error("Error writing " . $relationsFile . " !");
            }
            //echo_cms_sep();
        } catch (Exception $e) {
            echo "Error: " . $e->getMessage();
        }
        Relation::checkRelationCache('unlock');
    }
    if (!$relationsFlag) {
        echo "\n";
        //echo_cms_sep();
        echo_cms_title("Writing Lists cache");
        $listsRootFolder = Rootfolder::getRootfolderByModule("lists");
        if ($listsRootFolder) {
            $lists = Document::getChildrenOf($listsRootFolder->getId(), "Lists");
        }
        foreach ($lists as $list) {
            $listId = $list->getListId();
            echo "\t\tprocessing \"" . $listId . "\" list ...";
            $listPath = sfConfig::get('sf_root_dir') . "/cache/listscache/" . $listId . ".php";
            @unlink($listPath);
            $content = "<?php \n";
            $content .= "\$listItemsForSelect = array(\n";
            $items = Lists::getListitemsForSelect($listId, array(), false);
            foreach ($items as $key => $item) {
                $content .= "\"" . str_replace("\"", "\\\"", $key) . "\" => \"" . str_replace("\"", "\\\"", $item) . "\",\n";
            }
            $content .= ");\n?>";
            if (FileHelper::writeFile($listPath, $content)) {
                echo_cms(" Done!");
            } else {
                echo_cms_error(" Error!");
            }
        }
        //echo_cms_sep();
    }
    sfConfig::set("sf_use_relations_cache", true);
}
Example #4
0
 public static function retrieveByPK($id1, $id2, $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(self::DATABASE_NAME);
     }
     $criteria = new Criteria();
     $criteria->add(RelationPeer::ID1, $id1);
     $criteria->add(RelationPeer::ID2, $id2);
     $v = RelationPeer::doSelect($criteria, $con);
     return !empty($v) ? $v[0] : null;
 }
Example #5
0
 public static function orderDocument($documentId, $up = true)
 {
     try {
         $con = Propel::getConnection();
         $con->begin();
         $c = new Criteria();
         $c->add(RelationPeer::ID2, $documentId);
         $relation = RelationPeer::doSelectOne($c);
         $c = new Criteria();
         $c->add(RelationPeer::ID1, $relation->getId1());
         if ($up) {
             $c->addDescendingOrderByColumn(RelationPeer::SORT_ORDER);
             $criterion = $c->getNewCriterion(RelationPeer::SORT_ORDER, $relation->getSortOrder(), Criteria::LESS_THAN);
         } else {
             $c->addAscendingOrderByColumn(RelationPeer::SORT_ORDER);
             $criterion = $c->getNewCriterion(RelationPeer::SORT_ORDER, $relation->getSortOrder(), Criteria::GREATER_THAN);
         }
         $c->add($criterion);
         $previousRelation = RelationPeer::doSelectOne($c);
         if ($previousRelation) {
             $previousSortOrder = $previousRelation->getSortOrder();
             $previousRelation->setSortOrder($relation->getSortOrder());
             $previousRelation->save();
             $relation->setSortOrder($previousSortOrder);
             $relation->save();
             if (sfConfig::get('sf_cache_relations')) {
                 if ($relation) {
                     self::updateRelationCache($relation->getId1());
                 }
             }
         }
         if (SF_APP == "backend" && sfConfig::get('sf_cache_trees')) {
             $user = sfContext::getInstance()->getUser();
             $moduleName = $user->getAttribute("currentModule");
             $document = Document::getDocumentInstance($documentId);
             if ($up) {
                 BackendService::updateTree($moduleName, $document, "UP");
                 //BackendService::updateTree($moduleName, $document, "UP", "right");
                 //BackendService::updateTree($moduleName, $document, "UP", "mce");
             } else {
                 BackendService::updateTree($moduleName, $document, "DOWN");
                 //BackendService::updateTree($moduleName, $document, "DOWN", "right");
                 //BackendService::updateTree($moduleName, $document, "DOWN", "mce");
             }
         }
         $con->commit();
     } catch (Exception $e) {
         $con->rollback();
         throw $e;
     }
 }
Example #6
0
 public function executeChangeOrder()
 {
     exec('rm -fr ' . SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'menus/*');
     $items = $this->getRequestParameter('item');
     $c = new Criteria();
     $c->addAscendingOrderByColumn(RelationPeer::SORT_ORDER);
     $c->add(RelationPeer::ID2, $items, Criteria::IN);
     $arr = RelationPeer::doSelect($c);
     $order = array();
     foreach ($arr as $ind => $obj) {
         $parentId = $obj->getId1();
         $order[$items[$ind]] = $obj->getSortOrder();
     }
     foreach ($arr as &$obj) {
         $obj->setSortOrder($order[$obj->getId2()]);
         $obj->save();
     }
     if ($parentId) {
         Relation::updateRelationCache($parentId);
     }
     exit("OK");
 }
Example #7
0
 public static function getParentOf($id, $model = null, $createInstance = true, $useCache = true)
 {
     $parent = $parentId = null;
     try {
         $found = false;
         $load = true;
         if ($useCache) {
             $objclass = "CachedObj" . $id;
             if (!class_exists($objclass)) {
                 $cacheFile = self::getCachePath($id) . "doc" . $id . ".php";
                 if (is_readable($cacheFile)) {
                     include self::getCachePath($id) . "doc" . $id . ".php";
                 } else {
                     $load = false;
                 }
             }
             if ($load) {
                 $cachedObj = new $objclass();
                 if (method_exists($cachedObj, 'getParent')) {
                     $parentId = $cachedObj->getParent();
                     $found = true;
                 }
             }
         }
         if (!$found) {
             $c = new Criteria();
             $c->add(RelationPeer::ID2, $id);
             if ($model) {
                 $c->add(RelationPeer::DOCUMENT_MODEL1, $model);
             }
             $parent = RelationPeer::doSelectOne($c);
             if ($parent) {
                 $parentId = $parent->getId1();
             }
         }
         if ($parentId) {
             if ($createInstance) {
                 $parent = self::getDocumentInstance($parentId);
             } else {
                 $parent = $parentId;
             }
         }
         return $parent;
     } catch (Exception $e) {
         throw $e;
     }
 }