1: <?php
2:
3: namespace Cloudflare\Zone;
4:
5: use Cloudflare\Api;
6: use Cloudflare\Zone;
7:
8: /**
9: * CloudFlare API wrapper
10: *
11: * DNS Record
12: * CloudFlare DNS records
13: *
14: * @author James Bell <[email protected]>
15: *
16: * @version 1
17: */
18: class Dns extends Api
19: {
20: /**
21: * Default permissions level
22: *
23: * @var array
24: */
25: protected $permission_level = ['read' => '#dns_records:read', 'edit' => '#dns_records:edit'];
26:
27: /**
28: * Create DNS record (permission needed: #dns_records:edit)
29: * Create a new DNS record for a zone. See the record object definitions for required attributes for each record type
30: *
31: * @param string $zone_identifier
32: * @param string $type DNS record type (A, AAAA, CNAME, TXT, SRV, LOC, MX, NS, SPF)
33: * @param string $name DNS record name
34: * @param string $content DNS record content
35: * @param int|null $ttl Time to live for DNS record. Value of 1 is 'automatic'
36: * @param bool|null $proxied Whether to proxy the domain through CloudFlare or not
37: * @param int|null $priority MX record priority value
38: * @param array|null $data Additional data required for SRV record
39: */
40: public function create($zone_identifier, $type, $name, $content, $ttl = null, $proxied = null, $priority = null, $data = null)
41: {
42: $data = [
43: 'type' => strtoupper($type),
44: 'name' => $name,
45: 'content' => $content,
46: 'ttl' => $ttl,
47: 'proxied' => $proxied,
48: 'priority' => $priority,
49: 'data' => $data,
50: ];
51:
52: return $this->post('zones/'.$zone_identifier.'/dns_records', $data);
53: }
54:
55: /**
56: * List DNS Records (permission needed: #dns_records:read)
57: * List, search, sort, and filter a zones' DNS records.
58: *
59: * @param string $zone_identifier
60: * @param string|null $type DNS record type (A, AAAA, CNAME, TXT, SRV, LOC, MX, NS, SPF)
61: * @param string|null $name DNS record name
62: * @param string|null $content DNS record content
63: * @param string|null $vanity_name_server_record Flag for records that were created for the vanity name server feature (true, false)
64: * @param int|null $page Page number of paginated results
65: * @param int|null $per_page Number of DNS records per page
66: * @param string|null $order Field to order records by (type, name, content, ttl, proxied)
67: * @param string|null $direction Direction to order domains (asc, desc)
68: * @param string|null $match Whether to match all search requirements or at least one (any) (any, all)
69: */
70: public function list_records($zone_identifier, $type = null, $name = null, $content = null, $vanity_name_server_record = null, $page = null, $per_page = null, $order = null, $direction = null, $match = null)
71: {
72: $data = [
73: 'type' => $type,
74: 'name' => $name,
75: 'content' => $content,
76: 'vanity_name_server_record' => $vanity_name_server_record,
77: 'page' => $page,
78: 'per_page' => $per_page,
79: 'order' => $order,
80: 'direction' => $direction,
81: 'match' => $match,
82: ];
83:
84: return $this->get('zones/'.$zone_identifier.'/dns_records', $data);
85: }
86:
87: /**
88: * DNS record details (permission needed: #dns_records:read)
89: *
90: * @param string $zone_identifier
91: * @param string $identifier API item identifier tag
92: */
93: public function details($zone_identifier, $identifier)
94: {
95: return $this->get('zones/'.$zone_identifier.'/dns_records/'.$identifier);
96: }
97:
98: /**
99: * Update DNS record (permission needed: #dns_records:edit)
100: *
101: * @param string $zone_identifier
102: * @param string $identifier API item identifier tag
103: * @param string|null $type DNS record type (A, AAAA, CNAME, TXT, SRV, LOC, MX, NS, SPF)
104: * @param string|null $name DNS record name
105: * @param string|null $content DNS record content
106: * @param string|null $ttl Time to live for DNS record. Value of 1 is 'automatic'
107: * @param bool|null $proxied Whether to proxy the domain through CloudFlare or not
108: * @param array|null $data Additional data required for SRV record
109: * @param int|null $priority MX record priority value
110: */
111: public function update($zone_identifier, $identifier, $type = null, $name = null, $content = null, $ttl = null, $proxied = null, $data = null, $priority = null)
112: {
113: $data = [
114: 'type' => $type,
115: 'name' => $name,
116: 'content' => $content,
117: 'ttl' => $ttl,
118: 'proxied' => $proxied,
119: 'priority' => $priority,
120: 'data' => $data,
121: ];
122:
123: return $this->put('zones/'.$zone_identifier.'/dns_records/'.$identifier, $data);
124: }
125:
126: /**
127: * Update DNS record (permission needed: #dns_records:edit)
128: *
129: * @param string $zone_identifier
130: * @param string $identifier API item identifier tag
131: */
132: public function delete_record($zone_identifier, $identifier)
133: {
134: return $this->delete('zones/'.$zone_identifier.'/dns_records/'.$identifier);
135: }
136: }
137: