Pimcore\Model\Version::maintenanceCleanUp PHP Method

maintenanceCleanUp() public method

public maintenanceCleanUp ( )
    public function maintenanceCleanUp()
    {
        $conf["document"] = Config::getSystemConfig()->documents->versions;
        $conf["asset"] = Config::getSystemConfig()->assets->versions;
        $conf["object"] = Config::getSystemConfig()->objects->versions;
        $elementTypes = [];
        foreach ($conf as $elementType => $tConf) {
            if (intval($tConf->days) > 0) {
                $versioningType = "days";
                $value = intval($tConf->days);
            } else {
                $versioningType = "steps";
                $value = intval($tConf->steps);
            }
            if ($versioningType) {
                $elementTypes[] = ["elementType" => $elementType, $versioningType => $value];
            }
        }
        $ignoredIds = [];
        while (true) {
            $versions = $this->getDao()->maintenanceGetOutdatedVersions($elementTypes, $ignoredIds);
            if (count($versions) == 0) {
                break;
            }
            $counter = 0;
            Logger::debug("versions to check: " . count($versions));
            if (is_array($versions) && !empty($versions)) {
                $totalCount = count($versions);
                foreach ($versions as $index => $id) {
                    try {
                        $version = Version::getById($id);
                    } catch (\Exception $e) {
                        $ignoredIds[] = $id;
                        Logger::debug("Version with " . $id . " not found\n");
                        continue;
                    }
                    $counter++;
                    // do not delete public versions
                    if ($version->getPublic()) {
                        $ignoredIds[] = $version->getId();
                        continue;
                    }
                    if ($version->getCtype() == "document") {
                        $element = Document::getById($version->getCid());
                    } elseif ($version->getCtype() == "asset") {
                        $element = Asset::getById($version->getCid());
                    } elseif ($version->getCtype() == "object") {
                        $element = Object::getById($version->getCid());
                    }
                    if ($element instanceof ElementInterface) {
                        Logger::debug("currently checking Element-ID: " . $element->getId() . " Element-Type: " . Element\Service::getElementType($element) . " in cycle: " . $counter . "/" . $totalCount);
                        if ($element->getModificationDate() >= $version->getDate()) {
                            // delete version if it is outdated
                            Logger::debug("delete version: " . $version->getId() . " because it is outdated");
                            $version->delete();
                        } else {
                            $ignoredIds[] = $version->getId();
                            Logger::debug("do not delete version (" . $version->getId() . ") because version's date is newer than the actual modification date of the element. Element-ID: " . $element->getId() . " Element-Type: " . Element\Service::getElementType($element));
                        }
                    } else {
                        // delete version if the corresponding element doesn't exist anymore
                        Logger::debug("delete version (" . $version->getId() . ") because the corresponding element doesn't exist anymore");
                        $version->delete();
                    }
                    // call the garbage collector if memory consumption is > 100MB
                    if (memory_get_usage() > 100000000) {
                        \Pimcore::collectGarbage();
                    }
                }
            }
        }
    }