Constructor Considerations

    /**
     * Main constructor for the MyClass Class
     *
     * @param modX $modx
     *            A reference to the current modx Object
     * @param array $config
     *            configuration settings which can be used to over ride default settings - typically unnecessary
     */
    function __construct(modX &$modx, array $config = array())
    {
        try {

            /**
             * The MODX object.
             */
            $this->modx = &$modx;

            /**
             * The current MODX Revolution User
             */
            $this->user = &$this->modx->user;

            /**
             * Establish system paths which will be used by this class.
             */
            $corePath = $this->modx->getOption(__CLASS__ . '.core_path', $config, $this->modx->getOption('core_path') . 'components/' . __CLASS__ . '/');
            $assetsUrl = $this->modx->getOption(__CLASS__ . '.assets_url', $config, $this->modx->getOption('assets_url') . 'components/' . __CLASS__ . '/');
            $this->config = array_merge(array(
                'assetsUrl' => $assetsUrl,
                'cssUrl' => $assetsUrl . 'css/',
                'jsUrl' => $assetsUrl . 'js/',
                'imagesUrl' => $assetsUrl . 'images/',
                'connectorUrl' => $assetsUrl . 'connector.php',

                'corePath' => $corePath,
                'modelPath' => $corePath . 'model/',
                'chunksPath' => $corePath . 'elements/chunks/',
                'controllersPath' => $corePath . 'controllers/',
                'processorsPath' => $corePath . 'processors/',
                'snippetsPath' => $corePath . 'elements/snippets/',

                'package' => __CLASS__,
                'prefix' => 'nsit_'
            ), $config);

            $this->modx->addPackage($this->config['package'], $this->config['modelPath'], $this->config['prefix']);
        } catch (xPDOException $xe) {
            $this->modx->sendError('unavailable', array(
                'error_message' => $xe->getMessage()
            ));
        } catch (Exception $e) {
            $this->modx->sendError('unavailable', array(
                'error_message' => $e->getMessage()
            ));
        }
    }

Initialize Function

 
	    /**
     * Parses the schema and generates ORM files and the database structure, but will not overwrite preexisting files such as IonCube Encoded Versions or those previously generated.
     *
     * Schema file must be stored at /core/components/[package_name]/model/schema/[package_name].mysql.schema.xml.
     * Schema file must be named [package_name].mysql.schema.xml.
     *
     * @return string
     */
    public function initializeSchema()
    {
        $out = 'failed';
        $xpdoManager = $this->modx->getManager();
        if ($xpdoManager) {
            $xpdoGenerator = $xpdoManager->getGenerator();
            if ($xpdoGenerator) {
                $success = $xpdoGenerator->parseSchema($this->config['modelPath'] . 'schema/' . $this->config['package'] . '.mysql.schema.xml', $this->config['modelPath']);
                if ($success) {
                    $schemaObjects = $this->getSchemaObjectNames();
                    foreach ($schemaObjects as $t) {
                        $success += $xpdoManager->createObjectContainer(trim($t));
                    }
                    $out = ($success > count($schemaObjects)) ? 'Model Created at ' . $this->config['modelPath'] . $this->config['package'] . ' and all tables successfully created.

' : 'Operation Failed'; } } } $this->logevent(($success > count($schemaObjects)) ? true : false, $out); return $out; }

Package Class Names

	/**
	 * Retrieves an array of the object names defined in the schema.
	 * Note: this list must be manually updated and match schema definitions for
	 * all subsequent usage to function properly.
	 *
	 * @return array An collection of object names established in the schema file.
	 */
	private function getSchemaOjects() {
		return array (
				'spCast',
				'spCastHistory',
				'spCastInformation',
				'spCastPayrol',
				'spCastNeeds',
				'spEvent',
				'spEventCast',
				'spEventSpeaker',
				'spLog', 
		);
	}

In this article