예제 #1
0
 /**
  * 
  * Authenticates the user using the supplied credentials.
  * If workspace is recognized as the name of an existing workspace in the repository and authorization to access that workspace is granted, then a new Session object is returned.
  * If authentication or authorization for the specified workspace fails, a LoginException is thrown.
  * If workspace is not recognized, a NoSuchWorkspaceException is thrown.
  * @param Credentials $credentials the credentials of the user.
  * @param string $workspace the name of the workspace.
  * @return Session a valid session for the user to access the repository.
  *  
  */
 public static function login(Credentials $credentials, $workspace)
 {
     if (!file_exists($_SERVER['PCR'] . "/config/{$workspace}.xml")) {
         throw new NoSuchWorkspaceException($workspace);
     }
     $config = simplexml_load_file($_SERVER['PCR'] . "/config/{$workspace}.xml");
     $persistenceManager = (string) $config->persistenceManager;
     if (!file_exists($_SERVER['PCR'] . "/PMs/{$persistenceManager}.php")) {
         throw new RepositoryException("persistence manager does not exist for workspace: {$workspace}=>{$persistenceManager}");
     }
     require_once $_SERVER['PCR'] . "/PMs/{$persistenceManager}.php";
     $pm = new $persistenceManager($credentials, $workspace, $config);
     if (!$pm->isLive()) {
         throw new LoginException("workspace=>{$workspace}, persistenceManager=>{$persistenceManager}, userID=>" . $credentials->getUserID());
     }
     Log4PCR::access("workspace=>{$workspace}, persistenceManager=>{$persistenceManager}, userID=>" . $credentials->getUserID());
     return new Session($pm);
 }
 public function __construct(Credentials $credentials, $workspace, $config)
 {
     $link = @mysql_connect($config->server, $credentials->getUserID(), $credentials->getPassword(), 1);
     if (mysql_stat($link) !== null) {
         if (!mysql_select_db($workspace, $link)) {
             $sql = "CREATE DATABASE {$workspace}";
             if (mysql_query($sql, $link)) {
                 mysql_select_db($workspace, $link);
                 $sql = "CREATE TABLE c (p text NOT NULL,\n\t\t\t\t\t\t\t\tn text NOT NULL,\n\t\t\t\t\t\t\t\tv text NOT NULL,\n\t\t\t\t\t\t\t\tKEY INDEX1 (p (1000)),\n\t\t\t\t\t\t\t\tKEY INDEX2 (p (850), n (150)),\n\t\t\t\t\t\t\t\tKEY INDEX3 (p (550), n (150), v (300)),\n\t\t\t\t\t\t\t\tKEY INDEX4 (v (1000)))\n\t\t\t\t\t\t\t\tENGINE = MyISAM DEFAULT CHARSET = latin1";
                 mysql_query($sql, $link);
             } else {
                 throw new RepositoryException("in MySQL, cannot create workspace: {$workspace}");
             }
         }
         $this->credentials = $credentials;
         $this->workspace = $workspace;
         $this->config = $config;
         $this->link = $link;
         $this->isLive = true;
     }
 }