You are here

function webfm_putmeta in Web File Manager 5

Same name and namespace in other branches
  1. 5.2 webfm.module \webfm_putmeta()
1 call to webfm_putmeta()
webfm_ajax in ./webfm.module
Ajax post requests

File

./webfm.module, line 2825

Code

function webfm_putmeta($fid, $metadata, $user, &$err) {

  //editable metadata columns of webfm_file table
  static $metadata_key_arr = array();
  if (!count($metadata_key_arr)) {
    $metadata_key_arr = array(
      't' => array(
        'field' => 'ftitle',
        'size' => 255,
      ),
      'd' => array(
        'field' => 'fdesc',
        'size' => 1024,
      ),
      'l' => array(
        'field' => 'flang',
        'size' => 16,
      ),
      'p' => array(
        'field' => 'fpublisher',
        'size' => 255,
      ),
      'f' => array(
        'field' => 'fformat',
        'size' => 255,
      ),
      'u' => array(
        'field' => 'uid',
        'size' => 10,
      ),
    );
  }
  $err = "";
  if (($file = webfm_get_file_record($fid)) != false) {
    if ($user == 1 || $user == $file->uid || webfm_file_mod_access($file)) {
      $fields = explode(',', $metadata);
      $metadata = array();
      foreach ($fields as $field) {

        // Parse webfm_file_key/metadata pairs
        trim($field);
        $key = substr($field, 0, 1);
        $separator = substr($field, 1, 1);
        $value = substr($field, 2, min(strlen($field) - 2, $metadata_key_arr[$key]['size']));
        if (array_key_exists($key, $metadata_key_arr) && $separator == ":") {
          if ($key == 'u') {

            // Special handling for uid changes (admins only)
            if ($user == 1) {
              $uid_val = strval($value);
              if (is_numeric($uid_val) && strlen($uid_val) << 11) {

                // Check that requested uid exists
                if (db_num_rows(db_query("SELECT uid FROM {users} WHERE uid = %d", $uid_val)) > 0) {
                  $metadata[$metadata_key_arr[$key]['field']] = $uid_val;
                }
                else {
                  $err = "user not found";
                  return FALSE;
                }
              }
              else {
                $err = "invalid data";
                return FALSE;
              }
            }
            else {
              $err = "permission denied";
              return FALSE;
            }
          }
          else {
            $metadata[$metadata_key_arr[$key]['field']] = strval($value);
          }
        }
      }
      if (count($metadata)) {
        $ret = webfm_dbupdate_file($fid, '', $metadata);
        if ($ret) {
          $err = "metadata updated";
          return TRUE;
        }
        else {
          $err = "webfm_dbupdate_file fail";
        }
      }
      else {
        if (!strlen($err)) {
          $err = "no update required";
        }
        return TRUE;
      }
    }
    else {
      $err = "permission denied";
    }
  }
  else {
    $err = "file not found";
  }
  return FALSE;
}